一、单项选择题
1.判断字符串s1与字符串s2相等,应当使用: 。
A) if (s1 = s2) B) if (strcmp(s1, s2))
√C) if (!strcmp(s1, s2)) D) if (strcmp(s1, s2) = 0)
2.二维数组a有m行n列,则在a[i][j]之前的元素个数为( )。
A. j*n+i √B. i*n+j C. i*n+j-1 D. i*n+j+1
3.以下程序执行后的输出结果是( )。 #include { printf(\"%d\\n\ √A) 10 B) 11 C) 16 D) 12 4.有如下程序片段: int i = 0; while(i++ <= 2); printf(\"%d\ 则正确的执行结果是: A) 2 B) 3 √C) 4 D) 程序陷入死循环 5. 下面哪个定义是合法的 。 A) char a[8] = \"language\"; B) int a[5] = {0,1,2,3,4,5}; √C) char *a = \"string\"; D) int a[2][] = {0,1,2,3,4,5,6}; 6. 一个C语言的语句必须使用的结束符号是( )。 A) , B) 。 √C) ; D) : 7. 以下叙述正确的是( )。 A)C程序中的注释只能出现在程序的开始位置和语句的后面。 B)C程序书写格式严格,要求一行内只能写一个语句。 √C)C程序书写格式自由,一个语句可以写在多行上。 D)用C语言编写的程序只能放在一个源程序文件中。 8. 以下选项中不能作为合法常量的是( )。 A) 1.234e04 B) 1.234e+4 √C) 1.234e0.4 D) 1.234e0 9. 以下选项中合法的用户标识符是( )。 A) int B) #max √C) _3int D) A.max 1 10. 设x和y均是int型变量,则执行下列语句后的输出为( )。 x=15;y=5;printf(\"%d\\n\ √A) 0 B) 1 C) 6 D) 12 11. 设x,y和z都是int型变量,且x=3,y=4,z=5,则下列表达式中,值为0的表达式 是( )。 A) x&&y √B) !(x #include int main() { int a = 1, b = 2, c = 3; c += fun(a,b) + a; printf(\"%d,%d,%d\\n\ return 0; } √A) 1,2,9 B) 2,3,10 C) 1,2,10 D) 2,3,9 13. 有以下程序,程序执行后的输出结果是( )。 #include { int a[] = {2, 4, 6, 8, 10}, y = 0, x, *p; p = &a[1]; for(x = 1; x < 3; x++) y+=p[x]; printf(\"%d\\n\ return 0; } A) 10 B) 11 √C) 14 D) 15 14. 有以下程序,以下叙述正确的是( )。 #include { char p[] = {'a','b','c'}, q[10] = {'a','b','c'}; printf(\"%d %d\\n\ return 0; } A)在给p和q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为3。 √B) 由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3。 C) 由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3。 D) 由于p和q数组中都没有字符串结束符,故长度都不确定。 2 15. 下列可用于C语言用户标识符的一组是( )。 A)void, define, WORD √B)a3_3,_123,Car C)For, -abc, IF Case D)2a, DO, sizeof 16. 以下选项中不属于字符常量的是 A)′C′ √B)′′C′′ C)′\\xCC′ D) ′\\072′ 17. (15)以下定义语句中正确的是( )。 A)int a=b=0; √B)char A=65+1,b=′b′; C)float a=1,*b=&a,*c=&b; D)double a=00;b=1.1; 18. 当变量c的值不为2、4、6时,值也为\"真\"的表达式是( )。 A)(c==2)||(c==4)||(c==6) √B)(c>=2&& c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&& c<=6)&&(c%2!=1) 19. 下面说明不正确的是( )。 A)char a[10]=\"china\"; B)char a[10],*p=a; p=\"china\"; C)char *a;a=\"china\"; √D)char a[10],*p; p=a=\"china\"; 20. 有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是( A)gets(&s[0]); B)scanf(\"%s\ C)gets(s); √D)scanf(\"%s\ 21. 有以下程序,程序执行后的输出结果是( )。 #include { unsigned short a = 65535; short b; b = a; printf(\"%d\\n\} A) 65535 B) 0 √ C) -1 D) 1 22. 在C语言中,以下叙述不正确的是( )。 √A) 在C程序中,无论是整数还是实数,都能被准确无误的表示 B) 在C程序中,变量名代表存储器中的一个位置 C) 静态变量的生存期与整个程序的生存期相同 D) C语言中变量必须先定义后引用 23. 以下叙述中错误的是( )。 A)在程序中凡是以\"#\"开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)#define MAX 是合法的宏定义命令行 √D)C程序对预处理命令行的处理是在程序执行的过程中进行的 24. 设有以下说明语句 3 。 ) typedef struct { int n; char ch[8]; } PER; 则下面叙述中正确的是( )。 A)PER 是结构体变量名 √B)PER是结构体类型名 C)typedef struct 是结构体类型 D)struct 是结构体类型名 25. 以下叙述中错误的是( )。 A)gets函数用于从终端读入字符串 √B)getchar函数用于从磁盘文件读入字符 C)fputs函数用于把字符串输出到文件 D)fwrite函数用于以二进制形式输出数据到文件 26. 有以下程序 #include { char p[]={′a′, ′b′, ′c′},q[10]={ ′a′, ′b′, ′c′}; printf(\"%d%d\\n\ 以下叙述中正确的是( )。 A) 在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3 √B) 由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3 C) 由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3 D) 由于p和q数组中都没有字符串结束符,故长度都不能确定 27. 设有: int a=1,b=2,c=3,d=4,m=2,n=2; 执行 (m=a>b)&&(n=c>d)后,n的值是( )。 A)1 √B)2 C)3 D)4 28. 设有如下定义: int x=10,y=3,z; 则语句 printf(\"%d\\n\ 的输出结果是( )。 A) 0 B) 1 √C) 3 D) 4 29. 下面的程序 #include char ch; scanf(\"%3c\printf(\"%c\} 如果从键盘上输入 abc回车 则程序的运行结果是( )。 4 √A) a B) b C) c D) 程序语法出错 30. 以下程序的运行结果是( )。 #include { int x[]={1,2,3}; int s,i,*p=x; s=1; for(i=0;i<3;i++)s*=*(p+i); printf(\"%d\\n\} A) 7 √B)6 C) 3 D) 8 二、填空题 1、函数add要求计算两个整数之和,并通过形参返回该值,代码如下: void add(int x, int y, int *sum ) { *sum = x + y; } 2、 程序设计中,需要定义一个指针变量p,该变量可以指向一个长度为5的字符型数 组,定义代码如下: char (*p)[5]; 。 3、设整型变量n的值为2,执行语句“n+=n-=n*n”后,n的值是 - 4 。 4、共用体和结构体的定义格式类似,不同点是 结构体的成员占有各自不同的空间,而共用体的各成员放到同一存储空间。 。 5、 设变量max、a、b已经正确定义,若要求a和b的最大值,并赋值给max,代码为: max = a > b ? a:b ;。 6、下列程序的输出结果是 7,1 。 int ast(int x,int y,int * cp,int * dp) { *cp=x+y; *dp=x-y; } main() { int a=4,b=3,c,d; ast(a,b,&c,&d); printf(\"%d,%d/n\ 7、有如下输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值 为3,c的值为2,从键盘输入数据的正确形式应是 a=1,b=3,c=2 。 8、 一个共用体类型的变量,其所占内存的大小是:由占据内存空间最大的成员决定。, 9、 设有定义:int x=12,n=5; 则表达式 x%=(n%2) 的值为 0 。 10、设有float x;写出得到x小数部分的表达式 x-(int)x 。 (假设x为12.345,则表达式的结果为0.345) 5 三、程序运行结果分析题 1. #include { int a = 5, b = 4, x, y; x = 2 * a++ ; printf(\"a=%d, x=%d\\n\ y = --b * 2 ; printf(\"b=%d, y=%d\\n\} 则程序运行结果是: a=6, x=10 b=3, y=6 2. #include void fun2(int b[4]) { int j; for(j=0; j<4; j++) { b[j]=j; } } main() { int x = 10; int a[4] = {1,2,3,4}, k; fun1(x); printf(\"x = %d\\n\ fun2(a); for(k=0; k<4; k++) { printf(\"%d\\n\ } } 运行结果是: x = 10 0 1 2 3 3. #include { int x, y; scanf(\"%2d%*4s%2d\ printf(\"%d\} 程序运行时输入:123456789↙ 6 则程序运行结果是:66 4. #include void func(struct date p) { p.year = 2000; p.month = 5; p.day = 22; } main() { struct date d; d.year = 1999; d.month = 4; d.day = 23; printf(\"%d,%d,%d\\n\ func(d); printf(\"%d,%d,%d\\n\} 程序运行结果为: 1999,4,23 1999,4,23 5. #include { printf(\"*y = %d\\n\ *y += 20; printf(\"*y = %d\\n\} main() { int x = 10; printf(\"x = %d\\n\ Fun(&x); printf(\"x = %d\\n\} 程序运行结果是: x = 10 *y = 10 *y = 30 x = 30 6. 当运行以下程序时,运行结果是____4332____。 #include 7 { } 7.当运行以下程序时,运行结果是___________ ___。 #include float fun(float *array, int n); float max, min; int main() { float score[N]={90,80,70.5,98,60.5,95,53,85,75,90}; printf(\"max = %6.2f\\nmin = %6.2f\\naverage = %6.2f\\n\ return 0; } float fun(float *array, int n) { int i; float sum=array[0]; max=min=array[0]; for( i=1;i void input( float *a, int n ) { float *pData, *pEnd; pData = a, pEnd = &a[n-1]; while( pData <= pEnd) scanf( \"%f\} float sum( float *a, int n ) { float s = 0; float *pData, *pEnd; pData = a, pEnd = &a[n-1]; while( pData <= pEnd) s += *pData++; return s; } int mink( float *a, int n ) { float *pData, *pEnd, *pKData; int s[12] = {1,2,3,4,4,3,2,1,1,1,2,3}, c[5] = {0}, i; for(i = 0; i < 12; i++) c[ s[i] ] ++; for(i = 1; i < 5; i++) printf(\"%d\printf(\"\\n\"); return 0; 8 pData = a, pEnd = &a[n-1], pKData = a; while( ++pData <= pEnd) {if ( *pData < *pKData ) pKData = pData; } return pKData - a; } main() { float a[5]; int k; input( a, 5 ); printf( \"Sum=%6.2f\\n\ k = mink( a, 5 ); printf( \"Min:a[%d]=%6.2f\\n\} Sum =399.00 Min:a[1] = 56.00 9.有以下程序 #include { FILE *fp; int a[10]={1,2,3},i,n; fp=fopen(\"d1.dat\ for(i=0;i<3;i++) fprintf(fp,\"%d\ fprintf(fp,\"\\n\"); fclose(fp); fp=fopen(\"d1.dat\ fscanf(fp,\"%d\ fclose(fp); printf(\"%d\\n\ } 程序的运行结果是 123 。 四、程序填空题 阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 1. 从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年: 能被4整除,但不能被100整除。 能被400整除。 #include int year, flag; printf(\"Enter year:\"); 9 scanf(\"%d\ if ( year%4==0&&year%100!=0 || year%400==0 ) { flag = 1; } else { flag = 0; } if ( flag ) { printf(\"Yes\\n\"); } else { printf(\"No\\n\"); } } 2. 编程判断m是否为素数。 #include main() { int n, flag; printf(\"Input n:\"); scanf(\"%d\ flag = IsPrime(n); if (flag) { printf(\"它是素数\\n\"); } else { printf(\"它不是素数\\n\"); } } int IsPrime(int m) { int i, k; if (m <= 1) { return 0; 10 } for (i=2; i<=sqrt(m); i++) { k = m % i; if (k == 0) { return 0; } } return 1 ; } 3.以下程序在数组a中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max和min中,请补齐相应代码使程序能够正确运行。 #include void find(int *a, int n, int *max, int *min) { int i; *max = *min = 0; for(i = 1; i < n; i++) { if( a[i] > a[*max]) ____ *max=i ___; else if(a[i] < a[*min]) ____ *min=i _____; } } int main() { int a[] = {5,9,7,8,2,6,3}; int max,min; find(_____a,7,&max,&min ______); printf(\"max = a[%d],min = a[%d]\\n\ return 0; } 11 因篇幅问题不能全部显示,请点此查看更多更全内容