《《C语言程序设计》考试模拟笔试综合练习题及解析.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》考试模拟笔试综合练习题及解析.docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计考试模拟笔试综合练习题及解析一、从下列四个供选择的答案中选出正确的一个答案1、语句printf(“%d%d”, 123); 将输出:A) %123%d B) %d123 C) %d123 D)上述语句语法有错 “%”格式表示输出一个“%”。2、执行下列程序段后, a值为:int a, b;a=15; b=12;a=(a- =b+)? a%5 : a/5;A) 0 B) 2.8 C ) 4 D) 2 先计算a-=b+的值: a-的值为15,执行后a=14;b+的值为12,执行后b=13;15=12为假执行a/5即14/5值为2结果: a = 23、判断字符变量c的值为数字(0-9)
2、则返回1,否则返回0, 可用表达式:A) 0=c=9 B) 0=c & c=9 C) 0=c | c= 9 D)以上均不是4、对于int x, y; 语句 if (x=0) if (x) y=1; else y= -1; B) if (x!=0) if (x0) y=1; else y= -1; else y=0;C) if (x0) y=1; else y=0;语句if (x0) y= -1; else if (!x) y=0; else y=1; 等价于: if (x 0) y = -1; else if (!x) y = 0; else y = 1; 即: -1 x 05、循环 for(
3、i=0, j=5; +i!=-j; ) printf(“%d %d”, i, j); 将执行A) 6次 B) 3次 C) 0次 D) 无限次i = 0, j = 5, (+i1) != (-j4) 成立: i = 1, j = 4i = 1, j = 4, (+i2) != (-j3) 成立: i = 2, j = 3i = 2, j = 3, (+i3) != (-j2) 成立: i = 3, j = 26、下列程序段执行后s值为:int i=5, s=0;do if (i%2) continue; else s+=i; while (-i);A) 15 B) 9 C) 6 D) 以上均不是
4、写成规范形式: do if (i % 2) continue; else s += i; while (-i);i = 5, s = 0: i % 2 = 1: i = 4i = 4, s = 0: i % 2 = 0: s = 0 + 4 = 4; i = 3i = 3, s = 4: i % 2 = 1: i = 2i = 2, s = 4: i % 2 = 0: s = 4 + 2 = 6; i = 1i = 1, s = 6: i % 2 = 1: i = 07、对于int a,要使(11)|a)=a; 则a 可以是:A) 2 B) 6 C) 10 D) 2,6,10均可1: 0000
5、 0000 0000 000112: 0000 0000 0000 010011: 0000 0000 0000 0010 (11) | 2: 0000 0000 0000 0010 (2)(11) | 6: 0000 0000 0000 0110 (6)(11) | 10: 0000 0000 0000 1010 (10)8、对于以下宏定义:#define SQ(x) x*x#define DD(x,y) SQ(x)-SQ(y) 宏调用DD(2*3, 2+3)执行后值为:A) 43 B) 11 C) 25 D) 以上均不是DD(2*3,2+3)SQ(2*3)-SQ(2+3)2*3*2*3-2
6、+3*2+3439、对于以下结构定义:struct int len; char *str; *p; *p-str+中的+加在A) 指针str上 B) 指针p上 C) str所指的内容上 D) 以上均不是优先级: “-” “*” = “+”, +是右结合*p-str+ *(p-str)+)例子: 假如有 plen 12str H e l l o , w o r l d ! 0 则*p-str+的值为 H, 执行后, str指向e单元.10、将s所指节点加到p所指节点之后(如下图), 其语句应为: next . . p next sA) s-next = p+1; p-next = s; B) p
7、-next = s; s-next = p-next;C) s-next=p-next; p-next=s-next;D) s-next = p-next; p-next = s;11、语句if (ab) k=0; else k=1; (int a, b, k) 等价于:A) k=(ab)?1:0; B) k=ab; C) k=a=b; D) 以上均不是12、对于int i; char c, s20;从输入序列123ab45efg中将123读入i; b读入c; “45efg”读入s, 则scanf语句应写为:A) scanf(“%da%c%s”, i, c, s) B) scanf(“%d%*
8、c%c%s”,&i, &c, s);C) scanf(“%da%c%s”, &i,&c,&s) D) scanf(“%d%c%c%s”, &i, &c, s);13、若有以下说明和语句, 已知int和double类型分别占2和8个字节,则sizeof(st)的值为:struct st char a10;union int i;double y;A) 18 B) 20 C) 12 D) 以上均不是14、对于以下程序段, 运行后i值为:enum WEEKS 1,2,3,4,5,6,7 ;enum WEEKS a=1;int i=0;switch (a) case 1: i=1;case 2: i=
9、2;default: i=3;A) 1 B) 0 C) 3 D) 上述程序有语法错误15、对于以下递归函数f, 调用f(4),其返回值为:int f(int n) return f(n-1)+n; A) 10 B) 11 C) 0 D) 以上均不是 16、某一程序TEST.C,编译后运行:TEST 123 456 ABC 则相应的argc及argv3分别为:A) 3 “456” B) 3 “ABC” C) 4 “456” D) 4 “ ABC” argv0 “TEST” argv1 “123” argv2 “456” argv3 “ABC” 17、如下程序段: int c=1, 7, 12;
10、int *k; k=c; printf(next k is %d,*+k); 其输出应为: A) 2 B) 7 C) 1 D)以上均不对k 1 c07 c1 12 c218、如果变量xx有如下类型: struct char a1; 1 int a2; 2 xx; 如果sizeof(xx)的值为3, 则: union char a1; int a2; int a3; yy; 则sizeof(yy)函数的返回值应为: A) 2 B) 4 C) 5 D)定义有错19、对于enum RAIN, CLOUD, CLEAR weather;做如下操作: weather=1; weather=CLOUD;
11、下列哪个说法是对的。 A) 是错的 B) 是错的 C) 与是一样的 D)以上都错20、设 int a1=7, a2=1, xx; 进行如下操作xx = ( a1 1 )&( a22 )后 xx 的值为: A) 0 B) 1 C) 10 D) 以上都错7: 0000 0000 0000 011171: 0000 0000 0000 111012: 0000 0000 0000 0100(13) if ( i8) ? 14:21) = 14); 后变量i,j的值应为: A) i=0 j=1 B) i=1 j=1 C) i=0 j=2 D) i=1 j=2i = (3/2 + 7/2) = 5) =
12、 (1+3) = 5) = (4 = 5) = 0;j = 1 + (21 = 14) = 1 + 0 = 124、如果char cc=12345,做sizeof(cc)后的返回值应为A) 2 B) 5 C) 6 D) 1sizeof()返回参数对象的字节数: 这里的参数是字符数组cc,有6个元素.25、如果 int i=16, j=23 ; 执行 printf(%x-%o,i, j)后输出为: A) 10-23 B) 10-27 C) 16-23 D) 16-2726、执行下列程序: #define MA(x, y) (x)*(y) int i = 2; i = 3/MA(i, i+1)+5
13、; printf(“%dn”, i); 其输出应为: A) 5 B) 8 C) 0 D) 以上都错3/MA(i,i+1)+5 3/(i)*(i+1)+5 3/2*3+5 827、有一函数: int f(int a) auto int b = 0; static int c = 3; b = b+1; c = c+1; return(a+b+c); 如果有int i, j; 则执行两次调用:i=f(2); j=f(2) 后, i, j值为: A) i = 7, j = 7 B) i = 7, j = 8 C) i = 8, j = 7 D) i = 8, j = 8 注意静态局部变量static
14、 int c;的含义第一次调用f(2): 开始时: b = 0, c = 3 执行: b = 0 + 1 = 1, c = 3 + 1 = 4; 返回: a+b+c=2+1+4=7; 调用结束后: 静态局部变量c=4保持不变;第二次调用f(2): 开始时: b = 0, c = 4 执行: b = 0 + 1 = 1, c = 4 + 1 = 5; 返回: a+b+c=2+1+5=8; 调用结束后: 静态局部变量c=5保持不变;28、有一函数: int f(char *s) int k = 0; while (*s) k = k*10+*s+-0; return(k); 调用f(“1234”)
15、的返回结果是: A) “1234” B) 1234 C) “4321” D) 4321while循环等价于: while (*s) k = k * 10 + (*s+) 0;该函数的作用:将数字字符串转换成相应的整数. 29、static int a = 1,2,3, *p, *q; p = a+1; q = p+; 执行该程序段后, p和q所指向的单元的内容分别为: A) (*p) = 1, (*q) = 2 B) (*p) = 2, (*q) = 3 C) (*p) = 3, (*q) = 2 D) 以上都错 1 a0p 2 a1 3 a2a30、static struct int x,
16、y3; a3 = 1,2,3,4,5,6,7,8,9,10,11,12, *p; p = a; 则*(int *)(p+1)+2) = ?A) 3 B) 7 C) 10 D) 以上都错p 1a0 2 3 4p+1 5a1 6 7 8 9a2 10 11 12 二、填空题1、用for循环打印 1 4 7 10 13 16 19 22 25 , 其语句应为:for (i=1; i0)? x*f(x-1):3); i=f(f(1);调用f(1):(10) 成立,执行1*f(0)=f(0), 调用f(0) = 3所以,f(1)=3;调用f(3): f(3) = 3 * f(2) f(2) = 2 *
17、f(1) = 2 * 3 = 6 所以 f(3) = 3 * 6 = 186、执行完下列语句段后, s和f值分别为: _”%s%lf”, 12.4_char s20;double f;sscanf(“%s%lf 12.4%s%f12.5”, “%s %lf”, s, &f);函数sscanf()的一般形式: sscanf(char *buffer, char *format, var1, var2, var3, )它的含义:从缓冲区buffer中按照格式字符串format读入变量var1,var2,var3,的值。7、对于char c; 若已知其值为小写字母, 将其转换为相应大写字母的表达式为
18、 _c a + A_8、将p说明为字符数组指针,数组大小为10,可写为:_char (*p)10;_9、用typedef定义类型CP,以表示一个指向含有10个字符型元素的指针数组类型。 typedef char *CP10;四个步骤:(1) char *ptr10;(2) char *CP10;(3) typedef char *CP10;(4) CP *ptr10;10、如下函数void f(char *s, char *t) int i;i=0;while (si=ti) i+; 等价于:void f(char *s, char *t)while (_*s+_ = *t+);11、int
19、i=0, s=0;while (in) s+=i+;等价于int i, s;for(_i=0,s=0; i next)s += _p-inf_;13、下列程序判断字符串s是否对称,对称则返回1,否则返回0; 如f(“abcba”)返回1, f(“abab”)返回0;int f(_char s_) a b c b a 0int i=0,j=0;while(sj) j+;for ( j-; i=j_;14、下面是用二分法从数组vn中查找数x的函数,返回值为x所在下标(若找到)或-1(没找到):binsearch(int x, int v, int n)int low, high, mid;low=
20、0; high=n-1;while (low=high) mid = _ (low+high)/2_;if (xvmid) low = mid +1;else return _ mid_;return -1;15、下面程序验证哥德巴赫猜想, 即寻找2到1000间满足“偶数=素数1+素数2”(如10=3+7)的所有偶数。素数指只能被1和自身整除的正整数,如1,2,3,17等。#include #define MAX 500int prime(int n) /* 判断n是否为素数 */ int i;for (i=2; i=n-1; i+)if (!(n%i) break;return _ i=n_
21、;main() int i, j;for (i=1 ; i=500; i+)for (j=1; j2*i; j+=2)if (_prime(j) & prime(2*i-j)_) printf(“%d = %d +%dn”, 2*i, j, 2*i-j); /*若2*i为两个素数之和 */break;16、对于整型变量i,j执行scanf(%d%*d%d,&i, &j);当输入2 3 4 5 6后 i=_ 2_ j= _4_17、对于 int *p, *q, i=5, j=6;执行: p = &i; q = p; p = &j;后 (*p)=_ 6_ , (*q)= _5_18、f( int
22、m ) int i, j; for( i=0; i=0; j-) printf(“%1d%c,i+j, j?*:#); 如果调用f(3)将输出_2*1*0#3*2*1#4*3*2#_19、void f( int *a, int b ) static int k=0; *a += +k; b +=2; 若执行 i=2; j=4; f( &i, j ); f( &j, i ) 后 i= _3_, j= _6_ i 2 3 j 4 i 3 j 4 6 k 0 1 k 1 2 a b 4 6 a b 3 5 20、用for循环打印 0 1 2 0 1 2 0 1 2; for( i=1; i=9; i
23、+ ) printf(%2d, _(i-1)%3_);21、定义一个返回整型的函数指针p,应写为 _int (*p)();_ 22、定义字符指针数组arr, 数组大小为20,应写为 _char *arr20;_23、程序 void f( char cc ) char ch; int i=0,j=0; while ( cci!=NULL ) i+; i -; for( ;ji; i-,j+ ) ch = ccj; ccj = cci; cci = ch;等价于程序 void f( char *cc ) char *p1, *p2, ch; p1=p2=cc; while(_*p2_) p2+;
24、p2 - -; while( p1p2 ) ch = *p2; _*p2_ = *p1; _*p1_ = ch; _p1+_; p2 - -; 24、程序: int f( int n ) if(n=2_) t = _t0+t1_; t0 = t1; t1 = t; n - -; return _t_; 25、下列函数strcmp(s1, s2)是字符串比较, 根据s1,s2大小分别返回负数(s1s2). 请将缺少的部分补上。 strcmp(_char *s1, char *s2_) for(; s1!=_ 0_; +s1, +s2) if (*s1!= *s2) break; return (
25、_*s1-*s2_); 26、下列函数f(A, n, x)将正整数x插入已从小到大排序好的数组A中. 数组A当前分量个数为n. 例如, 当A的前5个分量为(2,3,9,12,15), n=5时, 调用f(A,n,10)后, n变为6, A的前6个量为:(2,3,9,10,12,15)。 A0 A1 A2 A3 A4A5 void f(_int A, int n, int x_) 2 3 9 12 15 x int t, i; i=n; An+1=_ x_; i while (i=0) & (_AiAi+1_) t=Ai; Ai=Ai+1; Ai+1=t; i - -; n+; 27、本程序从一
26、个文件中from.txt读出内容,除去其中的数字后写入另一文件to.txt。请将程序中所缺的部分补上。 #include int main() FILE *fr, *to; int cc; if (_(fr=fopen(“fr.txt”, “r”) = NULL_) printf( Can not open file- form.txt ); return 1; if (_(to=fopen(“to.txt”, “w”) = NULL _) printf( Can not open file- to.txt ); return 1; while ( ( cc = getc( fr ) ) !=
27、 EOF ) if ( cc9 ) _putc(cc, to)_; _fclose(fr), fclose(to)_; 三、程序阅读理解,并回答相应问题1、#include int a34=1,2,3,4,5,6,7,8,9,10,11,12;main()int s, i;for(s=0, i=0; i3; i+)s+= *(*a+i);printf(“%d ”, s); for(s=0, i=0; i3; i+)s+= *(a+i);printf(“%d ”, s); 问题: 上述程序运行后, 将输出_6 15_ a 0 a1 a2 a3 a0 1 2 3 4 a1 5 6 7 8 a2 9 10 11 12