收藏 分销(赏)

《C语言》复习题160题(08级).doc

上传人:二*** 文档编号:4509732 上传时间:2024-09-26 格式:DOC 页数:26 大小:240KB 下载积分:5 金币
下载 相关 举报
《C语言》复习题160题(08级).doc_第1页
第1页 / 共26页
本文档共26页,全文阅读请下载到手机保存,查看更方便
资源描述
注: 颜色字母为答案, 请大家把颜色先去掉, 做完再核对答案! (2010年) =============================================================================== 一、单项选择题 ( 共200题, 1~80 为基本概念题, 81~160题为程序阅读题) l 基本概念题 第1、2章 概述、数据类型、运算符与表达式 1. 计算机能直接执行的程序是: A) 源程序 B) 目标程序 C) 汇编程序 D) 可执行程序 2. 下列叙述中错误的是: A) 计算机不能直接执行用C语言编写的源程序 B) 程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件 C) 后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D) 后缀为.obj和.exe的二进制文件都可以直接运行 3. 若变量均已正确定义并赋值,以下合法的C语言赋值语句是: A) x = y = = 5; B) x = n % 2.5; C) x + n = i; D) x = 5 = 4 + 1; 4. 若以下选项中的变量已正确定义,则正确的赋值语句是: A) x1 = 26.8 %3 B) 1+2 = x2 C) x3 = 0x12 D) x4 = 1+2 = 3; 5. 若已定义x和y为double类型,则表达式:x = 1,y = x + 3/2的值是: A) 2.0 B) 2 C) 2.5 D) 1 6. 已知字符 ’A’ 的ASCⅡ代码值是65,字符变量c1的值是 ’A’, c2的值是 ’D’, 执行语句print f ( " %d, %d ", c1, c2-2 );后,输出结果是: A) A,B B) A,68 C) 65,66 D) 65,68 7. main ( ) { char a1 = ’M’, a2 = ’m’; printf ( " %c \n ", (a1, a2) ); } 根据以上程序, 以下叙述中正确的是: A) 程序输出大写字母M B) 程序输出小写字母m C) 格式说明符不足,编译出错 D) 程序运行时产生出错信息 8. 已有定义:int x = 3, y = 4, z = 5;,则表达式 ! ( x + y ) + z -1 && y + z / 2的值是: A) 6 B) 0 C) 2 D) 1 9. 设x和y均为int 型变量,则以下语句:x += y; y = x-y; x -= y; 的功能是: A) 交换x和y中的值 B) 把x和y按从小到大排列 C) 无确定结果 D) 把x 和y按从大到小排列 10. 以下选项中非法的表达式是 A) 0 <= x <100 B) i = j = = 0 C) (char) ( 65+3 ) D) x+1 = x+1 11. 若x和y代表整型数,以下表达式中不能正确表示数学关系 | x - y | < 10的是: A) abs (x-y )<10 B) x-y > -10 && x-y<10 C) (x-y) < -10 || !(y-x)>10 D) (x-y) * (x-y)<100 12. 若执行以下程序段: int a = 1, b = 2, m = 2, n = 2; (m = a > b) && ++n; 则n的值是: A) 1 B) 2 C) 3 D) 4 13. 若有表达式 (w) ? (-x):(++y), 则其中与w等价的表达式是: A) w = = 1 B)w = = 0 C) w!=1 D) w != 0 14. 设已有定义 int a = 5, b = 6, c = 7, d = 8, m = 2,n = 2; 则逻辑表达式 ( m = a>b ) && ( n = c>d ) 运算后,n的值为: A) 0 B) 1 C) 2 D) 3 15. 已有定义:char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是: A) isupper (c) B) ’A’<= c< = ’Z’ C)’A’<= c && c <= ’Z’ D) c <= (‘z’-32) && (‘a’-32) <= c 第3章 语句和控制结构 16. 以下叙述中错误的是 A) C语言是一种结构化程序设计语言 B) 结构化程序有顺序、分支、循环三种基本结构组成 C) 使用三种基本结构构成的程序只能解决简单问题 D) 结构化程序设计提倡模块化的设计方法 17. 有以下程序段 int m = 0, n = 0; char c = 'a'; scanf (" %d %c %d ", &m,&c,&n); printf (" %d, %c, %d \n ", m, c, n); 若从键盘上输入:10A10<回车>,则输出结果是: A) 10, A, 10 B) 10, a, 10 C) 10, a, 0 D) 10, A, 0 18. 若有说明语句:int a, b, c, *d = &c;,则能正确从键盘读入三个整数分别赋给a、b、c的语句是: A) scanf ( "%d %d %d", a, b, *d ); B) scanf ( "%d %d %d", &a, &b, &d ); C) scanf ("%d %d %d", a, b, d ); D) scanf ("%d %d %d",&a, &b, d ) 19. 若在定义语句:int a, b, c,*p = &c; 之后,接着执行以下选项中的语句,则能正确执行的语句是: A) scanf ("%d", a,b,c); B)scanf ("%d%d%d", a,b,c); C) scanf ("%d", p); D) scanf ("%d", &p); 20. 有定义语句:int x, y; ,若要通过scanf ( "%d,%d", &x, &y ); 语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是: A) 11 12<回车> B) 11,12<回车> C) 11, 12<回车> D) 11,<回车>12<回车> 21. 若变量已正确定义为int 型,要通过语句scanf (”%d, %d, %d”, &a, &b, &c ); 给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是:(□代表一个空格符) A) □□□1, 2, 3<回车> B) 1□2□3<回车> C) 1,□□□2, □□□3<回车> D) 1, 2, 3<回车> 22. 有以下程序段 int j; float y; char name[50]; scanf ( "%2d %f %s", &j, &y, name); 当执行上述程序段,从键盘上输入55566 7777abc后,y的值为: A) 55566.0 B) 566.0 C) 7777.0 D) 566777.0 23. 当用户要求输入的字符串中含有空格时,应使用的输入函数是: A) scanf ( ) B) getchar ( ) C) gets ( ) D) getc( ) 24. C语言中用于结构化程序设计的三种基本结构是: A) 顺序、选择、循环 B) if、switch、break C) for、while、do-while D) if、for、continue 25. 要使以下程序中t的输出结果为4,则输入a和b应满足的条件是: main () { int s = 1, t = 1, a, b; scanf (" %d %d ", &a, &b ); if ( a > 0 ) s += 1; if ( a>b ) t = s + t; else if ( a= =b ) t = 5; else t = 2 * s; printf ( "%d \n ", t ); } A) a>0并且a<b B) a<0并且a<b C) a>0并且a>b D) a<0并且a>b 26. 有以下程序段 int n, t = 1, s = 0; scanf (" %d ", &n); do { s = s + t; t = t-2; } while (t != n ); 为使此程序段不陷入死循环,从键盘输入的数据应该是: A) 任意正奇数 B) 任意负偶数 C) 任意正偶数 D) 任意负奇数 27. 在循环语句的循环体中,continue语句的作用是: A) 立即终止整个循环 B) 继续执行continue语句之后的循环体各语句 C) 结束本次循环 D) 结束本次循环并跳出循环 28. 若变量已正确定义,有以下程序段,其输出结果是: i = 0; do printf ( " %d, ", i ) ; while ( i++ ); printf ( " %d \n ", i ); A) 0,0 B) 0,1 C) 1,1 D) 程序进入无限循环 29. 若定义int i;, 则循环语句:for ( i = 2;i = = 0;) printf ( " %d ", i--);执行次数是: A) 无限次 B) 2次 C) 1次 D) 0次 30. 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值 ( c大于0) for (s = a, b = 1; b<= c; b ++) s = s + 1; 则与上述程序段功能等价的赋值语句是: A) s = a + b; B) s = a + c; C) s = s + c; D) s = b + c; 第4章 函数与程序结构 31. 对于一个正常运行的C程序,以下叙述中正确的是: A) 程序的执行总是从main函数开始,在main函数结束 B) 程序的执行总是从程序的第一个函数开始,在main函数结束 C) 程序的执行总是从main函数开始,在程序的最后一个函数中结束 D) 程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束 32. 以下正确的叙述是: A) 在C语言中,main函数必须位于文件的开头 B) C语言的每行中只能写一条语句 C) C语言本身没有输入、输出语句 D) main函数可以在任何地方出现 33. C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是: A) void B) int C) float D) double 34. 下面的函数调用语句中func ( f2 (v1,v2), (v3, v4, v5), (v6, max (v7, v8) ) );,函数的实参个数是: A) 3 B) 4 C) 5 D) 8 35. 以下叙述中错误的是 A) 用户自定义的函数中可以没有return语句 B) 用户自定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 C) 用户自定义的函数中若没有return语句,则应当定义函数为void类型 D) 函数的return语句中可以没有表达式 36. 若程序中定义了以下函数 double myadd (double a,double b) { return (a+b); } 并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下错误的说明是: A) double myadd (double a, b); B) double myadd (double, double ); C) double myadd (double b, double a); D) double myadd (double x, double y); 37. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是: A) 地址传递 B) 双向值传递 C) 单向值传递 D) 传递方式由用户指定 38. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是: A) 函数的实参和其对应的形参共占同一存储单元 B) 形参只是形式上的存在,不占用具体存储单元 C) 同名的实参和形参占同一存储单元 D) 函数的形参和实参分别占用不同的存储单元 39. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是: A) 函数调用可以作为独立的语句存在 B) 函数调用可以作为一个函数的实参 C) 函数调用可以出现在表达式中 D) 函数调用可以作为一个函数的形参 40. 凡在函数内未指定的存储类型变量,其隐含的存储类型为: A) register B) static C) extern D) auto 41. 以下叙述中正确的是: A) 未在定义语句中赋初值的变量初值都是随机值 B) 全局变量的作用域一定比局部变量大 C) static类别变量的生存期贯穿于整个程序的运行期间 D) 函数的形参都属于全局变量 42. 在一个C语言源程序文件中所定义的全局变量,其作用域为: A) 所在文件的全部范围 B) 所在程序的全部范围 C) 所在函数的全部范围 D) 由具体定义位置和extern 说明来决定范围 第6章 数组 43. 若在main ( ) 中有定义 int a [5] ; 则数组a 中所有元素的初值为: A) 不确定 B) 0 C) 1 D) -1 44. 若有以下定义语句:int m[ ] = { 5, 4, 3, 2, 1 },i = 4;, 则下面对m数组元素的引用中错误的是: A) m[ --i ] B) m [ 2*2 ] C) m [m [0] ] D) m [ m[i] ] 45. 若定义a[ ][2] = { 1, 2, 3, 4, 5, 6, 7 };则a数组中行的大小是: A) 2 B) 3 C) 4 D) 无确定值 46. 若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是 A) a[0][4] B) a[1][3] C) a[0][3] D) a[1][4] 47. 以下能正确定义数组并正确赋初值的语句是: A) int N = 5, b[N][N]; B) int a[1][2] = {{1}, {3}}; C) int c[2][ ] = {{1, 2}, {3, 4}} D) int d[3][2] = {{1, 2}, {3, 4}}; 48. 以下能正确定义二维数组的是: A) int a[ ][3]; B) int a[ ][3]=2{2*3}; C) int a[ ][3]={1}; D) int a[2][3]={{1},{2},{3,4}} 49. 若定义a [ ][3] = { 1, 2, 3, 4, 5, 6, 7,8 };,则数组a中行的大小是: A) 2 B) 3 C) 4 D) 无确定值 50. 在以下定义中,正确的说明语句为: A) int a[ 'a' ] B) int a[3, 4] C) int a[ ][ ] D) int *a[10]; 51. 用数组名作为函数参数时,它传递给函数是: A) 数组首地址 B) 整个数组 C) 数组的第一个值 D) 数组的全部地址 52. 以下能正确定义一维数组的选项是: A) int a[3]={0,1,2,3}; B) char a[ ]={0,1,2,3,}; C) char a={'A','B','C'}; D) int a[3]="012"; 53. 若有定义语句:char s[10] = "1234567\0\0" ; ,则strlen (s) 的值是: A) 7 B) 8 C) 9 D) 10 第7章 指针 54. 设有定义:int n1=0, n2, *p = &n2, *q = &n1;,以下赋值语句中与n2 = n1;语句等价的是: A) *p = *q; B) p = q; C) *p = &n1; D) p = *q; 55. 若有定义:int x = 0, *p = &x;,则语句printf ( " %d \n ", *p ); 的输出结果是: A) 随机值 B) 0 C) x的地址 D) p的地址 56. 设有定义:char p[ ]={’1’,’2’,’3’}, *q = p; ,不能计算出一个char型数据所占字节数的表达式是: A) sizeof ( p ) B) sizeof ( char ) C) sizeof ( *q ) D) sizeof ( p[0] ) 57. 有如下说明 int a [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = a; 则数值为9的表达式是: A) *p+9 B) *(p+8) C) *p += 9 D) p+8 58. 有以下定义和语句: int a[3][2]={1,2,3,4,5,6,}, *p[3]; p[0] = a[1]; 则*p[0]+1所代表的数组元素是: A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2] 59. 若有以下说明和语句,int c[4][5], (*p)[5]; p = c; 能正确引用c数组元素的是: A) p+1 B) *(p+3) C) *(p+1)+3 D) *( p[0]+2) 60. 若有定义语句:int a[2][3], *p[3]; ,则以下语句中正确的是: A) p=a; B) p[0]=a; C) p[0]=&a[1][2]; D) p[1]=&a; 61. 若有定义int a[3][5],i,j;(且0<i<3,0<j<5), 则地址 &a[i][j] 对应元素的不正确表示是: A) *(a+i*5+j) B) *(a[i]+j) C) *(a+i)+j D) *(*(a+i)+j); 62. 以下各语句或语句组中,正确的操作是: A) char s[5]="abcde"; B) char *s; gets(s); C) char s[5]; gets (&s); D) char *s ="abcde"; 63. 把字符串 "OK! " 赋值给变量不正确的语句或语句组是: A) char a [] = "OK! "; B) char a [8] = { 'O', 'K', '! ', '\0' }; C) char *p ; p = "OK! " ; D) char p; strcpy ( p , "OK! " ) ; 64. 定义compare (char*s1,char*s2) 函数,以实现比较两个字符串大小的功能。 以下程序运行结果为 -32,选择正确答案填空。 main ( ) { printf ( ”%d \n”, compare ( ”abCd”, ”abc”) ); } compare (char*s1,char*s2) { while (*s1 && *s2 && ) { s1++; s2++;} return *s1-*s2; } A) *s1 != *s2 B) *s1 = = *s2 C) *s1 = *s2 D) s1 != s2 65. 有以下函数,关于aaa函数的功能叙述正确的是: int aaa (char *s) { char *t = s; while ( *t++ ); t--; return (t-s); } A) 求串s的长度 B) 比较两串的大小 C) 将串s复制到串t D) 求串s所占字节数 66. 设有定义:int n = 0, *p = &n, **q = &p; ,则以下选项中,正确的赋值语句是: A) p = 1; B) *q = 2; C) q = p; D) *p = 5; 67. 若有定义 char * language[ ] = {"FORTRAN", "BASIC" , "PASCAL", "C"}; 则language[2]的值是: A) 一个字符 B) 一个地址 C) 一个字符串 D) 不定 68. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是: A) p =2* (int*) malloc (sizeof (int) ); B) p = (int*) malloc (2 * sizeof (int) ); C) p = (int*) malloc (2*2 ); D) p = (int*) calloc (2, sizeof (int) ); 第8章 结构及其地数据类型 69. 若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是: A) typedef STP char *s; B) typedef *char STP; C) typedef STP *char; D) typedef char* STP 70. 若有定义typedef char STR [5][20];STR s;,则s是: A) 字符指针数组变量 B) 字符数组变量 C) 字符变量 D) 字符指针变量 71. 有以上程序段:typedef struct NODE { int num; struct NODE *next;} OLD;以下正确的叙述是: A) 以上的说明形式非法 B) NODE是一个结构体类型 C) OLD是一个结构体类型 D) OLD是一个结构体变量 72. 设有以下说明语句 typedef struct { int n; char ch[8]; } PER;,则下面叙述中正确的是: A) PER 是结构体变量名 B) PER是结构体类型名 C) typedef struct 是结构体类型 D) struct 是结构体类型名 73. 根据下面的定义,能打印出字母M的语句是: struct person { char name[9]; int age;} class[10] = {"John",17, "Paul",19, "Mary",18, "Adam",16}; A) printf ("%c\n", class[3].name ); B) printf ("%c\n", class[3].name[1] ); C) printf ("%c\n", class[2].name[1] ); D) printf ("%c\n", class[2].name[0] ); 74. 设有说明如下, 则能正确定义结构体数组并赋初值的语句是: typedef struct { int n; char c; double x; } STD ; A) struct STD tt [2] = {{1,'A', 6}, {2,'B', 7}}; B) struct tt [2] = {{1,'A'},{2,'B'}}; C) STD tt [2] = { {1, 'A', 6}, {2, 'B', 7} }; D) STD tt [2] = {1,"A", 6, 2,"", 7}; 75. 若定义:struct ss { char name[10]; int age; char sex; } std [3], * p = std; 下面输入语句中错误的是: A) scanf( "%d",& (*p).age ); B) scanf ( "%s",&std.name ); C) scanf ("%c",&std [0].sex ); D) scanf ( "%c",&(p->sex) ); 76. 有以下说明和定义语句 struct student { int age; char num[8];}; struct student stu[3] = {{20,"200401"}, {21,"200402"}, {10\9,"200403"}}, *p=stu; 以下选项中引用结构体变量成员的表达式错误的是: A) (p++)->num B) p->num C) (*p).num D) stu[3].age p q c b a head p q c b a head data next 77. 假定已建立以下链表结构,且指针p和q已指向如图所示的结点: 则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是: A) (*p).next = (*q).next; free (p); B) p = q->next; free (q); C) p = q; free (q); D) p->next = q->next; free (q); 78. 若定义以下链接表结构,其指针p,q定义如下: struct node { int data; struct node *next; } p, q; p, q指向图中所示节点,则不能将q所指的节点插入到链表末尾组成单向链表的一组语句是: 20 NULL p 10 q 30 NULL A) q->next=NULL; p=p->next; p->next=q; B) p=p->next;q->next=p->next; p->next=q; C) p=p->next; q->next=p; p->next=q; D) p=(*p).next; (*q).next=(*p).next; (*p).next=q; 79. 设有定义 union data { int d1; float d2; } demo;,则下面叙述中错误的是: A) 变量demo与成员d2所占的内存字节数相同 B) 变量demo中各成员的地址相同 C) 若给demo.d1赋99后, demo.d2中的值是99.0 D) 变量demo和各成员的地址相同 80. 若有说明和定义: union dt { int a; char b; double c; } data;,下面叙述中错误的是: A) data的每个成员起始地址都相同 B) 变量data所占的内存字节数与成员c所占字节数相等 C) data可以作为函数的实参 D) 程序段:data.a=5; printf("%f\n",data.c); 输出结果为5.0 l 阅读程序, 选择正确的输出的结果。 第2章 数据类型、运算符与表达式 81. main ( ) { char c = 'z'; printf ( "%c", c - 25 ); } A) a B) Z C) z - 25 D) y 82. main ( ) { char a = 'A' ; \* 'A' 的ASCII为 65 *\ printf (" %d , %c \n " , a , a + 1) ; } A) A, A+1 B) 65, 66 C) 65, A D) 65, B 83. # include <stdio.h> main ( ) { int c =68; char d = ’D’ ; \* 'A' 的ASCII为 65 *\ putchar ( c ) ; putchar ( d ) ; putchar ('D' ); putchar ( 68 ) ; } A) dddd B) DDDD C) ddDD D) cdDd 84. main ( ) { int a, b, c = 246; a = c / 100 % 9 ; b = (-1) && (-1); printf ( "%d, %d \n ", a, b ) ; } A) 2, 1 B) 3, 2 C) 246, 1 D) 2, -1 85. main ( ) { int a, b, d = 25; a= d / 10 % 9; b= a&& (-1); printf ( " %d, %d \n " , a, b ); } A) 6,1 B) 2,1 C) 6,0 D) 2,0 86. main ( ) { int a = 4 , b = 5 , c = 0 , d; d = !a && !b || !c; printf (" %d \n" , d); } A) 1 B) 0 C) 非0的数 D) -1 87. main ( ) { int a = 1, b = 2, m = 0 ,n = 0, k; k = ( n = b > a ) || ( m = a < b ); printf ( " %d, %d \n ", k, m); } A) 0, 0 B) 0, 1 C) 1, 0 D) 1, 1 第3章 语句和控制结构 88. main ( ) { int m = 5; if ( m++ > 5 ) printf ( " %d \n ", m); else printf ( " %d \n ", m++ ); } A) 7 B) 6 C) 5 D)4 89. main ( ) { int x = 1, y = 2, z = 3; if ( x > y ) if ( y > z ) printf ( " %d ", ++z ); else printf (〞%d〞,++y); printf ( " %d \n ", x++ ); } A) 331 B) 41 C) 2 D) 1 90. main ( ) { int a = 5, b = 4, c = 3, d = 2; if ( a>b>c ) printf ( " %d \n ", d ); else if ( (c-1 >= d ) ==1 ) printf ( " %d \n ", d+1); else printf ( " %d \n ", d+2 ); } A) 2 B) 3 C) 4 D) 编译时有错,无结果 91. main ( ) { int x, i; for ( i =1; i <= 50; i ++ ) { x = i; if ( ++ x % 2 == 0 ) if ( x % 3 == 0 ) if ( x % 7 == 0 ) printf ( " %d, ", i ); } } A) 28 B) 27 C) 42 D) 41 92. main ( ) { int x = 1 ; for ( ; x < 50 ; )
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服