很好的C语言复习题.docx
《很好的C语言复习题.docx》由会员分享,可在线阅读,更多相关《很好的C语言复习题.docx(24页珍藏版)》请在冰豆网上搜索。
很好的C语言复习题
【例4-4】任意输入2个实数,将这2个实数交换
/*example2-10交换2个实数*/
#include
voidmain(void)
{
inta,b,t;/*定义3个实型变量*/
printf("a=?
");
scanf("%d",&a);
图2-10代码2-10的执行结果
printf("b=?
");/*输出提示信息*/
scanf("%d",&b);/*输入信息*/
{
t=a;
a=b;
b=t;/*交换*/
}
printf("a=%d\n",a);
printf("b=%d\n",b);/*输出交换后的信息*/
}
【例4-5】任意输入1个3位整数,找出它的个位、十位、百位
/*example2-11拆分3位整数个位、十位、百位*/
#include
voidmain(void)
{
inta;/*定义整数*/
intonedig,tendig,hundig;/*定义个位、十位、百位*/
printf("a=?
");
scanf("%d",&a);
onedig=a%10;
tendig=a%100/10;
hundig=a/100;/*计算个位、十位、百位*/
printf("a=%d\n",a);
printf("%d%d%d,",onedig,tendig,hundig);
/*输出*/
}
【例4-6】任意输入1个小写字母,将其转换为大写字母
#include
voidmain(void)
{
chars,c;/*定义字符*/
printf("s=?
");
scanf("%c",&s);/*输入小写字母*/
c=s-32;/*计算大写字母*/
printf("smalet=%c\n",s);
printf("caplet=%c\n",c);/*输出*/
}
【例3-1】已知x的值,求y=|x|。
#include
voidmain(void)
{
floatx,y;/*定义实型数据*/
printf("x=?
");
scanf("%f",&x);/*输入实型数据*/
y=x;/*设y的初始值为x*/
if(x<0)
y=-x;/*更改y的值为-x*/
printf("x=%10.4f\n",x);
printf("y=%10.4f\n",y);/*输出*/
}
【例3-2】已知2个数,从小到大输出这个两个数。
#include
voidmain(void)
{
floatx,y,t;
scanf("%f,%f",&x,&y);
if(x>y)
{t=x;
x=y;
y=t;}
printf("x=%10.4f,y=%10.4\n",x,y);
}
【例3-5】输入1个数,判断其是奇数还是偶数
#include
voidmain(void)
{
intx;/*定义整型数据*/
printf("x=?
");
scanf("%d",&x);/*输入整型数据*/
if(x%2==0)
printf("%d是偶数",x);/*输出是偶数*/
else
printf("%d是奇数",x);/*输出是奇数*/
}
【例3-8】以5分制的形式输入一门课程的考试成绩,打印其所在的百分制段落,如:
输入B,输出80~89
#include
voidmain(void)
{
charscore;
printf("score=?
");
scanf("%c",&score);/*从键盘输入考试成绩*/
switch(score)
{
case'A':
printf("%cin90-100\n",score);break;/*优*/
case'B':
printf("%cin80-89\n",score);break;/*良*/
case'C':
printf("%cin70-79\n",score);break;/*中*/
case'D':
printf("%cin60-69\n",score);break;/*及格*/
case'E':
printf("%cin<60\n",score);/*不及格*/
}
}
【例3-11】求1+2+3+4+…..+100的值(用while循环实现)
#include
voidmain(void)
{
inti;/*定义整型循环变量*/
floatsum;/*定义累加和*/
i=1;/*初始化循环变量*/
sum=0.0;/*初始化累加和*/
while(i<=100)/*循环条件*/
{
sum=sum+i;/*不断累加*/
i++;/*修正循环变量*/
}
printf("i=%d,",i);/*输出循环变量*/
printf("sum=%f\n",sum);/*输出累加和*/
}
voidmain(void)
{inti;floatsum;
sum=0.0;
for(i=1;i<=10;i++)
{sum=sum+i;}
printf("i=%d,",i);
printf("sum=%f\n",sum);}
输入10个整数,将正数累加。
#include"stdio.h"
voidmain()
{
inti,j,s=0;
printf("Pleaseenter10integer:
");
for(i=0;i<10;i++)
{scanf("%d",&j);
if(j<0)
continue;
s=s+j;
}
printf("sumis%d",s);
}
求累乘积的和sum=1!
+2!
+3!
+…+n!
#include
voidmain(void)
{inti,temp=1,sum=0,n;
printf("n=?
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
temp=temp*i;
sum=sum+temp;}
printf("sum=%d\n",sum);}
求素数
#include
#include
voidmain(void)
{intn,i,s;
scanf(“%d”,&n);
s=sqrt(n);
for(i=2;i<=s;i++)
{
if(n%i==0)break;
}
if(i>s)
printf(“\n%d”,n);
}
求Fibonacci数列前20个数
#include
voidmain(void)
{inti,f1,f2,f3;
f1=0;f2=1;
printf(“%10d%10d”,f1,f2);
for(i=3;i<=20;i++)
{f3=f1+f2;
printf(“%10d”,f3);
f1=f2;f2=f3;}
printf(“\n”);
}
求出10到100之内能同时被2、3、7整除的数
#include
voidmain(void)
{inti;
for(i=10;i<=100;i++)
if(i%2==0&&i%3==0&&i%7==0)
printf(“%10d”,i);
}
*
**
***
****
*****
#include
voidmain(void)
{inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
}
编写程序输出下列图形
1
22
333
4444
55555
666666
7777777
88888888
999999999
#include"stdio.h"
voidmain()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d",i);
printf("\n");
}
}
6、求100~200之间的素数
#include
#include
voidmain(void)
{
intm,n,i,k=0;
for(m=101;m<=200;m=m+2)
{n=sqrt(m);
for(i=2;i<=n;i++)
{if(m%i==0)break;}
if(i>n)
{printf("%4d",m);k++;}
if(k%10==0)
printf("\n");}
printf("\n素数有%d个\n",k);}
【例3-20】由键盘任意输入一个年号,如:
2008,判断其是否是闰年
/*example3-20判断闰年*/
#include
voidmain(void)
{
intn;/*定义数据*/
printf("n=?
");
scanf("%d",&n);/*输入年号*/
/*对年号进行判断*/
if((n%4==0&&n%100!
=0)||n%400==0)
printf("%d是闰年",n);/*输出是闰年*/
else
printf("%d不是闰年",n);/*输出不是闰年*/
}
求级数的和:
1+1/2+1/3+1/4+…+1/n
/*example3-23(b)求级数和*/
#include
voidmain(void)
{
inti;/*定义整型循环变量*/
floatsum=0.0;/*定义并初始化累加和*/
intn;
printf("n=?
");
scanf("%d",&n);/*输入项数*/
for(i=1;i<=n;i++)/*循环条件*/
{
sum=sum+1.0/i;/*不断累加*/
}
printf("sum=%f\n",sum);/*输出累加和*/
}
求级数的和:
π/4=1−1/3+1/5−1/7+…1/n
#include
voidmain(void)
{
inti;/*定义整型循环变量*/
floatsum=0.0;/*定义并初始化累加和*/
floattemp=-1;
intn;
printf("n=?
");
scanf("%d",&n);/*输入项数*/
for(i=1;i<=n;i=i+2)/*循环条件、步长为2*/
{
temp=-temp;/*正负相间*/
sum=sum+temp*(1.0/i);/*不断累加*/
}
sum=sum*4;/*计算pi*/
printf("sum=%f\n",sum);/*输出pi*/
}
【例7-1】通过函数求两个数的最大值。
/*example6-1通过函数求最大值*/
#include
intGetMax(int,int);/*函数的原型声明*/
voidmain(void)
{
inta,b,c,d;/*说明变量*/
scanf("%d,%d,%d",&a,&b,&c);
d=GetMax(a,b);/*调用函数GetMax求a、b的较大值赋给d*/
d=GetMax(d,c);/*调用函数GetMax求d、c的较大值赋给d*/
printf("TheMaximumofa,b,cis%d\n",d);
}
intGetMax(intx,inty)
{
intmax;
if(x>y)
max=x;/*x>y成立,x为较大值*/
else
max=y;/*x>y不成立,y为较大值*/
returnmax;
}
【例7-3】函数调用举例,通过函数求xn,在主函数中输入x及n,并调用该函数,输出结果
#include
floatGetPow(float,int);/*函数原型声明*/
voidmain(void)
{
floatx,y;
intn;
printf("Pleaseinputx,n:
");
scanf("%f,%d",&x,&n);/*输入x,n*/
y=GetPow(x,n);/*给出实参列表,调用函数*/
printf(“x^n=%f\n”,y);/*将函数的返回值赋给y*/
}
floatGetPow(floatx,intn)/*函数定义,名称:
GetPow*/
{
floatz;
inti;
z=1;
for(i=1;i<=n;i++)/*循环累乘*/
z*=x;
returnz;/*返回累乘积*/
}
求两个数的最大公约数和最小公倍数
#include
Voidmain(void)
{inta,b,d,s;
intmax(inta,intb);
intmin(inta,intb);
scanf(“%d%d”,&a,&b);
d=max(a,b);
s=min(a,b);
printf(“d=%d,s=%d”,d,s);}
intmax(inta,intb)
{intt;
if(a
{t=a;a=b;b=t;}
while(b!
=0)
{t=a%b;a=b;b=t;}
return(a);}
intmin(inta,intb)
{ints;
s=a*b/max(a,b);
return(s);}
【例8-1】学生分数的处理问题。
有10个学生参加数学考试,考试成绩由键盘输入,计算平均成绩。
#include
voidmain(void)
{
inti;
floatmath,ave;
ave=0.0;/*平均成绩初值为0*/
for(i=0;i<10;i++)/*循环10次*/
{
scanf("%f",&math);/*输入成绩*/
ave=ave+math;/*累加成绩*/
}
ave=ave/10;/*求平均*/
printf("ave=%f\n",ave);
}
•例1有一个一维数组,有10个整数存放其中,找出其中最大的一个数。
main()
{
inti,max,x[10];
printf("enterdata:
\n");
for(i=0;i<10;i++)
scanf("%d",&x[i]);
max=x[0];
for(i=1;i<10;i++)
if(x[i]>max)max=x[i];
printf("max=%d\n",max);
}
例7求一个3*4矩阵中的最大值及其所在的行、列。
参考程序如下:
main()
{inta[3][4],row=0,col=0,i,j,max;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max){max=a[i][j];row=i;col=j;}
}
编写函数fun,它的功能是:
根据以下公式求p的值,结果作为函数值返回。
m与n为两个正数且要求m>n.
p=m!
/(n!
(m-n)!
)
例如,m=12,n=8时,运行结果为495.000000
#include
floatfun(intm,intn)
{
}
voidmain()
{printf(“p=%f\n”,fun(12,8));
}
floatfun(intm,intn)
{intI;
doublep=1.0;
for(i=1;i<=m;i++)
p=p*i;/*求m!
*/
for(i=1;i<=n;i++)
p=p/i;/*求m!
/n!
*/
for(i=1;ip=p/i;/*求m!
/(n!
(m-n)!
)*/
returnp;
}
1、请编写函数fun,其功能是:
将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
例如,当s所指数组中的内容为“ABCDEFGHIJK”,则在t所指数组中的内容应是“BDFHJ”
#include
#include
#include
#include
voidfun(char*s,chart[])
{
}
voidmain()
{
chars[100],t[100];
system(“CLS”);
printf("\nPleaseenteranstringS:
\n");
scanf(“%s”,s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
voidfun(char*s,chart[])
{inti,j=0,k=strlen(s);
for(i=1;it[j++]=s[i];
t[j]=‘\0’;}
假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
将字符串尾部的*号全部删除,前面和中间的*号不删除。
例如,若字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容则应当是“****A*BC*DEF*G”。
•#include
•#include
•voidfun(char*a)
•{
•
•}
•voidmain()
•{chars[81];
•printf(“Enterastring:
\n”);
•gets(s);
•fun(s);
•printf(“Thestringafterdeleted:
\n”);
•puts(s);
•}
•例如,若字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容则应当是“****A*BC*DEF*G”。
voidfun(char*a)
{while(*a!
=‘\0’)
a++;
a--;
while(*a==‘*’)
a--;
*(a+1)=‘\0’;
}
例如,若字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容则应当是“ABCDEFG”。
•voidfun(char*a)
•{inti,j=0;
•for(i=0;a[i]!
=‘\0’;i++)
•If(a[i]!
=‘*’)
•a[j++]=a[i];
•a[j]=‘\0’;}
•请编写函数fun,其功能是:
计算并输出3到n之间所有素数的平方根之和。
•例如,若主函数给n输入100,则输出为sum=148.874270.
•#include
•#include
•doublefun(intn)
•{
•}
•main()
•{intn;
•doublesum;
•printf(“\n\ninputn :
” ) ;
•scanf(“%d”,&n ) ;
•sum=fun(n);
•printf(“\n\nsum=%f\n\n”,sum);
•}
doublefun(intn)
{intm,k,I;
doubles=0;
for(m=3;m<=n;m++)
{k=sqrt(m);
for(i=2;i<=k;i++)
If(m%i==0)break;
If(i>=k+1)
s+=sqrt(m);}
returns;
}
求因子之和
#include“stdio.h”
intfun(intn)
{ints=0,i;
for(i=1;i<=n;i++)
if(n%i==0)
s+=i;
returns;}
main()
{intn,sum;
scanf(“%d”,&n);
sum=fun(n);
printf(“%d”,sum);}
改错:
在下列给定的程序中,函数fun的功能是:
先输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之和。
#include
voidfun()
{inta[3][3],sum;
inti,j;
/************found************/
sum=1;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
/*************found**************/
scanf(“%d”,a[i][j]);
}
for(i=0;i<3;i++)
sum=sum+a[i][j];
printf(“sum=%d\n”,sum);
}
voidmain()
{
fun();
}
3.下面程序的功能是根据以下的公式计算π/2的值。
从键盘输入要求满足的精度值eps。
#include
main()
{doubles=0.0,t=1.0;
intn;
floateps;
scanf(“%f”,&eps);
for(n