C程序设计基础_复习题(共9页)
--本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--
c语言规定,任何非0的数像1 -1等都被认为是真,而0被认为是假1>1为假
试题一、单选题
1. 已知int k,m=1;执行语句k=-m++;后,k的值是_____。【知识点: 难度: 正确答案:A】
A.-1 A.(int k)%m
B.0 B.int(k)%m
C.1 C.int(k%m)
D.-2 D.(int)k%m
2. 已知定义int m; float k; 正确的语句是 。【知识点: 难度: 正确答案:D】 3. 当k的值不为0时,在下列选项中能够将k的值赋给变量m,n的是______。【知识
点: 难度: 正确答案:B】
A.m=k=n
C.(m=k)||(n=k)
B.(m=k)&&(n=m) D.(n=m)&&(m=k)
4. 已知 int x=5; 表达式6>x>1值是_____。【知识点: 难度: 正确答案:A】
A.0 B.1 C.5 D.表达式语法错
表达式6>x>1 ,先
判断6>x 为0,再判断0>1,所以值为0。
(6>x 为1 ,再判断1>1,所以值为0。) 5. 下列程序段执行后c值为_____。【知识点: 难度: 正确答案:D】
int k=7, c=0; while(--k)
if (k%3) continue; else c++;
A.5
B.4
C.3
D.2
6. 已知字母a的ASCII码为十进制数97,且ch为字符型变量,则执行语句ch=‘a’+‘D’-
‘A’;后,ch中的值为_____。【知识点: 难度: 正确答案:C】
A.d
B.c
C.100
D.不确定
7. 设m,n已正确定义,执行语句{for(m=0, n=10; m A.6,7 C.9,7 B.7,6 D.7,9 8. 已知char *t[] ={”How”, ”are”, ”you!”};则t是_______。【知识点: 难度: 正确答案:B】 A.指向char变量的指针 C.指向”How”的指针变量 B.指向字符指针的指针常量 D.指向’H’的指针 9. 假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串 的程序段是______。【知识点: 难度: 正确答案:C】 A.char s[5] = {\"ABCDE\ C.char *s; s = \"ABCDE\"; puts(s); B.char s[5] = {‘A’,’B’,’C’,’D’,’E’}; puts(s); D.char *s; scanf(“%s”,s); puts(s); 2 10. 以下程序有错,错误原因是______。【知识点: 难度: 正确答案:D】 main() { int *p, i; char *q, ch; p = &i; q = &ch; *p = 40; *p = *q; ...... } A. p和q的类型不一致,不能执行*p=*q;语句 B. *p中存放的是地址值,因此不能执行*p=40;语句 C. q没有指向具体的存储单元,所以*q没有实际意义 D. q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行*p=*q;没有意义,可能会影响后面语句的执行结果 11. 若有定义:int a=2, b=5, c=8; 则表达式c |= (~a && b) ^ !(a & b)的值为_____。【知识点: 难度:4 正确答案:B】 A.14 B. 8 C.1 D.0 12. 设int a=5, b=7, 表达式(++a == b--) ++ a : --b 的值是_______。【知识点: 难度:2 正确答案:C】 A.7 B. 6 C.5 D.4 13. 设a=3, b=2, 那么表达式 (a=b=7, b=a!=7) 的值是 。【知识点: 难度:2 正确答案:D】 A.1 B.2 C.7 D.0 逗号(,)也可以是运算符,逗号表达式最右边的子表达式的值即为逗号表达式的值。而b=a!=7的值为0 逗号运算符只取最右边的子表达式的值,但每个子表达式都要运行 14. 设有:int a=1,b=2,c=3,d=4,m=2,n=2; 执行语句(m=a>b)&&(n=c>d);后n的值是_____。 【知识点: 难度:3 正确答案:A】 A.2 B.1 C.0 D.3 &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式, 15. 下列程序段的输出结果是_____。 【知识点: 难度:3 正确答案:B】 int k=2, s=0; 3 switch (k) { case 2: s++; k++; case 1: s++; case 3: s+=1; switch(s){ case 2: s+=2; break; default: k++; break; } default: s+=3; } printf(\"%d#%d#\ A.1#3# B.6#4# C.3#2# D.3#4# 16. 下列程序的输出结果是_____。 【知识点: 难度:2 正确答案:C】 int f(int x) { static int k; return ++k + x; } main( ) { int k; for(k=1; k<4; k++) printf(\"%d#\ } A.2#5# B.3#6# C.2#4#6# D.不确定 17. 下列程序的输出结果是_____。 【知识点: 难度:2 正确答案:D】 main() { char x=040; printf(\"%o\\n\); } A. o B. 40 C.1000000 D.100 18. 下列程序段的输出是__________。 【知识点: 难度:3 正确答案:A】 main() { int x= -9, y=5, z=8; if(x=y)if(x>0)z=0; else z+=1; printf(\"z=%d\\n\); } A.z=0 B.z=1 C.z=8 D.z=9 4 esle子句与其之前最近的不完整if配对。C语言中等号“=”为赋值运算符,不用于判断相等,判断相等应用“==”,因此执行x=y后,x=5,if(5)相当于if( true), 执行if(x>0)z=0,所以z=0 19. 下列程序段的输出是__________。【知识点: 难度:3 正确答案:B】 #define SQ(a,b) (a*a-2*a*b+b*b) main() { int k=4; printf(\"%d\ } A.1 #define定义一个宏(不是一个函数),用于字符串的替换,注意替换不是用数值去替换,也不会自动加括号,因此 SQ(k, k-1)=k*k-2*k*k-1+k-1*k-1=-k*k-2 SQ(4,3)=-4*4-2=-18 B.-18 C.-15 D.-8 20. 若运行以下程序时,从键盘输入Hello_Everyone! 果是_________。【知识点: 难度:2 正确答案:C】 main() { char c; int v1=0,v2=0; do{ switch(c=getchar()) {case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': v1+=1; default: v1+=1;v2+=1; } } while( c != '\\n' ); printf(\"%d,%d\\n\ } A.6,10 B.21,10 C.22,10 D.6,9 21. 下列程序段输出 _____。【知识点: 难度:4 正确答案:D】 main() { char str[2][5] = { \"abcd\" }; strcpy( str[0], \"You\" ); strcpy( str[1], \"Me\" ); str[0][3] = '&'; 5 printf( \"%s\\n\ } A.You&Me B.abcd 22. 对于函数f,调用 f (12345) 的输出是_____。【知识点: 难度:3 正确答案: C.abc& D.You& A 】 void f (int n) { if(n<10) printf( \"%1d\ else { f(n/10); printf( \"%1d\ } A.12345 23. 下列程序段的输出结果是_____.【知识点: 难度:2 正确答案:B】 B.54321 C.11111 D.5432 void fun(char *fname,char *st) { FILE *myf; int i; myf = fopen(fname,\"w\" ); for(i=0; i A.C_is_fun B.is_fun C.test_is_fun D.C_ 试题二、程序阅读题 1. 以下程序的输出结果是_______。【知识点: 难度:3 正确答案:C】 main() { char ch[2][5]= { \"1234\[2]; int i,j,s=0; } for(i=0; i<2; i++)p[i]= ch[i]; for(i=0; i<2; i++) for(j=0; p[i][j]> ′\\0′; j+=2) s=10*s + p[i][j]- ′0′; printf(\"%d\\n\); B.2468 C.1357 D.2648 A.1537 6 2. 运行下列程序的输出结果是__________。【知识点: 难度:3 正确答案:D】 struct st { int x; int *y; } *p; int dt[4] = { 10, 20, 30, 40 }; struct st aa[4] = { 50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3] }; main() { p=aa; printf(\"%d,\ } A.60,60,21 B.51,51,21 C. 60,70,31 D.51,52,11 3. 下列程序的输出结果是__________。【知识点: 难度:4 正确答案:A】 void fun(int m, int *a, int *n) { int i,j=0; for( i=1; i<=m; i++ ) if(i%3==0 && i%7==0) a[j++]=i; *n=j; } void main() { int aa[50],n,k; fun(50, aa, &n); for(k=0; k 4. 运行下面程序的输出结果是__________。【知识点: 难度:3 正确答案:B】 int x, y; int f( int n ) { static int x=0; x++; if( !(n%3)) printf(\"%d\ else y++; return x; } void main() 7 { int i; x=1; y=5; for( i = 0; i < 7 ; i++) x = f( i ); printf(\"#%d#%d\\n\ } A.1245#7#10 B .036#7#9 C. 1245#1#9 D. 036#1#10 5. 如果已经有了有关的定义,则下列程序的输出结果为_______。【知识点: 难 度:4 正确答案:C】 main() { int i, n=7; char b[7], *a[] = { \"January\ f(a, n); for (i=0; i printf(\"%s\\n\ } void f(char *a[], int n) { int i, j; char *temp; for( i = 1; i < n; i++) for (j = 0; j < n-i; j++ ) if (strcmp(a[j], a[j+1]) > 0) swap(&a[j], &a[j+1]); } void swap(char **s1, char **s2) { char *temp; temp=*s1; *s1=*s2; *s2=temp; } A.Jeri B.Juyichay C. Aeny D. JFMAMJJ 试题三、程序(段)填空题 1. 下面的程序输入n ( 1<=n<=10),打印出n行杨辉三角。第m行有m个整数,其中 第i个整数是 m选i的组合数:Ci,m。每个数右对齐占4位,相邻行交错显示,呈金字塔状。例如,输入6以后,输出的金字塔是:【知识点: 难度:3 正确答案:(1)A (2)B (3)G】 8 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 /* 1 */ #include \"\" /* 2 */ main() /* 3 */ { /* 4 */ int i, j, n, a[10][10]; /* 5 */ scanf(\"%d\ /* 6 */ for( i=0; i /* 9 */ for( j=1; j<____(2)____; j++ ) /* 求每行的内部数据 */ /* 10 */ a[i][j] = a[i-1][j-1] + a[i-1][j]; /* 11 */ printf(\"\\n\"); /* 12 */ for(i=0; i A. n B. i C. n-1 D. i-1 E. n-i F. n-i-1 G. n-i+1 H. i-n I. i-n+1 2. 一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个 月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到R对(R为给定的正整数)。下面的程序输入一个正整数R,输出“至少到第几个月时,兔子总对数才能达到R对。”例如:输入30,输出“至少第 9 个月才有 30 对兔子。” 【知识点: 难度:3 正确答案:(1)F (2)A (3)C】 /* 1 */ #include \"\" /* 2 */ main() /* 3 */ { /* 4 */ int month=1, R, R1=1, R2=0, R3=0; /* 5 */ scanf(\"%d\ 9 /* 6 */ while( R1+R2+R3 < R ) /* 兔子数量未达到给定的量,继续计算下个月的值 */ /* 7 */ { month++; /* 8 */ R3 = ___(1)___; /* 9 */ R2 =___(2)___; /* 10 */ R1 = ___(3)___; /* 11 */ } /* 12 */ printf(\"至少第 %d 个月才有 %d 对兔子。\\n\ /* 13 */ } A. R1 B. R2 C. R3 D. R1+R2 E. R1+R3 F. R2+R3 G. R3-R1 H. R3-R2 I. R2-R1 3. 给定一个整数序列(整数允许是负数,但至少有一个非负整数):a1, a2, ..., ai, ..., aj, ..., an。设Sij = ai+...+aj (1<=i<=j<=n),如果Suv = max{Sij},那么就称au,…av是原来序列的最大连续子序列。下面程序入整数个数n(n<=100)和n个整数序列{ai},输出最大连续子序列的和值MaxSum。例如,输入8和8个整数2 -3 5 -2 -1 2 6 -2,输出最大连续子序列5 -2 -1 2 6的和值10。【知识点: 难度:4 正确答案:(1)B (2)F (3)H】 void main( ) { int n, A[101]; int ThisSum, MaxSum, i, j; /*---输入n个整数,并求最大连续子序列之和值MaxSum--*/ scanf(\"%d\ for( i = 0; i < n; i++ ) /* 输入n个整数 A[ i ] */ { scanf(\"%d\ } MaxSum = 0; /* 初始化最大和值 */ for( i = 0; i < n; i++ ) /* 从 A[ i ]开始 */ { ThisSum = 0; for( j = __(1)__; j < __(2)__; j++ ) { /*到A[ j ]为止 */ ThisSum += __(3)___; /* 求 A[ i ] 到 A[ j ] 的和*/ if ( ThisSum > MaxSum ) MaxSum = ThisSum; /* 更新最大和值 */ } /* end for-j */ } /* end for-i */ printf(\"%d\\n\ } 10 A. A[i] B. A[j] C. A[n] D. 0 E. 1 F. i G. j H. n I. n-i 11 因篇幅问题不能全部显示,请点此查看更多更全内容