1、二级 C语言模拟 640及答案解析(总分:164.50,做题时间:90 分钟)一、选择题(总题数:40,分数:64.50)1.有以下程序: # include stdio.h main() FILE *fp; int k,n,i,a6=1,2,3,4,5,6; fp=fopen(“d2.dat“,“w“); for(i=0;16;i+) fprintf(fp,“%d/n“,ai); fclose(fp); fp(i=0;i3;i+) fscanf(fp,“%d%d“,k,n); fclose(fp); printf(“%d/n,%d/n,k,n); 程序运行后的输出结果是_。(分数:1.00)
2、A.1,2B.3,4C.5,6D.123,4562.有以下程序: #includestdio.h main() char ch; ch=“A“+“5“-“3“; printf(“%d, %c/n“, ch, ch); 程序的输出结果是(分数:2.00)A.67,CB.B,CC.C,DD.不确定的值3.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,2,4B.2
3、,1,2,-1C.5,1,2,-1D.1,2,3,44.对于循环队列,下列叙述中正确的是_。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针5.为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域,next 是指向结点的指针域),则在处应填入的选项是_。(分数:2.00)A.struct link*next;B.link next;C.link*next;D.struct link next;6.以下叙述正确的是_。(分数:1.00)A.表达式 sizeof(FILE*)=sizeo
4、f(int*)的值为真B.文件指针的值是一个整数,它的值一定小于文件字节数C.文件指针的值是所指文件的当前读取位置D.使用 fscanf函数可以向任意类型的文件中写入任意数量的字符7.有以下程序: #includestdio.h main() int x, i; for(i=1; i=100; i+) x=i; if(+x%2=0) if(+x%3=0) if(+x%7=0) printf(“%d“, x); printf(“/n“); 程序的输出结果是(分数:2.00)A.28 70B.42 84C.26 68D.39 818.已知在 ASCII字符集中,数字 0的序号为 48,下列程序的输
5、出结果为_。 main() char a=“0“,b=“9“; printf(“%d,%c/n“,a,b) ; (分数:1.00)A.因输出格式不合法B.48,57C.0,9D.48,99.有以下程序: #include stdio.h #define N 2 #define M N+1 #define NUM (M+1) * M/2 main( ) printf(“%d/n“,NuM); 程序运行后的输出结果是_。(分数:5.00)A.4B.8C.9D.610.有以下程序: #includestdio.h void fun(double x,double *y,double *z) *y=*
6、y-1.0;*z=*z+x; main() double a=2.5,b=9.0,*pa,*pb; pa=pb= fun(b-a,pa,pb); printf(“%f/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.8.000000B.9.000000C.1.500000D.10.50000011.以下叙述中错误的是_。(分数:2.00)A.C语句必须以分号结束B.复合语句在语法上被看做一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句12.C语言中的简单数据类型有_。(分数:2.50)A.整型、实型、逻辑型B.整型、实型、字符型C.整型、字
7、符型、逻辑型D.整型、实型、逻辑型、字符型13.若有定义:int a410;,则以下选项中对数组元素 aii引用错误的是_。(0=i4,0=i10)(分数:2.00)A.*(a00十 10*i+j)B.*(a+i)+jC.*(a+i)+j)D.*(ai+j)14.有以下程序 #includestdio.h main() int x; for(x=3;x6;x+) printf(x%2)?(“*%d“):(“#%d“),x); printf(“/n“); 程序的输出结果是_。(分数:2.50)A.*3#4*5B.#3*4#5C.*3*4#5D.*3#4#515.结构化程序由 3种基本结构组成,3
8、 种基本结构组成的算法( )。(分数:1.00)A.可以完成任何复杂的任务B.只能完成部分复杂的任务C.只能完成符合结构化的任务D.只能完成一些简单的任务16.以下能正确定义一维数组的选项是_。(分数:2.50)A.int a5=0, 1, 2. 3, 4, 5;B.char a=0, 1, 2. 3, 4, 5;C.char a=“A“, “B“, “C“;D.int a5=“0123“;17.C源程序中不能表示的数制是_。(分数:1.00)A.二进制B.八进制C.十进制D.十六进制18.下列程序的运行结果是_。 #includestdio.h void sub(int*s,int*y) s
9、tatic int m=4; *y=s0; m+; void main() int a=1,2,3,4,5,k; int x; printf(“/n“); for(k=0;k=4;k+) sub(a, printf(“%d,“,x); (分数:2.50)A.1,1,1,1,1,B.1,2,3,4,5,C.0,0,0,0,0,D.4,4,4,4,4,19.运行下列程序,若从键盘输入字母“a”,则输出结果是_。 char c; c=getchar(); if(c=“a“ else if(c=“g“ else printf(“input error!/n“); putchar(c);(分数:2.50
10、)AfBtCeDd20.交换两个变量的值,不允许用临时变量,应该使用_位运算符。(分数:2.00)A. int *m; int a=2,b=3,c=5; struct st s3=(101, main() struct st*p; p=s; 则以下表达式中值为 5的是_。(分数:2.00)A.(p+)-mB.*(p+)-mC.(*p).mD.*(+p)-m22.已定义变量 a为整型,则不能正确表示 9a14 的表达式是_。(分数:2.00)A.!(9a c=13d=10 printf(“%d,%d/n“,c,d); 程序的运行结果是_。(分数:1.00)A.5,1B.1,1C.18,1D.13
11、,127.若有定义:int a=0,b=0,c=0,d=0;,以下关于 C语言表达式:(+a +b)?+c:+d 执行顺序的叙述正确的是_。(分数:1.00)A.先执行+a,表达式+a 的值为 1;再执行+b,表达式+b 的值为 1,由此可确定(+a+b)值为 1,因此执行+cB.先执行+a,表达式+a 的值为 1,由此可确定(+a +b)值为 1,因此执行+cC.先执行+b,表达式+b 的值为 1;再执行+a,表达式+a 的值为 1,由此可确定(+a +b)值为 1,因此执行+cD.先执行+a,+b,+c,+d,使得 a,b,c,d 的值都为 1,由此可确定(+a +b)值为 1,因此执行+
12、c28.有如下程序段: for(i=0;i10;i+) if(i=5)break; 则循环结束后 i的值为_。(分数:1.00)A.1B.0C.5D.1029.以下叙述中正确的是_。(分数:1.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号“%”30.以下选项中叙述错误的是_。(分数:1.00)A.C程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C程序的同一函数中,各复合语句内可以定义变量,
13、其作用域仅限本复合语句内C.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值D.C程序函数的形参不可以说明为 static型变量31.设 int a12,则执行完语句 a+a-a*a 后,a 的值是 _(分数:1.00)A.552B.264C.144D.-26432.有以下程序 #include stdio.h void fun1(char *P) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() char a=“Program“,*p; p= fun1(p); printf(“%s/n“,a); 程序执行后的输出结果是_。(分数:
14、1.00)A.ProhsbnB.PrphsbnC.ProgsbnD.Program33.下列关于 C语言文件的叙述中正确的是_。(分数:1.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件D.文件由字符序列组成,其类型只能是文本文件34.以下程序的输出结果是_。 #includestdio.h main() int a=4,b=3,c=2,d=1; printf(“%d“,ab?a:dc?d:b);(分数:2.00)A.1B.3C.2D.435.下列语句组中正确的是_。(分数:1.
15、50)A.char*s;s=“Olympic“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;36.有如下程序段: int k; for(k=2;k=0;) printf(“%d“,k-); 则 for循环体执行的次数是_。(分数:1.00)A.0次B.1次C.2次D.无限次37.以下叙述中正确的是_。(分数:1.00)A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该
16、文件然后再打开,才能读到第 1个数据D.C语言中的文件是流式文件,因此只能顺序存取数据38.有下列程序: #includestdio.h #includestring.h typedef struct stu char name9; char gender; int score; STU; void f(STU *a) STU c=“Sun“,“f,90,*d= a=d; strcpy(a-name,c.name); a-gender=c.gender; a-score=c.score: printf(“%s,%c,%d,“,a-name,a-gender,a-score); main() S
17、TU a=“Zhao“,“m“,85; f( printf(“%s,%c,%d“,a.name,a.gender,a.score); 程序执行后的输出结果是_。(分数:1.00)A.Zhao,m,85,Sun,f,90B.Sun,f,90,Sun,f,90C.Sun,f,90,Zhao,m,85D.Zhao,m,85,Zhao,m,8539.有如下程序段: int x=12; double y=3.141593; printf(“%d%8.6f“,x,y); 其输出结果是_。(分数:1.00)A.123.141593B.12 3.141593C.12,3.141593D.123.1415930
18、40.有以下程序: #includestdio.h main() int a=1,b =0; printf(“%d,“,b=a+b); printf(“%d/n“,a=2*b); 程序运行后的输出结果是_。(分数:1.00)A.1,2B.1,0C.3,2D.0,0二、程序填空题(总题数:1,分数:30.00)41.给定程序中,函数 fun的功能是:将 a所指 43矩阵中第 k行的元素与第 0行元素交换。 例如,有下列矩阵: 若 k为 2,程序执行结果为: (分数:30.00)三、程序修改题(总题数:1,分数:30.00)42.给定程序 MODI1. C中函数 fun的功能是:逐个比较 p、q
19、所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到 c所指数组中,形成一个新的字符串。 例如,若主函数中 a字符串为:aBCDeFgH,主函数中 b字符串为:ABcd,则 c中的字符串应为:aBcdeFgH。 请改正程序中的错误,使它能得出正确结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 #include stdio. h #include string. h void fun(char *p, char *q, char *c) /*found*/ int k=1; /*found*/ while(*p!= *q) if(*p*q) ck=*
20、q; else ck=*p; if(*p) p+; if(*q) q+; k+; main( ) char a10=“aBCDeFgH“, b10=“ABcd“, c80=“/0“); fun(a, b, c); printf(“The string a: “); puts(a); printf(“The string b: “); puts(b); printf(“The result: “); puts(c); (分数:30.00)_四、程序设计题(总题数:1,分数:40.00)43.请编写一个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入“asd af aa z67“,则输
21、出为”asdafaaz67”。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若千语句 #includestdio.h #includectype.h void fun(char*str) main() char str81; void NONO(); printf(“Input a string:“); gets(str); puts(str); fun(str); printf(“*str: %s/n“, str); NONO(); void NONO() /*请在此函数内打开文件,输入调试数据,调用 fu
22、n函数,输出数据,关闭文件。 */ char str81; int n=0; FILE*rf, *wf; rf=fopen(“in.dat“, “r“); wf=fopen(“out.dat“, “w“); while(n10) fgets(str, 80, rf); fun(str); fprintf(wf, “%s“, str); n+; fclose(rf); fclose(wf); (分数:40.00)_二级 C语言模拟 640答案解析(总分:164.50,做题时间:90 分钟)一、选择题(总题数:40,分数:64.50)1.有以下程序: # include stdio.h main(
23、) FILE *fp; int k,n,i,a6=1,2,3,4,5,6; fp=fopen(“d2.dat“,“w“); for(i=0;16;i+) fprintf(fp,“%d/n“,ai); fclose(fp); fp(i=0;i3;i+) fscanf(fp,“%d%d“,k,n); fclose(fp); printf(“%d/n,%d/n,k,n); 程序运行后的输出结果是_。(分数:1.00)A.1,2B.3,4C.5,6 D.123,456解析:解析 此题是考查 fprintf和 fscanf,其中 fprintf是向文件输出,文件为 da2.dat文件,fscanf是向文
24、件输入,所以根据程序循环写入和写出,可知答案为 C。2.有以下程序: #includestdio.h main() char ch; ch=“A“+“5“-“3“; printf(“%d, %c/n“, ch, ch); 程序的输出结果是(分数:2.00)A.67,C B.B,CC.C,DD.不确定的值解析:3.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,
25、2,4B.2,1,2,-1C.5,1,2,-1 D.1,2,3,4解析:解析 第一个 if语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象 a=2非零,判断第二个表达式 b=1也非零,所以条件成立执行 c=2的赋值操作。执行第二个 if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中 c=3运算对象为假,所以需要判断第二个运算对象 d=-1,结果为非零,所以条件成立,执行a=5,的操作,所以 a值为 5,b 值为 1,c 值为 2,d 值为-1。4.对于循环队列,下列叙述中正确的是_。(分数:2.00)A.队头指
26、针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针 解析:解析 循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以对头指针有时可能大于队尾指针有时也可能小于队尾指针,故本题答案为 D。5.为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域,next 是指向结点的指针域),则在处应填入的选项是_。(分数:2.00)A.struct link*next; B.link next;C.link*next;D.struct link next;解析:解析 本题考查链表
27、的定义形式,答案选择 A。6.以下叙述正确的是_。(分数:1.00)A.表达式 sizeof(FILE*)=sizeof(int*)的值为真 B.文件指针的值是一个整数,它的值一定小于文件字节数C.文件指针的值是所指文件的当前读取位置D.使用 fscanf函数可以向任意类型的文件中写入任意数量的字符解析:解析 sizeof(FILE*)=4,因为 FILE*为指针,指针的大小 4,sizeof(int*)=4,理由同前面。文件指针的值是地址,是一个十六进制的数,它的值不一定小于文件字节数,因此选项 B错误。文件指针是所指文件的当前读取位置,而不是文件指针的值,因此选项 C错误。intfscan
28、f(FILE*stream,constchar *format,argument.);fscanf函数可以向任意类型的文件,写入任意数量的字符,但不能超过系统的缓冲区,写文件先写入缓冲区,最后一起写入文件,因此选项 D错误。答案为 A选项。7.有以下程序: #includestdio.h main() int x, i; for(i=1; i=100; i+) x=i; if(+x%2=0) if(+x%3=0) if(+x%7=0) printf(“%d“, x); printf(“/n“); 程序的输出结果是(分数:2.00)A.28 70 B.42 84C.26 68D.39 81解析:
29、8.已知在 ASCII字符集中,数字 0的序号为 48,下列程序的输出结果为_。 main() char a=“0“,b=“9“; printf(“%d,%c/n“,a,b) ; (分数:1.00)A.因输出格式不合法B.48,57C.0,9D.48,9 解析:解析 注意输出控制符%d,%c,分别表示以十进制形式输出字符的 ASCII码值和字符。9.有以下程序: #include stdio.h #define N 2 #define M N+1 #define NUM (M+1) * M/2 main( ) printf(“%d/n“,NuM); 程序运行后的输出结果是_。(分数:5.00)
30、A.4B.8 C.9D.6解析:解析 本题考查宏定义。宏定义只是做简单的替换,执行语句 NUM=(N+1+1)*N+1/2=8,故选项 B正确。10.有以下程序: #includestdio.h void fun(double x,double *y,double *z) *y=*y-1.0;*z=*z+x; main() double a=2.5,b=9.0,*pa,*pb; pa=pb= fun(b-a,pa,pb); printf(“%f/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.8.000000B.9.000000C.1.500000 D.10.500000解析:解
31、析 main()函数定义两个 double类型的变量 a、b,分别赋初值为:2.5、9.0,另外定义两个double类型的指针变量 pa、pb,其中 pa指向 a,pb 指向 b;然后将 b-a、pa、pb 传给函数 fun,此时 x的值为 7.5,y 指向 a,z 指向 b;所以*y=*y-1.0,是将变量 a的值减去 1.0赋给 a,a 的值为1.5;*z=*z+x,是将变量 b的值加上 7.5赋给 b,b 的值为 16.5;fun()函数执行完毕后,输出 a的值为1.5。故本题答案为 C选项。11.以下叙述中错误的是_。(分数:2.00)A.C语句必须以分号结束B.复合语句在语法上被看做
32、一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 程序中所有语句都必须由一个分号“;”作为结束符。如果只有一个分号,这个分号也是一条语句,称为“空语句”,程序执行时不产生任何动作。程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号也会导致逻辑上的错误,影响程序的运行。所以选项 C的说法是错误的。12.C语言中的简单数据类型有_。(分数:2.50)A.整型、实型、逻辑型B.整型、实型、字符型 C.整型、字符型、逻辑型D.整型、实型、逻辑型、字符型解析:解析 整(数)型(长、短)、实(数)型(长、短)、字符型这 3种是最常用,也是
33、最简单的数据类型。13.若有定义:int a410;,则以下选项中对数组元素 aii引用错误的是_。(0=i4,0=i10)(分数:2.00)A.*(a00十 10*i+j)B.*(a+i)+j C.*(a+i)+j)D.*(ai+j)解析:解析 本题中选项 B是错误的引用,*(a+i)+j 只代表了 aij的地址。14.有以下程序 #includestdio.h main() int x; for(x=3;x6;x+) printf(x%2)?(“*%d“):(“#%d“),x); printf(“/n“); 程序的输出结果是_。(分数:2.50)A.*3#4*5 B.#3*4#5C.*3*
34、4#5D.*3#4#5解析:解析 本题中,printf 语句中,条件表达式的功能是对循环变量 x进行判断,若 x为奇数,输出数据前加*,否则数据前加#,所以选择 A。15.结构化程序由 3种基本结构组成,3 种基本结构组成的算法( )。(分数:1.00)A.可以完成任何复杂的任务 B.只能完成部分复杂的任务C.只能完成符合结构化的任务D.只能完成一些简单的任务解析:解析 C 程序由 3种基本的结构组成,分别为顺序结构、选择结构和循环结构,这 3种结构可以组成任何复杂的 C程序,即可以完成任何复杂的任务,故选项 B、选项 C和选项 D都不正确。所以,4 个选项中选项 A符合题意。16.以下能正确
35、定义一维数组的选项是_。(分数:2.50)A.int a5=0, 1, 2. 3, 4, 5;B.char a=0, 1, 2. 3, 4, 5; C.char a=“A“, “B“, “C“;D.int a5=“0123“;解析:解析 数组下标从 0开始,A 选项中所赋值的个数超过了数组的长度;C 选项中定义 a为字符型变量,而不是数组,赋值错误;D 选项中,整型数组不能赋字符串。17.C源程序中不能表示的数制是_。(分数:1.00)A.二进制 B.八进制C.十进制D.十六进制解析:解析 在 C语言中整型常量可以用十进制、八进制和十六进制等形式表示,但不包括二进制,因此选择 A。18.下列程
36、序的运行结果是_。 #includestdio.h void sub(int*s,int*y) static int m=4; *y=s0; m+; void main() int a=1,2,3,4,5,k; int x; printf(“/n“); for(k=0;k=4;k+) sub(a, printf(“%d,“,x); (分数:2.50)A.1,1,1,1,1, B.1,2,3,4,5,C.0,0,0,0,0,D.4,4,4,4,4,解析:解析 本题中 sub(int*s,int*y)函数的参数是两个指针型变量,在函数体内将数组 s的第一个元素赋给 y。主程序内,首先定义了一维数组
37、并赋初值,然后通过 for循环,5 次调用 sub(a, c=getchar(); if(c=“a“ else if(c=“g“ else printf(“input error!/n“); putchar(c);(分数:2.50)AfBtCe Dd解析:解析 getchar 函数是读取键盘的输入函数,本题中输入字母“a”,则 c=“a“,判断 if条件,发现“a“=“a“ int *m; int a=2,b=3,c=5; struct st s3=(101, main() struct st*p; p=s; 则以下表达式中值为 5的是_。(分数:2.00)A.(p+)-mB.*(p+)-mC
38、.(*p).mD.*(+p)-m 解析:22.已定义变量 a为整型,则不能正确表示 9a14 的表达式是_。(分数:2.00)A.!(9a c=13d=10 printf(“%d,%d/n“,c,d); 程序的运行结果是_。(分数:1.00)A.5,1 B.1,1C.18,1D.13,1解析:解析 “i10;i+) if(i=5)break; 则循环结束后 i的值为_。(分数:1.00)A.1B.0 C.5D.10解析:解析 if(i=5)break 语句,表示如果 i=5,执行 break语句,跳出循环程序,起始 i=0满足if语句,则循环结束后 i值为 0,因此答案为 B选项。29.以下叙
39、述中正确的是_。(分数:1.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号“%”解析:解析 scanf 函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,所以 A正确。scanf 函数的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可以,所以 B错误。printf 函数可以输出常量,也可以输出变量,所以 C错误。printf 函数可
40、以用“/%”来输出百分号“%”,所以 D错误。30.以下选项中叙述错误的是_。(分数:1.00)A.C程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 D.C程序函数的形参不可以说明为 static型变量解析:解析 A 选项描述正确,自动变量未赋初值,为随机值;B 选项描述正确,变量定义除在函数开始位置外,在复合语句开始也可以;C 选项描述是错误的,函数内的静态变量,只在第一次调用时候赋值,以后凋用保留上次值;D 选项描述也正确,形参属于局部变量,占
41、用动态存储区,而 static型变量占用静态存储区。因此 C选项正确。31.设 int a12,则执行完语句 a+a-a*a 后,a 的值是 _(分数:1.00)A.552B.264C.144D.-264 解析:32.有以下程序 #include stdio.h void fun1(char *P) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() char a=“Program“,*p; p= fun1(p); printf(“%s/n“,a); 程序执行后的输出结果是_。(分数:1.00)A.Prohsbn B.PrphsbnC.Progsbn
42、D.Program解析:解析 函数 fun1功能是将字符串中元素加 1,main 函数将数组第 4个元素的指针传进 fun1函数中,所以答案选择 A。33.下列关于 C语言文件的叙述中正确的是_。(分数:1.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件 D.文件由字符序列组成,其类型只能是文本文件解析:解析 本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为 C选项。34.以下程序的输出结果是_。 #includestdio.h main() i
43、nt a=4,b=3,c=2,d=1; printf(“%d“,ab?a:dc?d:b);(分数:2.00)A.1 B.3C.2D.4解析:35.下列语句组中正确的是_。(分数:1.50)A.char*s;s=“Olympic“; B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;解析:解析 字符型指针变量可以用 A选项的赋值方法:char*s;s=“Olympic“。C 选项的写法:char*s,s=“Olympic“;是错误的。字符数组可以在定义的时候初始化:char s=“Olympic“;或者char s=
44、“Olympic“,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以 B选项和 D选项都是错误的。对于本例,B、D 选项中字符数组 s的大小至少为 8,才能存放下字符串(字符串的末尾都有结束标志“/0“),同时此时 s为字符数组的地址,是常量,不能为其赋值。36.有如下程序段: int k; for(k=2;k=0;) printf(“%d“,k-); 则 for循环体执行的次数是_。(分数:1.00)A.0次 B.1次C.2次D.无限次解析:解析 for(k=2;k=0;)表示给 k赋值 2,如果 k等于 0,则进入循环,但是 k不满足条件,因此循环体不执行。正确
45、答案为 A选项。37.以下叙述中正确的是_。(分数:1.00)A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据D.C语言中的文件是流式文件,因此只能顺序存取数据解析:解析 若使用打开文件函数 fopen()打开文件时,指定打开方式为“a“,则可以向文件追加信息,而不是覆盖原文件内容,故 B选项错误;在文件被打开后,使用文件定位函数 rewind()或 fseek()函数,可以将文件指针移到文件的任何位置,所以在写
46、操作完成后,可以直接将文件指针定位到文件首,接着读数据,而不需要先关闭文件,再打开读取,故 C选项错误;使用文件定位函数可以随机读写文件,故 D选项错误;文件一旦使用完毕,应该使用关闭文件函数把文件关闭,以避免出现文件数据丢失等错误,故选项 A正确。38.有下列程序: #includestdio.h #includestring.h typedef struct stu char name9; char gender; int score; STU; void f(STU *a) STU c=“Sun“,“f,90,*d= a=d; strcpy(a-name,c.name); a-gender=c.gender; a-score=c.score: printf(“%s,