C语言各章练习题.doc
目录第一章 程序设计和C语言2第二章 最简单的C程序设计2第三章 选择结构程序设计5第四章 循环结构程序设计8第五章 数组11第六章 函数15第七章 指针20第一章 程序设计和C语言一、选择题:1 一个C程序的执行是从( A )A、本程序的main函数开始,到main函数结束B、本文件第一个函数开始,到本文件的最后一个函数结束C、本程序的main函数开始,到本文件的最后一个函数结束D、本文件的第一个函数开始,到本文件的main结束2 以下说法不正确的是( D)A、一个C源程序可由一个或多个函数组成B、一个C程序必须包含一个main函数C、C程序的基本组成单位是函数D、在C程序中,注释说明只能位于一条语句的后面3 C语言规定:在一个源程序中,main函数的位置(C )A、必须在开始B、必须在系统调用的库函数的位置C、可以任意D、必须在最后4 源程序program.c经编译产生的目标文件和连接后产生的可执行文件是( B )A、program.bak和program.objB、program.obj和program.exeC、program.exl和program.cD、program.bak和prgram.exe第二章 最简单的C程序设计一、选择题1 是合法的用户自定义标识符的( D )A、ah-spksB、doubleC、<ctrl>D、_myapple2 以下正确的C语言标识符是( C )A、%xB、a+bC、a123D、test!3 以下不能定义为用户标识符的是(C ) A、VoidB、b_2C、intD、name 4 以下选项中可作为C语言合法整数的是( D ) A、11010(B)B、0583C、x2b2D、0xafb 5 VC+6.0中的短整型数值在计算机中占用的字节个数是( B ) A、1B、2C、3D、4 6 设short int型的数据长度为2个字节,则unsigned short 类型数据的取值范围是( B )P34A、均为2个字节B、0至65535C、-3276至32767D、-256至2557 以下选项中可作为C语言合法常量的是( A)(指数E或e前必须有数字,后面必须有整数)A、-80.0B、-080C、-8e1.2D、-80.0e8 在VC+6.0编译环境下,下列式中,值不为4的表达式是( D )P34,double为8字节A、sizeof(unsigned long)B、sizeof(long)C、sizeof(unsigned int)D、sizeof(double)9 设有说明语句:char a=123;则变量a( A )一个ascii字符A、包含1个字符B、包含2个字符C、3个字符D、说明不合法10 设x为一数字字符,则其所对应的十进制数值为( B)。A、xB、x-0C、*xD、&x11 已知大写字母A的ASCII码值是65,a的ASCII码值是97,则用八进制表示的字符常量101为( A ) A、字符AB、字符aC、字符eD、非法常量12 执行语句:int a=1+1.5;后,正确的叙述是( D )A、a的值是字符3B、a的值是浮点数C、不允许字符型和浮点型相加D、a的值是字符1的ASCII码加113 若a为int类型,且其值为5,则执行表达式a+=a-=a*a后,a的值是( B )A、-5B、-40C、-15D、不确定14 设整型变量a的值为2,下列表达式值为1的是( C )A、a%3B、a/3C、-aD、a+15 设变量a、b、c已定义并赋值,则下列表达式中符合C语言语法规则的是( B )A、a=5+B、a=b=c+C、a=%2D、b=a+1=216 下列式中,最终运算结果的数据类型不是浮点型的表达式的是( A )A、(int)(3+3.0)B、1e-3C、(float)(3)D、(int)3.0+3.017 设整型变量x、y、z均为2,表达式(x+)+(y+)+(z+)的值是( A )P45A、6B、7C、8D、9 18 C语言中计算a3的正确表达式是(C ) P278 附录EA、a3B、a*3C、pow(a,3)D、power(a,3) 19 下列表达式的值为0的是( A) A、7/8B、7%8C、7/8.0D、7<8 20 设float m=4.0, n=4.0; 使m为10.0的表达式是(D ) A、m-=n*2.5B、m/=n+9C、m*=n-6D、m+=n+2 21 C语言中运算对象必须是整型的运算符是( A)。A、%=B、/C、=D、<=22 C标准函数中,数学函数原型在( B )头文件中。A、stdio.hB、math.hC、string.hD、etype.h23 putchar函数可以向终端输出一个( D)P65A、整数B、实数C、字符串D、字符24 设有语句scanf(%d,%d”,&m,&n);要使m、n的值依次是2、3,正确是输入是( B )A、2 3B、2,3C、2;3D、2 325 设变量定义为int a,b;执行下列语句时,输入( B ),则a和b的值都是10scanf(“%d,%d”,&a,&b);A、10 10 B、10,10C、a=10 b=10D、a=10,b=1026 有如下程序段:int a=3,b=15;float f=7.5;printf(“%.1f”,(float)a+b/2+(int)f%3);执行该程序段后,运算结果为:( B )A、11.5 B、11.0 C、11 D、12.027 数字字符0的ASCII值为48,若有以下程序main() char a='1',b='2' printf("%c,",b+); printf("%dn",b-a);程序运行后的输出结果是 ( C )A、3,2B、50,2C、2,2D、2,5028 有以下程序void main() int m=12,n=34; printf("%d%d",m+,+n); printf("%d%dn",n+,+m);程序运行后的输出结果是 ( A )A、B、C、D、29 有以下程序main() int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%dn",m,n,p);若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是( A)A、m=123n=456p=789B、m=123 n=456 p=789C、m=123,n=456,p=789D、123 456 78930 ?short int a=-2;printf(“%hu”,a);输出为( C ) A、2B、-2C、65534D、-65534二、填空题1. 设int a=3,b=5;float x=7.5,y=3.5;则表达式:(float)a+b/2+(int)x%(int)y是值是 6.0 。2. 一个三位整数n的中间一位数字可表示为 n/10%10 。3. 代数式表示成C表达式为(3+a*b)/(c+d) 第三章 选择结构程序设计一、选择题1. 在C程序中,用(A )表示逻辑”真”。A、1B、非0的数C、非1的数D、大于0的数2. 若有定义:int x=2,y=3,z=4;则表达式!(x+y)+z-1&&y+z%2的值为(C )A、4B、0C、1D、23. 设int a=0,b=0,c=0;c=+a|b+;则a、b、c值分别为( D )P77A、0 1 0B、1 1 1C、1 1 0D、1 0 14. 执行语句:int a=1,b=0,c;c=a>0|+b;后,b的值为( A )A、0B、1C、2D、不确定5. 为表示关系x>y>=z,则正确的c语言表达方式为(C )。A、(x>y>=z)B、(x>y)and(y>=z)C、(y<x)&&(y>=z)D、(x>y)&(y>=z)6. 若变量ch为char类型,能正确判断出ch为大写字母的表达式是( D )A、A<=CH<=ZB、(ch>=A)|(ch<=Z)C、(A<=ch) and (Z>=ch)D、(ch>=A)&&(ch<=Z)7. ?若变量已正确定义,语句”if(x>y) z=0;else z=1”和( C )等价。A、z=(x>y)?1:0B、z=x>y;C、z=x<=y;D、x<=y?0:18. 最适合解决选择结构”a>=0,则b=1;否则b=0”的语句是( B )A、ifB、ifelseC、switchD、嵌套的if-else9. 若a=3, 执行下列语句后, b的值为 ( D)(两个if.else语句) if (a>=2) if( a!= 2) b=3; else b=2; else b=1; A、0B、1C、2D、3 10. 若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a:c<d?c:d的值( A)(相当于a>b?a:(c>d?c:d)A、1B、2C、3D、411. 逗号表达式(a=4*5,a*2),a+15 的值是( A) A、35B、40C、55D、20 12. 设int a=5, b=4; 则表达式(a = b+)?+a:b+)的值是(B ) A、4B、5C、6D、3 13. 有以下程序main() int a,b,d=25; a=d/10%9; b=a&&(-1); printf("%d,%dn",a,b);程序运行后的输出结果是(B )A、6,1B、2,1C、6,0D、2,014. 有以下程序main() int i=1,j=2,k=3; if(i+=1&&(+j=3|k+=3) printf("%d %d %dn",i,j,k);程序运行后的输出结果是 ( D )A、1 2 3B、2 3 4C、2 2 3D、2 3 315. 有以下程序main()int a = 0,b = 0,c = 0,d = 0;if (a = 1)b = 1; c = 2;else d = 3;printf("%d, %d, %d, %dn", a, b, c, d);程序输出(D)A、0,1,2,0B、0,0,0,3C、1,1,2,0D、编译有错二、 填空题1. 条件判断语句包括if语句和 switch 语句。2. 判断两个float类型变量x,z是否相等,一般语句:if( abs(x-z)<1e-6 )。3. 表达式1<0<2的值是 1 4. 以下程序运行后的输出结果是 4 5 99 main() int a=3,b=4,c=5,t=99; if(b<a&&a<c) t=a;a=c;c=t; if(a<c&&b<c) t=b;b=a;a=t; printf("%d%d%dn",a,b,c);5. 以下程序运行后的输出结果是 10 20 0 P77main() int a,b,c; a=10;b=20;c=(a%b<1)|(a/b>1); printf("%d %d %dn",a,b,c);三、 写出程序运行的结果【程序1】 #include<stdio.h>void main()char c1 = 97;if (c1 >= 'a'&&c1 <= 'z')printf("%d, %c", c1, c1 + 1);else printf("%c", c1); 97 , b【程序2】 #include<stdio.h> main() int x=1,y=1,a=0,b=0; switch(x) case 1:switch(y) case0:a+; case 1:b+; case2:b+;break; case 2:a+;b+;break; case 3:a+;b+; printf("a=%d,b=%dn",a,b); a=1,b=3【程序3】#include<stdio.h> main()char c;while (c = getchar() != 'n')switch (c - '1')case 0:case 1:putchar(c + 2);case 2:putchar(c + 3); break;case 3:putchar(c + 4);default:putchar(c + 1); break;printf("n");输入:3210输出结果:645341四、 程序设计1 设计程序实现从键盘接收3个数,输出最大数和最小数。 #include<stdio.h> int main() int a,b,c,max,min; printf("please input three interge:n"); scanf("%d,%d,%d",&a,&b,&c); if(a>b) max=a,min=b; else max=b,min=a; if(a>c) max=a,min=c; else max=c,min=a; if(b>c) max=b,min=c; else max=c,min=b;printf("max=%d,min=%dn",max,min);return 0;#include <stdio.h>void main()int a, b, c;printf("请输入三个数:n");scanf("%d%d%d", &a, &b, &c);int max = a;int min = a;if (max < b)max = b;elsemin = b;if (max < c)max = c;else if (min > c)min = c;printf("最大数为%dn最小数为%dn", max, min);2.输入一百分制的成绩,输出他的等级,90以上“A”等,8089为“B”等,7079为“C”等,6069为“D”等,60以下为“E”等。#include<stdio.h>int main()int m,s;printf("Enter the Student's Score:n");scanf("%d",&s);m=s/10;if(m<=10 && m>=9) printf("An"); else if(m<9&&m>=8) printf("Bn"); else if(m<8 && m>=7) printf("Cn"); else if(m<7 &&m>=6) printf("Dn"); else printf("E");return 0;#include<stdio.h>void main()int score, i;printf("Enter the Student's Score:n");scanf("%d",&score);i = score / 10;switch (i)case 10:case 9: printf("An"); break;case 8: printf("Bn"); break;case 7: printf("Cn"); break;case 6: printf("Dn"); break;default: printf("En");第四章 循环结构程序设计一、选择题:1. 以下叙述正确的是( D )A、do-while语句构成的循环不能用其它语句构成的循环来代替B、do-while语句构成的循环只能用break语句退出C、do-while语句构成的循环,在while后的表达式为非零时结束循环D、do-while语句构成的循环,在while后的表达式为零时结束循环2. 设有程序段:int k=10; while(k=0) k=k-1;则循环体执行的次数为(C )A、10次B、9次C、0次D、1次3. 有以下循环:int i;for(i=0;i<10;i+)i+;循环次数为:( B )A、10B、5C、6D、74. 语句while(!end);中的条件!end等价于( A )A、end=0B、end!=1C、end!=0D、-end5. 设变量y值为3,执行下列循环语句后,变量y的值的是( C )do y+; while(y+<4);A、3B、4C、5D、66. ?执行语句for(i=1;i+<4;); 后变量i的值是( C )A、3B、4C、5D、07. ?下列( D ) 循环不是无限循环 A、for(y=0; x=1 ; +y);B、for(; ; x=0); C、while (x=1) x=1; D、for(y=0,x=1;x> + y; x+) ;8. 有以下程序main() int a=1,b; for(b=1;b<=10;b+) if(a>=8) break; if(a%2=1) a+=5; continue; a-=3; printf("%dn",b);程序运行后的输出结果是 ( B )A、3B、4C、5D、69. ?下列程序运行的结果是(D )#include<stdio.h>main()int y = 10;do y-; while (-y);printf("%dn", y-);A、-1B、-2D、1D、0二、 程序填空【程序1】求两个整数m 和n 最大公约数。 # include <stdio.h> void main( ) int m, n, a, b, r; scanf("%d%d", &m, &n); a=m; b=n; do r= a%b ; a=b; b= r ; while ( b!=0 ); printf("The greatest common divide of %d and %d is %dn" , m, n, a); 【程序2】下列程序的主要功能是计算并输出(1)×(1+2)×(1+2+3)××(1+2+10),将程序中横线处缺少的部分填上。# include <stdio.h> void main() float y=1 ,x; int i,j;for(i=1;i<11;i+) x=0 ; for(j=1;j<=i;j+) x=x+j ; y=y*x; printf("%fn",y);三、 阅读程序,写出运行结果程序1 #include <stdio.h> main( ) int i, m=0, n=0, k=0; for(i=5;i<=7;i+) switch(i/6) case 0: m+; n+; case 6: n+; break; default: k+; n+; printf("%d,%d,%dn", m, n, k);1,4,2【程序2】#include <stdio.h> main() int i,j;for(i=0;i<=3;i+) for(j=0;j<i;j+) printf("%d",i);printf("*n");*1*22*333*【程序3】有如下程序main() int n=8;while(n>5)n-;printf("%d",n);7 6 5则该程序输出的结果是: 【程序4】main() int i,j,k;for(i=0;i<5;i+) for(k=0;k<=5-i;k+) printf(" ");for(j=0;j<2*i-1;j+) printf("*");printf("n");* * * * * * * * * * * * *四、 程序设计1 编写程序打印以下图案(必须使用循环结构,直接输出不给分)1234567890#include<stdio.h>int main()int i, j, k = 1;for ( i = 0; i < 4; i+)for (int j = 0; j <= i; j+)printf("%d", k % 10);k+;putchar('n');return 0;#include<stdio.h>int main()int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ;int i, j, k = 0;for (i = 1; i<5; i+)for (j = 0; j<i; j+)printf("%d",ak+);printf("n");return 0;2 求出 10 到100内能同时被2、3、7整除的数,并输出。 #include<stdio.h>int main()int i;for(i=10;i<100;i+)if(i%2=0 && i%3=0 && i%7=0)printf("%dn",i);3 从键盘输入若干学生成绩,找出并输出最高和最低成绩,当输入成绩为负值是结束。#include<stdio.h>int main()float score,max,min;int i=0;printf("please input yours score:n");scanf("%f",&score);max=0; min=101;while(score!=-1) i+;if(score>max) max=score; if(score<min) min=score;scanf("%f",&score); printf("max=%.3f,min=%.3fn",max,min);4 计算1500之间(即从1到500)的全部"完数"之和。所谓"完数"是指一个数,它的所有真因子之和等于该数。#include<stdio.h>int main()int i,j,sum=0,n;for(i=1;i<=500;i+)n=0;for(j=1;j<i;j+)if(i%j=0)n=n+j;if(i=n) sum=sum+i;printf("%dn",i);printf("sum=%dn",sum);5 "百马百担"问题。有100匹马驮100担货,每匹大马每次驮3担,每匹中马每次驮2担,2匹小马每次分驮1担。编写程序求大、中、小马的匹数(大、中、小马的匹数均不得为0)。#include<stdio.h>int main()int big,small,middle;int i,j;for(big=0;big<34;big+)for(middle=0;middle<=50;middle+)for(small=0;small<100;small=small+2)if(big+middle+small=100 && big*3+middle*2+small/2=100)printf("big horse=%d,middle horse=%d,middle horse=%dn",big,middle,small);6 求s=2/1-3/2+5/3-8/5+.前20项的值#include "stdio.h"void main()int i,sign=1;float m = 1, n = 1, t, s = 0;for (i = 1; i <= 20; i+)t = m + n;s = s + (t / n)*sign;sign = -sign;m = n;n = t;printf("s is %9.6fn", s);7 输入一行字符(以回车结束输入),统计其中数字字符、字母和其它字符的个数。#include<stdio.h>int main()char a;int number=0,letter=0,other=0;while(a=getchar()!='n')if(a<='9' && a>='0') number=number+1;else if(a>='A'&& a<='Z') | (a>='a' && a<='z')letter=letter+1;else other=other+1;printf("number=%d,letter=%d,other=%dn",number,letter,other);第五章 数组一、选择题:1. 数组定义为int a1010;,则数组a有( A )个数组元素。A、100B、81C、20D、1212. 以下一维数组 a的正确定义是( D )A、int a(10); B、int n=10,an;C、int n;D、#define N 10 scanf(“%d”,&n); int aN; int an;3. 设有语句”int a=3,4,5,9,8,7;”则表达式a1-a4的值是( C )A、-6B、6C、-4D、24. 以下不能正确定义二维数组的是(D ) A、int a22= 4, 5;B、int a2=4,5,6,7; C、int a22= 4,5,6; D、int a2=4,5,.6,7; 5. 有以下程序main() int num44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j; for(i=0;i<4;i+) for(j=0;j<=i;j+) printf("%4c",' '); for(j= ; j<4;j+) printf("%4d",numij); printf("n"); 若要按以下形式输出数组右上半三角1 2 3 4 6 7 8 11 12 16则在程序下划线处应填入的是 ( B )A、i-1B、iC、i+1D、4-i6. 在执行char str10="chinan0"strlen(str)的结果是( B )A、5B、6C、7D、87. 有以下程序main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+<7) if(pi%2) j+=pi; printf("%dn",j);程序运行后的输出结果是 ( B )A、42B、45C、56D、608. 以下程序的输出结果是( B )#include <stdio.h>#include<string.h>main() char st20="20000t" printf("%d,%dn",strlen(st),sizeof(st);A、7,7B、4,20C、10,20D、20,209. 将两个字符串s1和s2 连接起来, 正确的函数为 (B ) P280A、strcpy( s1,s2) B、strcat( s1,s2) C、strcmp(s1,s2) D、strlen(s1,s2) 10. 以下能正确定义一维数组的选项是 ( B )A、int a5=0,1,2,3,4,5; B、char a=0,1,2,3,4,5;C、char a='A','B','C' D、int a5="0123"11. 设char b10; 若从键盘输入字符串“spkaoshi” ,则正确的函数引用是( C ) A、scanf(“%s”, &b);B、scanf(“%c”,&b10); C、gets(b);D、gets(b10); 12. 有以下程序 main() char p='a', 'b', 'c', q="abc" printf("%d %dn", sizeof(p),sizeof(q); 程序运行后的输出结果是 ( C ) A、4 4B、3 3C、3 4D、4 3 13. 有以下程序 main( ) char a="abcdefg",b10= "abcdefg" printf("%d %dn",sizeof(a),sizeof(b); 执行后输出结果是( C )A、7 7B、8 8C、8 10D、10 10二、程序填空下列程序是建立一个按以下格式输出的二维数组。 1 0 0 0 1 0 1 0 1 0 0 0 1