SISO 2011级 C语言复习指导 灰色部分不需要复习 1
2
3
语法考试要求及考题解析 (2007秋~2010春) 1. C语言基本概念 ⑴ 源程序格式、风格和结构。main函数特性。C程序保存。 注释位置。 【考题解析】 [填空题]在一个C语言源程序中,必不可少的是 。 答案: main函数定义 [单选题].以下叙述中正确的是 。 A.在编译时可以发现注释中的拼写错误 B.C语言程序的每一行只能写一条语句 C.main( ){ }必须位于程序的开始 D.C语言程序可以由一个或多个函数组成 答案:D 4
[单选题] 在一个源程序中main函数的位置 。 A.必须在最开始 B.必须在最后 C.必须在预处理命令的后面 D.可以在其他函数之前或之后 [单选题] 下列叙述中正确的是 。 A. main函数必须出现在其他函数之前 B. main函数中至少必须有一条语句 C. C程序总是从main函数的第一条语句开始执行 D. C程序总是在执行完main函数的最后一条语句后结束 答案: C 5
C. 用户定义的函数可以被一个或多个函数调用任意多次 D. 在一个函数体内可以定义另外一个函数 答案:C [单选题] 以下叙述中正确的是 。 A. C语言系统以函数为单位编译源程序 B. main函数必须放在程序开始 C. 用户定义的函数可以被一个或多个函数调用任意多次 D. 在一个函数体内可以定义另外一个函数 答案:C [全国选择题] 以下叙述中正确的是()。 A) C语言程序将从源程序中第一个函数开始执行 B) 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C) C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D) main可作为用户标识符,用以命名任意一个函数作为主函数 6
A) C程序中的注释只能出现在程序的开始位置和语句的后面。 B) C程序书写格式严格,要求一行内只能写一个语句 [全国选择题] 以下叙述中正确的是 ( ) 。 A) C程序中的注释只能出现在程序的开始位置和语句的后面。 B) C程序书写格式严格,要求一行内只能写一个语句 C) C程序书写格式自由,一个语句可以写在多行上 D) 用C语言编写的程序只能放在一个程序文件中 答案:C [全国选择题] 以下叙述中正确的是( )。 A)C程序的基本组成单位是语句 B)C程序中的每一行只能写一条语句 C)简单C语句必须以分号结束 D)C语句必须在一行内写完 7
① 系统预定义类型标识符、类型修饰符的使用 ② 基本类型常量的表示及使用 ③ 字符串常量形式 ④ 关键字。标识符。 ⑤ 符号常量的定义与使用 ⑵ 基本类型数据的表示及使用 ① 系统预定义类型标识符、类型修饰符的使用 ② 基本类型常量的表示及使用 ③ 字符串常量形式 ④ 关键字。标识符。 ⑤ 符号常量的定义与使用 ⑥ 基本类型变量的声明、初始化, 直接引用变量 【考题解析】 [单选题] 在C语言源程序中,不带任何修饰符的浮点数直接量(例如:3.14)都是按 类型数据存储的。 答案: double [单选题]已知sizeof(int)的值为2,为将10!的值存储到变量f中(10!=3628800),变量f的类型应声明为 。 A.long int B.int C.short int D.unsigned int 答案:A 8
[单选题] 以下常量表示中正确的是 (22) 。 A. \xff B.5L C. aEb D. 3.14U 答案:B [单选题] 以下常量表示中正确的是 (22) 。 A. \xff B.5L C. aEb D. 3.14U 答案:B [单选题] 以下语句中有语法错误的是 。 printf("%d",0e); B. printf("%f",0e2); C. printf("%d",0x2); D. printf("%s","0x2"); 答案:A 9
[单选题]以下选项中不能用作变量名的是 。 A._float B.switch C.sum D._123 答案: B [单选题]以下选项中不能用作变量名的是 。 A._float B.switch C.sum D._123 答案: B [填空题]在C语言系统中,如果一个变量能正确存储的数据范围为整数-3276832767,则该变量在内存中占 (3) 个字节。 答案: 2 [单选题]以下选项中,不能用作标识符的是 。 print B. FOR C. &a D. _00 答案:C [单选题] 以下选项中, 是C语言关键字。 A. printf B.include C.fun D.default 答案:D [学校单选题] 执行语句“printf(”bye\bye101\101“);”时输出到屏幕的结果为 (22) 。 答案: byye101A 10
[学校单选题] 表达式“1e-8/2+1.0f”值的数据类型是 (3) 。 int B. long C. float D. double [学校单选题]以下局部变量声明中正确的是 (2) 。 int char=2; B. void a=0; C. int a=b=0; D. int a, b=a=0; 11
【考题解析】 ⑶ 运算符和表达式的表示及使用 ① 赋值表达式,赋值运算符的左值要求 ② 算术表达式。++、--运算符左值要求。溢出。 ⑶ 运算符和表达式的表示及使用 ① 赋值表达式,赋值运算符的左值要求 ② 算术表达式。++、--运算符左值要求。溢出。 ③ 关系表达式与逻辑表达式,逻辑表达式优化处理 ④ 逗号表达式 ⑤ 条件表达式 ⑥ 表达式运算中操作数类型自动转换与强制转换 【考题解析】 [单选题] 若有声明“double x=3,c,*a=&x,*b=&c;”,则下列语句中错误的是 。 A.a=b=0; B.a=&c,b=a; C.&a=&b; D.*b=*a; 答案:C 12
[单选题] 若有声明“char ss[8]=”Red“;”,则sizeof(ss)的值是 。 A.8 B.4 C.3 D.1 答案: A [单选题] 设有定义和声明如下: #define d 2 int x=5; float y=3.83; char c='d'; 以下表达式中有语法错误的是 。 x++ B. y++ C. c++ D. d++ 答案: D [单选题] 数学式 在C程序中正确的表示形式为 。 A.sqrt(a)/2*b B.sqrt(a)/2/b C.sqrt(a)/2b D.sqrt a/(2*b) 答案: B 13
A. y=x/(10*(n-1)) B. y=x%(10*(n-1)) [单选题] 已知有声明“long x,y;”且x中整数的十进制表示有n位数字(4<n<10),若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y中,则以下表达式中能正确实现这一功能的是 。 A. y=x/(10*(n-1)) B. y=x%(10*(n-1)) C. y=x%(long)pow(10,n-1) D. y=x%(10(n-1)) 答案:C [填空题] 若有声明“double x=10,y=5;”,则计算xy的库函数调用形式是 。 答案: pow(x,y) 或 pow(10,5) [填空题] 若有声明“int x;”且sizeof(x)的值为2,则当x值为 时“x+1>x”为假。 答案: 32767 14
[单选题] 已知有声明“int a=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为 。 [填空题] 若有声明“float y=3.14619;int x;”,则计算表达式“x=y*100+0.5, y=x/100.0”后y的值是 。 答案: 3.15 [单选题] 已知有声明“int a=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为 。 A. 0 B. 3 C. 3.5 D. 4 答案:A [填空题] 若有声明“int a=5,b=2;”,则表达式“b+=(float)(a+b)/2”运算后b的值为 。 答案:5 [填空题] 已知有声明“char ch=‘g’;”,则表达式ch= ch-‘a’+‘A’的值为字符 的编码。 答案:G ch-’a’ 表示两个字符之间的距离,结果是6,’A’+6就表示字符’A’后面第6个字符,应该为’G’ 15
[单选题] 已有声明“int a=3,b=3,c=2;”,以下选项中值为0的表达式是 。 !a&&!b&&c B. !a||!b||c C. a==b&&b>=c D. a>=b&&b>c 答案: A [单选题] 已知有声明“int a=3,b=4,c=5; ”,以下表达式中值为0的是 。 a&&b B. a<=b C. a||b&&c D. !(!c||1) 答案:D [填空题] C语言中有!、&& 、|| 三个逻辑运算符,其中优先级高于算术运算符的是 。 答案: ! [单选题] 若有声明“int x=2,y=1,z=0;”,则下列关系表达式中有语法错误的是 。 A. x>y=2 B.z>y>x C. x>y==1 D.x==(x=0,y=1,z=2) 答案:A 16
答案:sqrt(fabs(x))!=4*a/(b*c) 或 sqrt(fabs(x))!=4*a/b/c [单选题] 已知有声明“int a=12,b=15,c;”,则执行表达式“c=(a||(b-=a))”后,变量b和c的值分别为 。 A.3.1 B.15,12 C.15,1 D.3,12 答案: C 短路 [填空题] 数学式 所对应的C语言表达式为pow(x, )。 答案:1.0/3 [填空题] 若有声明“int a=15,b=20,c=25,e;”,则执行语句“e=a>b? --c :++c;”后变量e的值是 。 答案: 26 17
[单选题] 以下选项中,不能表示函数 功能的表达式是 。 A. s=(x>0)?1:(x<0)?-1:0 [单选题] 以下选项中,不能表示函数 功能的表达式是 。 A. s=(x>0)?1:(x<0)?-1:0 B. s=x<0?-1:(x>0?1:0) C. s=x<=0?-1:(x==0?0:1) D. s=x>0?1:x==0?0:-1 答案: C [单选题] 若有程序段“char c=256; int a=c;”,则执行该程序段后a的值是 。 256 B. 65536 C. 0 D. -1 18
*[填空题].若有声明“int r=2;”,则执行语句“printf(”%d“,sizeof(2*3.14*r));”时输出 。 答案:8 [填空题] 设有声明“int a=3, b=4; float x=4.5, y=3.5;”,则表达式“(float)(a+b)/2+(int)x%(int)y”的值是 。 答案: 4.5 3.5+4%3=4.5 *[填空题].若有声明“int r=2;”,则执行语句“printf(”%d“,sizeof(2*3.14*r));”时输出 。 答案:8 [单选题] 已知有声明“int n; float x,y;”,则执行语句“y=n=x=3.89;”后,y的值为 。 3 B. 3.0 C. 3.89 D. 4.0 答案:B x=3.89,n=3,y=3.0 [单选题] 已知有声明“int a=3,b=4;”,下列表达式中合法的是 。 A. a+b=7 B. a=|b| C. a=b=0 D. (a++)++ 答案:C [学校单选题] 已知有声明“int a=1,b=2;”,执行语句 “while(--a > 0&& --b>0)a=b;”后变量a、b的值是 。 0,2 B. 0,1 C. 1,1 D. 2,2 答案:A 短路运算,--b不执行 19
① 表达式语句,空语句,复合语句,函数调用语句 2. 语句 ⑴ 实现顺序结构的语句 ① 表达式语句,空语句,复合语句,函数调用语句 ② 标准输入输出库函数printf(), scanf(),getchar() , putchar() ,gets(),puts() 【考题解析】 [单选题] 已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是 。 printf("%d",32768); B. printf("%ld",32768); C. printf("%f",32768); D. printf("%c",32768); 答案:B 20
[学校单选题] 已知某编译系统中sizeof(int)的值为2,在该编译系统中执行以下 (10) 语句时输出结果不是39999。 A. printf("%u",39999); B. printf("%d",39999); C. printf("%ld",39999); D. printf("%lu",39999); 答案: B [单选题] 若有声明“float f=123.45678;”,则执行语句“printf( ”%.3f“,f );”后,输出结果是 。 A. 1.23e+02 B. 123.457 C. 123.456780 D. 1.234e+02 21
@[单选题] 已知有声明“char s[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是 。 scanf("%s",s); B. scanf("%s",s[0]); C. s=gets(); D. s=getchar(); 答案:A [填空题] 已知有声明和语句“int a;scanf(”a=%d“,&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入应是 。 答案:a=3 [单选题] 若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是 。 scanf("%ld%ld,&a,&b"); B. scanf("%d%d",a,b); C. scanf("%d%d",&a,&b); D. scanf("%ld%ld",&a,&b); 答案:D 22
⑵ 实现选择结构的语句: if-else,switch 【考题解析】 [单选题] 若在一个C语言源程序中“e1”和“e3”是表达式,“s;”是语句,则下列选项中与语句“for(e1; ;e3)s;”功能等同的语句是 。 A. e1;while(10)s;e3; B. e1;while(10){s;e3;} C. e1;while(10){e3;s;} D. while(10){e1;s;e3;} 答案:B [单选题] 已知有声明“int x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”,则以下程序段中错误的是 。 A. if(x>=0)y=1;else y=-1; B. y=x>=0?1:-1; C. switch() D. switch(x-abs(x)) { case x>=0: y=1; break; { case 0: y=1; break; default: y=-1; default: y=-1; } } 答案:C 23
[学校单选题] 已知有声明“int a=1,b=2,c=0;”,执行语句“if(a>b) c=a;a=b;b=c;”后变量a、b的值是 (21) 。 答案: 2,0 24
[阅读程序] 下列程序运行后的输出结果第一行是 (1) ;第二行是 (2) 。 #include <stdio.h> [阅读程序] 下列程序运行后的输出结果第一行是 (1) ;第二行是 (2) 。 #include <stdio.h> main( ) { int i,a=0,c=2; for(i=0;i<2;i++) switch(++a , a*c) { case 1: printf("1"); case 2: printf("2"); case 3: printf("3\n");break; default: printf("other\n"); } 答案: (1) 23 (2) other 25
[阅读程序] 以下程序运行时输出结果为 (6) #include <stdio.h> void main() [阅读程序] 以下程序运行时输出结果为 (6) #include <stdio.h> void main() { int i,sum=0; for (i=0;i<5;i++) { switch(i) { case 0: case 1: sum++; case 3: sum++; case 4: sum--; break; } printf("%d\n",sum); 答案: 1 26
⑶ 实现循环结构的语句: while,do-while,for,goto 【考题解析】 [单选题] 若有声明“int i,k=1; unsigned j;”,则下列语句执行时会出现无限循环的语句是 。 A.for(j=15;j>0;j-=2) k++; B. for(j=0;j<15;j+=2) k++; C.for(i=0;i<15;i+=2) k++; D.for(i=15;i>0;i-=2) k++; 答案: A [学校单选题] 以下语句中有语法错误的是 。 for(; ;); B. do ; while(1); C. while(); D. p: ; goto p; 答案:C 27
[阅读程序] 以下程序运行时输出结果最后一行是 。 #include<stdio.h> void main() [阅读程序] 以下程序运行时输出结果最后一行是 。 #include<stdio.h> void main() { int a=1,b=1,i; for(i=1;i<=2;i++) { a=a+b; printf("%d / %d , ",b,a); b=a+b; printf("%d / %d \n",a,b); } printf("\n"); 答案: 3/5,5/8 28
#include <stdio.h> main() { int s=1,n=235; do { s*=n%10; n/=10; [阅读程序] 以下程序运行时输出结果是 。 #include <stdio.h> main() { int s=1,n=235; do { s*=n%10; n/=10; }while(n); printf("%d\n",s); } 答案: 30 29
⑷ 跳转语句: break,continue,return 【考题解析】 [全国选择题] 有以下程序 #include <stdio.h> main() { int x=8; for(;x>0;x--) { if(x%3) { printf("%d,", x--);continue;} printf("%d,", --x ); } 程序的运行结果是( )。 A) 7,4,2, B) 8,7,5,2, C) 9,7,6,4, D) 8,5,4,2, 答案:D 30
A.int a[2]; B.int a[ ]={0,1}; C.int a[3]=0; D.int a[3][4]={0}; 答案: C 3. 构造类型数据 ⑴ 基本类型数组(一维,二维) ① 数组声明及初始化 ② 数组存储结构 ③ 使用数组名引用数组元素 【考题解析】 [单选题] 以下声明中错误的是 。 A.int a[2]; B.int a[ ]={0,1}; C.int a[3]=0; D.int a[3][4]={0}; 答案: C [全国单选题] 下列选项中,能正确定义数组的语句是()。 A)int num[0..2008] ; B) int num[]; C)int N=2008; D) #define N 2008 int num[N]; int num[N]; 答案:D 31
[单选题] 设有声明“int p[10]={1,2},i=0;”,以下语句中与“p[i]=p[i+1],i++;”等价的是 。 A. p[i]=p[i++]; B. p[++i]=p[i]; C. p[++i]=p[i+1]; D. i++,p[i-1]=p[i]; 答案:D [全国单选题] 已知有声明“int m[]={5,4,3,2,1},i=0;”,下列对m数组元素的引用中,正确的是 。 m[--i] B)m[2*2] C)m[m[0]] D)m[m[i]] 答案:B 32
[填空题] 若有声明“char s1[10]=″ABCDE″,s2[10]=″A\\0″;”,则语句 “printf(″%d″,strlen(strcpy(s1,s2)));”的输出结果是 。 答案: 3 [全国选择题] 有以下程序 #include<stdio.h> main() {int a[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0; for(i=0;i<5;i++)s=s+a[b[i]]; printf("%d\n",s); } 程序运行后的输出结果是(): A)6 B)10 C)11 D) 15 答案: C 33
A.s="Good"; B.s[20]="Good"; C.strcat(s,"Good"); D.strcpy(s,"Good"); [单选题] 已知有声明“char s[20]=”Hello“;”,在程序运行过程中,若要想使数组s中的内容修改为“Good”,则以下语句中能够实现此功能的是 。 A.s="Good"; B.s[20]="Good"; C.strcat(s,"Good"); D.strcpy(s,"Good"); 答案:D 34
A.*(a+2)+3 B.*(*(a+2)+3) C.*(a[2]+3) D.a[2][3] 答案:A [单选题] 已知有声明“int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};”,若需要引用值为12的数组元素,则下列选项中错误的是 。 A.*(a+2)+3 B.*(*(a+2)+3) C.*(a[2]+3) D.a[2][3] 答案:A 35
[阅读程序] 以下程序运行时输出结果中第一行是 (1) ,第三行是 (2) 。 #include <stdio.h> [阅读程序] 以下程序运行时输出结果中第一行是 (1) ,第三行是 (2) 。 #include <stdio.h> #define N 5 void main() { static char a[N][N]; int i,j,t,start=0,end=N-1; char str[ ]="123",ch; for(t=0;t<=N/2;t++) { ch=str[t]; for(i=j=start;i<end;i++) a[i][j]=ch; for(j=start;j<end;j++) a[i][j]=ch; for(i=end;i>start;i--) a[i][j]=ch; for(j=end;j>start;j--) a[i][j]=ch; if(start==end) a[start][end]=ch; start++,end--; } for(i=0; i<N; i++) { for(j=0;j<N;j++) printf("%c", a[i][j]); printf("\n"); } 生成矩阵: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 答案:(1) 11111 (2) 12321 36
[阅读程序] 以下程序运行时输出结果的第一行是 (1) ,第三行是 (2) 。 #include <stdio.h> [阅读程序] 以下程序运行时输出结果的第一行是 (1) ,第三行是 (2) 。 #include <stdio.h> void main( ) { int i,j,a[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i<j) a[i][j]=1; else a[i][j]=i-j+1; { for(j=0;j<3;j++) printf("%4d",a[i][j]); printf("\n"); } 生成矩阵: 1 1 1 2 1 1 3 2 1 答案: (1) 1 1 1 (2) 3 2 1 37
⑵ 结构类型变量与数组 ① 定义结构类型 ② 结构类型变量、数组声明及初始化 ③ 用变量名引用结构变量(结构数组元素)的全体成员 ⑵ 结构类型变量与数组 ① 定义结构类型 ② 结构类型变量、数组声明及初始化 ③ 用变量名引用结构变量(结构数组元素)的全体成员 ④ 用变量名引用结构变量(结构数组元素)的基本类型成员 【考题解析】 [单选题] 若有结构类型定义 “typedef struct test{ int x,y[2]; }TEST;”,则以下声明中正确的是 (27) 。 A.struct test x; B.struct x; C.test x ; D.struct TEST x; 答案:A 38
[单选题] 以下结构变量stu1的声明形式中,错误的是 。 A.typedef struct stu{char name[10];float score;}STU ; STU stu1; B.#define STU struct stu STU {char name[10];float score; }stu1; C.struct stu{char name[10];float score;}stu1; D.struct stu{char name[10];float score;}STU; STU stu1; 答案:D [学校单选题] 若有定义 “struct c{ double x,y;}c1={1.2,1.3},c2={1.2,1.3},c3; struct d{ double x,y;}d1={1.2,1.3},d2={1.2,1.3},d3;”, 则以下表达式中正确的是 。 c3=0 B. c1==c2 C. c3=c1 D. d3=c1 答案:C 39
[阅读程序] 以下程序运行后的输出结果第一行是 (1) ;第二行是 (2) 。 #include <stdio.h> [阅读程序] 以下程序运行后的输出结果第一行是 (1) ;第二行是 (2) 。 #include <stdio.h> struct num { int x,y ; } st[ ]={{1,10},{2,20},{3,30},{4,40},{-1,-1}},s1[2],s2[2]; main() { int i=0,j=0,k; for(k=0; st[k].x != -1; k++) { if(st[k].x%2) s1[i++]=st[k]; else s2[j++]=st[k]; } printf (" %d \n %d \n",s1[0].y ,s2[0].y ); 答案: (1) 10 (2) 20 40
指向基本类型变量的指针变量声明、初始化与赋值。 ② 引用指针变量指向的基本类型变量(使用运算符*) 【考题解析】 4. 指针类型数据 ⑴ 基本类型变量的指针操作 ① 基本类型变量地址的获取与保存。 指向基本类型变量的指针变量声明、初始化与赋值。 ② 引用指针变量指向的基本类型变量(使用运算符*) 【考题解析】 [填空题] 若有声明char *p="%d,%d\n"; int a=1,b=2; 则执行语句“printf(p,a,b);”时输出 (4) 。 答案:1,2 [全国选择题] 若有定义语句:double x,y,*px,*py,执行了px=&x, py=&y;之后,正确的输入语句是()。 A)scanf(”%f%f”,x,y); B) scanf(”%f%f”,&x,&y); C) scanf(”%lf%le”,px,py); D) scanf(”%lf%lf”,x,y); 答案:C 41
[全国 选择题] 有以下程序 #include<stdio. h> main() { int m=1,n=2,. p=&m, [全国 选择题] 有以下程序 #include<stdio.h> main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p; p=q; q=r; printf(“%d,%d,%d,%d\n”,m,n,*p,*q); } 程序运行后的输出结果是 A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 答案:B 42
#include<stdio.h> #include<stdlib.h> int fun(int n) [全国选择题] 有以下程序 #include<stdio.h> #include<stdlib.h> int fun(int n) { int *p; p=(int *)malloc(sizeof(int)); *p=n; return *p; } main() { int a; a=fun(10); printf(“%d\n”,a+fun(10)); } 程序的运行结果是()。 0 B) 10 C) 20 D) 出错 答案:C 43
① 基本类型数组元素地址的获取、保存与算术运算。 ② 引用指针变量指向的基本类型数组元素 ③ 二维数组行地址的获取、保存及算术运算。 (2) 基本类型数组的指针操作 ① 基本类型数组元素地址的获取、保存与算术运算。 ② 引用指针变量指向的基本类型数组元素 ③ 二维数组行地址的获取、保存及算术运算。 行指针变量的声明、初始化。 ④ 引用行指针变量指向的基本类型数组元素 【考题解析】 [单选题] 设指针变量占2个字节的内存空间,若有声明 “char *p=”123“;int c;”,则执行语句“c=sizeof(p);”后,c的值为 。 A. 1 B. 2 C. 3 D. 4 答案: B [全国选择题] 若有定义语句: double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x; 则错误引用x数组元素的是()。 *p B)x[5] C)*(p+1) D)*x 答案:B 44
[单选题] 若有声明“int x[10]={0,1,2,3,4,5,6,7,8,9},*p;”,则值不为4的表达式是 。 A.p=x,*(p+4) B.p=x+4,*p++ C.p=x+3,*(p++) D.p=x+3,*++p 答案: C [单选题] 已知有程序段 “char str[ ][10]={"Aoyun","Beijing"}, *p=&str[0][0]; printf("%s\n",p+10);”, 则执行printf语句后输出为 。 A.Beijing B.Aoyun C.ing D.ng 答案: A 45
for(i=0;i<10;i++) a[i]=i+1; B. for(i=0;i<10;i++) p[i]=i+1; [单选题] 已知有声明“int i,a[10],*p=a;”,现需要将110保存到a[0]a[9]中,以下程序段中不能实现这一功能的是 。 for(i=0;i<10;i++) a[i]=i+1; B. for(i=0;i<10;i++) p[i]=i+1; C. i=1;while(p<a+10) *p++=i++; D. i=1;while(p<a+10) *a++=i++; 答案:D [填空题] 已知有声明 “int a[3][2]={{1,2},{3,4},{5,6}},*p=a[0];”,则执行语句“printf(”%d\n“,*(p+4));”后的输出结果为 。 答案:5 [单选题] 若有声明“int a[3][4], *p=a[0] ,(*q)[4]=a;”,则下列叙述中错误的是 。 A. a[2][3]与q[2][3]等价 B. a[2][3]与p[2][3]等价 C. a[2][3]与*(p+11)等价 D. a[2][3]与p=p+11,*p等价 答案:B 46
“int a[3][3]={0},*p1=a[1],(*p2)[3]=a;”,以下表达式中与“a[1][1]=1”不等价的表达式是 。 [单选题] 已知有声明 “int a[3][3]={0},*p1=a[1],(*p2)[3]=a;”,以下表达式中与“a[1][1]=1”不等价的表达式是 。 A. *(p1+1)=1 B. p1[1][1]=1 C. *(*(p2+1)+1)=1 D. p2[1][1]=1 答案:B [填空题] 若有声明“char s[10]=”remind“;”,执行“puts(s+2);”后的输出结果是 。 答案: mind [单选题] 已知有声明: “char a[ ]="It is mine", *p="It is mine";”, 下列叙述中错误的是 。 A. strcpy(a,“yes”)和strcpy(p,“yes”) 都是正确的 B. a=“yes”和p=“yes”都是正确的 C. *a 等于*p D. sizeof(a)不等于sizeof(p) 47
[全国完善程序] 以下程序的功能是:借助指针变量找出数组元素中的最大值所在数组元素的下标值。 #include<stdio.h> main() { int a[10],*p,*s; for(p=a;p-a<10;p++) scanf(“%d”,p); for(p=a,s=a;p-a<10;p++) if(*p>*s) s=__________; printf(“index=%d\n”,s-a); } 答案:p 48
① 结构变量地址、结构数组元素地址的获取与保存。 指向结构变量指针变量的声明、初始化与赋值。 (3) 结构类型变量、数组的指针操作 ① 结构变量地址、结构数组元素地址的获取与保存。 指向结构变量指针变量的声明、初始化与赋值。 ② 引用指针指向的结构类型变量(结构类型数组元素)的基本类型成员 结构变量成员的地址、结构数组元素成员的地址获取与保存。 指向结构变量成员的指针变量声明、初始化与赋值。 【考题解析】 49
[单选题] 已知有结构定义和变量声明如下: struct student { char name[20]; int score; struct student *h; }stu,*p; int *q; 以下选项中错误的是 。 A.p=&stu; B.q=&stu.score; C.scanf("%s%d",&stu); D.stu.h=p; 答案: C 50
[阅读程序] 以下程序运行时输出结果的第一行是 (1) ,第二行是 (2) #include <stdio.h> [阅读程序] 以下程序运行时输出结果的第一行是 (1) ,第二行是 (2) #include <stdio.h> struct s { int x,*y; }*p; int d[5]={10,20,30,40,50}; a[5]={100,&d[0],200,&d[1],300,&d[2],400,&d[3],500,&d[4]}; void main( ) { p=a; printf("%5d",p->x++); printf("%5d\n",p->x); printf("%5d",*p->y); printf("%5d\n",*++p->y); } 答案: (1) 100 101 (2) 10 20 51
A. (*y).code[0]='2'; B. y[0].code[0]='2'; [单选题] 设有结构定义及变量声明如下: struct product { char code[5]; float price; }y[4]={"100",100}; 以下表达式中错误的是 。 A. (*y).code[0]='2'; B. y[0].code[0]='2'; C. y->price=10; D. (*y)->price=10; 答案: D 52
[全国单选题] 有以下程序 #include<stdio.h> main() (4) 指针类型数组的声明和使用 【考题解析】 [全国单选题] 有以下程序 #include<stdio.h> main() { char *a[ ]={"abcd","ef","gh","ijk"}; int i; for(i=0;i<4;i++) printf("%c",*a[i]); } 程序运行后输出的结果是 A)aegi B)dfhk C)abcd D)abcdefghijk 答案:A [全国单选题] 若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是()。 A) p=a B) q=a c) q[0]=a D)p=&a[2][1] 答案:B 53
[全国填空题] 有以下程序 #include<stdio.h> main() { int a[]={1,2,3,4,5,6},*k[3],i=0; while(i<3) { k[i]=&a[2*i]; printf("%d",*k[i]); i++; } 程序运行后的输出的结果是___________ 答案:135 54
5. 函数 ⑴ 函数定义、函数声明、函数调用 (2) 函数调用时基本类型实参的传递与使用。实参与形参的类型兼容性要求。实参类型的自动转换 5. 函数 ⑴ 函数定义、函数声明、函数调用 (2) 函数调用时基本类型实参的传递与使用。实参与形参的类型兼容性要求。实参类型的自动转换 【考题解析】 [单选题] 以下函数定义中正确的是 (25) 。 A. double fun(double x,double y){ } B. double fun(double x;double y){ } C. double fun(double x,double y);{ } D. double fun(double x,y){ } 答案:A 55
[单选题] 以下选项均为fun函数定义的头部,其中错误的是 。 A. int fun(int x,int y[ ]) B. int fun(int x,int y[x]) C. int fun(int x,int y[3]) D. int fun(int x,int *y) 答案:B [学校单选题] 已知函数fun定义的头部为“void fun(int x, int y[])”,以下fun函数声明中正确的是 。 void fun(int x,int y[ ]); B. void fun(int x, int *y); void fun(int ,int); D. void fun(int ,int * ); 答案:C [单选题] 若有声明 “long fun(int *x,int n,long *s);int a[4]={1,2,3,4}; long b,c;”,则以下函数调用形式中正确的是 。 A. c=fun(a,4,b); B. c=fun(a[ ],4,&b); C. c=fun(a[4],4,b); D. c=fun(a,4,&b); 答案:D 56
[单选题] 若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是 。 A. 实参和其对应的形参占用同一存储单元 [单选题] 若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是 。 A. 实参和其对应的形参占用同一存储单元 B. 形参不占用存储单元 C. 同名的实参和形参占用同一存储单元 D. 形参和实参占用不同的存储单元 答案:D [全国选择题] 函数调用语句func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8))); 中func函数的实参个数是()。 A)3 B)4 C)5 D)8 答案:A 57
#include <stdio.h> void func(int b) { int a; a=b; b=10; } [阅读程序] 以下程序运行时输出结果是 。 #include <stdio.h> void func(int b) { int a; a=b; b=10; } void main() { int a=10,b=20; func(b); printf("%d,%d",a,b); 答案: 10, 20 58
[阅读程序] 以下程序运行时输出到屏幕的结果是 。 #include <stdio.h> [阅读程序] 以下程序运行时输出到屏幕的结果是 。 #include <stdio.h> void swap(int a,int b) { int t; if(a>b)t=a,a=b,b=t; } void main() { int x=13, y=11, z=12; if(x>y) swap(x,y); if(x>z) swap(x,z); if(y>z) swap(y,z); printf("%d\t%d\t%d\n", x,y,z); 答案:8. 13 11 12 59
#include<stdio.h> int f(int x, int y) { return x+y; } [阅读程序] 以下程序运行时输出结果是 。 #include<stdio.h> int f(int x, int y) { return x+y; } void main() { double a=5.5, b=2.5; printf("%d",f(a,b)); } 答案: 7 60