1、信息科学与工程学院 C语言上机 150 道题参考答案001.某一门课程考试之后,需要统计考生(10 人)的平均成绩,并找出其中的最高分和最低分。#include#includemain()float a10,ave,max,min,sum=0;int i;printf(“请输入 10个考生的成绩:n“); for(i=0;imax)max=ai;min=a0;for(i=1;i#includemain()int i=33;while(i#includemain()int i=33;doprintf(“%c “,i);i+;while(i#includemain()int i;for(i=1;i
2、#include#includemain()char a100;int len,i;printf(“请输入一个整数:n“); scanf(“%s“,a);len=strlen(a);for(i=len-1;i=0;i-)printf(“%c“,ai);getch();007(方法二)#include#includemain()int num,t;printf(“请输入一个整数:n“);scanf(“%d“,while(num0)t=num%10;num=num/10;printf(“%d“,t);getch();008.计算 s=1+1/3+1/5+1/n,截止到 1/n#includemai
3、n()int n;float t=1,s=0;for(n=1;t0.0001;n+=2)t=(float)1/n;s=s+t;printf(“s=%f“,s);getch(); 009.从键盘输入一整数 n,计算 1*1+2*2+.+n*n 的值。#include#includemain()int n,i,s=0;printf(“请输入一个整数:n“);scanf(“%d“,for(i=1;i#includemain() int s=0,i=1;while(imain()int i,result;i=1; result=0;while(imain()int i,result;for(i=1,r
4、esult=0;ilong fac(int n)long result;if(n=0|n=1) result=1;else result=n*fac(n-1);return result; main()int n; long result;printf(“请输入一个小于等于 10 的整数n“); scanf(“%d“,if(n=0if(n=0|n=1) result=1;else result=n*fac(n-1);return result; main()int n,m; long result;printf(“请输入两个小于等于 10 的整数n“); scanf(“%d%d“,if(n=0
5、 for(i=1,result=0;imain()int i,result; for(i=100,result=0;imain()int i,num; for(i=1,num=0;iint main()int i=0, space=0, num=0, n=0, ch=0;char s1000000;printf(“请输入一串字符 “);gets(s);while(si != 0)if(si= )space+;else if(si=0)num+;else if(si=a | si=A)ch+;elsen+;i+;printf(“刚才输入的字符中英文字符个数为 %dn“, ch);printf(“
6、刚才输入的字符中空格个数为 %dn“, space);printf(“刚才输入的字符中数字个数为 %dn“, num);printf(“刚才输入的字符中其他个数为 %dn“, n);while(1);19.输入一个整数,统计它有几位数。如输入 367,则该数有 3位数。#includemain()int n,i,j; i=1;j=0;printf(“请输入一个整数n“);scanf(“%d“,if(n=0) printf(“这个数是 1位数“,j);else while(n=i)i=10*i;j=j+1;printf(“这个数是%d 位数“,j); while(1); 20.编写程序,输出 1
7、 到 50 中间所有能被 3 整除的正整数。#includemain()printf(“1 到 50 中间所有能被3 整除的正整数如下n“);int n;for(n=1;nmain()printf(“100200 之间不能被 3 整除的正整数如下n“);int n;for(n=100;nmain()printf(“Y=“);int n,result;for(n=1,result=0;n#includemain()int i;long int y;y=1;for(i=1;i#includemain()int i,j;for (i=1;i#includemain()int i=0,n;for(n=
8、1;(2*n-1)#includemain()int i,s;s=0;for(i=2;i#include#includeint isprime(int m) int i; for(i=2;i=(int)sqrt(m)+1)return 1;main() int n,flag;for(n=1;n#includemain()float a,t;printf(“Please input the valuet“);scanf(“%f“,if(a#includemain()char ch;ch=getchar();if(ch=+)printf(“plusn“);else if(ch=-)printf(“
9、minusn“);else if(ch=*)printf(“multiplyn“);else if(ch=/)printf(“dividen“);elseprintf(“you are wrong“);system(“pause“);30.从键盘输入一个字符,判断其是否为 a,r,或 f,并输出相应的信息(不区分大小写) 。#include#includemain()char n1=a,n2=r,n3=f,n4;char m1=A,m2=R,m3=F;printf(“请输入一个字符:“);scanf(“%c“,if(n4=n1|n4=m1) printf(“you are right!n“);
10、printf(“n4=%cn“,n4);else if(n4=n2|n4=m2) printf(“you are right!n“);printf(“n4=%cn“,n4);else if(n4=n3|n4=m3) printf(“you are right!n“);printf(“n4=%cn“,n4);elseprintf(“you put into a wrong char!n“);getch();31.求解一元二次方程 ax2bxc0 的跟(a 不等于 0) ,a,b,c 均为实数,其值由键盘输入。#include#include#includemain()double a,b,c;d
11、ouble s,x1,x2;printf(“please enter a,b,c:n“);scanf(“%lf%lf%lf“,if(a=-(1e-6)x2=(-b-sqrt(s)/(2*a);printf(“there are two different real:nx1=%5.2f,x2=%5.2fn“,x1,x2);elseif(s=-(1e-6)char grade;logic=1;while(logic)printf(“input score:n“);scanf(“%d“,if(score100)|(score#includemain()int x;printf(“Please ent
12、er x:“);if(x%3=0)elseprintf(“%d 不能被 3,5,7 整除“,x);getch();34.用整数 112 依次表示 112 月,由键盘输入一个月份数,输出对应的季节英文名称(122 月为冬季;35 月为春季;68 月为夏季;911 月为秋季。要求用 if嵌套实现) 。#include#includemain()int month,i;loop:printf(“enter an integer(112):n“);scanf(“%d“,if(month12)goto loop;r=month%12;r=r/3;if(r=0)printf(“wintern“);else
13、 if(r=1)printf(“springn“);else if(r=2)printf(“summern“);else printf(“autumnn“);getch();35.编写输入整数 a,b,c,当 a 为 1 时显示 b 和 c之和,a 为 2 时显示 b 与 c 之差,a 为 3 时显示 b*c 之积,a 为 4 时取b/c 之商,a 为其他数值时不做任何操作的程序。#include#includemain()int a,b,c;printf(“please enter a,b,c:n“);scanf(“%d%d%d“,switch(a)case 1:printf(“%d+%d=
14、%dn“,b,c,b+c);break;case 2:printf(“%d-%d=%dn“,b,c,b-c);break;case 3:printf(“%d*%d=%dn“,b,c,b*C);break;case 4:printf(“%d/%d=%dn“,b,c,b/c);break;default :break;getch();36.编写输入一个整数,将其数值按小于 10,1099,100999,1000 以上分类并显示。#include#includemain()int a;printf(“请输入整数A:n“);scanf(“%d“,if(a=10)printf(“请输入整数a:n“);s
15、canf(“%d“,switch(a)case 65:printf(“A“);break;case 66:printf(“B“);break;case 67:printf(“C“);break;default:printf(“END“);getch();38.编程实现:输入 4 个整数,要求按由小到大输出。#include#includemain()int a,b,c,d,t;printf(“请输入 4 个整数:a,b,c,d:n“);scanf(“%d%d%d%d“,if(ab)t=a;a=b;b=t;if(cd)t=d;d=c;c=t;if(ac)t=c;c=a;a=t;if(bd)t=b
16、;b=d;d=t;if(bc)t=b;b=c;c=t;printf(“排序后:%d#includemain()int s,p;float tax;printf(“enter income:“);scanf(“%d“,printf(“n“);if(s800)if(s-800)%100!=0)p=(s-800)/100+1;elsep=(s-800)/100;switch(p)case 0:case 1:case 2:case 3:case 4:tax=(s-800)*0.05;break;case 5:tax=400*0.05+(s-1200)*0.08;break;default:tax=40
17、0*0.05+800*0.08+(s-2000)*0.2;break;else tax=0;printf(“Tax=%.2f“,tax);getch();40.给出一百分制成绩,要求输出成绩等级A,B,C,D,E 。90 分以上为A,80-89 分为B,70-79 分为C ,6069 分为D ,60 分以下为E 。#include#includemain()int score ,temp,logic;char grade;logic=1;while(logic)printf(“input score:“);scanf(“%d“,);if(score100|scoreint main(void)
18、int x,i=0;doprintf(“请输入数字:“);scanf(“%d“,if(x99999|x99999|x#includedouble square(int a,int b,int c);main() int x,y,z;float S;printf(“please enter x,y,and z(x,y,z0)n“);scanf(“%d%d%d“,if(x+y=z)|(x+z=y)|(y+z=x)printf(“sorry,you are wrong!n“);ElsePrintf(“yes!n“);43.编写输入两个整数 a 和b,若 ab 时,求其积 c 并显示,若 a#incl
19、udemain()int a,b,c;printf(“please enter:n“);scanf(“%d%d“,if(a=b)c=a*b;printf(“%d*%d=%dn“,a,b,c);elsec=b/a;printf(“%d/%d=%d“,a,b,c);getch(); 45. 编程实现:从键盘输入三个正整数,判断它们是否构成直角三角形。#include#includevoid main()int a,b,c;printf(“请输入三角形的三条边 用逗号隔开a,b,c:“);scanf(“%d,%d,%d“,if(a0)elseprintf(“不是直角三角形n“);elseprintf
20、(“不能组成三角形n“);46. 编程实现:从键盘输入三个正整数,判断它们是否构成等腰三角形。#includemain()int a,b,c;printf(“请输入三角形的三条边 用逗号隔开 a,b,c:“);scanf(“%d,%d,%d“,if(a+b)cprintf(“请输入一个整数n“);scanf(“%d“,if(a0i2)printf(“这不是素数n“);elseprintf(“这是素数n“);if(a#includemain()char i,j,k;for(i=X;i#includevoid main()int a,b,c,d,e,f,t;printf(“从键盘输入两个不等于零的
21、正整数a,b(amain()char ch;unsigned count=0;printf(“Please enter your words:n“);while(ch=getchar()!=EOF)count=count+1;printf(“count=%un“,count);53.编写程序,求面积在 100 平方米以内的半径,输出所有满足条件的半径值和圆的面积的值。#includevoid main()int r,s;for(r=1;rvoid main()int i,j;for(i=1;imain() int p,r,n,m,temp; printf(“请输入两个正整数,用逗号隔开:“);
22、 scanf(“%d,%d“,if(nvoid main()int i,j,sum=0;float a10,b10;for(i=0;i#includevoid prime_number(int n) /判断整数 n是否为素数int i,m,t,s=1; /s 是一个标志,s=1 表示是素数,s=0 表示不是素数m=sqrt(n);for(i=2;iint pow(int n)int i,s=1;for(i=0;i#include int prime_number(int n) /判断整数 n是否为素数int i,m,t,s=1; /s 是一个标志,s=1 表示是素数,s=0 表示不是素数m=s
23、qrt(n);for(i=2;i=1):“);scanf(“%d“,while(n=primesi;i+)while(n%primesi=0)ak=primesi;k+;n/=primesi;for(i=0;ivoid main()float a,grade100,average,sum=0; /grade100存储不及格成绩,average 表示平均成绩,sum表示总成绩int i=0,j,n=0; /i 表示不及格人数,n 表示总人数printf(“请输入一个学生的成绩(0-100):“);scanf(“%f“,while(a0 int sum=0;gets(a);for(int i=st
24、rlen(a)-1;i=0;i-) /strlen 是统计字符串长度的函数,它的头文件是 string.hprintf(“%c“,ai);printf(“n“);return 0;62.例 6-5 编一函数,从键盘输入一个正整数n,求 n!。63.编一函数,从键盘输入一个正整数n,求 Xn#includeint fun(int n)if(n=0 | n=1)return 1;elsereturn n*fun(n-1);void main()int n,s;printf(“请输入一个正整数:“);scanf(“%d“,s=fun(n);printf(“%d!=%dn“,n,s);64.编一函数,
25、从键盘输入2 个正整数,求最小公倍数。#include void Swap(int tem=x;x=y;y=tem;int main()int x,y;printf(“请分别输入两个整数:“);scanf(“%d%d“,int max=x*y;int t;if(x#include void number()char a81;int i,sum=0,s;printf(“请输入一个字符串:“);gets(a);s=strlen(a);for(i=0;i=48 int i,j,x;printf(“输入 5 行 6列的数组:n“);for(i=0;iint abs_sum(int a,int b)if
26、(a0)return b-a;else if(a0else if(n#define PI 3.14double area(double r)return PI*r*r;int main()double r;printf(“请输入半径:“);scanf(“%lf“,printf(“%.3lfn“,area(r);return 0;70.编写程序,通过调用函数 double area(double r, double h),计算园柱的表面积,要求圆柱的半径r 及高h 的值从键盘输入。#include#include#define PI 3.14double num(double r,double
27、h);main()double area,r,h;scanf(“%lf%lf“,area=num(r,h);printf(“%lf“,area);double num(double r,double h)return (4*PI*r*r+2*PI*r*h);71.编写程序,通过调用函数 double area(double r, double h),计算园柱的体积,要求圆柱的半径 r及高h 的值从键盘输入。#include#define PI 3.1415926float area(float r,float h)double v;v=PI*r*r*h;return v;main()float
28、 r,h,v;printf(“请输入圆的半径和高度n“);scanf(“%f%f“,v=area(r,h);printf(“%f“,v);getchar();getchar();72.编写一个函数,计算并返回一个整数的立方。#includeInt func(int n)Return n*n*n;main() int x,y;printf(“please input the value of x:n”);scanf(“%d”,y=func(x);printf(“y=%d”,y);73.设计一个函数,交换数组 a和数组 b 的对应元素。#include;#define N 10void swap(
29、int a,int b)int i,temp;for(i=0;i#define n 6main()int an,bn;int i,j,sum=0,c;printf(“please input 6 num:“);for(i=0;i#include#define N 4#define M 5main()int i,j,k, aNM,max,maxj,flag;printf(“please input:n“);for(i=0;imax)max=aij;maxj=j;for(k=0;kakmaxj)flag=0;continue;if(flag)printf(“a%d%d=%dn“,i,maxj,ma
30、x);break;if(!flag)printf(“It is not exist!n“);getch();78. 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个英文字符串是否为回文。#include#includeint huiwen(char str);int main()char str50;printf(“please input strings:n“);gets(str);if(huiwen(str)printf(“%s 是回文数:n“,str);elseprintf(“%s 不是回文数:n“,str);getchar();int huiwen(char str)i
31、nt i, j, len, flag=1;len=strlen(str);for(i=0,j=len-1;imain()int a23=1,2,3,4,5,6;int i,j;int b32;for(i=0;imain()int a,n,i,t=0,sn=0;scanf(“%d%d“,for(i=1;iint gcd(int m,int n)if(m%n = 0)return n;elsereturn gcd(n,m%n);int main()int m,n,t;scanf(“%d%d“,if(mint main()long n,i,sum=0,tmp =1 ;scanf(“%ld“,for(
32、i=1;iint main()int i,j,a20,tmp;for(i=0;iaj)tmp = ai;ai = aj;aj = tmp;for(i=0;i#define N 6int main()int i,j,n,aN=1,7,10,20,50;scanf(“%d“,for(i=0;in)for(j=N-1;ji;j-)aj = aj-1;ai = n;break;if(i=N-1) aN-1 = n;for(i=0;i#includeint main()int i=0,count=0;char a100;gets(a);for(i=0;iint main()int i=0,j=0;cha
33、r a100,b100;scanf(“%s%s“,a,b);while(ai+!=0) ;i-;while(bj!=0)ai+ = bj+;ai = 0;printf(“%sn“,a);return 0;88. 编一函数,将 1 个字符串复制到另1 个字符串,输出字符串。#include#includeint main()int i=0,count=0;char a100,b100;gets(a);while(ai!=0)bi= ai;i+;bi = 0;printf(“%sn“,b);return 0;89. 输入一个 5行、6 列的数组,先以 5 行 6列的格式输出该数组,然后编一函数,找
34、出该数组中值最小的元素,输出该元素及其两个下标。#includeint main()int i,j,a56,x,y,min;for(i=0;i#includeint main()int i=0,count=0;char a100;gets(a);for(i=0;i=aint i,j;for(i=0;iaj)tmp =ai;ai=aj;aj = tmp;for(i=0;iint main()int i,n,a10=1,2,3,4,5,6,7,8,9,10;scanf(“%d“,for(i=0;i#define N 5int main()int i,j,n,aN=1,2,3,4,5;scanf(“
35、%d“,for(i=0;i#define n 10 /定义 n 的值为 10(数组长度)void nizhi(int p) /定义函数 nizhi(逆置) ,传进一个数组(传址)int x=n-1,i,j=n/2,temp;for(i=0;i char *strcopy1(char *p,char *q)char *a=q;while(*p!=0)*q+=*p+;return a;int main()char a10=“aaa“;char b10=“ssss“;char *c;c=strcopy1(a,b);cout#includeint min(int a,int b)return (aab
36、;lena=strlen(a);lenb=strlen(b);t=min(lena,lenb);for(i=0;ibi)res=1;flag=1;break;else if (ailenb)res=1;else if (lena#include/* 注:第一个 for()循环用于让i 成为第一个字符串的结束符的下标,要注意在这个 for()后要有一个分号否则出错。第二个 for()的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有p1i=0;来给字符串加上结束符。*/void fun(char p1,char p2)int i,j;for(i=0;p1i;
37、i+);for(j=0;p2j;j+)p1i+=p2j;p1i=0;main() char s180,s280;system(“cls“);printf(“Enter s1 and s2:n“);scanf(“%s%s“,s1,s2);printf(“s1=%sn“,s1);printf(“s2=%sn“,s2);printf(“Invoke fun(s1,s2):n“);fun(s1,s2);printf(“After invoking:n“);printf(“%sn“,s1);return 0;98编程模拟字符串操作函数 strupr(小写转化为大写) 。要求:不能调用系统函数,使用自定义函数实现。#include #includeint main() char a30=a,l,c,f,g,h; (自己输入)int i;for(i=0;i=afor (i = 0; i = A void swapvar(int s,int t)int temp;temp=as;as=at;at=temp; int main()printf(“请输入 n=“);scanf(“%d“, printf(“shuru5geshu “); for (i=0;iamax) maxn=i;if (ai