1、二级 C 语言分类模拟题 537 及答案解析(总分:56.50,做题时间:90 分钟)一、选择题(总题数:40,分数:56.50)1.有以下程序: #include stdio.h struct S int a;int b; main( ) struct S a, *p= a.a=99; printf(“%d/n“,_); 程序要求输出结构体中成员 a 的数据,以下不能填入横线处的内容是_。(分数:1.00)A.aB.*p.aC.p-aD.(*p).a2.下列叙述中正确的是_。(分数:1.00)A.空字符串不占用内存,其内存空间大小是 0B.两个连续的单引号(“)是合法的字符常量C.可以对字符
2、串进行关系运算D.两个连续的双引号(“ “)是合法的字符串常量3.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0CE9D.9.12E4.有如下程序: #include stdio.h struct person char name10; int age; ; main( ) struct person room2 = “Wang“,19,“Li“,20; printf(“%s:%d/n“,(room+1)-name,room-age); 程序运行后的输出结果是_。(分数:1.00)A.Li:19B.Wang:19C.Li:20D.Wang:175.有以下
3、程序(字母 A 的 ASCII 代码为 65): #include stdio.h main() char c1 = “A“. c2 = “Y“; printf(“%d,%d/n“,c1,c2); 程序运行后的输出结果是_。(分数:1.00)A.输出格式不合法,输出出错信息B.A,YC.65,90D.65,896.有以下程序: #includestdio.h int f(int x); main() int n=1, m; m=f(f(f(n); printf(“%d/n“, in); int f(int x) return x*2; 程序运行后的输出结果是_。(分数:1.00)A.8B.2C
4、.4D.17.fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是_。(分数:3.00)A.字符串读入后会自动加入“/0“B.fp 是指向该文件的文件型指针C.fgets 函数将从文件中最多读入 n 个字符D.fgets 函数将从文件中最多读入 n-1 个字符8.下列叙述中,正确的是_。(分数:1.00)A.C 程序中的注释只能出现在程序的开始位置和语句的后面B.C 程序书写格式严谨,要求一行内只能写一个语句C.C 程序的书写格式自由,一个语句可以写在多行上D.用 C 语言编写的程序只能放在一个程序文件中9.有以下程序: #includestdio.h main() in
5、t a=1,b=2,c=3,d=0; if(a=1 else printf(“%d,%d,%d/n“,a,b,c); else printf(“%d,%d,%d/n“,a,b,c); 程序的运行结果是_。(分数:2.50)A.1,3,2B.1,3,3C.1,2,3D.3,2,110.有三个关系 R,S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 T A B C a 1 2 b 2 1 c 3 1 d 3 2 其中关系 T 由关系 R 和 S 通过某种操作得到,该操作为_。(分数:1.00)A.选择B.投影C交D并11.有以下程序(注:字符 a
6、 的 ASCH 码值为 97): #includestdio.h main() char*s=“abc“; do printf(“%d“,*s%10);+s; while(*s); 程序运行后的输出结果是_。(分数:1.00)A.789B.abcC.7890D.97989912.以下叙述中正确的是_。(分数:1.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#include stdio.h必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能13.若变量已正确定义,下列正确的程序段是 _ 。(分数:2.00)A.whi
7、le(ch=getchar()=“/N“)putchar(ch);B.while(ch=getchar()=“/n“)putchar(ch);C.while(ch=getchar()!=“/N“)putchar(ch);D.while(ch=getchar()!=“/n“)putchar(ch);14.以下有 4 组用户标识符,其中合法的组是_。(分数:1.00)A.FOR-subCaseB.4dDOSizeC.f2_G3IFabcD.WORDvoiddefine15.以下选项中合法的常量是_。(分数:1.00)A.999B.2.7eC.OXabD.123E 0.216.下列定义变量的语句中错
8、误的是_。(分数:2.50)A.double int_;B.float US$;C.char For;D.int_int;17.若二维数组 a 有 m 列,则在 aij前的元素个数为 _ 。(分数:1.00)A.i*m+j-1B.i*m+jC.j*m+1D.i*m+j+118.有以下程序 #include stdio.h main() int x; scanf(“%d“, if(x=3);else if(x!=10) printf(“%d/n“,x); 程序运行时,输入的值在哪个范围才会有输出结果_。(分数:1.00)A.大于 3 且不等于 10 的整数B.不等于 10 的整数C.大于 3 或
9、等于 10 的整数D.小于 3 的整数19.有以下程序: #includestdio.h main() char s1=“programe“,s2=“Language“; char*p1=s1,*p2=s2; int k; for(k=0;k8;k+) if(*(p1+k)=*(p2+k) printf(“%s/n“,*(p1+k); 程序的运行结果是_。(分数:1.00)A.grame ame eB.g a eC.programeD.无输出字符20.假定已建立以下链表结构,且指针 P 和 q 已指向如下图所示的结点: (分数:2.00)A.(*p).next=(*q).next;free(p
10、);B.p=q-next;free(q);C.p=q;free(q);D.p-next=q-next;free(q);21.若有定义 int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。(分数:1.00)A.(x-y0|x-y0)B.(x-y0)C.(x-y0)D.(x-y=0)22.有以下程序: #includestdio.h void fun(char*p) +p; printf(“%s“, “p); main() char*a=“Morning“, “Afternoon“, “Evening“, “Night“; fu
11、n(a); 程序的运行结果是_。(分数:2.50)A.AfternoonB.fternoonC.MorningD.orning23.在 16 位 IBM-PC 上使用 C 语言,若有如下定义: struct data int i; char ch; double f; b; 则结构变量 b 占用内存的字节数是 _ 。(分数:2.00)A.1B.2C.7D.1124.以下叙述中正确的是_。(分数:1.00)A.用 C 语言实现的算法必须要有输入和输出操作B.用 C 语言实现的算法可以没有输出,但必须要有输入C.用 C 程序实现的算法可以没有输入,但必须要有输出D.用 C 程序实现的算法可以既没有
12、输入,也没有输出25.有以下程序段: char str412=“aaa“,“bbb“,“ccc“,“ddd“,*p4; int i; for(i=0;i4;i+)pi=stri; 以下选项中不能正确引用字符串的是_。(分数:1.00)A.*p3B.p3C.str2D.*p26.以下定义语句中,编译时会出现编译错误的是 _ 。(分数:1.00)A.char a=“a“;B.char a=“/n“C.char a=“aa“;D.char a=“/xgd“;27.已知大写字母 A 的 ASCII 码值是 65,小写字母 a 的 ASCII 码值是 97。以下不能将变量 c 中的大写字母转换为对应小写
13、字母的语句是_。(分数:1.00)A.c=(“A“+c)%26-“a“B.c=c+32C.c=c-“A“+“a“D.c=(c-“A“)%26+“a“28.有以下程序 #includestdio.h char fun(char*c) if(*c=“Z“*c=“A“) *c-=“A“-“a“; return*c; main() char s81,*p=s; gets(s); while(*p) *p=fun(p); putchar(*p); p+; printf(“/n“); 若运行时从键盘上输入 OPEN THE DOOR回车,程序的输出结果是_。(分数:2.00)A.open the door
14、B.oPEN tHE dOORC.OPEN THE DOORD.Open The Door29.若有说明“int a34;”,则 a 数组元素的非法引用是_。(分数:2.50)A.a02*1B.a13C.a4-20D.a0430.以下程序的输出结果是_。 main() int i,a10; for(i=9;i=0;i-)ai=10-i; print(“%d%d%d,a2,a5,a8); (分数:2.00)A.258B.741C.852D.36931.有以下程序: #includestdio.h main() struct nodeint n; struct node*next; *p; str
15、uct node x3=2, x+1, 4, x+2, 6, NULL; p=x; printf(“%d, “, p-n); printf(“%d/n“, p-next-n ); 程序运行后的输出结果是_。(分数:1.00)A.2,3B.2,4C.3,4D.4,632.有以下程序: #includestdio.h #define S(x)x*x/x main() int k=6,j=3; printf(“%d,%d/n“,S(k+j+2),S(j+k+2); 程序运行后的输出结果是_。(分数:1.00)A.11,11B.29,29C.26,29D.121,12133.有以下程序: #inclu
16、destdio.h main() char s=“012xy“; int 1,n=0; for(i=0;si!=0;i+) if(si=“a“ printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.0B.2C.3D.534.以下叙述中正确的是_。(分数:1.00)A.每个后缀为.C 的 C 语言源程序都可以单独进行编译B.每个后缀为.C 的 C 语言源程序都应该包含一个 main 函数C.在 C 语言程序中,main 函数必须放在其他函数的最前面D.在 C 语言程序中,只有 main 函数才可单独进行编译35.有以下程序: #include stdio.h main()
17、 FILE *fp; int i,a6=1,2,3,4,5,6,k; fp = fopen(“data.dat“,“w+“); fprintf(fp, “%d/n“, a0); for (i=1; i6; i+) fseek(fp, 0L, 0); fscanf(fp, “%d“, fseek(fp, 0L, 0); fprintf(fp, “%din“, ai+k); rewind(fp); fseanf(fp, “%d“, fclose(fp); printf(“%d/n“, k); 程序的运行结果是_。(分数:1.00)A.21B.6C.123456D.1136.关于字符常量,以下叙述正
18、确的是_。(分数:2.00)A.空格不是一个字符常量B.字符常量能包含大于一个的字符C.单引号中的大写字母和小写字母代表的是相同的字符常量D.所有的字符常量都可以作为整型量来处理37.下列描述错误的是_。(分数:2.50)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合38.以下函数调用语句中,含有的实参个数是_。 fun(x+y, (e1, e2), fun(xy, d, (a, b);(分数:1.00)A.3B.4C.6D.839.有以下程序: #includestdi
19、o.h int a=5; int func(int a) int b=1; static int c=5; a+; b+; +c; return(a*b*c); main() int k,a=4; for(k=0;k3;k+) printf(“%d,“,func(a); 程序执行后的输出结果是_。(分数:1.00)A.72,147,256,B.60,60,60,C.72,98,128,D.60,70,80,40.有以下程序 main(int argc,char *argv) int n,i=0; while(argv1i!=“/0“) n=fun(); i+; printf(“%d/n“,n*
20、argc); int fun() static int s=0; s+=1; return s; 假设程序编译、连接后生成可执行文件 exam.exe,若键入以下命令 exam 123回车 则运行结果为(分数:1.00)A.6B.8C.3D.4二级 C 语言分类模拟题 537 答案解析(总分:56.50,做题时间:90 分钟)一、选择题(总题数:40,分数:56.50)1.有以下程序: #include stdio.h struct S int a;int b; main( ) struct S a, *p= a.a=99; printf(“%d/n“,_); 程序要求输出结构体中成员 a 的
21、数据,以下不能填入横线处的内容是_。(分数:1.00)A.aB.*p.a C.p-aD.(*p).a解析:解析 本题考查结构体变量的引用。题目中要求输出结构体中成员 a 的数据,p 为指针,* p 为结构体变量,那么* p.a 可以表示为结构体中成员 a 的数据。2.下列叙述中正确的是_。(分数:1.00)A.空字符串不占用内存,其内存空间大小是 0B.两个连续的单引号(“)是合法的字符常量C.可以对字符串进行关系运算D.两个连续的双引号(“ “)是合法的字符串常量 解析:解析 字符串常量(包括空字符串)所占内存字节数等于字符串中字节数加 1,A 选项错误。字符常量是用单引号括起来的一个字符,
22、B 选项错误。C 语言中,字符串比较不能直接用关系运算符进行正确比较,可以用字符串比较函数 strcmp 来实现,C 选项错误。字符串常量是由一对双引号括起的字符序列,D选项正确。3.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0 CE9D.9.12E解析:解析 e 前 e 后有数字,e 后数值为整数,所以 A、C、D 错误。4.有如下程序: #include stdio.h struct person char name10; int age; ; main( ) struct person room2 = “Wang“,19,“Li“,20; pri
23、ntf(“%s:%d/n“,(room+1)-name,room-age); 程序运行后的输出结果是_。(分数:1.00)A.Li:19 B.Wang:19C.Li:20D.Wang:17解析:解析 声明结构类型 person 后,在 main 函数中定义了一个结构数组 room,其中有 2 个元素,每个元素都是 person 类型数据。在输出中,因为 room 表示数组首地址,首地址+1,指向 room 数组中第二个元素,并将该元素的 name 信息进行输出,同理,对第一个元素中的 age 信息输出,因此,答案为 A 选项。5.有以下程序(字母 A 的 ASCII 代码为 65): #inc
24、lude stdio.h main() char c1 = “A“. c2 = “Y“; printf(“%d,%d/n“,c1,c2); 程序运行后的输出结果是_。(分数:1.00)A.输出格式不合法,输出出错信息B.A,YC.65,90D.65,89 解析:解析 一个整数,只要它的值在 0255 范围之内,也可以用字符形式输出。输出之前,系统会将该整数转化为相应的 ASCII 码字符。字符也可以用整型来输出,输出的是对应的 ASCII 值。“A“的 ASCII值为 65,“Y“的 AScII 值为 89,故 D 选项正确。6.有以下程序: #includestdio.h int f(int
25、 x); main() int n=1, m; m=f(f(f(n); printf(“%d/n“, in); int f(int x) return x*2; 程序运行后的输出结果是_。(分数:1.00)A.8 B.2C.4D.1解析:解析 第一次调用 m=f(f(f(1),第二次调用 m=f(f(2),第三次调用 m=f(4),即返回值为 8。所以选择 A 选项。7.fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是_。(分数:3.00)A.字符串读入后会自动加入“/0“B.fp 是指向该文件的文件型指针C.fgets 函数将从文件中最多读入 n 个字符 D.fge
26、ts 函数将从文件中最多读入 n-1 个字符解析:8.下列叙述中,正确的是_。(分数:1.00)A.C 程序中的注释只能出现在程序的开始位置和语句的后面B.C 程序书写格式严谨,要求一行内只能写一个语句C.C 程序的书写格式自由,一个语句可以写在多行上 D.用 C 语言编写的程序只能放在一个程序文件中解析:解析 C 程序中注释可以放在任意位置;C 语言的语法限制不严格,所以可以将多条语句放在同一行上;C 程序可以放在多个程序文件中,并使用 include 语句进行文件包含。故本题答案为 C。9.有以下程序: #includestdio.h main() int a=1,b=2,c=3,d=0;
27、 if(a=1 else printf(“%d,%d,%d/n“,a,b,c); else printf(“%d,%d,%d/n“,a,b,c); 程序的运行结果是_。(分数:2.50)A.1,3,2B.1,3,3 C.1,2,3D.3,2,1解析:解析 else 总是和最近的 if 配对,所以进入第一个 if 语句中进行条件判断时,因为是逻辑与操作,需要两边运算对象的值均为非零值才为真,所以需要逐个执行判断的结果为 1。进入第二个 if 语句条件判断,因为 b!=2 条件成立,所以整个条件表达式的值为真,不再执行逻辑或的第二个运算对象(c-!=3)c 的值不变,也不再执行第一个 else 语
28、句。打印 a 的值 1,b 的值 3,c 的值 3。10.有三个关系 R,S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 T A B C a 1 2 b 2 1 c 3 1 d 3 2 其中关系 T 由关系 R 和 S 通过某种操作得到,该操作为_。(分数:1.00)A.选择B.投影C交D并 解析:解析 在关系 T 中包含了关系 R 与 S 中的所有元组,所以进行的是并的运算,答案为 D。11.有以下程序(注:字符 a 的 ASCH 码值为 97): #includestdio.h main() char*s=“abc“; do printf
29、(“%d“,*s%10);+s; while(*s); 程序运行后的输出结果是_。(分数:1.00)A.789 B.abcC.7890D.979899解析:解析 因为小写字符 a,b,c 的 ASCII 码值分别勾 97,98,99,而在 do while 循环语句中,每次对字符的 ASCII 码值取余数并输出,所以分别输出 7,8,9。12.以下叙述中正确的是_。(分数:1.00)A.在 C 语言中,预处理命令行都以“#”开头 B.预处理命令行必须位于 C 源程序的起始位置C.#include stdio.h必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析
30、 预处理命令是以“#”号开头的命令,它们不是 C 语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,因此 B、C 选项错误。C 语言的预处理能够实现宏定义和条件编译等功能,因此 D 选项错误。故本题答案为 A。13.若变量已正确定义,下列正确的程序段是 _ 。(分数:2.00)A.while(ch=getchar()=“/N“)putchar(ch);B.while(ch=getchar()=“/n“)putchar(ch);C.while(ch=getchar()!=“/N“)putchar(ch);D.while(ch=getchar()!=
31、“/n“)putchar(ch); 解析:解析 本题考查两个知识点:C 语言用“/n“这个字符常量表示换行;函数 getchar()的作用是从终端输入一个字符,当遇到换行时结束输入。14.以下有 4 组用户标识符,其中合法的组是_。(分数:1.00)A.FOR-subCaseB.4dDOSizeC.f2_G3IFabc D.WORDvoiddefine解析:解析 C 语言的标识符的定义为:以字母或下划线开头的由字母、数字字符、下划线组成的字符串。而且标识符不能与关键字相同。15.以下选项中合法的常量是_。(分数:1.00)A.999B.2.7eC.OXab D.123E 0.2解析:解析 A
32、选项中含有非法的空格,所以错误。C 语言中十六进制常量以 Ox 开头,所以 C 选项正确。实型常量中 e 的前后必须均有数据,且其后必须为整数,所以 B 选项和 D 选项错误。16.下列定义变量的语句中错误的是_。(分数:2.50)A.double int_;B.float US$; C.char For;D.int_int;解析:解析 变量命名规范:由字母数字下划线组成,且数字不作为开头。所以 B 错误。17.若二维数组 a 有 m 列,则在 aij前的元素个数为 _ 。(分数:1.00)A.i*m+j-1B.i*m+j C.j*m+1D.i*m+j+1解析:解析 二维数组的元素可以看成是按
33、矩阵形式存放的,数组第一维的下标是 i,说明它前面还有i 行,有 i*m 个元素,数组第二维的下标是 j,说明它前面还有 j 列,有 j 个元素,所以共有 i*m+j 个元素。18.有以下程序 #include stdio.h main() int x; scanf(“%d“, if(x=3);else if(x!=10) printf(“%d/n“,x); 程序运行时,输入的值在哪个范围才会有输出结果_。(分数:1.00)A.大于 3 且不等于 10 的整数 B.不等于 10 的整数C.大于 3 或等于 10 的整数D.小于 3 的整数解析:解析 大于 3 执行 else 语句,不等于 10
34、,就会输出 x 的值,所以选择 A。19.有以下程序: #includestdio.h main() char s1=“programe“,s2=“Language“; char*p1=s1,*p2=s2; int k; for(k=0;k8;k+) if(*(p1+k)=*(p2+k) printf(“%s/n“,*(p1+k); 程序的运行结果是_。(分数:1.00)A.grame ame e B.g a eC.programeD.无输出字符解析:解析 定义两个指针变量 p1、p2,分别指向数组 s1、s2 首地址,在 for 循环中,比较两个指针所指地址的元素是否相等,如果相等,则输出当
35、前指针指向地址的字符串。20.假定已建立以下链表结构,且指针 P 和 q 已指向如下图所示的结点: (分数:2.00)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); 解析:解析 要从链表中删除 b,只需要将 c 结点的地址赋给 p-next 即可。c 结点的地址存放在 q-next 中,因此,p-next=q-next 即可,然后用 free(q)释放指针 q 的空间。21.若有定义 int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+
36、)中的条件表达式(x-y)等价的是_。(分数:1.00)A.(x-y0|x-y0) B.(x-y0)C.(x-y0)D.(x-y=0)解析:解析 条件表达式:x=表达式 1?表达式 2:表达式 3 的含义是:先求解表达式 1,若其值为非0(真),则求解表达式 2,将表达式 2 的值赋给 x,若表达式 1 的值为 0(假),则求解表达式 3,将表达式3 的值赋给 x。在本题中与表达式(x-y)等价的是(x-y0|x-y0),A 选项正确。22.有以下程序: #includestdio.h void fun(char*p) +p; printf(“%s“, “p); main() char*a=“
37、Morning“, “Afternoon“, “Evening“, “Night“; fun(a); 程序的运行结果是_。(分数:2.50)A.Afternoon B.fternoonC.MorningD.orning解析:解析 执行 fun(a)语句时,p 指向的是字符串数组 a 的第一个字符串“Morning”,p 自加 1 之后,p 指向字符串数组 a 的第 2 个字符串“Afternoon”。23.在 16 位 IBM-PC 上使用 C 语言,若有如下定义: struct data int i; char ch; double f; b; 则结构变量 b 占用内存的字节数是 _ 。(分
38、数:2.00)A.1B.2C.7D.11 解析:解析 结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量 i所占用的内存是 2 字节,字符型变量 ch 所占用的内存是 1 字节,双精度型变量 f 所占用的内存是 8 字节,三者相加即可。24.以下叙述中正确的是_。(分数:1.00)A.用 C 语言实现的算法必须要有输入和输出操作B.用 C 语言实现的算法可以没有输出,但必须要有输入C.用 C 程序实现的算法可以没有输入,但必须要有输出 D.用 C 程序实现的算法可以既没有输入,也没有输出解析:解析 本题考查的是 c 语言中算法的特性。一个算法具有 5 个特性:有穷性、
39、确定性、可行性、有零个或多个输入以及一个或多个输出。所以,选项 C 正确。25.有以下程序段: char str412=“aaa“,“bbb“,“ccc“,“ddd“,*p4; int i; for(i=0;i4;i+)pi=stri; 以下选项中不能正确引用字符串的是_。(分数:1.00)A.*p3 B.p3C.str2D.*p解析:解析 *p3p30是一个字符,不是字符串,选项 A 错误。p3和 str2和*p 分别代表了ddd,ccc,aaa。答案为 A 选项。26.以下定义语句中,编译时会出现编译错误的是 _ 。(分数:1.00)A.char a=“a“;B.char a=“/n“C.
40、char a=“aa“; D.char a=“/xgd“;解析:解析 char 类型用于存储单个字符的简单变量类型,它可以被指定为一个字符常量或一个整数。27.已知大写字母 A 的 ASCII 码值是 65,小写字母 a 的 ASCII 码值是 97。以下不能将变量 c 中的大写字母转换为对应小写字母的语句是_。(分数:1.00)A.c=(“A“+c)%26-“a“ B.c=c+32C.c=c-“A“+“a“D.c=(c-“A“)%26+“a“解析:解析 根据题意可知,小写字母比与之对应的大写字母的 ASCII 码大 32。A 选项中字符 A 加上 c表示的大写字符再对字母个数 26 取余,本
41、身这个表达式没有任何含义,所以选择 A 选项。28.有以下程序 #includestdio.h char fun(char*c) if(*c=“Z“*c=“A“) *c-=“A“-“a“; return*c; main() char s81,*p=s; gets(s); while(*p) *p=fun(p); putchar(*p); p+; printf(“/n“); 若运行时从键盘上输入 OPEN THE DOOR回车,程序的输出结果是_。(分数:2.00)A.open the door B.oPEN tHE dOORC.OPEN THE DOORD.Open The Door解析:解析
42、 函数 fun 功能将大写字符转换为小写字符。所以选择 A。29.若有说明“int a34;”,则 a 数组元素的非法引用是_。(分数:2.50)A.a02*1B.a13C.a4-20D.a04 解析:30.以下程序的输出结果是_。 main() int i,a10; for(i=9;i=0;i-)ai=10-i; print(“%d%d%d,a2,a5,a8); (分数:2.00)A.258B.741C.852 D.369解析:解析 在本题运行时主要注意的是当 i=9 时,ai=10-9=1:i=8 时,ai=10-8=2;i=7 时,ai=10-7=3;依此类推,直到 i=0 时,ai=1
43、0-0=10:此时,i 的值已变为-1,判断 for 的循环条件,不成立,然后输出 a2,a5,a8分别为 8,5,2。31.有以下程序: #includestdio.h main() struct nodeint n; struct node*next; *p; struct node x3=2, x+1, 4, x+2, 6, NULL; p=x; printf(“%d, “, p-n); printf(“%d/n“, p-next-n ); 程序运行后的输出结果是_。(分数:1.00)A.2,3B.2,4 C.3,4D.4,6解析:解析 由题干中的函数可知,程序运行后的输出结果为 2,4
44、。32.有以下程序: #includestdio.h #define S(x)x*x/x main() int k=6,j=3; printf(“%d,%d/n“,S(k+j+2),S(j+k+2); 程序运行后的输出结果是_。(分数:1.00)A.11,11B.29,29 C.26,29D.121,121解析:解析 #define 命令是 C 语言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标识符。s(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可
45、得 29,S(j+k+2)=j+k+2*k+j+2/i+k+2,经计算可得 29。因此输出为 29,29。答案为 B 选项。33.有以下程序: #includestdio.h main() char s=“012xy“; int 1,n=0; for(i=0;si!=0;i+) if(si=“a“ printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.0B.2 C.3D.5解析:解析 程序首先给字符数组 s赋值为“012xy“,for 循环语句的功能是遍历字符串,通过 if 条件语句对字符串中的小写字母进行计数,字符串中小写字母为 2 个,即 n=2,因此 B 选项正确
46、。34.以下叙述中正确的是_。(分数:1.00)A.每个后缀为.C 的 C 语言源程序都可以单独进行编译 B.每个后缀为.C 的 C 语言源程序都应该包含一个 main 函数C.在 C 语言程序中,main 函数必须放在其他函数的最前面D.在 C 语言程序中,只有 main 函数才可单独进行编译解析:解析 一个普通的 C 函数可以单独作为一个 C 的程序文件存在被包含到其他程序中,每个后缀为C 的 C 语言源程序都可以单独进行编译,所以 B、D 选项错误。main 函数可以放在程序的开始、中间和最后,所以 C 选项错误。35.有以下程序: #include stdio.h main() FILE *fp; int i,a6=1,2,3,4,5,6,k; fp = fopen(“data.dat“,“w+“); fprintf(fp, “%d/n“, a0); for (i=1; i6; i+) fseek(fp, 0L, 0); fscanf(fp, “%d“