2012年秋季C语言期末考试复习(共20题)
(认真复习,滚瓜烂熟)
❶输出九九表
void main( )
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)printf("%d*%d=%-4d",j,i,j*i);
printf("\n");
}
}
❷任意输入三条边(a,b,c),若能构成三角形计算其面积,判断是否为等腰、等边、直角或任意,否则输出“不能构成三角形”。
#include
main( )
{
floata,b,c,t,area;
scanf("%f%f%f",&a,&b,&c);
printf("a=%.2f,b=%.2f,c=%.2f ",a,b,c);
if(a+b>c&&b+c>a&&a+c>b)
{
t=(a+b+c)/2.0;area=sqrt(t*(t-a)*(t-b)*(t-c));
printf("area=%.4f ",area);
if(a==b&&b==c)printf("等边\n");
else if(a==b||b==c||a==c)printf("等腰\n");
elseif(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf("直角\n");
else printf("任意\n");
}
else printf("不能构成三角形!\n");
}
❸正序和反序打印英文字母
main( )
{
charch;
for(ch=’A’;ch<=’Z’;ch++)printf(“%c”,ch);
printf(“\n”);
for(ch=’Z’;ch>=’A’;ch--)printf(“%c”,ch);
printf(“\n”);
}
❹输入一串字符(换行作为结束)统计元音字母(a,A;e,E;i,I;o,O;u,U)各自出现的次数
#include
void main( )
{
charch;
int a=0,e=0,i=0,o=0,u=0;
printf(“输入一串字符,换行作为结束:”);
while((ch=getchar( ))!='\n')
switch(ch)
{case 'a':
case 'A':a++;break;
case 'e':
case 'E':e++;break;
case 'i':
case 'I':i++;break;
case 'o':
case 'O':o++;break;
case 'u':
case 'U':u++;
}
printf("a,A=%d\ne,E=%d\ni,I=%d\no,O=%d\nu,U=%d\n",a,e,i,o,u);
}
❺将一个三位数输入后反向输出(如123,输出为321)
main( )
{
intnum,down,a,b,c;
printf("输入一个三位数(100-999): ");
scanf("%d",&num);
a=num%10; /* 个位 */
b=num/10%10; /* 十位 */
c=num/100; /* 百位 */
down=100*a+10*b+c; /* 三位数倒过来*/
printf("%dà%d\n",num,down);
}
❻公鸡5元/只,母鸡3元/只,小鸡3只/元,100元钱买100只鸡,求出所有的答案。
0≤cock≤20 0≤hen≤33 0≤chiken≤100
简化为:
main( )
{
intcock,hen,chicken;
printf(“两重循环方法:\n”);
for(cock=0;cock<=20;cock++)
for(hen=0;hen<=33;hen++)
{
chicken=100-cock-hen;
if(7*cock+4*hen==100)
printf("公鸡=%d,母鸡=%d,小鸡=%d\n",cock,hen,chicken);
}
}
❼输入年(year)、月(month)和日(day),计算并输出该日是该年的第几天(sumdays)
voidmain( )
{
inti,year,month,day,sumdays;
scanf(“%d%d%d”,&year,&month,&day);
sumdays=day;
for(i=1;i switch(i) { case2: if(year%4==0&&year%100!=0||year%400==0)sumdays+=29; elsesumdays+=28; break; case4: case6: case9: case11: sumdays+=30;break; default:sumday+=31; } printf(“year=%d,month=%d,day=%d,sumdays=%d\n”,year,month,day,sumdays); } ❽矩阵转置 main( ) { inti,j,a[2][3]={{1,2,3},{4,5,6}},b[3][2]; printf("矩阵A:\n\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++){printf("%5d",a[i][j]); b[j][i]=a[i][j];} printf("\n"); } printf("矩阵B:\n\n"); for(i=0;i<3;i++) { for(j=0;j<2;j++)printf("%5d",b[i][j]); printf("\n"); } } ❾用二维数组输出杨辉三角形 #define N 10 main( ) { inti,j,yh[N][N]; for(i=0;i { yh[i][0]=yh[i][i]=1; for(j=1;j } for(i=0;i { for(j=1;j<=15-i;j++)printf(" "); for(j=0;j<=i;j++)printf("%4d",yh[i][j]); printf("\n"); } }
输出字符串 void main() { char www[ ]=”World\0Wide\0Web”; printf(“%s\n”,www+11); } 11.指针数组和二级指针的使用 void main() { int a[5]={1,3,5,7,9}; int*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; inti,**p=num; for(i=0;i<5;i++)printf(“%d\t”,**p++); } 12.求两个自然数的最大公约数和最小公倍数 intgcd(intm ,intn)/* 求最大公约数 */ { while(m!=n) if(m>n)m-=n; elsen-=m; return(m); } intgcp(intm ,intn)/* 求最小公倍数 */ { returnm*n/gcd(m,n); /*出现调用*/ } voidmain( ) { inta,b,maxgcd,mingcp; sacnf(“%d%d”,&a,&b); maxgcp=gcd(a,b);/*调用*/ mingcp=gcp(a,b);/*调用*/ printf(“a=%d,b=%d,最大公约数=%d, 最小公倍数=%d\n”,a,b,maxgcd,mingcp); } 13.对下列分段函数,输入x的值后,计算并输出y的值(保留两位小数) 当x≤0 y= cos(x)当0 当x≥10 #include main() { floatx,y; scanf(“%f”,&x); if(x<=0)y=x*x+x+1; else if(x<10)y=cos(x); else y=sqrt(x)+1; printf(“x=%.2f,y=%.2f\n”,x,y); } 14. ++,--的理解和使用 void main() { inti=8,j=10,m,n; m=++i; n=j++; printf(“%d,%d,%d,%d\n”,i,j,m,n); } 15.输入学生的成绩后,输出其字母等级 void main() { float score; scanf(“%f”,&score); printf(“score=%.1f “,score); switch((int)(score/10)) { case 10: case 9:printf(“A\n”);break; case 8:printf(“B\n”);break; case 7:printf(“C\n”);break; case 6:printf(“D\n”);break; default:printf(“E\n”); } } 16.冒泡排序(升序) #define N 10 voidmain( ) { inti,j,t,a[N]; for(i=0;i for(i=0;i for(j=0;j for(i=0;i printf("\n"); } 17.值传递和地址传递 voidswap1(intx,int y) { int t; t=x;x=y;y=t; } void swap2(int *x,int *y) { int t; t=*x,*x=*y,*y=t; } #define PR printf(“a=%d,b=%d\n”,a,b); void main() { int a=10,b=20; PR swap1(a,b);PR swap2(&a,&b);PR } 18.有一个磁盘文件,第一次将它的内容显示在屏幕上, 第二次把它复制到另一文件上。 #include void main() { FILE *fp1,*fp2; fp1=fopen(“file1.c”,”r”); fp2=fopen(“file2.c”,”w”); while((!feof(fp1))putchar(fgetc(fp1)); rewind(fp1); while(!feof(fp1))fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2); } 19.输入实数x,按下列公式计算并输出x和y的值(小数点后保留6位) #include main() { floatx,y; scanf(“%f”,&x); if(x<=0)y=sin(x); else if(x<10)y=x*x+1; else y=1/(x*sqrt(x)+x*x+1); printf(“x=%.2f,y=%.2f\n”,x,y); } 20.(1)编写一个计算摄氏(C)到华氏(F)转换的函数。函数头是:float temp(float c) 计算公式:F= (2)编写主函数从键盘输入摄氏温度的值,调用上述函数输出摄氏及华氏温度的值(小数点后保留两位)。 float temp(float c) { return(9.0/5.0*c+32); } void main() { float f; scanf(“%f”,&f); printf(“F=%.2f,C=%.2f\n”,f,temp(f)); } 北京航空航天大学继续教育学院 2012秋季成人高等学历教育(业余) 《C语言程序设计》期末试卷A(样题) 适用班级:计算机专业(XXXXXX班) 姓名:___________ 班级和学号:_____________ 卷面成绩(60%):_____________ 一、(20%)阅读下列程序,将输出结果写到题目右侧的空白处 (本大题共有6个小题,每小题5分,共30分) 1. void main() { char www[ ]=”World\0Wide\0Web”; 答:world,wide,web printf(“%s,%s,%s\n”,www,www+6,www+11); } 2. void main() { inti,a[10]; for(i=0;i<10;i++)a[i]=i; for(i=0;i<10;i++) { 答:0 1 2 3 4 printf(“%5d”,a[i]); 5 6 7 8 9 if((i+1)%5==0)printf(“\n”); } } ………………………………………………………………………. --------------------------------------------------------------------------------------------------------------------------------- 二、(20%)将下列程序的下横线空白处补上,使其能正确运行 (本大题共有3个小题,10个空,每空2分,共20分) 7. 计算1~100自然数和的平均值并输出 void main( ) { inti; floataver,sum= 0 ; for(i=1;i< 11 ;i++)sum+=i; /*或for(i=1;i<=11 ;i++)sum+=i;*/ aver=sum/10; printf(“aver=%.2f\n”,aver); } …………………………………………. 三、(20%)写出下列问题的程序 (本大题共有2个小题,每小题10分,共20分) 10.计算1~100自然数和的平均值并输出(保留两位小数) 答: void main( ) { inti; floataver,sum=0; for(i=1;i<101;i++)sum+=i; aver=sum/10; printf(“aver=%.2f\n”,aver); } ………………………………………………………………………………..