c语言复习题.docx
《c语言复习题.docx》由会员分享,可在线阅读,更多相关《c语言复习题.docx(20页珍藏版)》请在冰豆网上搜索。
c语言复习题
∙1. 编写程序,输入一个正整数n,求以下算式的值。
要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。
#include
doublefact(intk)
{ doublet=1;
inti;
for(i=1;i<=k;i++)
t*=i;
returnt;
}
voidmain()
{ inti,n;
doubles=0;
scanf(“%d〞,&n);
for(i=1;i<=n;i++)
s+=1/fact(i);
printf(“%f\n〞,s);
}
2. 输入一个x,输出下面分段函数f(x)的值。
要求将分段函数的计算定义成函数。
#include
intf(doublex) //函数定义
{ inty=0;
if(x>0)
y=1;
elseif(x==0)
y=0;
else
y=-1;
returny;
}
voidmain()
{ doublex;
inty;
scanf(“%lf〞,&x);
y=f(x);//函数调用
printf("f(%g)=%d\n",x,y);
}
3. 输入一个正整数,输出该数的各个数字之和。
要求编写函数,计算整数的各个数字之和。
#include
intsum(inta)
{ ints=0;
while(a!
=0){
s+=a%10;
a=a/10;
}
returns;
}
voidmain()
{ intx;
scanf(“%d〞,&x);
printf("%d\n",sum(x));
}
4. 输入两个正整数a和n,求a+aa+aaa+……+aa…a(最后一项为n个a)之和。
例如输入2和3,输出246(即2+22+222)。
要求定义并调用函数f(a,n),它的功能是返回aa…a(n个a)。
例如f(2,3)返回222。
#include
intf(inta,intn)
{ ints=0;
for(;n>0;n--)
s=s*10+a; //s+=pow(10,n-1)*a;
returns;
}
voidmain()
{ inta,n,sum=0,i;
printf(“inputan:
\n〞);
scanf(“%d%d〞,&a,&n);
for(i=1;i<=n;i++)
sum+=f(a,i);
printf(“%d\n〞,sum);
}
5. 输入三个数,输出它们的最小值。
要求定义一个函数,返回两个数的最小值。
#include
doublemin(doublex,doubley)
{ if(x returnx;
else
returny;
}
voidmain()
{ doublex,y,z,t;
scanf(“%lf%lf%lf〞,&x,&y,&z);
t=min(x,y);
t=min(t,z);
printf("min:
%f\n",t);
}
6. 在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。
定义函数prn,完成连续将某个字符c输出m次后换行。
#include
voidprn(char,int); //函数声明
voidmain()
{ charc;
intm;
printf(“Inputcm:
\n〞);
scanf(“%c%d〞,&c,&m);
prn(c,m);
}
voidprn(charc,intm)
{ inti;
for(i=1;i<=m;i++)
putchar(c);
printf(“\n〞);
}
7. 输入一个整数n,计算3.2n的值。
要求定义函数计算xn值。
#include
doublefact(doublex,intn);
voidmain()
{ doublex,y;
intn;
printf(“Inputxn:
\n〞);
scanf(“%lf%d〞,&x,&n);
y=fact(x,n);
printf(“%f\n〞,y);
}
doublefact(doublex,intn)
{ inti;
doublet=1;
for(i=1;i<=n;i++)
t=t*x;
returnt;
}
8. 输入平面上p1(x1,x2)、p2(x2,y2)两点坐标,计算两点间的距离输出。
要求定义一个函数计算平面上两点间的距离。
#include
#include
doublef(double,double,double,double);
voidmain()
{ doublex1,x2,y1,y2,d;
printf(“Input(x1,y1),(x2,y2):
\n〞);
scanf(“(%lf,%lf),(%lf,%lf)〞,&x1,&y1,&x2,&y2);
d=f(x1,y1,x2,y2);
printf(“%f\n〞,d);
}
doublef(doublex1,doubley1,doublex2,doubley2)
{ doubled;
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
returnd;
}
9. 输出一摄氏温度——华氏温度转换表。
摄氏温度取[-100℃~150℃],温度间隔5℃,要求定义函数ctof(c),将摄氏温度转换为华氏温度,转换公式:
F=32+C*9/5
#include
voidmain()
{ floatc,f,ctof(float);inti;
for(i=0,c=-100;c<=150;c+=5)
{ f=ctof(c);
printf("%6.0f %-6.0f",c,f);
i++;
if(i%5==0)printf("\n");
}
}
floatctof(floatc)
{ floatf;
f=32+c*9/5;
returnf;
}
10. 求11~999之间所有“回文数〞之和。
要求编制函数JSValue(m)用于判断m是否为回文数。
回文数是指各位数字左右对称,例如11、121、676、909等等。
#include
intJSValue(intm)
{ inta=0,b;
b=m;
while(b!
=0){
a=a*10+b%10;
b=b/10;
}
if(a==m)return1;
elsereturn0;
}
voidmain()
{ ints=0,i;
for(i=11;i<=999;i++)
if(JSValue(i)==1)s+=i;
printf(“%d\n〞,s);
}
11. 输入100个学生的数学课程成绩,计算平均分,并统计成绩在平均分数正负10%区间的学生的人数。
#include
voidmain()
{ inta[100],i,k=0;
floatsum=0,aver;
for(i=0;i<100;i++)
{ scanf(“%d〞,&a[i]);
sum+=a[i];
}
aver=sum/100;
for(i=0;i<100;i++)
if(0.9*aver<=a[i]&&a[i]<=1.1*aver) //当前成绩在平均分数正负10%区间
k++;
printf(“%f,%d\n〞,aver,k);
}
12. 输入两个正整数m和n(m#include
intisprime(intx)
{ inti;
for(i=2;i if(x%i==0)return0;
return1;
}
voidmain()
{ intm,n,s=0,k;
scanf(“%d%d〞,&m,&n);
for(k=m;k<=n;k++)
if(isprime(k)==1)s+=k;
printf(“%d\n〞,s);
}
13. 输入一个字符串〔少于80个字符〕,再输入一个字符,统计并输出该字符在字符串中出现的次数〔例如:
输入morning回车,再输入n,输出2〕。
#include
main()
{ chars[80],c;
inti,k=0;
printf("输入字符串:
\n");
gets(s);
printf("输入字符:
\n");
c=getchar();
for(i=0;s[i]!
='\0';i++)
if(s[i]==c)k++;
printf("%s中包含%d个%c\n",s,k,c);
}
14. 输入10组数,每组数3个数,输出每组数的最大值。
要求定义并调用函数max(x,y,z)求x、y、z的最大值。
#include
doublemax(doublex,doubley,doublez)
{ doublem;
m=x;
if(mif(mreturnm;
}
voidmain()
{ doublex,y,z,i;
for(i=1;i<=10;i++){
scanf(“%lf%lf%lf〞,&x,&y,&z);
printf(“%f\n〞,max(x,y,z));
}
}
15. 输入一个字符串,统计其中数字字符出现的次数。
#include
voidmain()
{ chars[80];
inti,n=0;
gets(s);
for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
n++;
printf("%s中包含%d个字符\n",s,n);
}
16. 将一个大小为10的数组b的值按逆序重新存放(数组的值由键盘任意输入,不使用辅助数组)。
#include
voidmain()
{ doublea[10],t;
inti,j;
for(i=0;i<10;i++)
scanf("%lf",&a[i]);
for(i=0,j=9;i { t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<10;i++)
printf("%8.2f",a[i]);
}
17. 计算5×5数组周边元素的和。
#include
voidmain()
{ doublea[5][5],sum=0;
inti,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%lf",&a[i][j]);
for(i=0;i<5;i+=4)
for(j=0;j<5;j++)
sum+=a[i][j]; //第1、最后两行元素和
for(i=1;i<4;i++)
for(j=0;j<5;j+=4)
sum+=a[i][j]; //最左、右两列〔不包括角上〕元素和
printf("%8.2f\n",sum);
}
18. 输入一5行、5列的数组,将数组的每1行均除以该行上的主对角元素〔第1行同除以a[0][0],第2行同除以a[1][1],...〕,然后以行列对齐格式输出数组容。
#include
voidmain()
{ floata[5][5],t;
inti,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%f",&a[i][j]);
for(i=0;i<5;i++)
{ t=a[i][i]; //{ for(j=0;j<5;j++)
for(j=0;j<5;j++) //if(i!
=j)a[i][j]=a[i][j]/a[i][j];
a[i][j]=a[i][j]/t; //a[i][i]=1;}
}
for(i=0;i<5;i++)
{ for(j=0;j<5;j++)
printf("%8.2f",a[i][j]);
printf("\n");
}
}
19. 输入一个字符串(字符个数少于80),判断是否为回文?
假设是输出YES,否那么输出NO。
解一:
#include
voidmain()
{ chars[80];
inti,j;
gets(s);
for(j=0;s[j]!
='\0';j++);//求字符串长度
for(i=0,j--;i if(s[i]!
=s[j])
{ printf("NO\n");break;}
if(i>=j)
printf("YES\n");
}
解二:
#include
voidmain()
{ chars[80];
inti,j,flag=1;
gets(s);
for(j=0;s[j]!
='\0';j++);
for(i=0,j--;i if(s[i]!
=s[j]) flag=0;
if(flag==1) printf("YES\n");
else printf("NO\n");
}
20. 编写函数fun,返回一个数组〔10个数〕中除最大值和最小值以外的平均值。
#include
doublefun(doublea[],intn)
{ doublesum=0,max,min;
inti;
max=min=a[0];
for(i=0;i { if(max elseif(min>a[i])min=a[i];
sum+=a[i];}
return(sum-max-min)/(n-2);
}
voidmain()
{ doubleb[10],v;
inti;
for(i=0;i<10;i++)
scanf("%lf",&b[i]);
v=fun(b,10);
printf("average:
%.2f\n",v);
}
21. 在主函数中输入一个正整数x,编写函数f1,它的功能是:
求出能整除x且不是偶数的各正整数,并放在数组a中,这些除数的个数返回给主函数。
在主函数中输出各除数。
#include
intf1(inta[],intx)
{ intj,n=0;
for(j=1;j<=x/2;j+=2)
if(x%j==0)
{ a[n]=j;
n++;
}
returnn;
}
voidmain()
{ inta[20],i,n,x;
scanf("%d",&x);
n=f1(a,x);
for(i=0;i printf("%5d",a[i]);
printf("\n");
}
22. 在主函数中输入6行、6列的数组和变量m的值,编写函数f2,该函数的功能是:
将数组左下半三角元素中的值乘以m。
在主函数中以行列对齐格式输出该数组。
#include
voidf2(inta[][6],intm)
{ inti,j;
for(i=0;i<6;i++)
for(j=0;j<=i;j++)
a[i][j]*=m;
}
voidmain()
{ inta[6][6],i,j,m;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
scanf("%d",&a[i][j]);
printf("Inputm:
");scanf("%d",&m);
f2(a,m);//调用函数
for(i=0;i<6;i++){
for(j=0;j<6;j++)printf("%5d",a[i][j]);
printf("\n");
}
}
23. 编写一个函数f3,它的功能是:
实现两个字符串的连接。
#include
voidmain()
{ chars1[100],s2[40];
voidf3(chars1[],chars2[]);
gets(s1);
gets(s2);
f3(s1,s2);
puts(s1);
}
voidf3(chars1[],chars2[])
{ inti,j;
for(i=0;s1[i]!
='\0';i++);//找s1中字符串完毕位置
for(j=0;s2[j]!
='\0';j++,i++)
s1[i]=s2[j]; //将s2中字符串连接到s1后
s1[i]='\0';//连接后加完毕标志
return;
}
24. 在数组x的10个数中求平均值v,找出与v相差最小的数组元素。
#include
#include
voidmain()
{ doublex[10],v,d;
inti;
for(i=0,v=0;i<10;i++)
{ scanf("%lf",&x[i]);
v+=x[i]; }
v=v/10;
d=x[0];
for(i=1;i<10;i++)
if(fabs(d-v)>fabs(x[i]-v))
d=x[i];
printf("平均值:
%-8.2f,与平均值最近元素:
%-8.2f\n",v,d);
}
25. 输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的数交换后输出这些数。
#include
voidmain()
{ inti,k,temp,n,a[20];
printf("Inputn:
\n");
scanf("%d",&n);
for(i=0;i scanf("%d",&a[i]);
for(k=0,i=1;i if(a[i] temp=a[0];a[0]=a[k];a[k]=temp;
for(i=0;i printf("Input%dnumbers:
\n",n);
for(i=0;i printf("Inputx:
");scanf("%d",&x);
for(i=n-1;i>=0;i--)
if(a[i]>x)a[i+1]=a[i];
elsebreak;
a[i+1]=x;
for(i=0;i}
27. 输入一个5行、6列的数组,找出该数组中绝对值最大的元素、输出该元