nbhkdz.com冰点文库

中科大软院考研复试c语言题库

时间:2016-03-15


中科大软院考研复试c语言题库
一、单选题 1、有以下程序 #define N 20 fun(int a[],int n,int m) { int i,j; for(i=m;i>=n;i--) a[i+1]=a[i]; } main() { int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i<5;i++) printf("%d",a[i]); } 程序运行后的输出结果是______。 A:10234 B:12344 C:12334 D:12234 答案:C 评析: 本题考查的是循环的嵌套。 本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用"fun(a,2,9);"可知,函数 fun用于将a[2]到a[9]的各元素依次向后移一位, 移完后, a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10, 故输出的前5个数组元素为12334。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义 2、有以下程序 #define P 3 void F(int x){return(P*x*x);} main() {printf("%d\n",F(3+5));} 程序运行后的输出结果是______。 A:192 B:29 C:25D:编译出错 答案:D 评析: 本题考查的是宏定义。 return语句用于从被调函数带回一个函数值。void关键字表示"无类型",即不需要从被调函数中带回函数值, 所以不需要return语句,故编译时出错。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值、宏定义

3、有以下程序 int fun1(double a){return a*=a;}

1

int fun2(double x,double y) { double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b); } main() {double w;w=fun2(1.1,2.0);……} 程序执行后变量w中的值是______。

A:5.21

B:5

C:5.0

D:0.0

答案:C 评析: 本题考查的是数值类型的定义与强制转换。 本题在进行调用函数fun2()时, 又对函数fun1()进行了调用, 由于函数fun1()定义为整型, 所以第一次调用fun1() 时返回的值为1,然后再将1赋值给a,此时由于a为double型,则系统自动类型转换,将1转换成了1.000000赋值 给了变量a,以此类推,得b的值为4.000000,然后通过"return(int)(a+b);"将a+b的值强制转换为int型5返回 给主函数,此时又由w的类型为double,所以返回的整型值5又被转换为double型。故输出结果为5.0。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数、不同类型数据间的转换与运算

4、若有以下函数首部 int fun(double x[10], int *n) 则下面针对此函数的函数声明语句中正确的是______。

A:int

fun(double x, int *n);

B:int

fun(double, int );

C:int

fun(double *x, int n);

D:int

fun(double *, int *);

答案:D

2

评析: 本题考查的是函数的声明。 函数声明可以照写已定义的函数的首部,再加一个分号就成为了对函数的声明,在函数声明中也可以不写形参 名,而只写形参的类型,但要保证与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参 数顺序相同。字符数组可用指针来表示,所以选项D正确。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的定义方法、指针

5、有以下程序 void f(int n,int *r) { int r1=0; if(n%3==0) r1=n/3; else if(n%5==0) r1=n/5; else f(--n,&r1); *r=r1; } main() { int m=7,r; f(m,&r); printf("%d\n",r); } 程序运行后的输出结果是______。

A:2

B:1

C:3

D:0

答案:A 评析: 本题考查的是指针作为函数的参数和函数的调用。 题目中定义了一个指针变量r作为形参的f()函数。在主函数main()中定义了两个变量m和r,同时给m赋初值7, 执行"f(m,&r);"语句,调用f()函数并将m的初值7传递给形参n,将r的地址传给形参指针变量r。f()函数中通过 指针r将最后的值返回。首先执行if语句中的条件:n%3==0,7%3=1条件为假,执行第一个else下的语句,同样 不满足条件,再执行第二个else下的语句,n自行减一,n=6,再执行if语句,满足条件,r1=2,把r1的值2赋给 指针变量r所指向的存储单元,即为主函数r的值,输出结果为2。 故本题答案选A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

3

知识点:C综合题目部分/知识点/综合/用指针作函数参数

6、有以下程序 #include <stdio.h> #include <string.h> void fun( char s[][10],int n) { char t; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) /* 比较字符串的首字符大小,并交换字符串的首字符 */ if(s[i][0]>s[j][0]) {t=s[i][0];s[i][0]=s[j][0];s[j][0]=t;} } main() { char ss[5][10]={"bcc","bbcc","xy","aaaacc","aabcc"}; fun(ss,5); printf("%s,%s\n",ss[0],ss[4]); } 程序的运行结果是______。

A:xy,aaaacc

B:aaaacc,xy

C:xcc,aabcc

D:acc,xabcc

答案:D 评析: 本题的考查点是循环嵌套。 函数fun的功能是对数组中的每个字符串的第一个字符按由小到大的顺序排序, 最终输出数组的第一个和第五个 的字符串。比较各字符串的首字符可知,字符'a'最小,字符'x'最大,所以输出的ss[0]的值为acc,ss[4]的值 为xabcc。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套

7、有以下程序 void f(int *x,int *y) { int t; t=*x;*x=*y;*y=t; } main() { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;

4

p=a;q=&a[7]; while(p<q) {f(p,q);p++;q--;} for(i=0;i<8;i++) printf("%d,",a[i]); } 程序运行后的输出结果是______。

A:8,2,3,4,5,6,7,1,

B:5,6,7,8,1,2,3,4,

C:1,2,3,4,5,6,7,8,

D:8,7,6,5,4,3,2,1,

答案:D 评析: 本题考查的是函数的调用。 本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。 在主函数中, 能过"p=a;q=&a[7];"将指针变 量p指向了数组的第一个元素, 指针变量q指向了数组的最后一个元素。 通过"f(p,q)"调用函数f进行对称的数组 元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为87654321,所以程序输出的结果为 8,7,6,5,4,3,2,1,。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

8、已定义以下函数 fun(char *p2, char *p1) {while((*p2=*p1)!='\0'){p1++;p2++;} } 函数的功能是______。

A:将p1所指字符串复制到p2所指内存空间

B:将p1所指字符串的地址赋给指针p2

C:对p1和p2两个指针所指字符串进行比较

D:检查p1和p2两个指针所指字符串中是否有'\0'

答案:A

5

评析: 本题的考查点是函数。 while((*p2=*p1)!='\0'表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。在这里 "*P2=*p1"是赋值操作,而不是比较是否相等,比较应当为双等号"=="。所以B,C,D都不对。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

9、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include <string.h> void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for (j=i+1;j<n;j++) if(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是______。

A:6

B:4

C:5

D:3

答案:C 评析: 本题的考查点是比较字符串的大小。 比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直 至字符串结束,结合本题可知,比较后的字符串数组为: p[0]="dcdbe" p[1]="cd" p[2]="abc" p[3]="abbd" p[4]="aabdfg" 所以,strlen(p[0])=5。 故本题答案为C。

6

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构

10、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) { int i,t; for(i=0;i<n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf("%d\n",s); } 程序运行后的输出结果是______。

A:22

B:10

C:34

D:30

答案:A 评析: 本题的考查点是对数组的操作。 本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9, 10。通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/数组、函数、FOR循环结构

11、有以下程序 void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-'a'+'A'; s++; } } main()

7

{ char str1[100]="abcddfefdbd",c='d'; ss(str1,c); printf("%s\n",str1); } 程序运行后的输出结果是______。

A:ABCDDEFEDBD

B:abcDDfefDbD

C:abcAAfefAbA

D:Abcddfefdbd

答案:B 评析: 本题的考查点是将字符串中指定的小写字母转换为大写字母。 在主函数中,因为c被赋值为字符'd',所以函数的功能是将字符串中d字母转换为大写。 故本题答案为B。 等级:3 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数、WHILE和DO WHILE循环结构

12、以下程序的输出结果是______。 char cchar(char ch) { if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch; } main() { char s[]="ABC+abc=defDEF",*p=s; while(*p) { *p=cchar(*p); p++; } printf("%s\n",s); }

A:abc+ABC=DEFdef

B:abc+abc=defdef

C:abcABCDEFdef

8

D:abcabcdefdef

答案:B 评析: 本题中cchar函数的作用是: 如果参数ch是大写字母, 则将它转换成小写的, 而对大写字母以外的字符不起作用。 所以答案应该是B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,循环、指针

13、设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, i; for(i=0;i<3;i++) printf("%d\n",f(a)); } A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7

A:A)

B:B)

C:C)

D:D)

答案:A 评析: 本题考查的是C语言的静态数据类型。 静态数据类型的变量的值在退出了函数时依然存放在内存中, 且只初始化 一次。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

9

知识点:没有定义

14、下列程序的运行结果是______。 void fun(int *a,int *b) { int *k; k=a;a=b;b=k; } main() { int a=3,b=6,*x=&a,*y=&b; fun(x,y); printf("%d %d",a,b); }

A:6 3

B:3 6

C:编译出错

D:0 0

答案:B 评析: 本题中主函数里的x、y,fun函数里的a,b,k,这些都是指针,fun函数中只是将a,b这两个指针交换了位置, 而并没有改变主函数中变量a,b的值。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

15、有以下程序 main() { int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i<3;i++) if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf("%d\n",a[0][1]+a[1][1]+a[1][2]); } 执行后输出结果是______。

A:7

10

B:6

C:8

D:无确定值

答案:A 评析: 本题的考查点是二维数组和指针数组的应用。 在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素 pa[1][i]的值 减1,当 i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结 果就是2+4+1=7。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、2级指针

16、有以下程序 main() {char str[][10]={"China","Beijing"},*p=str; printf("%s\n",p+10); } 程序运行后的输出结果是______。

A:China B:Bejing C:ng D:ing

答案:B 评析: 此题考的是指向数组元素的指针变量。 本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放 第二行的元素。此题二维数组str[0]前5个元素为''C','h','i','n','a','\0',第6个元素为'\0',后4 个元素为空字符。紧接着内存单元存放的内容即从str[1][0]到str[1][9]为'B','e','i','j','i','n', 'g','\0',第八个元素为'\0',后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址, 所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此 题将*p=str改为(*p)[10]=str;则p+10指的就是str的第10行,如果此时要想输出Beijing,则必需将p+10改为 p+1, 因为(*p)[10]中的p是行指针, 它是指向包含10个元素的一维数组, 那么p+1就是加的一行了; 而本题的p+1 只是移动一个位置,因为此题的p只是一个指针变量。

11

故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/指向数组元素的指针变量

17、有以下程序段 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; b中的值是______。

A:5

B:6

C:8

D:9

答案:D 评析: int *p中p为指向整型数据的指针变量,*p为指针变量p所指向的变量。指针变量中只能存放地址(指针),本 题中p存放的是a[3]的地址,即p指向数组{4,5,6,7,8,9,10},b=p[5]=9。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

18、若有以下说明和语句 int c[4][5],(*p)[5]; p=c; 能够正确引用c数组元素的是______。

A:p+1

B:*(p+3)

C:*(p+1)+3

D:*(p[0]+2)

12

答案:D 评析: 本题考查的是数组元素的引用。 如果定义一个指针指向二维数组的一行,则可以移动到下一行,这就是行指针。行指针的定义格式为:[存储类 型] 数据类型(*指针)[n] 这里的n是一个整数,表示所指向的二维数组的列数。(*p)[5]中p是指向一个包含5 个元素的一维数组,p的值就是该一维数组的首地址。所以当用行指针访问二维数组时,行指针每增加1,就移 动一行,即指向二维数组的下一行,例如此题中的p+i将指向数组的第i行。即选项A所指的意思是指向数组c的 第1行,并不是引用c数组的元素;B答案中p+3是指向数组元素的第3行,*(p+3)是指第三行第零个元素的地址; 选项C由对选项A,选项B的解释可知,它指的是第一行第3列元素的地址;选项D中p[0]+2是指第0行第2列元素的 地址,再加个*就表示第0行第2列的元素,即c[0][2]。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

19、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元 int *p; p= ______ malloc(sizeof(int) ); 则应填入______。

A:int

B:int *

C:(*int)

D:(int*)

答案:D 评析: 本题的考查点是强制类型转换。 不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数 据类型 *)。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/不同类型数据间的转换与运算、指针

20、若有以下说明和语句,请选出哪个是对c数组元素的正确引用______。 int c[4][5],(*cp)[5];

13

cp=c;

A:cp+1

B:*(cp+3)

C:*(cp+1)+3

D:*(*cp+2)

答案:D 评析: 本题的考查点是数组元素的引用。 cp=c这个语句是将数组c的首地址赋给了指针数组cp的第一个数组元素。 选项A,cp+1是指将数组c的首地址加1,不是对数组元素的引用; 选项B,*(cp+3)是地址等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用; 选项C,*(cp+1)+3是地址等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

21、设有以下语句,其中不是对a数组元素的正确引用的是:______(其中0≤i<10) int a[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;

A:a[p-a]

B:*(&a[i])

C:p[i]

D:*(*(a+i) )

答案:D 评析: 本题的考查点是通过指针引用数组元素。 观察程序可知,a实际上就是数组a的首地址,所以"*(a+i)"表示的就是数组a中的第i个元素的值,进而,我们 可以知道 *(*(a+i) ) 必然不是对a数组元素的正确引用。 故本题答案为D。

14

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

22、下面程序 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d\n",*(p+2) ); } 的输出是______。

A:3

B:4

C:1

D:2

答案:A 评析: 本题的考查点是通过指针引用数组元素。 *p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

23、下面程序 void prtv(int *x) { printf("%d\n",++*x); } main() { int a=25; prtv(&a); } 的输出是______。

A:23

B:24

15

C:25

D:26

答案:D 评析: 本题的考查点是指针变量作为函数参数。 观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a 的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中值加一,打 印结果自然就是25+1=26了。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

24、下面函数 int fun1(char*x) { char *y=x; while(*y++); return(y-x-1); } 的功能是______。

A:求字符串的长度

B:比较两个字符串的大小

C:将字符串x复制到字符串y

D:将字符串x连接到字符串y后面

答案:A 评析: 本题的考查点是while()循环语句。 这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会 多一。 故本题答案是A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

16

知识点:C综合题目部分/知识点/综合/WHILE和DO WHILE循环结构

25、以下程序的输出结果是______。 main() { char *s="12134211"; int v[4]={0,0,0,0},k,i; for (k=0;s[k];k++) { switch(s[k]) { case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; } for(k=0; k<4;k++) printf("%d ",v[k]); }

A:4

2 1

1

B:0

0 0

8

C:4

6 7

8

D:8

8 8

8

答案:B 评析: 本题的考查点是switch语句的应用。 在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k]的值与case后的字符常量进行比较,找到与之 匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执 行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递 加。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

26、有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 main() { int i; for(i=1;i<=NUM;i++)printf("%d\n",i); }

17

该程序中的for循环执行的次数是______。

A:5

B:6

C:7

D:8

答案:B 评析: 在C语言中,宏定义在编译时将被直接替换,所以NUM最后会被替换成2*N+1+1,即2*2+1+1,值为6。因此,for 循环执行的次数为6。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、宏定义

27、有如下程序 main() { int n[5] = {0,0,0},i,k = 2; for(i = 0; i < k; i++) n[i] = n[i] + 1; printf("%d\n",n[k]); } 该程序的输出结果是______。

A:不确定的值

B:2

C:1

D:0

答案:D 评析: 由代码可知,题中的for循环值执行2次(i = 0和1),所以只对a[0]和a[1]重新赋了值,而a[k]即a[2]的值并 没有变,仍为0。

18

本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组

28、有如下程序 main() { int a[3][3] = {{1,2},{3,4},{5,6}}, i,j,s = 0; for(i = 1; i < 3; i++) for(j = 0; j <= i; j++) s += a[i][j]]; printf("%d\n",s); } 该程序的输出结果是______。

A:18

B:19

C:20

D:21

答案:A 评析: 题中的外循环只执行了2次: 第1次: a[1][0] = 3,a[1][1] = 4,所以s = 7; 第2次: a[2][0] = 5,a[2][1] = 6,a[2][2] = 0,所以s = 7 + 5 + 6 + 0 = 18。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套 数组

29、有如下定义 struct person{char name[9]; int age;}; struct person class[10] = { "John",17, "Paul",19, "Mary",18, "Adam",16,}; 根据上述定义,能输出字母M的语句是______。

19

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]);

答案:D 评析: 选项A将输出A;选项B将输出d;选项C将输出a;选项D将输出M。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

30、有以下程序 main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for (j=2;j>=i;j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i<8;i++) printf("%d",x[i]); printf("\n"); } 程序运行后的输出结果是______。

A:75310246

B:01234567

C:76310462

D:13570246

答案:A 评析: 本题考查的是排序算法。

20

for(i=0;i<3;i++) for (j=2;j>=i;j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[0]到x[3]中的数由大到小进行排列,运行此段程序后x[]中的值变为 x[]={7,5,3,1,2,4,6,0} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[4]到x[7]中的数由小到大进行排列,运行此段程序后x[]中的值变为 x[]={7,5,3,1,0,2,4,6} 最后通过一个循环将X[]中的数依次输出。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套、数组

31、下面程序的输出结果是______。 main() { int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%d\n",*p+9); }

A:0

B:1

C:10

D:9

答案:C 评析: 本题中,p=a,则表明指针p指向数组a的第一个元素,即a[0]。指针运算符"*"的优先级高于加法运算符"+",所 以"*p+9"相当于a[0]+9,即10。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

32、以下程序的输出结果是______。 #define SQR(X) X*X main()

21

{ int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf("%d\n",a); }

A:16

B:2

C:9

D:1

答案:B 评析: 本题所考查的是宏定义。C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。 在做这条题时,我们也不妨将运用置换法。得到: a/=k+m*k+m/k+m*k+m=16/7=2。 注:a为整形,所以在做除法时,自动取整。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/复合语句、宏定义

33、若定义了以下函数: void f(……) {…… *p=(double*)malloc(10*sizeof(double)); …… } p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是______。

A:double *p

B:float **p

C:double **p

D:float *p

答案:C

22

评析: 通过程序中给出的语句,我们可以判断,*p是一个指向double型指针的指针。因此,要通过p把动态分配存储单 元的地址传回主调函数,应该使用double **p。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/返回指针值的指针函数

34、设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, i; for(i=0;i<3;i++) printf("%d\n",f(a)); } A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7

A:A)

B:B)

C:C)

D:D)

答案:A 评析: 本题考查的是C语言的静态数据类型。 静态数据类型的变量的值在退出了函数时依然存放在内存中, 且只初始化 一次。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数

23

35、若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是______。

A:i=*p;

B:*p=*&j;

C:i=&j;

D:i=**p;

答案:B 评析: 本题考查C语言中指针赋值运算。指针是一种特殊的变量,它是用来存放变量地址的变量。指针定义时可以为其 赋初值。只有指针被赋了值后才能对其使用。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/表达式语句,空语句,复合语句、指针

36、以下定义语句中,错误的是______。

A:int a[]={1,2};

B:char *a[3];

C:char s[10]="test";

D:int n=5,a[n];

答案:D 评析: 本题考查C语言数组的定义与初始化。 在C语言中数组的初始化可以对部分元素,数组的定义,不能含有变量。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/C的数据类型及其定义方法、数组

24

37、以下程序的输出结果是______。 main() { int i,a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf("%d%d%d",a[2],a[5],a[8]); }

A:258

B:741

C:852

D:369

答案:C 评析: 本题使循环语句给数组元素赋值。 C语言中for循环语句的一般形式为: for(表达式1;表达式2;表达式3) { 语句部分; } 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组

38、以下程序的输出结果是______。 main() { char st[20]="hello\0\t\\"; printf("%d%d\n",strlen(st),sizeof(st)); }

A:99

B:520

C:1320

25

D:2020

答案:B 评析: 本题主要考查C语言的字符串与库函数。 C语言中字符串是以'\0'字符结束的, 且strlen()函数计算的是'\0'字符前的所有字符的个数。 本题中strlen(st) 应为5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量 或数组的所分配到的内存空间的大小。所以本题的sizeof(st)为20。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/不同类型数据间的转换与运算

39、以下程序输出正确的是______。 amovep(int *p,int (*a)[3],int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++){ *p=a[i][j];p++; } } main() { int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int*)malloc(100); amovep(p,a,3); printf("%d%d\n",p[2],p[5]);free(p); }

A:56

B:25

C:34

D:程序错误

答案:A 评析: 本题主要考查的是指针与数组的操作。可以用malloc()函数为指针分区内存空间,用free()函数释放指针变量 所用内存空间。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人:

审核人:

26

创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组、指针

40、以下程序的输出结果是______。 struct HAR { int x,y;struct HAR *p;} h[2]; main() { h[0].x=1;h[0].y=2; h[1].x=3;h[1].y=4; h[0].p=&h[1];h[1].p=h; printf("%d%d\n",(h[0].p)->x,(h[1].p)->y); }

A:12

B:23

C:14

D:32

答案:D 评析: 本题考查的是C语言中结构体与链表。本题中是一个含有两个结点的循环链表。 C语言中结构体的定义为: struct 结构体类型名 { 成员表列; }; 本题答案为D。

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

41、以下程序的输出结果是______。 union myun { struct { int x,y,z;}u; int k; }a; main(0 { a.u.x=4;a.u.y=5;a.u.z=6; a.k=0; printf("%d\n",a.u.x);

27

}

A:4

B:5

C:6

D:0

答案:D 评析: 本题主要考查C语言中构造类型,联合体与结构体。结构体中的成员使用各自的存储区,而联合体中的成员使用 共同的存储区。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

42、若有说明语言: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);

答案:A 评析: 在scanf语句中,要为某一变量赋值,引用的是该变量的地址,所以在这里要为a,b,c 赋值可以写成两种形式, 除了采用答案B的形式外,还可以写成scanf("%d%d%d",&a,&b,d)。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/表达式语句,空语句,复合语句、指针

28

43、若定义:int a=511,*b=&a:,则printf("%d\n",*b):的输出结果为______。

A:无确定值

B:a的地址

C:512

D:511

答案:D 评析: 本题,首先定义了一个整型变量a,并将它赋值为511,然后又定义了一个指针变量,将它赋值为变量a的地址, 在输出语句中,输出项是*b,而*b=a,所以输出结果应该是511。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/数据的输入与输出,指针

44、以下程序的输出结果是______。 main() {int a=0,i; for(i=1;i<5;i++) { switch(i) {case0: case3:a+=2; case1: case2:a+=3; default:a+=5; } } printf("%d\n",a) }

A:31

B:13

C:10

D:20

29

答案:A 评析: switch结构的执行过程为:进入switch结构后,对条件表达式进行计算,然后从上至下去找与条件表达式的值 相匹配的case,以此作为入口,执行switch结构中后面的各语句。第一次for循环中,switch结构的条件表达式i 的值是1,则从case 1 开始执行后面的语句,先执行a+=3,a的值变成3,接着执行a+=5,a的值变成了8。然后 进入第二次循环,switch结构条件表达式i的值2,则从case 2开始执行后面的语句,结束第二轮循环时a的值是 16,在第三轮循环中,switch结构条件表达式的值是3,则从case 3后面的语句开始执行,a+=2 语句使a的值变 成了18,然后执行a+=3,和a+=5,第三轮循环结束时,a的值是26。第四轮循环中, switch结构条件表达的值 是4,从default处开始执行,执行一个a+=5的操作,a的值变成了31,i 的值经修改变成了5,不再满足循环条 件,退出循环。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环

45、以下程序的输出结果是______。 #include <stdio.h> main() { int i=0,a=0; while(i<20) { for(;;) { if((i%10)==0) break; else i--; } i+=11; a+=i; } printf("%d\n",a); }

A:21

B:32

C:33

D:11

答案:B 评析: 本题中,有两个循环语句。首先,i=0,进入while循环,for语句中对循环没有任何条件,故直接进入for循环, 因为0%10结果还是0,所以跳出for循环,执行i+=11,i的值变为11,执行a+=j,a的值变为11;接着进入下一轮 while循环,在for循环中,因为i的值是11,对10取余结果为1,所以执行i自减,i的值变成10,进入又一轮for 循环,因为10%10==0,所以跳出for循环,执行i+=11,i的值变成21,执行a+=i,也就是将21+11的和赋给a,a=32,

30

因为此时i的值不再小于20,所以结束循环,故输出结果是32。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环

46、以下程序的输出结果是______。 int f( ) { static int i=0; int s=1; s+=i; i++; return s; } main() { int i,a=0; for(i=0;i<5;i++) a+=f( ); printf("%d\n",a); }

A:20

B:24

C:25

D:15

答案:D 评析: 本题主要考的是对变量存储属性的理解,一个变量被指定为静态变量,在编译时就为其分配了存储空间,程序 一开始执行便被建立,直到该程序执行结束都存在,而不像动态变量只存在于函数或分程序被调用期间。在函 数多次被调用的过程中静态局部变量的值具有可继承性。在第一次调用函数结束时,i的值是1,返回值1,第二 次调用函数时,i的值保侍为1,执行自加操作后,i的值变成了2,到了第三次调用时,i的值保持了上次调用结 束时的值,再执行自加,值变成了3。到第五次调用结束时,i的值是5。而s的值不具备i的这种可继承性,每次 调用时,它都先被重新赋值为1,再执行下面的操作。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数

47、以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n)

31

{int *p,*s; for(p=a,s=a; p-a<n; p++) if ( _____ ) s=p; return(*s); } main() {int x[5]={12,21,13,6,18}; printf("%d\n",findmax(x,5)): } 在下划线处应填入的是______。

A:p>s

B:*p>*s

C:a[p]>a[s]

D:p-a>p-s

答案:B 评析: findmax函数求的是数组元素的最大值,首先让指针p,s都指向a[0],由最后的return语句可以知道,最终s代表 数组元素最大值的地址,要实现这个目的,就要让s指针指向的内容与数组元素逐个比较,把较大值的地址放在 s中,而在for循环中,每做一次循环,p指针自加一次,即指针p遍历了整个数组,所以应该在循环语句中,用p 指针指向的内容与s指针指向的内容作比较,并让两者间大值的地址存入s。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、综合

48、以下程序的输出结果是______。 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t); }

A:3

B:4

C:1

32

D:9

答案:B 评析: 本程序中,有两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值0,执行一次 t=t+b[i][b[j][j]],得到t=1,退出内循环,接着进入第二次外循环,在第二次外循环结束时t=2,然后执行第三 次外循环,得到t=4,退出循环,输出t的值。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组

49、以下程序的输出结果是______。 #inclue <stdio.h> #inclue <string.h> main() { char b1[8]="goddwer",b2[8],*pb=b1+3; while(--pb>=b1) strcpy(b2,pb); printf("%d\n",strlen(b2)); }

A:8

B:3

C:1

D:7

答案:D 评析: 本题中,每次执行循环,都是将pb指针指向的内容复制到b2中,第一次循环中,将b1[2]~b1[7]六个字符复制到 b2中,第二次循环,将b[1]~b[7]七个字符复制到b2中,第三次循环,将b1数组的全部内容复制到b2中。而后一 次复制会覆盖前面的复制,最后b2的实际长度应该是八,而strlen()函数测出的是一个字符串中"\0"之前的全 部字符的个数,所以最后输出的值是七。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/WHILE和DO WHILE循环结构、数组、字符串

33

50、在说明语句:int *f();中,标识符f代表的是______。

A:一个用于指向整型数据的指针变量

B:一个用于指向一维数组的行指针

C:一个用于指向函数的指针变量

D:一个返回值为指针型的函数名

答案:D 评析: int * f() 表示f是一个函数,它带回一个指针值,这个指针是指向一个整型数据的。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/C的数据类型及其定义方法、指针

51、以下程序的输出结果是______。 int x=3; main() { int i; for(i=1;i<x;i++) incre(); } incre() { static int x=1; x*=x+1; printf(" %d",x); }

A:3

3

B:2

2

C:2

6

D:2

5

答案:C 评析:

34

incre()中定义一个静态局部变量x,它的作用范围仅限于本函数中, 而不会影响main()函数中的x值, 所以main() 中执行两次for循环,第一次调用incre()函数时,函数中x的初值是1,x*=x+1语句可以写成x=x*(x+1),结果x 的值变成2,随后输出值2;在第二次调用incre()函数时,x的值继承了上次调用的运行结果,变成了2,执行了 x*=x+1后,x的值是6,故又输出了数字6。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数

52、已定义以下函数 fun(int *p) { return *p; } 该函数的返回值是______。

A:不确定的值

B:形参p中存放的值

C:形参p所指存储单元中的值

D:形参p的地址值

答案:C 评析: 本题的考查点是函数的返回值。 本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/返回指针值的指针函数

53、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++) printf("%d,",aa[i]);

35

printf("\n"); } 程序运行后的输出结果是______。

A:1,2,3,4,5,6,7,8,9,10,

B:10,9,8,7,6,5,4,3,2,1,

C:1,2,3,8,7,6,5,4,9,10,

D:1,2,10,9,8,7,6,5,4,3,

答案:C 评析: 本题的考查点是对数组的操作。 本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数、数组

54、有以下程序 int f(int n) {if (n==1) return 1; else return f(n-1)+1; } main() {int i,j=0; for(i=1;i<3;i++) j+=f(i); printf("%d\n",j); } 程序运行后的输出结果是______。

A:4

B:3

C:2

D:1

36

答案:B 评析: 本题的考查点是函数的递归调用。 j+=f(i)即为j=j+f(i)=f(1)+f(2)=1+(f(1)+1)=3。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数

55、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是______。

A:for(i=0;i<6;i++) printf("%2d",*(p++));

B:for(i=0;i<6;i++) printf("%2d",*(p+i));

C:for(i=0;i<6;i++) printf("%2d",*p++);

D:for(i=0;i<6;i++) printf("%2d",(*p)++);

答案:D 评析: 此题考的是指向数组元素的指针。 *p=x的作用是将x的首地址(即x[0]的地址)赋给指针变量p,那么程序段A当i=0时,*(p++)虽然是先执行括号 内的表达式,但括号内表达的++是在p的后面,所以它要先执行p再加,即先取*p(x[0]),再使得p加1,为i=2时 取下一个元素作准备。 选项C中因为*和++是处于同一优先级别,而结合方向为自右而左,因此*p++相当于*(p++),所以选项A和选项C 都是可以输出6个元素的值的。 选项B,p表示x的首地址即x[0]的地址,p+i则表示x[i]的地址,那么*(p+i)就表示x[i]的值,所以选项C也是可 以输出6个元素的值的;选项D由于(*p)++后面的++是使*p的值+1,又因为*p指的是x[0]的值,所以它不能实现 地址的依次向下移动,每次循环只是x[0]的值在改变,而p的值并没有丝毫变化,所以它并不能实现6个元素的 输出。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

56、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) {int i,t; for(i=0;i<n/2;i++)

37

{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() {int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf("%d\n",s); } 程序运行后的输出结果是______。

A:22

B:10

C:34

D:30

答案:A 评析: 本题的考查点是对数组的操作。 本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9, 10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组、函数

57、有以下程序 struct STU {char num[10]; float score[3]; } main() {struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75}, {"20023",100,95,90}},*p=s; int i; float sum=0; for(i=0;i<3;i++) sum=sum+p->score[i]; printf("%6.2f\n",sum); } 程序运行后的输出结果是______。

A:260.00

38

B:270.00

C:280.00

D:285.00

答案:B 评析: 本题的考查点是结构体数组。 通过for循环计算每个学生的总分,但是最后打印的只是最后一个学生的总分。因为sum定义的是实型变量,所 以最后结果应为实型数据。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、结构体数组

58、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include <string.h> void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for (j=i+1;j<n;j++) if(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() {char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是______。

A:6

B:4

C:5

D:3

答案:C 评析: 本题的考查点是比较字符串的大小。

39

比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直 至字符串结束,结合本题可知,比较后的字符串数组为: p[0]="dcdbe" p[1]="cd" p[2]="abc" p[3]="abbd" p[4]="aabdfg" 所以,strlen(p[0])=5。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数、数组

59、以下叙述正确的是______。

A:C语言比其他语言高级

B:C语言可以不用编译就能被计算机识别执行

C:C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D:C语言比其他高级语言出现的最晚、具有其他语言的一切优点

答案:C 评析: 本题的考查点是C语言的特点。 C语言主要有如下一些特点: 1,语言简洁、紧凑,使用方便、灵活; 2,运算符丰富; 3,数据结构丰富,具有现代化语言的各种数据结构; 4,具有结构化的控制语句; 5,语法限制不太严格,程序设计自由度大; 6,C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。 7,生成目标代码质量高,程序执行效率高; 8,用C语言写的程序可移植性好。 但是所有的语言都不可能没有任何缺点,C语言也不例外,C语言是高级语言,需要通过编译才能被计算机识别。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/程序的构成,MAIN函数和其他函数

60、有以下程序 main()

40

{ int i; for(i=0;i<3;i++) switch(i) { case 1: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); } } 执行后输出的结果是______。

A:011122

B:012

C:012020

D:120

答案:A 评析: 本题的考查点是switch语句。 switch语句在执行时先计算表达式i的值,当表达式i的值与某一个case中的常量表达式的值相等时,就执行该 case后面的语句系列,接着再执行后面各个case中的语句序列,一直到执行完default后面的语句序列,然后结 束switch。 如果所有case中的常量表达式的值都没有与表达式i的值相匹配, 就只执行default后面的语句序列。 break语句与switch语句配合使用,可以强行控制程序流程退出switch。 由于本题没有与break语句配合使用,因此在执行完"case 1"以后,还要继续执行"case2"和"defult"。 当i=0时,执行defult语句,输出0; 当i=1时,执行case 1语句,输出1,因为没有break控制程序流程退出,所以继续执行下面的语句,输出11,以 此类推。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环

61、有以下程序 main() { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k+p[i]; i++;} printf("%d\n",k); } 执行后输出的结果是______。

A:58

41

B:56

C:45

D:24

答案:D 评析: 本题的考查点是while循环语句。 while语句是先判断后执行。 i=0时,i<7为真,p[0]%2=11%2=1为真,k=k+p[0]=11; i=1时,i<7为真,p[1]%2=13%2=1为真,k=k+p[1]=11+13=24; i=2时,i<7为真,p[2]%2=14%2=0为假,结束循环。 所以打印输出24。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

62、有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else return y; } main() { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } 执行后输出结果是______。

A:7,8,8

B:7,8,7

C:8,7,7

D:8,7,8

42

答案:B 评析: 本题的考查点是指针变量作为函数参数。 f是用户定义的函数,它的作用是返回变量值小的那个。f函数的两个形参x,y是指针变量。程序开始执行时,先 初始化a和b的值,然后将a,b的地址分别赋给指针变量p和q,即使p指向a,q指向b。接着执行f函数,注意p和q 是指针变量,在函数调用开始时,实参变量将它的值传送给形参变量。采取的依然是"值传递"方式。因此虚实 结合后形参x的值为&a,y的值为&b。这时x和p都指向变量a,y和q都指向b。接着执行f函数的函数体,输出*x 和*y小的那个值。 函数调用结束后, x和y不复存在, 最后在main函数中输出的*r的值即为a和b小的那个值, 即7, *p,*q的值未变。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/用IF语句实现选择结构、指针、函数

63、有以下程序 main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) { printf("%d ",m[k][i]); } } 执行后输出结果是______。

A:4 5 6

B:2 5 8

C:3 6 9

D:7 8 9

答案:C 评析: 本题的考查点是二维数组的应用。 m[][3]即为定义的一个3行3列的二维数组,因为k=2所以打印的为第二行的数组元素,即m[2][0],m[2][1], m[2][2]。为3 6 9。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、循环

64、以下叙述中不正确的是______。

43

A:C语言中的文本文件以ASCII码形式存储数据

B:C语言中对二进制位的访问速度比文本文件快

C:C语言中,随机读写方式不使用于文本文件

D:C语言中,顺序读写方式不使用于二进制文件

答案:D 评析: 本题主要考查C文件的基本概念。 C语言把文件看作是一个字符(字节)的序列,根据数据组织形式可分为ASCII文件(又称文本文件)和二进制 文件,即一个C文件可以看成是一个字节流或二进制流,对于流式文件,可以进行顺序读写,也可以进行随机读 写,关键在于控制文件的位置指针,由于文本文件要发生字符转换,计算位置时往往会发生混乱,访问速度受 到影响,所以随机读写方式不使用于文本文件。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/C语言的风格、C文件的基本概念

65、以下叙述中正确的是______。

A:C程序中注释部分可以出现在程序中任意合适的地方

B:花括号"{"和"}"只能作为函数体的定界符

C:构成C程序的基本单位是函数,所有函数名都可以由用户命名

D:分号是C语句之间的分隔符,不是语句的一部分

答案:A 评析: 本题的考查点是C程序设计的初步知识。 选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位 置,所以选项A是对的; 选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。 选项C,一个C程序中必须有且只能有一个由"main"命名的主函数,其他函数由用户自行命名。 选项D,C语句是组成C程序的基本单位,具有独立的程序功能。所有的C语句都以分号结尾。 故本题答案为A。

44

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/源程序的书写格式

66、以下叙述中正确的是______。

A:C语言的源程序不必通过编译就可以直接运行

B:C语言中的每条可执行语句最终都将被转换成二进制的机器指令

C:C语言程序经编译形成的二进制代码可以直接运行

D:C语言中的函数不可以单独进行编译

答案:B 评析:

1,编辑源文件。根据需要修改输入或修改源程序; 2,编译源程序,编译时先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即 目标程序。 3,执行程序。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/源程序的书写格式

67、有以下程序 main() { char k; int i; for(i=1;i<3;i++) { scanf("%c",&k); switch(k) { case '0': printf("another\n"); case '1': printf("number\n"); } } } 程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。

A:another number

45

B:another number another

C:another number number

D:number number

答案:C 评析: switch语句的一般形式如下: switch(表达式) {case 常量表达式1:语句1; case 常量表达式2:语句2; . . . case 常量表达式n:语句n; default :语句n+1; } switch语句执行完一个case后面的语句后, 流程控制转移到下一个case继续执行。 "case 常量表达式"只是起语 句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口 标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即 终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行, 本题当k为0时,执行完case '0'后将继续执行case '1'。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/用SWITCH语句实现多分支选择结构、循环

68、以下叙述中正确的是______。

A:用C程序实现的算法必须要有输入和输出操作 B :用C程序实现的算法可以没有输出但必须要输入 C :用C程序实现的算法可以没有输入但必须要有输出 D :用C程序实现的算法可以既没有输入也没有输出

答案:C 评析: 本题考查的是算法的特性。 算法的特性中包括"有零个或多个输入"及"有一个或多个输出"这两个特性。输入是指执行算法时从外界取得必 要的信息。一个算法可以有两个或多个输入,但也可以没有输入;一个算法得到的结果就是算法的输出,没有

46

输出的算法是没有意义的,所以一个算法必须至少有一个输出。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/基本知识

二、填空题 1、以下程序段的输出结果为______。 char *p;int i,d; p="PDP1-0"; for(i=0;i<7;i++) { d=isdigit(*(p+i) ); if(d!=0) printf("%c\n",*(p+i) ); }

答案: 0

1:1:1

评析: 本题的考查点是函数isdigit()。 这段程序的目的是按从左至右的顺序从字符串p中找出阿拉伯数字字符,如果找到,将其打印出来。最后的输出 应当是: 1 0

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/库函数的正确调用 2、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空: #define N 3 #define M 4 void LineMax(int x[N][M]) { int i,j,p; for(i=0;i<N;i++) { p=0; for(j=1;j<M;j++) if(x[i][p]<x[i][j])______; printf("The max value in line %d is %d\n",i, a[i][p]); } } main() { int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1}; ______; }

47

答案: 1:1:p=j 2:LineMax(x) 评析: LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行 的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。 所以(1)处应该填p=j; 内循环结束后,便获得了本行中最大的数,即a[i][p]; 而(2)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实 参,传递过去,(2)处的答案应该是LineMax(x)。注意大小写,C语言中大小写是不等价的。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

3、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那 个数作为函数值返回。请填空。 #include <stdio.h> #define N 100 int fun(int(*a)[N]) {int row,col,max,min; for(row=0;row<N;row++) {for(max=a[row][0],col=1;col<N;col++) if(______) max=a[row][col]; if(row==0) min=max; else if(______) min=max; } return min; }

答案: 1:1:max<a[row][col]#max<=a[row][col]#a[row][col]>max#a[row][col]>=max 2:max<min#max<=min#min>max#min>=max 评析: 本题的考查点是求矩阵最大值的算法。 本题中的第一空要求判断出每一行中的最大数,应该填写条件max<a[row][col],第二空要求从N个最大值中找 出最小的数,应填入条件max<min。 故本题答案为:max<a[row][col]和max<min。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

4、函数ColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回 主函数输出。请填空。 #define M 2

48

#define N 4 void ColumMin(int a[M][N],int *sum) { int i,j,k,s=0; for(i=0;i<N;i++) { k=0; for(j=1;j<M;j++) if(a[k][i]>a[j][i])k=j; s+= ; } *sum =s; } main() { int x[M][N]={3,2,5,1,4,1,8,3},s; ColumMin(x,&s); printf("%d\n",s); }

答案:

1:1:a[k][i]

评析: 本题考查的是函数参数的传送。 解题过程: (1) 执行以i为变量的for语句 1)k=0 2)执行以j为变量的for语句 ①当j=1 ②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0 ③j=2所以结束循环 3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写 a[k][i],用 变量s累加。 (2) SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写 *sum, 用来将该指针变量指向s (3) 当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的 指针变量,所以第三个空应该为 x,&s,分别代表已经被定义的数组x,和整型变量s的地址。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

5、若给fun函数的形参s传送字符串:" long fun(char s[ ]) { long n; int sign; for (; isspace(*s);s++); sign=(*s=='-')?-1:1; if (*s=='+' || *s=='-') s++; for (n=0;isdigit(*s);s++) n=10*n+(*s-'0'); return sign*n; }

6354abc",则函数的返回值是______。(字符串中包括空格)

49

答案: 评析:

1:1:[NN]6354

本题的考查点是函数的返回值。 这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数 值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是"6354"。 故本题答案为:6354。 等级:3 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

6、函数fun的功能是计算x^n。 double fun(double x,int n) {int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y; } 主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。实现这一计算的函数调 用语句为______。

答案: 评析:

1:1:fun(a,4)+fun(b,4)-fun((a+b),3)#fun(b,4)+fun(a,4)-fun((a+b),3);

函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为 fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用 语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。 等级:2 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

7、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。 main() { printf("The sun=%d\n",SunFun(10));} SunFun(int n) { int x,s=0; for(x=0;x<=n;x++)s+F(______); return s; } F(int x) { return (______);}

答案: 1:1:x 2:x*x+1#1+x*x#x^2+1#1+x^2

50

评析: 本题考查的是函数的调用。 解题过程: (1)f(x)的含义为x的平方加上1 (2)所以F(int x)的返回值应该为 x*x+1 (3)SunFun(10)的作用是将0到10之间所有的整数相加求和 (4)所以F()的形式参数为x。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

8、以下程序运行后的输出结果是______。 main () { char a[]="Language",b[]="Programe"; char *p1,*p2; int k; p1=a; p2=b; for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k)); }

答案: 评析:

1:1:[YY]gae

本题考查的是字符指针变量与字符数组。 解题过程: (1) 当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出 (2) 当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出 (3) 当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出 (4) 当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g (5) 当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出 (6) 当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a (7) 当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出 (8) 当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e (9) 当k=8时结束循环 (10) 输出结果为:gae。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/数组的定义和引用、字符串与字符数组

9、函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t返回正值,当s<t 时返回负值。请填空。 mycmp( char *s,char *t) { while (*s==*t) { if (*s=='\0')return 0; ++s;++t; }

51

return(______); }

答案: 评析:

1:1:*s-*t#-*t+*s

本题的考查点是比较字符串的大小。 函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个 字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的 ASCII码的差值,必须使用"*s-*t"得出。 故本题答案为:*s-*t。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/库函数的正确调用

10、以下程序的输出结果是______。 void fun() { static int a=0; a +=2; printf("%d",a); } main() { int cc; for(cc=1;cc<4;cc++) fun(); printf("\n"); }

答案: 评析:

1:1:[NN]246

循环for(cc=1;cc<4;cc++)被执行了3次。在函数fun中,由于a是static型变量,所以函数第1次调用后,a= 2; 第2次调用后,a = 4;第3次调用后,a = 6。

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

11、若要使指针p指向一个double类型的动态存储单元,请填空。 p=______malloc(sizeof (double));

答案: 评析:

1:1:(double*)

函数malloc返回的是void*而不是double类型指针。所以要使指针p指向一个double类型的存储单元就必须进行

52

强制类型转换。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值

12、下列程序的输出结果是______。 void fun(int *n) { while((*n)--); printf("%d",++(*n)); } main() { int a=100; fun(&a); }

答案: 评析:

1:1:0

在函数fun()中, while((*n)--)是先引用*n的值, 再做(*n)-- 运算, 所以循环结束时*n的值为0, 再做(*n)-- 运 算后,*n的值为-1;执行++(*n)后,*n的值是0。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

13、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空: #define N 3 #define M 4 void LineMax(int x[N][M]) { int i,j,p; for(i=0;i<N;i++) { p=0; for(j=1;j<M;j++) if(x[i][p]<x[i][j])______; printf("The max value in line %d is %d\n",i,______); } } main() { int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1}; LineMax(x); }

答案: 1:1:p=j 2:a[i][p]

评析:

53

LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行 的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。 所以(1)处应该填p=j; 内循环结束后,便获得了本行中最大的数,即a[i][p],这也就是(2)处应该填写的答案; 而(3)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实 参,传递过去。注意大小写,C语言中大小写是不等价的。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

14、下面程序的运行结果是:______。 void swap(int *a,int *b) {int *t; t=a;a=b;b=t; } main() {int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d%d\n",*p,*q); }

答案: 评析:

1:1:[NN]35

本题的考查点是函数调用。 观察本题的程序可以看出, 被调函数swap()实现的功能是交换变量的值, 但由于函数不返回任何值, 所以在main() 函数中打印出的变量的值并没有发生交换,即仍为3和5。 故本题答案为:3和5。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值

15、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那 个数作为函数值返回。请填空。 #include <stdio.h> #define N 100 int fun(int(*a)[N]) {int row,col,max,min; for(row=0;row<N;row++) {for(max=a[row][0],col=1;col<N;col++) if(______) max=a[row][col]; if(row==0) min=max; else if(______) min=max; } return min; }

54

答案: 1:1:max<a[row][col]#max<=a[row][col]#a[row][col]>max#a[row][col]>=max 2:max<min#max<=min#min>max#min>=max 评析: 本题的考查点是求矩阵最大值的算法。 本题中的第一空要求判断出每一行中的最大数,应该填写条件max<a[row][col],第二空要求从N个最大值中找 出最小的数,应填入条件max<min。 故本题答案为:max<a[row][col]和max<min。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

16、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun ( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f=______; } return m; } main() { printf("m=%d\n",______);}

答案: 1:1:-f#f*-1#-1*f#f*(-1)#(-1)*f 2:fun(10) 评析: 本题的考查点是C程序设计。根据程序写出运行结果。 考察的知识点主要是函数的调用。本题利用一个fun函数来完成题目要求的计算。程序中f起的作用是控制i*f 的符号,看的出,偶数位都为负值,所以f的值为(-1)^(i+1),最后要求输出m的值,在输出中调用fun函数,并 把实参10传给n。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用

三、是非题 此题型下没有试题! 四、操作题 此题型下没有试题! 五、多选题 此题型下没有试题! 六、改错题

55

此题型下没有试题! 七、论述题 此题型下没有试题! 八、简答题 此题型下没有试题! 九、问答题 此题型下没有试题! 一、单选题 1、请读程序: #include <stdio.h> #define SUB(X,Y) (X)*Y main() { int a=3, b=4; printf("%d\n",SUB(a++,b++) ); } 上面程序的输出结果是______。

A:12

B:15

C:16

D:20

答案:A 评析: 本题的考查点是宏定义。 X++的形式应当先使用X值,然后X才进行自加1运算,所以程序在进行SUB()乘法运算的时候,仍取a,b的原值, 所以最后打印的结果是3*4=12。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义 2、以下程序的输出结果是______。 #define f(x) x*x main() { int a=6,b=2,c; c=f(a)/f(b); printf("%d\n",c); }

A:9

56

B:6

C:36

D:18

答案:C 评析: 本题的考查点是带参数的宏定义。 观察程序段可知, 对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形 参。本题中c=f(a)/f(b)用#define f(x) x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

3、有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 main() { int i; for(i = 1; i <= NUM; i++) printf("%d\n",i); } 该程序中的for循环执行的次数是______。

A:5

B:6

C:7

D:8

答案:B 评析: 本题的考查点是对C语言中宏定义的理解。 分别将N, M的宏定义代入NUM的表达式中, 可以得到NUM=2*2+1+1=6, 所以当常数NUM作为for循环的终止条件时, 应当循环6次。 故本题答案为B。

57

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

4、以下程序的输出结果是______。 #define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf("%d\n",a); }

A:16

B:2

C:9

D:1

答案:B 评析: 本题所考查的是宏定义。C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。 在做此题时,我们可以运用置换法。得到: a/=k+m*k+m/k+m*k+m=16/7=2。 注:a为整型,所以在做除法时,自动取整。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

5、以下程序的输出结果是______。 #define M(x,y,z) x*y+z main() { int a=1,b=2,c=3; printf("%d\n",M(a+b,b+c,c+a)); }

A:19

B:17

58

C:15

D:12

答案:D 评析: 本题考查C语言的宏定义。 C语言的宏定义包括不带参数的宏定义与带参数的宏定义。本题为带参数的宏定义,其形式为: #define 宏名(形参表) 字符串 本题的M(a+b,b+c,c+a)被字符串a+b*b+c+c+a代替。 所以答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

6、程序中头文件type1.h的内容是: #define N 5 #define M1 N*3 程序如下: #include "type1.h" #define M2 N*2 main() { int i; i=M1+M2; printf("%d\n",i); } 程序编译后运行的输出结果是______。

A:10

B:20

C:25

D:30

答案:C 评析: 本题的考查点是宏定义。 宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define 标识符 字符串 这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为"宏名"。宏名一般 习惯用大写字母表示,以与变量名相区别。使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的

59

工作量。 i=M1+M2=N*3+N*2=5*3+5*2=25。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

7、有以下程序 #include <stdio.h> #define F(x,y) (x)*(y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } 程序运行后的输出结果是______。

A:12

B:15

C:16

D:20

答案:A 评析: 本题的考查点是带参数的宏定义。 本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用 变量值,再自增。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

8、有以下程序: #define f(x) x*x main() { int i; i=f(4+4)/f(2+2); printf("%d\n",i); } 执行后输出的结果是______。

60

A:28

B:22

C:16

D:4

答案:A 评析: 对带参的宏定义是这样展开置换的: 在程序中如果有带实参的宏, 则按#define命令行中指定的字符串从左到右 进行置换。如果串中包含宏中的形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参, 如果宏定义中的字符串中的字符不是参数字符,则保留。这样就成了置换的字符串。 本题中,展开后为i=4+4*4+4/2+2*2+2=4+16+2+4+2=28。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

9、以下叙述中正确的是______。

A:预处理命令行必须位于源文件的开头

B:在源文件的一行上可以有多条预处理命令

C:宏名必须用大写字母表示

D:宏替换不占用程序的运行时间

答案:D 评析: 本题考查的是预处理概念。 通常,预处理命令位于源文件的开头,但不一定必须位于开头,也可以写在函数与函数之间;由于预处理命令 的末尾不加分号,所以,不能在一行上写多条预处理命令,否则,系统处理时就会把它当作一条命令;宏名一 般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

61

知识点:第八章 编译预处理部分/知识点/编译预处理/"文件包含"处理

10、以下叙述中正确的是______。

A:预处理命令行必须位于C源程序的起始位置

B:在C语言中,预处理命令行都以"#"开头

C:每个C程序必须在开头包含预处理命令行:#include<stdio.h>

D:C语言的预处理不能实现宏定义和条件编译的功能

答案:B 评析: 本题考查的是预处理命令。 选项B正确,原因是这部分语句与C程序其他部分的语句是有区别的,所以在每个预处理语句之前都有一个"#" 符号以示区别。C提供三种预处理语句:(1)宏替换,(2)文件包含,(3)条件编译。如果一个文件中要引 用另外一个文件时才需要在开头包含预处理命令行:#include<stdio.h>。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第八章 编译预处理部分/知识点/编译预处理/"文件包含"处理

11、有以下程序 #include <stdio.h> #define N 5 #define M N+1 #define f(x) (x*M) main() { int i1,i2; i1=f(2); i2=f(1+1); printf ("%d %d\n",i1,i2); } 程序的运行结果是______。

A:12 12

B:11 7

C:11 11

62

D:12 7

答案:B 评析: 本题考查的是宏定义。 在编译时预处理程序用"替换文本"来替换宏,并用对应的实参来替换"替换文本"。此题中的替换文本分别为: N+1、(x*M)。引用带参的宏名i1=f(2),在经过宏替换后 i1=2*N+1=2*5+1=11(注:因为在对宏 M 的替换中N+1 没有加括号,所以对宏f(x)的替换文本展开后就变为:x*N+1形式);与上相同 i2在引用带参的宏名并替换展开 后变为:i2=1+1*N+1=1+1*5+1=7。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

12、若程序中有宏定义行:#define

N 100 则以下叙述中正确的是______。

A:宏定义行中定义了标识符N的值为整数100

B:在编译程序对C源程序进行预处理时用100替换标识符N

C:对C源程序进行编译时用100替换标识符N

D:在运行时用100替换标识符N

答案:B 评析: 本题的考查点是宏定义。 无参宏的宏名后不带参数。其定义的一般形式为:#define 标识符 字符串 其中的"#"表示这是一条预处理命令。凡是以"#"开头的均为预处理命令。"define"为宏定义命令。"标识符"为 所定义的宏名。"字符串"可以是常数、表达式、格式串等。例如:#define N 100它的作用是指定标识符N来 代替常数100。 在编写源程序时, 所有的100都可由N代替, 而对源程序作编译时, 将先由预处理程序进行宏代换, 即用100去置换所有的宏名N,然后再进行编译。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

二、填空题 1、以下程序的输出结果是______。 #define MAX(x,y) (x)>(y)?(x):(y)

63

main() { int a = 5, b = 2,c = 3, d = 3, t; t = MAX(a + b, c + d)*10; printf("%d\n", t); }

答案: 评析:

1:1:7

本题的考查点是宏定义。 宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10; 由于(a+b)>(c+d)为真, 所以t = (a+b),即为7。 故本题答案为:7。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义 2、下面程序的运行结果是:______。 #define N 10 #define s(x) x*x #define f(x) (x*x) main() {int i1,i2; i1=1000/s(N);i2=1000/f(N); printf("%d,%d\n",i1,i2); }

答案: 评析:

1:1:[NN]1000,10

本题的考查点是宏定义。 根据宏定义,变量i1的值为1000/10*10=1000,变量i2的值为1000/(10*10)=10。 故本题答案为:1000和10。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

3、以下程序的输出结果是______。 #define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m main() { int i=2,j=3; printf("%d\n",MCRB(j,MCRA(i))); }

64

答案: 评析:

1:1:[NN]16

本题的考查点是带参数的宏定义。 带参数的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define 命令行中指定的字符串从左到 右进行置换。如果串中包含形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果 宏定义中的字符串中的字符不是参数字符,则保留。因此对MCRB(j,MCRA(i))进行宏展开就得到了 2*MCRA(j)+MCRA(i),即:2*2*j+2*i=2*2*3+2*2=16。 故本题答案为:16。

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

4、有以下程序 #define f(x) (x*x) main() { int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf("%d,%d\n",i1,i2); } 程序运行后的输出结果是______。 A:64,28 B:4,4 C:4,3 D:64,64

答案: 评析:

1:1:[NN]4,3

本题考查的是宏定义。 对带参数的宏的展开只是将语句中宏名后面括号内的实参字符串代替#define命令行中的形参。本题中 "i1=f(8)/f(4)"用"#define f(x) (x*x)"代替得i1=(8*8)/(4*4), 结果为4; "i2=f(4+4)/f(2+2)"用"#define f(x) (x*x)"代替得i2= (4+4*4+4)/(2+2*2+2),求得结果为3。故本题输出的值为4,3。 故本题答案为4和3。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义

5、有一个名为init.txt的文件,内容如下: #define HDY(A,B) A/B

65

#define PRINT(Y) printf("y=%d\n",Y) 有以下程序 #include "init.txt" main() { int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d); PRINT(k); } 下面针对该程序的叙述正确的是______。 A:编译出错 B:运行出错 C:运行结果为 y=0 D:运行结果为 y=6

答案: 评析:

1:1:[NN]y=6

本题考查的是带参数的宏定义。 宏替换后,表达式k=HDY(a+c,b+d)即变为k=a+c/b+d=1+3/2+4=6。 故本题答案选y=6。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

知识点:没有定义

三、是非题 此题型下没有试题! 四、操作题 此题型下没有试题! 五、多选题 此题型下没有试题!

66

六、改错题 此题型下没有试题! 七、论述题 此题型下没有试题! 八、简答题 此题型下没有试题! 九、问答题 此题型下没有试题! 一、单选题 1、以下程序的输出结果是______。 main() { int k=17; printf("%d,%o,%x\n",k,k,k); }

A:17,021,0x11

B:17,17,17

C:17,0x11,021

D:17,21,11

答案:D 评析: 本题的考查点是不同格式的数据输出。 printf函数对不同类型的数据用不同的格式字符,"%d"是以带符号的十进制形式输出整数(正数不输出符号); "%o"以8进制无符号形式输出整数(不包括前导符0);"%x"以16进制无符号形式输出整数(不包括前导符0x)。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C的数据类型及其定义方法 2、请读程序片段(字符串内没有空格字符): printf("%d\n",strlen("ATS\n012\1\\")); 上面程序片段的输出结果是______。 A:11 B:10 C:9 D:8 答案:C 评析:

67

本题的考查点是字符串的长度。 这个语句的功能是输出"ATS\n012\1\\"这个串的长度, 在串中"\\"代表一个"\", 为了和printf()函数中的转义 字符区分开来,在语法上使用了两个反斜杠代替了一个反斜杠,所以它仅仅为一个字符,而"\1"代表数字1,也 占一个字符,"\n"是回车换行符,也占一个字符,加上A,T,S,0,1,2,一共是九个字符。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符串长度的运算

3、请选出可用做C语言用户标识符的一组标识符______。 ① void ② a3_b3 ③ For ④ 2a define _123 _abc DO WORD IF case sizeof A:① B:② C:③ D:④ 答案:B 评析: 本题的考查点是C语言的标识符。 C语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ①中的void是C语言的关键字重名,不合法; ③中的case和C语言的关键字重名,不合法; ④中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的标识符

4、以下选项中可作为C语言合法常量的是______。 A:-80 B:-080 C:-8e1.0 D:-80.0e 答案:A 评析: 本题考查的是常量表示法。 C语言的常量分为整型常量、实型常量和字符型常量。本题中只包含整型常量和实型常量。选项B从形式上来看 属于整型常量中的八进制整数,以0开头,但只能用0-7表示八进制数,所以选项B不合法;选项C和D从形式上看

68

属于实型常量,用指数形式表示的实型常量需要注意一点:e(或E)之前必需有数字,且e后面的指数必须为整 数,所以选项C和D中e后面为小数和没有数字的形式都不合法;选项A属于实型常量中的十进制小数形式的表示 法,是合法的。故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/常量表示法

5、以下不能定义为用户标识符的是______。 A:Main B:_0 C:_int D:sizeof 答案:D 评析: 本题考查的是C语言的标识符。 C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。注意:大写 字母和小写字母被认为是两个不同的字符。 所以选项A中Main与主函数名main不同。 另外标识符名不能与关键字 重名,所以选项D是非法的标识符。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的标识符

6、数字字符0的ASCII值为48,若有以下程序 main() { char a='1',b='2 '; printf("%c,",b++); printf("%d\n",b-a); } 程序运行后的输出结果是______。 A:3,2 B:50,2 C:2,2 D:2,50 答案:C 评析: 本题考查的是格式输出函数。 变量a,b定义为字符,执行语句"printf("%c,",b++);"后,输出字符变量b的值'2'(b++是在使用b之后,再将b 的值加1),b自加,b的值变成字符3,执行"printf("%d\n",b-a);",即'3'-'1',故输出的值为数字2。 故本题答案为C。

69

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/输出函数printf

7、有以下程序 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 答案:B 评析: 本题考查的是算术运算符。 如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,"%"表示求余。本题中"a=d/10%9;" 的值为25/10%9=2;"b=a&&(-1);"为2&&(-1)=1(注意:-1表示真,只有0才表示假),所以a,b的值分别为2,1。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/算术运算符

8、若整型变量a,b,c,d中的值依次为:1,4,3,2 则条件表达式a<b?a:c<d?c:d的值是______。 A:1 B:2 C:3 D:4 答案:A 评析: 本题考查的是条件表达式。 条件表达式的一般形式为:表达式1?表达式2:表达式3 条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值, 若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。 本题先求的是a<b的值,根据a=1,b=4,故a<b的值为真,所以整个表达式"a<b?a:c<d?c:d"的值为a的值1。即

70

c<d?c:d就不再执行了! 故本题的答案为A。 等级:2 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/条件表达式

9、若有如下程序段,其中s,a,b,c均已定义为整型变量,且a,c均已赋值(c大于0)。 s=a; for(b=1;b<=c;b++) s=s+1; 则与上述程序段功能等价的赋值语句是______。

A:s=a+b;

B:s=a+c;

C:s=s+c;

D:s=b+c;

答案:B 评析: 本题的考查点是赋值语句。 本题s的初值是a,然后b从1循环到c,每循环一次,s都加1,也就是到了c,加了1*c,所以程序所实现的功能实 际上是s=a+c。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/基本语句/复合语句

10、以下定义语句中正确的是______。 A:char a='A'b='B'; B:float a=b=10.0; C:int a=10,*b=&a; D:float *a,b=&a; 答案:C 评析: 本题考查的是变量的初始化。 选项A中,字符型变量a,b中间缺少逗号,如果对多个相同数据类型的变量赋初值,要用逗号隔开;若把选项A

71

看成是对几个变量赋同一个初值的话,显然'A'b不是变量名,所以选项A不正确;选项B中,如果对几个变量赋 以同一个初值,不能写成int a=b=c=3;这种形式,而应写成:int a=3,b=3,c=3;,所以选项B也不正确;选项D 中,执行b=&a相当于将地址转换成了浮点型,在C语言下提示出错信息"无效的类型转换",所以选项D也不正确。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/变量的初始化

11、下列选项中,不能用作标识符的是______。 A:_1234_ B:_1_2 C:int_2_ D:2_int_ 答案:D 评析: 本题考查的是标识符的命名。 标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/标识符的命名

12、有以下定义语句double a,b;int w; long c; 若各变量已正确赋值,则下列选项中正确的表达式是______。 A:a=a+b=b++ B:w%((int)a+b) C:(c+w)%(int)a D:w=a==b; 答案:C 评析: 本题考查的是表达式的赋值。 赋值运算符的左边只能是变量,不能是表达式,而选项A正是犯了此错误;选项B中类型不匹配,因为"%"两边表 达式值的类型必需为整型;选项D的后面不能加";",因为题目要求的是正确的表达式,而表达式后面不能有"; ",只有语句后面才带";"。故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的赋值

72

13、有以下程序 main() { int m=3,n=4,x; x=-m++; x=x+8/++n; printf("%d\n",x); } 程序运行后的输出结果是______。 A:3 B:5 C:-1 D:-2 答案:D 评析: 本题考查的是混合运算。 此题考的是++在变量前或变量后如何作用。++在变量前和变量后的唯一区别就在于在执行"++变量"所在的语句 时, 是先将变量加1再执行它所在语句还是先执行它所在的语句再使变量加1, 当++在变量后时, 也就是"变量++", 那就是先将变量值代入表达式运算后再使变量加1; 而"++变量"是先使变量加1, 再把加1后的结果放入表达式进 行运算。 这两种情况, 在执行完变量所在的语句后, 它们在内存中的值都是加过1之后的值了。 所以本题中x=-m++ 执行后x=-3,而执行x=x+8/++n时,必须先将n加1,再代入表达式运算。 所以答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/混合运算

14、有以下程序 main() { char a,b,c,d; scanf("%c,%c,%d,%d",&a,&b,&c,&d); printf("c,%c,%c,%c\n",a,b,c,d); } 若运行时从键盘上输入:6,5,65,66↙。则输出结果是______。 A:6,5,A,B B:6,5,65,66 C:6,5,6,5 D:6,5,6,6 答案:A 评析: 本题考查的是格式字符的输入和输出。 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的

73

ASCII代码放到存储单元中,所以它的存储形式与整数的存储形式类似。C语言使字符型数据和整型数据之间可 以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单 元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。此题变量a,b 是以字符型常量输入的,在内存中存储的是字符常量6和5相对应的ASCII码;变量c,d是以整型常量输入的,在 内存中存储的就是直接的整型常量65和66;在输出时,因为a,b,c,d都要求以字符形式输出,所以,将字符常量 6和5所对应的内存的ASCII码翻译成字符常量为6和5输出,将内存中的整型数65和66对应的字符常量即A和B输 出。所以此题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式字符的输入和输出

15、以下符合C语言语法的实型常量是______。 A:1.2E0.5 B:3.14159E C:.5E-3 D:E15 答案:C 评析: 实数在C语言中又称浮点数。实数有两种表示形式: 1.十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123,.123,123.0,123.,0.0都是十进制数形 式。 2.指数形式。 如123e3或123E3都代表123*10^3。 但注意字母e (或E) 之前必须有数字, 且e后面指数必须为整数, 如e3,2.1e3.5,.e3,e等都不是合法的指数形式。故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/实数的表示形式

16、以下4组用户定义标识符中,全部合法的一组是______。 ① ② ③ ④ _main If txt int enclude -max REAL k_2

74

sin A:① B:② C:③ D:④

turbo

3COM

_001

答案:A 评析: C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ②中的-max不符合要求,'-'既不是字母、数字,也不是下划线; ③中的3COM第一个字符为数字,不合法; ④中的int和C语言的关键字重名,不合法。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的标识符

17、设有以下定义 int a=0; double b=1.25; #define d 2 则下面语句中错误的是______。 A:a++; B:b++; C:c++; D:d++;

char c='A';

答案:D 评析: ++是自增运算符,作用是使变量的值增加1,选项D中的d不是变量,而是一个标识符,它代表常量2,常量是不 允许进行自增运算的。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/自增运算符

18、以下不合法的用户标识符是______。

75

A:j2_KEY B:Double C:4d D:_8_ 答案:C 评析: 本题考查的是标识符。 C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和 小写字母被认为是两个不同的字符,用户在定义标识符时应做到"见名知意",且不允许使用关键字作标识符。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/用户标识符

19、以下不合法的字符常量是______。 A:'\018' B:'\"' C:'\\' D:'\xcc' 答案:A 评析: 本题考查的是字符常量的定义。 C语言的字符常量是用单引号(即撇号)括起来的一个字符。如'a','A','?','$'等都是字符常量。注意:'a' 和'A'是不同的字符常量。除了以上形式的字符常量外,C还允许用一个"\"开头的字符序列。如'\ddd'表示1到3 位八进制数所代表的字符,而八进制是由0到7这几个数字组成的,所以选项A是不合法的字符常量。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符常量的定义

20、表达式3.6-5/2+1.2+5%2的值是______。 A:4.3 B:4.8 C:3.3 D:3.8

76

答案:D 评析: 本题考查的是表达式的运算。 算术运算符的结合方向为"自左至右", 先按运算符的优先级别高低次序执行, 同时在C中两个整数相除或求余数 其结果依旧为整数。计算后结果为3.8。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的运算

21、以下叙述中错误的是______。 A:C程序中的#include和#define行均不是C语句 B:除逗号运算符外,赋值运算符的优先级最低 C:C程序中,j++;是赋值语句 D:C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算 答案:D 评析: 本题考查的是C语言运算符。 "%"是求余运算符,其两侧的数值只能为整型,所以它不能用于实型的运算。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言运算符

22、以下叙述中错误的是______。 A:用户所定义的标识符允许使用关键字 B:用户所定义的标识符应尽量做到"见名知意" C:用户所定义的标识符必须以字母或下划线开头 D:用户定义的标识符中,大、小写字母代表不同标识 答案:A 评析: 本题考查的是标识符的命名。 C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和 小写字母被认为是两个不同的字符,用户在定义标识符时应做到"见名知意",且不允许使用关键字作标识符。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

77

知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/标识符的命名

23、以下叙述中正确的是______。 A:调用printf函数时,必须要有输出项 B:使用putchar函数时,必须在之前包含头文件stdio.h C:在C语言中,整数可以以十二进制、八进制或十六进制的形式输出 D:调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码 答案:B 评析: 本题考查的是标准输出函数。 在使用标准输入输出库函数(除了printf和scanf)前,必须要用预编译命令"#include"将头文件"stdio.h"包 括到用户源文件中。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/标准输出函数

24、以下能正确定义且赋初值的语句是______。 A:int n1=n2=10;

B:char c=32; C:float f=f+1.1;

D:double x=12.3E2.5; 答案:B 评析: 本题考查的是赋值语句。 语句"int n1=n2=10;"中,由于变量n2未定义,所以此赋值语句错误;由于赋值语句中不能存在运算表达式, 所以选项C中的赋值语句错误;选项D中指数表示错误,C语言规定,e后面的指数必须为整数;选项B中的"32" 是ASCII码的表示形式, 这是C语言中字符型数据和整型数据通用的表现, 即一个字符数据可以以字符形式出现, 也可以以整数形式出现。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/赋值语句

25、设有定义:int k=1,m=2; A:k=k>=k B:-k++

float

f=7;

则以下选项中错误的表达式是______。

78

C:k%int(f) D:k>=f>=m 答案:C 评析: 本题考查的是C语言表达式。 强制类型转换的一般形式为:(类型名)(表达式),而选项C中只给表达式加了括号,并没有给类型名也加上 括号,所以选项C的表达式错误。故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言表达式

26、有以下程序段 int k=0,a=1,b=2,c=3; k=a<b?b:a; k=k>c?c:k; 执行该程序段后,k的值是______。 A:3 B:2

C:1 D:0

答案:B 评析: 本题考查的是三目运算符。 三目运算符的一般形式为(表达式1)?(表达式2):(表达式3), 当(表达式1)值为真时, (表达式2)的值为整个表达 式的值;当(表达式1)的值为假时,(表达式3)的值为整个表达式的值。题中执行表达式"k=a<b?b:a"后,k=2, 将此值代入后一个表达式"k=k>c?c:k",由于"k>c"值为假,故k的值还等于原来k的值,即2。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/三目运算符

27、设有定义:float a=2,b=4,h=3; 以下C语言表达式中与代数式 (a+b)h/2 计算结果不相符的是______。

A:(a+b)*h/2

B:(1/2)*(a+b)*h

79

C:(a+b)*h*1/2

D:h/2*(a+b)

答案:B 评析: 两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结 果是double型, 因为所有实数都按double型进行运算。 根据运算符优先级, 先计算括号内的, 故选项B中(1/2)=0, 整个表达式的值为0。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C表达式类型和求值规则

28、有以下程序 #include <stdio.h> main() { char c1='1',c2='2'; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); } 当运行时输入:a<回车>后,以下叙述正确的是______。 A:变量c1被赋予字符a,c2被赋予回车符 B:程序将等待用户输入第2个字符 C:变量c1被赋予字符a,c2中仍是原有字符2 D:变量c1被赋予字符a,c2中将无确定值 答案:A 评析: 本题考查的是输入输出函数。 函数getchar( )的作用是从终端(或系统隐含指定的输入设备)输入一个字符,且只能接受一个字符(回车符 也算是一个字符)。故本题中变量c1被赋予字符a,c2被赋予回车符。故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/输入输出函数

29、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是______。

80

A:大写字母 B:连接符 C:数字字符 D:下划线 答案:B 评析: 本题考查的是标识符。 C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。 故本题答案B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/标识符

30、设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20, 为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)______。 A:10□X□20□Y<回车> B:10□X20□Y<回车> C:10□X<回车> 20□Y<回车> D:10X<回车> 20Y<回车> 答案:D 评析: 本题考查的是通过输入/输出语句的应用。 当从键盘输入字符,并且在格式说明中未指定宽度时,输入的字符(包括空格符、回车符、Tab符)将按顺序赋 予各输入项。也就是说,输入的字符之间没有间格符。以选项A的形式输入数据,就是将10赋予a1,将空格赋予 c1,接着a2将遇到的字母X,因为类型不匹配,虽然程序照常运行而且并不报错,但scanf函数将结束执行,使 得a2和c2不能从终端接收数据。选项B、选项C存在相同的问题,选项D的输入格式正确。 故本题答案选D。 等级:2 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/输入/输出语句

31、设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是______。 A:k++ B:k+=1 C:++k

81

D:k+1 答案:A 评析: 本题考查的是表达式的基本运算。 凡是表达式都有一个值,即运算结果。k++表达式的值为0,k再进行增1运算;k+=1是赋值表达式,其作用是取k 中的值加1后再放入到变量k中,即表达式的值为1;++k是先进行k增1运算,表达式的值为1;k+1=0+1,其运算 结果为1。所以选项A中表达式的值与其他三个表达式不同。故本题答案选A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的基本运算

32、以下选项中,当x为大于1的奇数时,值为0的表达式是______。 A:x%2==1 B:x/2 C:x%2!=0 D:x%2==0 答案:D 评析: 本题考查的是表达式的基本运算。 表达式x%2==1是判断x%2的值是否等于1;表达式x%2!=0是判断x%2是否不等于0,由于当x为大于1的奇数时,x%2 的值为1,所以选项A,D表达式的值均为1;x/2是整除运算由于x为大于1的奇数,最小为3,3/2=1,所以x/2的值 为大于0的数值;x%2==0是判断x%2的值是否是0,由于x%2的值为1,故关系表达式"x%2==0"为假,即表达式的值 为0。故本题答案选D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的基本运算

33、以下合法的字符型常量是______。 A:'\x13' B:'\081' C:'65' D:"\n" 答案:A 评析: 本题考查的是字符常量。 字符常量只能包含一个字符,因此选项C错误。字符常量只能用单引号括起来,不能用双引号括起来,因此选项 D错误。转义字符常量是以一个反斜线开头后跟一个特定的字符,用来代表某个特定的ASCII字符,反斜线后直

82

接跟数字表示八进制(八进制不用0开头),所以选项B错误。反斜线后用小写字母x开头来表示十六进制数。故 本题答案选A。 等级:2 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符常量

34、已知大写字母A的ASCCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小 写字母的语句是______。 A:c=(c-'A')%26+'a' B:c=c+32 C:c=c-'A'+'a' D:c=('A'+c%26-'a') 答案:D 评析: 本题考查的是大小字母之间的转换语句。 由97-65=32可知大写字母与对应小写字母之间相差32,所以将大写字母加上32后就是对应的小写字母,所以选 项B,C是正确的。选项A中(c-'A')%26可以求出变量c中的字母与字母A相差几位,那么小写字母a的ASCII码向后 移动相差的位数就是对应的小写字母,所以选项A也是正确的。故本题答案选D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/大小字母之间的转换语句

35、以下选项中可作为C语言合法整数的是______。 A:10110B B:0386 C:0Xffa D:x2a2 答案:C 评析: 本题的考查点是C语言中的整型常数。 整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选项A错; 选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的; 选项D,数字前加"0x"表示十六进制数,所以D也不对。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人:

审核人:

83

创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言中的整型常数

36、以下不能定义为用户标识符的是______。 A:scanf B:Void C:_3com_ D:int 答案:D 评析: 本题的考查点是用户标识符的辨别。 标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据 类型名、语句标号等用途的字符序列。 标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。标识符 不能与C关键字相同,并区分大小写。 由上可知选项D是不对的,因为int是C语言中的关键字。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/用户标识符的辨别

37、有以下程序 main() { int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf("%d %d %3.1f %3.1f\n",a,c,f,x); } 程序运行后的输出结果是______。 A:1 65 1 6.5 B:1 65 1.5 6.5 C:1 65 1.0 6.5 D:2 65 1.5 6.5 答案:B 评析: 本题的考查点是复合的赋值运算符。 在赋值符"="之前加上其它运算符,可以构成复合的运算符。运算方向为自右至左。 本题中先计算c的值,c=c*(x=6.5)=10*6.5=65; 接下来计算f的值,f=f/c=100.0/65=1.5; 最后计算a的值,a=f,因为a为整数,取f的整数部分即为1。故本题答案为B。 等级:1 难度:1 区分度:1

84

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/复合的赋值运算符

38、以下选项中非法的表达式是______。 A:0<=x<100 B:i=j==0 C:(char)(65+3) D:x+1=x+1 答案:D 评析: 本题的考查点是表达式的运用。 表达式是程序中使用最频繁、最大量出现的计算手段,程序中要求计算机进行某种计算或运算主要是通过表达 式实现的。不同的表达式进行不同的运算,达到不同的目的。 选项A中,0<=x<100在C语言中是一个合法的关系表达式,但它并不代表数学式0<=x<100。在计算0<=x<100时, 根据从左到右的结合性,先计算0<=x,其结果只能是0或1,然后再比较0<100或1<100。 选项B中,根据运算符的优先级,先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。 选项C中,(char)(65+3)为类型强制转换,将数值型数据转换为字符型。 选项D中,赋值运算符的作用是将一个数据赋给一个变量,此项中等号左半部分不合要求。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的运用

39、有以下程序 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 答案:C 评析: 本题的考查点是逻辑或运算。 a||b若a,b之一为真,则a||b为真,但如果a为真,则b不用考虑,也就是无需计算,仍为原值。 结合本题,因为b>a为真,即n=1,所以m不用计算仍为原值,且k值为1。 故本题答案为C。

85

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑运算

40、有定义语句:int x,y;。若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下 面四组输入形式中,错误的是______。 A:11 12↙ B:11,12↙ C:11, 12↙ D:11,↙12↙ 答案:A 评析: 本题的考查点是格式输入函数。 格式输入函数的一般形式: scanf( 格式控制,地址表列) 需要注意的是: 如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。 所以输入的两个数字之间的逗号是不可少的。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输入函数

41、有以下程序 #include <stdio.h> main() { printf("%d\n",NULL); } 程序运行后的输出结果是______。 A:0 B:1 C:-1 D:NULL没定义,出错 答案:A 评析: 本题的考查点是打印输出NULL的值。 此题相当于输出控制字符NULL的ASCII码值,即为0。 故本题答案为A。 等级:1 难度:1 区分度:1

86

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/打印输出NULL的值

42、已定义c为字符型变量,则下列语句中正确的是______。 A:c='97' B:c="97"; C:c=97; D:c="a"; 答案:C 评析: 本题的考查点是字符型变量。 C语言中, 字符型数据和整型数据之间可以通用。 一个字符数据既可以以字符形式输出, 也可以以整数形式输出。 所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。看上去选项A也是正确的,但题目要求选 的是正确的语句,由于选项A少分号,所以不能构成语句,所以选项A是错误的。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符型变量

43、有以下程序 #include <stdio.h> #define F(x,y) (x)*(y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } 程序运行后的输出结果是______。 A:12 B:15 C:16 D:20 答案:A 评析: 本题的考查点是带参数的宏定义。 本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用 变量值,再自增。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人:

审核人:

87

创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/带参数的宏定义

44、下列定义变量的语句中错误的是______。 A:int _int;

B:double int_; C:char For; D:float 答案:D 评析: 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C数据类型及其定义 US$;

45、以下关于逻辑运算符两侧运算对象的叙述中正确的是______。 A:只能是整数0或1 B:只能是整数0或非0整数 C:可以是结构体类型的数据 D:可以是任意合法的表达式 答案:D 评析: 本题考查的是C语言运算符的基本应用。 逻辑运算符两侧的运算对象不但可以是0和1,也可以是任意基本类型或指针类型的数据,还可以是任意合法表 达式。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符的基本应用

46、有以下程序 main() { int x, y, z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x, y, z); } 程序运行后的输出结果是______。

88

A:2,3,3 B:2,3,2 C:2,3,1 D:2,2,1 答案:C 评析: 本题考查的是C语言的运算规则。 x++:表示在使用x之后,使x的值加1;y++:表示在使用y之后,使y的值加1;++y:表示在使用y之前,使y的值 加1。此题中执行z=x++,是将x的值先赋给z,所以z=1,接下来x自行加1,其结果为2;执行y++后,y=2,执行++y 后,y=3。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的运算规则

47、设有定义:int a; float b; a和b的值分别是______。 A:876和543.000000 B:87和6.000000 C:87和543.000000 D:76和543.000000

执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876

543.0<回车>,

答案:B 评析: 本题考查的是数据的输入输出。 对于unsigned型数据可以指定数据的输入域宽w,系统将自动按w值截取所需长度的数据,此题中指定输入域宽 为2,所以把前两个数送给a,即a=87;后面的数值应送给变量b,由于6后面是空格分隔符,所以系统认为该数 据到此结束,即将6赋给了b。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据的输入输出

48、有以下程序 main() { int a=0, b=0; a=10; /* 给a赋值 b=20; 给b 赋值 */ printf("a+b=%d\n",a+b); /* 输出计算结果 */ } 程序运行后的输出结果是______。

89

A:a+b=10 B:a+b=30 C:30 D:出错 答案:A 评析: 本题考查的是注释的使用。 在C语言中, 注释是用于协助读者更好地理解程序, 它不会被系统编译执行, 此题中第一处的注释内容包括: "/* 给a赋值 b=20; 给b 赋值 */", 故本题中"b=20;"在程序中不起作用, 所以输出语句执行的a+b的值为10+0 的值,即输出为"a+b=10"。故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/注释的使用

49、请选出合法的C语言赋值语句______。 A:a=b=58 B:i++; C:a=58,b=58; D:k=int(a+b); 答案:C 评析: 本题的考查点是赋值语句。 选项A没有用分号表示语句结束,不合法; 选项B为i=i+1;,这并不是赋值语句; 选项D,函数名和C语言的关键字重名,不合法。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/赋值语句

50、若x和y都是int型变量,x=100,y=200,且有下面的程序片段 printf("%d",(x,y) ); 上面程序片段的输出结果是______。 A:200 B:100 C:100 200

90

D:输入格式符不够,输出不确定的值 答案:A 评析: 本题的考查点是逗号表达式。 在(x,y)中的","是一个特殊的运算符,叫做逗号运算符,它的一般形式为:表达式1,表达式2,求解过程为:先 求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。故本 题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逗号表达式

51、设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是______。 A:'a'&&'b' B:a<=b C:a||+c&&b-c D:!((a<b)&&!c||1) 答案:D 评析: 本题的考查点是几种运算符的使用。 选项A,'a'&&'b'是字符a与b的相与,故不为0; 选项B,a<=b,由题中变量赋值可知,结果为1。 选项C,a||+c&&b-c,此表达式先做算术运算b-c,结果为-1,而+c属于单目运算符,由于c初值为5,经过单目运 算符运算后,还是5,下面再进行逻辑与的运算,即-1&&5结果为1(因为C语言中除0代表假外,其它任一个数都 代表真),最后a||1,结果为1。 选项D,!((a<b)&&!c||1),此表达式先运算最外面括号内的表达式(a<b)&&!c||1,然后再进行非运算,由于 (a<b)&&!c||1中先算小括号内的a<b结果为1, 再按逻辑运算符的运算顺序: !,&&,||, 进行运算后得(a<b)&&!c||1 的值为1,所以最后再进行非运算知D选项的运算结果为0。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符的使用

52、设a=5,b=6,c=7,d=8,m=2,n=2,执行 (m=a>b)&&(n=c>d) 后n的值为______。 A:1 B:2 C:3

91

D:4 答案:B 评析: 本题的考查点是逻辑与运算。 在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达 式的解时,才执行该运算符。本题中,(m=a>b)的值为0,求出整个表达式的值为0,不需执行(n=c>d),所以n 仍为2。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑与运算

53、设ch是char型变量,其值为A,且有下面的表达式 ch=(ch>='A'&&ch<='Z')?(ch+32):ch 上面表达式的值是______。 A:A B:a C:Z D:z 答案:B 评析: 本题的考查点是条件运算符。 条件表达式的一般形式为:表达式1?表达式2:表达式3,条件运算符的执行顺序:先求解表达式1,若非0则求解 表达式2,此时表达式2的值就作为整个表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就 作为整个表达式的值。本题中,表达式1的值为1,所以整个表达式的值为表达式(ch+32)的值,即为a。故本题 答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/条件运算符

54、设int a=12,则执行完语句a+=a-=a*a后,a的值是______。 A:552 B:264 C:144 D:-264 答案:D 评析: 本题的考查点是赋值表达式的求解。 第一步:a*a=144 ;(此时a=12)

92

第二步:a-=144相当于a=a-144,a=a-144=-132; (此时a=-132) 第三步:a+=a相当于a=a+a,a=a+a=-264; 所以该表达式最后的值应当为-264。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/赋值表达式

55、C语言提供的合法的数据类型关键字是______。 A:Double B:float C:integer D:Char 答案:B 评析: 本题的考查点是C语言中的关键字。 选项A和D中第一个字母大写,不正确; 选项C是PASCAL中的整型关键字,不是C语言中的关键字。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言中的关键字

56、在C语言中,合法的长整型常数是______。 A:OL B:4962710 C:324562& D:216D 答案:A 评析: 本题考查C语言数据类型。 C语言中长整型数为在数值后加上一个L或l字符。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言数据类型

57、以下有4组用户标识符,其中合法的一组是______。 A)FOR B)4d C)f2_G3 D)WORD

93

-sub Case A:A) B:B) C:C) D:D)

DO Size

IF abc

void define

答案:C 评析: 本题考查C语言标识符。 C语言的标识符的定义为:以字母或下划线开头的由字母、数字字符、下划线组成的字符串。而且标识符不能与 关键字相同。本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言标识符

58、以下选项中合法的字符常量是______。 A:"B" B:'\010' C:68 D:D 答案:B 评析: 本题考查C语言字符常量。 C语言中,字符常量是以单引号括起来的单个字符,或为以"\"与三位八进制数值或两位十六进制数值代替单个 字符。本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言字符常量

59、假定X和Y为double型,则表达式X=2,Y=X+3/2的值是______。 A:3.500000 B:3 C:2.000000 D:3.000000

94

答案:D 评析: 本题考查C语言数据类型。 本题中X,Y为双精度浮点型数,3/2为整型相除结果为1,所以本题结果为3.000000。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言数据类型

60、以下合法的赋值语句是______。 A:X=Y=100 B:D--; C:X+Y; D:C=INT(A+B) 答案:B 评析: 本题考查C语言的赋值语句。 本题中的选项A与D都缺少语句结束标志";",而选项C中,表达式是不能独立成为语句的,选项B使用了C语言的 自减运算符,它相当于D=D-1,所以选项B为合法的赋值语句。本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的赋值语句

61、设x,y均为int型变量,且x=10,y=3,则以下语句的输出结果是printf("%d,%d\n",x--,--y) A:10,3 B:9,3 C:9,2 D:10,2



答案:D 评析: 本题主要考查C语言的自减运算符。 C语言的自减运算符有前置与后置两种形式。当自减运算符前置时,变量先自减一后再参与表达式运算;而后置 时,变量先参与表达式运算后再自身减一。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的自减运算符

95

62、以下程序的输出结果是______。 main() { int a=3; printf("%d\n",(a+=a-=a*a)); } A:-6 B:1 C:2 D:-12 答案:D 评析: 本题考查C语言的赋值运算符。a+=b就等于a=a+b,a-=b就等于a=a-b。所以"a+=a-=a*a"相当于先算"a-=a*a",此 时a=3-3*3=-6,然后计算a+=-6,所以a=-6+(-6)=-12。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/赋值运算符

63、假定 w,x,y,z,m均为int型变量,有如下程序段: w=1;x=2;y=3;z=4; m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z; 则该程序段执行后,m的值是______。 A:4 B:3 C:2 D:1 答案:D 评析: 本题考查C语言的条件运算符。 C语言中条件运算符的表达式为: 表达式?表达式1:表达式2 当表达式为非零时,条件运算符的表达式的值为表达式1的值,否则为表达式2的值。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言的条件运算符

64、有以下程序 main() { int x=102,y=012; printf("%2d,%2d\n",x,y);

96

} 执行后输出结果是______。

A:10,01

B:02,12

C:102,10

D:02,10

答案:C 评析: y=012表示将八进制数12赋给变量y。d格式符,用来输出十进制整数。%md,m为指定的输出字段的宽度。如果数 据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。本题是将八进制数12也输出为十进制数,八 进制数12转换为十进制数为10,所以输出结果为102,10。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/基本语句/复合语句

65、下列选项中,合法的C语言关键字是______。 A:VAR B:cher C:integer D:default 答案:D 评析: default是C语言中分支语句switch中的默认分支。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言关键字

66、以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的C语言表达式是______。 A:x/y*z B:x*(1/(y*z))

97

C:x/y*1/z D:x/y/z 答案:A 评析: 按照自左向右的运算逻辑,选项A是先做x/y,然后再乘以x,显然与题意不符。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言运算符的优先级

67、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是______。 A:-3 B:9 C:-12 D:6 答案:C 评析: C语言中,对赋值运算的运算顺序是自右向左。本题计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9, a=3-9=-6;a+=-6,a=-6+(-6)=-12。本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/复合赋值运算符

68、若变量c为char类型,能正确判断出c为小写字母的表达式是______。 A:'a'<=c<='z' B:(c>='a')||(c<='z') C:('a'<=c)and('z'>=c) D:(c>='a')&&(c<='z') 答案:D 评析: (c>='a')和(c<='z')的关系应该是逻辑与的关系。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑运算

98

69、以下程序的输出结果是______。 main() { int x=05; char z='a'; printf("%d\n",(x&1)&&(z<'z') ); } A:0 B:1 C:2 D:3 答案:B 评析: 关系表达式(x&1)&&(z<'z'),(x&1)为真,(z<'z')也为真,两个相与,自然也为真,以整型输出,则输出1。本 题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算//逻辑运算

70、若变量已正确定义并赋值,下面符合C语言的表达式是______。 A:a:=b+1 B:a=b=c+2 C:int 18.5%3 D:a=a+7=c+b 答案:B 评析: 选项A和C明显错误;对于选项D中表达式a=a+7=c+b,是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a, 显然,表达式a+7=c+b非法,因为赋值表达式的左值不能为常量或表达式。本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的值

71、C语言运算对象必须是整型的运算符是______。 A:%= B:/ C:=

99

D:<= 答案:A 评析: 在C语言中, 模运算(即取余运算%)的运算对象必须是整型数据(常量、变量或表达式)。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符

72、若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是______。 A:1 B:2 C:2.0 D:2.5 答案:C 评析: 这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值1,在没有进行类型转换的情 况下,3/2的值为1,所以x+3/2的值应为2.0。本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逗号表达式

73、若变量a,i已正确定义,且i已正确赋值,合法的语句是______。 A:a==1 B:++i; C:a=a++=5 D:a=int(i); 答案:B 评析: 选项D中若要表示将"i"的值强制类型转换的话,则应如此表示:a=(int)i;,故选项D错误。而选项A没有分号结 束,不是C语句;a++=5违反了赋值表达式左值必须为一个变量(不能是常量或表达式)的规定. 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/合法的语句

100

74、若有以下程序段, int c1=1 ,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是______。 A:0 B:0.5 C:1 D:2 答案:A 评析: 1.0/c2*c1即1.0/2*1的值为0.5,由于c3的类型为整型,所以在表达式赋值时,进行类型的自动转换,将0.5转 换为整型0。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据类型

75、有如下程序 main() { int y=3,x=3,z=1; printf("%d %d\n",(++x,y++),z+2); } 运行该程序的输出结果是______。 A:3 B:4 C:4 D:3 4 2 3 3

答案:D 评析: 逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/自增运算符

76、能正确表示逻辑关系:"a≥10或a≤0"的C语言表达式是______。 A:a>=10 or a<=0 B:a>=0 | a<=10

101

C:a>=10 && a<=0 D:a>=10 || a<=10 答案:D 评析: C语言中的或关系用|| 表示。本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑运算符

77、设有说明语句:char a='\72';则变量a______。 A:包含1个字符 B:包含2个字符 C:包含3个字符 D:说明不合法 答案:A 评析: 转义字符常量'\xx'可以把'\'后面的数字转换为对应的ASCII字符,'\72'就是':'。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/转义字符常量

78、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是______。 A:字符A B:字符a C:字符e D:非法的常量 答案:A 评析: 本题的考查点是字符与ASCII码的转换。 八进制101转换为10进制即为65,而字母A的ASCII码是65,所以用八进制表示的字符常量'\101'是A。 故本题答案为A。 等级:1 难度:1 区分度:1

102

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符与ASCII码的转换

79、设a和b均为double型常量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是______。 A:6.500000 B:6 C:5.500000 D:6.000000 答案:D 评析: 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/各类数值型数据的混合运算

80、若有以下程序: main() { int k=2,i=2,m; m=(k+=i*=k); printf("%d,%d\n",m,i); } 执行后的输出结果是______。 A:8,6 B:8,3 C:6,4 D:7,4 答案:C 评析: 本题的考查点是复合的赋值运算符。 在赋值符"="之前加上其它运算符,可以构成复合的运算符。此运算为右结合性,即从右往左计算。i*=k即 i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/复合的赋值运算符

81、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是______。 A:6

103

B:0 C:2 D:1 答案:D 评析: 本题的考查点是运算符的优先级。 在本题中,运算符的优先级分别为:!大于/大于+,-大于&&,即:!(3+4)+5-1&&4+5/2=0+5-1&&4+2=4&&6=1。故 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符的优先级

82、以下选项中,与k=n++完全等价的表达式是_______。 A:k=n,n=n+1 B:n=n+1,k=n C:k=++n D:k+=n+1 答案:A 评析: 本题的考查点是自增及赋值运算。 n++是自增运算,是先使用,然后再使n加1,分开来写即为:k=n,n=n+1。故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/自增及赋值运算

83、英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为______。 A:50 B:66 C:52 D:68 答案:D 评析: 本题主要考的是英文大小写字母间ASCII码值的差异,只要记住英文大写字母比其对应的英文小写字母的ASCII 码值小32。本题答案为D。 等级:1 难度:1 区分度:1

104

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/C语言的结构

84、在C语言中,不正确的int类型的常数是______。 A:32768 B:0 C:037 D:0xAF 答案:A 评析: 整型(int)常量即整常数。C整常数可用以下三种形式表示: (1)十进制整数。如123,-456,0。 (2)八进制整数。以0开头的数是八进制数。如0123表示八进制数123,即(123)8,其值为:1×82+2×81+3 ×80,等于十制数83。-011表示八进制数-11,即十进制数-9。 (3)十六进制整数。以0x开头的数是16进制数。如0x123,代表16进制数123,即(123)16=1×162+2×161+3 ×160=256+32+3=291。-0x12等于十进制数-18。 一个int型的常数的值范围为-215~(215-1),即-32768~32767。故本题选项A不是正确的int类型的常数。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据类型

85、C语言运算对象必须是整型的运算符是______。 A:% B:/ C:= D:<= 答案:A 评析: 算术运算符包括+、-、*、/、%(模运算符),其中要求%两侧的数据均为整型,其它算术运算符的运算对象可为 任意类型的数据。 此处需注意的是"/",两个整数相除的结果为整数,如5/3的结果为1,舍去小数部分,如果参加运算的两个数中 有一个数为实数,则结果是double型,因为所有实数都按double型进行运算; "="是赋值运算符,它用于将一个表达式的值赋给一个变量。赋值运算并不要求它的运算对象一定是整型,但是 当赋值运算符两侧的类型不致,且都是数值型或字符型时,在赋值时要进行类型转换。 "<="是关系运算符,用关系运算符将两个表达式连接起来的式子称为关系表达式,由此可知,C语言对关系运算 符的运算对象也没有作限制。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人:

审核人:

105

创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符

86、若有定义:int a=8,b=5,c;,执行了语句:c=a/b+0.4;后,c的值为 A:1.4 B:1 C:2.0 D:2



答案:B 评析: 在赋值表达式中, 赋值符右边的值的类型会自动转换成赋值符左边的变量的类型。 而将一个实数转换成整数时, 实数的小数部分全部舍去。本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/数据类型及其运算

87、以下程序段的输出结果是______。 int a=1234; printf("%2d\n",a); A:12 B:34 C:1234 D:提示出错、无结果 答案:C 评析: 本题主要考查对printf函数域宽描述符的理解,在这里我们要特别注意:输出数据的实际精度并不主要决定于 格式项中的域宽与精度,也不决定于输入的数据精度,而主要决定于数据在机器内的存储精度。 本题答案为C。 等级:1 难度:1 区分度:1

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/基本语句

88、以下选项中不属于C语言的类型是______。 A:signed short int B:unsigned char

106

C:signed long D:long short 答案:D 评析: C语言中归纳起来,基本类型数据有以下几种: [singed] char; unsigned char; [signed] short [int]; unsigned short [int]; [signed] long [int]; unsigned long [int]; float; double; long double; 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据类型

89、若有说明语句: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); 答案:A 评析: 在scanf语句中,要为某一变量赋值,引用的是该变量的地址。本题中,由于d为指针变量,所以d就表示地址, 故本题读入数据的形式应写成scanf("%d%d%d",&a,&b,d)。本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/选择结构程序设计

90、以下正确的字符串常量是______。 A:"\\\" B:'abc' C:Olympic Games D:" "

107

答案:D 评析: 本题的考查点是字符串常量。 字符串常量是由一对双引号括起的字符序列。例如:"CHINA","C program","$12.5" 等都是合法的字符串常 量。选项A中双引号内使用了两个转义符,即后一个双引号也作为字符串的内容了,故此字符串中还缺少用于表 示字符串结束的引号,所以选项A的表示法错误;选项B,C均没有用双引号括起来,所以并不是字符串;选项D 表示空字符串,是正确的表示法。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/循环结构程序设计

91、以下叙述正确的是______。 A:可以把define和if定义为用户标识符 B:可以把define定义为用户标识符,但不能把if定义为用户标识符 C:可以把if定义为用户标识符,但不能把define定义为用户标识符 D:define和if都不能定义为用户标识符 答案:B 评析: if属于系统定义的32个关键字之一,所以不可以供用户定义。此处需注意的是不要把define误认为是宏定义命 令,正确的宏定义命令为:#define。本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/数组的定义和引用

92、以下程序的输出结果是______。 main() { int a=5,b=4,c=6,d; printf("%d\n",d=a>c?(a>c?a:c):(b)); } A:5 B:4 C:6 D:不确定 答案:B 评析: 本题最重要的是分析d=a>c?(a>c?a:c):(b),运算此表达式的顺序是自左向右,先比较a>c,值为假,所以整个 表达式的值就为b的值,即4。本题答案为B。

108

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/条件运算符

93、以下程序的输出结果是______。 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 答案:A 评析: !a值为0,故!a&&!b的值为0,!c的值为1,而0||1的值应该是1。所以答案是A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑运算符

94、已知字母A的ASCII码为十进制的65,下面程序 main() { char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); } 的输出是______。 A:67,D B:B,C C:C,D D:不确定的值 答案:A 评析: 本题的考查点是格式输出函数printf的格式字符。 由于字符"5"和"3"的ASCII码相差为2,所以ch1经过运算后的值应为65+2=67;同理,ch2经过运算后的值应为 65+3=68,即是字符"D"。故本题答案为A。 等级:1 难度:1 区分度:1

109

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/输出函数printf

95、以下程序的输出结果是______。 #include <stdio.h> #include <math.h> main(){ int a=1,b=4,c=2; float x=10.5,y=4.0,z; z=(a+b)/c+sqrt((double)y)*1.2/c+x; printf("%f\n",z); } A:14.000000 B:15.400000 C:13.700000 D:14.900000 答案:C 评析: 本题的考查点是。 函数sqrt(x)是一个标准的数学函数,用于求x的二次方根,知道这一点以后就好做了,将各变量的值带入程序 求解即可,另外,程序中的(double)是强制类型转换,将原来为float型的y强制转换成double型变量。故本题 答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/函数

96、以下程序的输出结果是______。 #include <stdio.h> main() { int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf("%d,%d\n",a,b); } A:6,1 B:2,1 C:6,0 D:2,0

110

答案:B 评析: 本题的考查点是运算符的应用。 第一个表达式中,运算的方向是从左至右,所以a的值为2; 第二个表达式中,等式右边是一个逻辑表达式,由于结果为真,所以表达式的值为1,即b为1。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/编译预处理

97、在C语言中,要求运算数必须是整型的运算符是______。 A:% B:/ C:< D:! 答案:A 评析: 本题的考查点是运算符。 题目的四个选项中,(B)(C)(D)都不要求运算数必须为整数,参与模运算(%)的运算数必须是整型数据。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符

98、若变量已正确定义并赋值,下面符合C语言语法的表达式是______。 A:a:=b+1 B:a=b=c+2 C:int 18.5%3 D:a=a+7=c+b 答案:B 评析: 本题的考查点是C语法表达式的合理性。 选项A和C明显错; 选项D中,表达式a=a+7=c+b,是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b 非法,因为赋值表达式的左值不能为常量或表达式。本题答案为B。 等级:1 难度:1 区分度:1

111

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/指针

99、在一个C语言程序中______。 A:main函数必须出现在所有函数之前 B:main函数可以在任何地方出现 C:main函数必须出现在所有函数之后 D:main函数必须出现在固定位置 答案:B 评析: 本题的考查点是main函数。 一个C程序中必须有且只能有一个用"main"命名的主函数, 其它函数由用户自行命名。 main函数可以在任何地方 出现。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/结构体(即"结构")与共用体(即"联合")

100、下列叙述中正确的是______。 A:C语言中既有逻辑类型也有集合类型 B:C语言中没有逻辑类型但有集合类型 C:C语言中有逻辑类型但没有集合类型 D:C语言中既没有逻辑类型也没有集合类型 答案:D 评析: 本题的考查点是C语言中的基本数据类型。 数据类型是所允许的数据及其操作的集合,是高级语言的重要特征。程序设计中可以利用数据类型发现程序中 的某些错误。 C语言提供了三大类数据类型,即基本类型、复合类型和地址类型 1,基本类型只代表单个数据; 2,复合类型由基本类型组合而成,可代表一批数据; 3,地址类型可直接表示内存中的地址。 C语言支持的五种基本数据类型: 字符型:表示单个字符; 整型:表示整数,包括基本整型、短整型、长整型和无符号整型; 浮点型:表示实数,精度为6-7位有效数字; 双精度型:表示实数,精度为15-16位有效数字; 无值类型:表示无返回值的函数或无定向指针。 故本题答案为D。 等级:1 难度:1 区分度:1

112

出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/位运算

101、下列关于C语言用户标识符的叙述中正确的是______。 A:用户标识符中可以出现下划线和中划线(减号) B:用户标识符中不可以出现中划线,但可以出现下划线 C:用户标识符中可以出现下划线,但不可以放在用户标识符的开头 D:用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 答案:B 评析: 本题的考查点是C语言中的标识符。 标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据 类型名、语句标号等用途的字符序列。标识符可以由字母、数字和下划线组成,字母和下划线可以出现在用户 标识符的开头,数字不可以。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/文件操作

102、下列关于单目运算符++、--的叙述中正确的是______。 A:它们的运算对象可以是任何变量和常量 B:它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C:它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D:它们的运算对象可以是char型变量、int型变量和float型变量 答案:D 评析: 本题的考查点是自增、自减运算符。 自增、自减运算符的作用是使变量的值增1或减1,只能用于变量,包括char型变量、int型变量和float型变量, 而不能用于常量或表达式。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/基础知识

103、若有以下程序段: int m=0xabc,n=0xabc; m-=n; printf("%X\n",m); 执行后输出结果是______。

113

A:0X0 B:0x0 C:0 D:0XABC 答案:C 评析: 本题的考查点是不同类型数据的输入输出。 printf()函数的一般格式如下所示: printf("格式控制字符串",输出项清单) 格式控制字符串中包括: 1.格式转换说明符:以"%"开头后跟一个格式字符,它用于输出数据格式的转换与控制; 2.转义字符:以"\"开头后跟一个字符,用于输出某些特殊意义的字符和不可显示字符; 3.其他字符:用于照原样显示的字符。printf()格式转换说明符:"%X"按实际位数输出十六进制整数。本题因 为m,n都定义为十六进制整数,且m-=n;的意思是将m与n的差值重新赋给m,所以m为0。故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/C程序设计

104、有以下程序 main() { char a,b,c,*d; a='\'; b='\xbc'; c='\0xab'; d="\0127"; printf("%c%c%c%c\n",a,b,c,*d); } 编译时出现错误,以下叙述中正确的是______。 A:程序中只有a='\';语句不正确 B:b='\xbc';语句不正确 C:d="\0127";语句不正确 D:a='\';和 c='\0xab';语句都不正确 答案:D 评析: 本题的考查点是字符常量。 C中的字符常量是用单引号(即撇号)括起来的一个字符。如'a'、'x'、'D'、'?'、'$'等都是字符常量。除了 以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个"\"开头的字符序列。'\ddd'表示1 到3位8进制数所代表的字符,不足3位就在前面加0;'\xhh'表示 1到2位16进制数所代表的字符。而a='\';和 c='\0xab';是不正确的。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符常量

114

105、以下选项中,合法的一组C语言数值常量是______。 A:028 .5e-3 -0xf B:12. 0xa23 4.5e0 C:.l77 4e1.5 0abc D:0x8A 10,000 3.e5 答案:B 评析: 本题的考查点是C语言数值常量。 数值常量分为不同的类型:整型常量、实型常量、字符常量。整型常量就是整常数。在C语言中,使用的整常数 有八进制、十六进制和十进制三种。十进制整常数:十进制整常数没有前缀,其数码取值为0~9;八进制整常 数:八进制整常数必须以0开头,即以0作为八进制数的前缀,数码取值为0~7,八进制数通常是无符号数;十 六进制整常数:十六进制整常数的前缀为0X或0x,其数码取值为0~9,A~F或a~f。 实型常量也称为实数或者浮点数。 在C语言中, 实数只采用十进制。 它有二种形式: 十进制小数形式、 指数形式。 十进制小数形式:由数码0~9和小数点组成;指数形式:由十进制数加阶码标志"e"或"E"以及阶码(阶码只能 为整数,可以带符号)组成。其一般形式为:a E n(a为十进制数,n为十进制整数)。 本题中由于以0开头的常量为八进制,且八进制常量的数码取值为0~7,所以选项A中"028"与选项C中"0abc"的 表示均不正确;由于指数形式的实型常量的阶码只能为整数,所以选项C中"4e1.5"的表示不正确;由于十进制 整常数的数码取值为0~9,所以选项D中"10,000"的表示不正确。故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/C程序修改

106、以下关于long、int和short类型数据占用内存大小的叙述中正确的是______。 A:均占4个字节 B:根据数据的大小来决定所占内存的字节数 C:由用户自己定义 D:由C语言编译系统决定 答案:D 评析: 本题的考查点是C语言数据类型所占内存。 C语言标准只规定了char类型占用内存大小为1,而long、int、short等类型数据占用内存大小由编译系统决定。 如在TC编译环境下,long、int和short类型数据占用内存大小分别为4,2和2,而在VC++的编译环境下,long、

115

int和short类型数据占用内存大小分别为4,4和2。故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C语言数据类型

107、若变量均已正确定义并赋值,以下合法的C语言赋值语句是______。 A:x=y==5; B:x=n%2.5; C:x+n=i; D:x=5=4+1; 答案:A 评析: 本题的考查点是C语言赋值语句。 赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式;由于在赋值符"="右边的 表达式也可以又是一个赋值表达式,因此,形式"变量=(变量=表达式);"是成立的,从而形成嵌套的情形,故选 项A是正确的;选项D看上去是嵌套形式,而实际上,并非是一个正确的赋值表达式,因为赋值表达式"="的左边 只能是变量,不能为常量或表达式,所以"4+1"的值不能赋值给常量"5",所以选项D错误,选项C也是错误的; 由于求余运算符"%"的两侧必须为整型数据,所以选项B错误。故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/C程序填空

二、填空题 1、以下程序运行时,若从键盘输入:10 20 30<回车>,输出的结果是______。 #include <stdio.h> main() { int i=0,j=0,k=0; scanf("%d%*d%d",&i,&j,&k); printf("%d%d%d\n",i,j,k); } 答案: 1:10300

评析: 本题考查的是格式控制符。 在scanf格式控制符中,如果在%后有一个"*"附加说明符,表示跳过它指定的列数。本题中""%d%*d%d""表示将 10赋给i,%*d表示读入整数但不赋给任何变量,然后再读入整数30赋给变量j,那么变量k并没有重新赋值,仍 为初始值0。所以输出的结果为10300。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式控制符 2、以下程序运行后的输出结果是______。

116

main() { int a,b,c; a=10; b=20; c=(a%b<1)||(a/b>1); printf("%d,%d,%d\n",a,b,c); } 答案: 1:10,20,0

评析: 本题考查的是混合运算。 本题中"(a%b<1)||(a/b>1)"的运算顺序为先算括号→算术运算符→关系运算符→逻辑运算符。其中a%b=10, a/b=0,所以a%b<1的值为0,a/b>1值也是0,故整个表达式的结果为0,所以输出的a,b,c的值为10, 20,0。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/混合运算

3、以下程序段的输出结果是______。 int i=9; printf("%o\n",i); 答案: 1:11

评析: 本题考查的是格式输出函数printf()。 格式字符o所代表的含义是,以八进制无符号形式输出整数(不输出前导符0),因为整数9的八进制为11。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输出函数printf()

4、以下程序运行后的输出结果是______。 main() { int a,b,c; a=25; b=025; c=0x25; printf("%d,%d,%d\n",a,b,c); } 答案: 1:25,21,37

评析: 本题考查的是格式字符的输出。 变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进制形式输出 整数(正数不输出符号),所以本题a=25则输出值为25;b=025转换为10进制:b=2*8+5=16+5=21,则输出的值 为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是逗号,所以 输出的几个数字之间也必须是逗号。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人:

审核人:

117

创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输出函数printf()

5、已知字符A的ASCII码值为65,以下语句的输出结果是______。 char ch='B'; printf("%c,%d\n",ch,ch); 答案: 1:B,66

评析: printf函数的一般格式为 printf(格式控制,输出表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。 1,d格式符,用来输出十进制整数。 2,c格式符,用来输出一个字符。 已知字符A的ASCII码值为65,则字符B的ASCII码值为66,所以本题输出结果为:B,66 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输出函数printf()

6、有以下语句段 int n1=10,n2=20; printf("______",n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 答案: 评析: 结果要求输出为: n1=10 n2=20 所以格式控制中需含有"n1="部分,又因为要求按两行输出,需含有回车符:\n。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输出函数printf() 1:n1=%d\nn2=%d

7、有以下程序 #include <stdio.h> main() { char ch1,ch2; int n1,n2; ch1=getchar(); ch2=getchar(); n1=ch1-'0';n2=n1*10+(ch2-'0'); printf("%d\n",n2); } 程序运行时输入:12↙,执行后输出结果是______。

118

答案:

1:12

评析: ch1与ch2为字符型变量,输入12后,ch1为字符'1',ch2为字符'2',n1=ch1-'0'的作用是将字符转换为数值, 即n1为整数1,同理,n2为1*10+2=12。所以程序执行后输出十进制整数12。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/字符的转换

8、若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出 语句______。 答案: 1:printf("a=%d,b=%d",a,b);

评析: 本题考查的是输出函数。 printf函数为格式输出函数,括号内包括两部分: 1)"格式控制"是用双引号括起来的字符串,其中包括两种信息:①"格式说明"由"%"和格式字符组成,此题定 义为int型所以要用%d;②"普通字符"即需要原样输出的字符,此题目中为a=,b=; 2)"输出列表"是需要输出的一些数据,可以是表达式。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/格式输出函数printf()

9、以下程序运行后的输出结果是______。 main() { int x=0210; printf("%X\n",x); } 答案: 1:88

评析: 本题考查的是数据类型。 由于八进制数以0开头,所以0210表示八进制数;"%X"的格式指以十六进制形式输出,输出十六进制的"a~f"时 以大写字母输出。所以本题可以先将0210化为十进制,然后再化为十六进制。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据类型

10、以下程序运行后的输出结果是______。 main() {char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf("%d%f\n",n,x);

119

} 答案: 1:220.000000

评析: 本题考查的是赋值运算。 由于赋值运算符按照"自右而左"的结合顺序,故本题中赋值表达式"x=f*=n/=(c=50)"的求解步骤如下:首先, 进行"n/=(c=50)"的运算, 相当于n=n/c=100/50=2; 其次, 进行"f*=n"的运算, 相当于"f=f*n", 故f=20.000000; 最后,得出x的值为20.000000。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/赋值运算

11、已知字符A的ASCII码为65,以下程序运行后的输出结果是______。 main() { char a,b; a='A'+'5'-'3'; b=a+'6'-'2'; printf("%d%c\n",a,b); } 答案: 1:67G 评析: 本题考查的是表达式的运算。 由于"5"和"3"的ASCII码相差为2,所以变量a经过运算,得出其值为字符"C",又因为输出时其形式是"%d",故 输出的值是字符"C"的ASCII码, 即67; 同理, 变量b的值等于变量a的值加上字符"6"与字符"2"的ASCII码的差值, 即得到字符"G",输出时以"%c"的形式输出"G"。 评析: 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的运算

12、执行以下程序后的输出结果是______。 main() { int a=10; a=(3*5,a+4); printf("a=%d\n",a); } 答案: 1:a=14

评析: 本题考查的是逗号表达式的运算。 在逗号表达式(表达式1,表达式2)中,其运算方法是先求表达式1的值,然后求表达式2的值,整个逗号表达式的 值是表达式2的值。首先3*5=15,a=10,a+4=10+4=14输出最后的运算结果为14。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逗号表达式的运算

120

13、已定义char ch='$';int i=1,j;,执行j=!ch&&i++以后,i的值为______。 答案: 1:1

评析: 本题考查的是用&&连接两个表达式的运算。 用&&连接两个表达式时,若第1个表达式的值为"假",则运算结果与第2个表达式无关,此时第2个表达式将不再 进行计算。本题中第1个表达式j=!ch值为0,所以第2个表达式i++将不进行计算,i值为1。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/逻辑表达式的运算

14、以下程序运行后的输出结果是______。 main() { int p=30; printf("%d\n",(p/3>0 ? p/10 :p%3)); } 答案: 1:3

评析: 本题的考查点是C程序设计。 考察的主要知识点是条件表达式。(p/3>0 ? p/10 :p%3)是一个条件表达式。条件表达式的一般形式为:表达式 1?表达式2:表达式3。条件表达式的执行顺序为:先求解表达式1,若为真则求解表达式2,此时表达式2的值就 是整个条件表达式的值。若表达式2的的值为假,则求解表达式3,表达式3的值就是整个条件表达式的值。条件 运算符的结合方向为"自右至左"。本题中p=30,p/3>0为真,所以求解 p/10 的值为3,即为整个表达式的值。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/条件表达式

15、以下程序运行后的输出结果是______。 main() { char m; m='B'+32; printf("%c\n",m); } 答案: 1:b

评析: 本题的考查点是C程序设计。根据程序写出运行结果。 考察的主要知识点是不同类型数据间的转换与运算。本题所要实现的功能是把大写字母转换为小写字母,在C 中,小写字母的ASCII码值比大写字母的ASCII码值大32。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/不同类型数据间的转换

121

16、设有定义:float x=123.4567;,则执行以下语句后的输出结果是______。 printf("%f\n"(int)(x*100+0.5)/100.0); 答案: 1:123.460000

评析: 本题考查的是表达式的运算。 输出语句的表达式: (int)(x*100+0.5)/100.0是指先运算表达式中的"x*100+0.5", 然后将其结果强制转换为int 型, 即: (int)(123.4567*100+0.5)=(int)12346.17=12346 , 接下来进行"/100.0"的运算即: 12346/100.0=123.46, 原因是除运算是双目运算,当一边是整型数,一边是实型数时,系统自动将整型转换为实型数,然后进行运算, 又因为最后的的输出格式是float类型的实数,所以结果为123.460000。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的运算

17、以下程序运行后的输出结果是______。 main() { int m=011, n=11; printf ("%d,%d\n",++m,n++); } 答案: 1:10,11

评析: 本题考查的是自加自减运算。 此题中定义两个变量m和n,首先将一个八进制数赋给m,十进制数赋给n;在输出之前先进行运算,++m: 是指 在输出变量m 前先对其进行加1,(011)8+1=(9)10+1=10;n++:是指在进行输出操作后n再进行加1操作,所以输 出时n=11。"%d,%d"表示输出的是两个带符号的十进制整型数,所以最后的输出结果为:10,11。

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/自加自减运算

18、下列程序的输出结果是______。 main() { int a=1,b=2; a=a+b;b=a-b;a=a-b; printf("%d,%d\n",a,b); } 答案: 评析: 本题中,当a=a+b时,a=1,b=2,a=1+2=3;b=a-b时,a=3,b=2,b=3-2=1;a=a-b时,a=3,b=1,a=3-1=2; 因此,本题的输出是2,1。 1:2,1

122

等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/表达式的运算

19、以下程序的输出结果是______。 main() { unsigned short a=65536; printf("%d\n\",b=a); } 答案: 1:0

int b;

评析: 对于一个unsigned short来说,它能取的最大值是65535。这里给a赋值65536,已经超出了它的取值范围,这样 它的高位将被截掉,只把低位赋给它(全零)。所以a的值实际为0。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/无符号数的运算

20、以下程序的输出结果是______。 main() { int a=0; a+=(a=8); printf("%d\n",a); } 答案: 1:16

评析: 本题主要考的是运算符的优先级。 a+=(a=8)可以写成a=a+(a=8)的形式,括号的优先级高于"+",而"+"的优先级又高于"=",所以先执行括号内的 运算,将a赋值为8,然后再执行+运算。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/运算符的优先级

21、若有语句 int i=-19,j=i%4; printf("%d\n",j); 则输出的结果是______。 答案: 1:-3

评析: 本题的考查点是求模运算。 算术运算符中,%只能对整型运算量施加运算。在计算两个整数的余数时,余数的符号与被除数相同。例如, 3%(-2)=1,-3%2=-1,3%2=1,-3%(-2)=-1。

123

故本题答案为:-3。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/求模运算

22、若有程序 main() { int i,j; scanf("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); } 要求给i赋10,给j赋20,则应该从键盘输入______。 答案: 1:i=10,j=20

评析: 本题的考查点是格式输入函数scanf()。 格式输入函数scanf()可以用于所有类型的数据, 采用不同的格式转换说明符, 将不同类型的数据从标准输入设 备(键盘)读入内存。 scanf()函数的一般格式如下所示: scanf("格式控制字符串",输入项清单) 格式控制字符串通常只包含格式转换说明符,其含义与printf()类似。 输入项清单中至少应有一个输入项,输入项必须是变量的地址。 如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。 故本题答案为:i=10,j=20。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/输入函数scanf()

23、执行以下程序时输入1234567<CR>,则输出结果是______。 #include <stdio.h> main() { int a=1,b; scanf("%2d%2d",&a,&b); printf("%d,%d\n",a,b); } 答案: 1:12,34 或 12,34 评析: 本题的考查点是数据的输入与输出。 由于scanf()函数的格式控制符为输入两个两位的整数, 所以变量a,b的值依次从输入的数据中取两位, 即a=12, b=34,故本程序输出后的结果是:12,34 评析: 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/数据的输入与输出

124

24、以下程序的功能是:输出a、b、c三个变量中的最小值,请填空。 #include <stdio.h> main() { int a,b,c,t1,t2; scanf("%d%d%d",&a,&b,&c); t1=a<b?______; t2=c<t1? c:t1; printf("%d\n",t2); } 答案: 1:a:b

评析: 本题的考查点是条件运算。 通过题意及输出语句可知,t2用来存放a,b,c三个变量中的最小值。程序首先通过条件运算符比较变量a和b,使 得其中小的那个值赋值给变量t1;然后再通过变量c与t1进行比较,将小的值赋给变量t2,从而求得a,b,c三个 变量中最小的值。条件运算符的一般形式为: 表达式1?表达式2:表达式3 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表 达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。由于t1存放是 a,b中较小的数,所以当a<b判断为真的话,则应该取a的值,否则取b的值,故本题第一空填"a:b"。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/条件运算符

三、是非题 此题型下没有试题! 四、操作题 此题型下没有试题! 五、多选题 此题型下没有试题! 六、改错题 此题型下没有试题! 七、论述题 此题型下没有试题! 八、简答题 此题型下没有试题! 九、问答题 此题型下没有试题! 一、单选题 1、语句:printf("%d\n",12&012);的输出结果是______。

A:12

B:8

C:6

125

D:012

答案:B 评析: 本题的考查点是位与运算。 12&012即1100&1010,结果是1000,转化成十进制数是8,所以,输出结果是8。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:没有定义 2、设有以下语句 char a=3,b=6,c; c=a^b<<2; 则c的二进制值是______。

A:00011011

B:00010100

C:00011100

D:00011000

答案:A 评析: 本题的考查点是位运算。 "<<"是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该 数乘以2,左移两位相当于该数乘以2的2次方;^是异或运算符,所以,c的二进制值应为00011011。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第九章 位运算部分/知识点/位运算/简单的位运算

3、以下程序的输出结果是______。 main() { int x=05; char z='a'; printf("%d\n",(x&1)&&(z<'z') ); }

A:0

126

B:1

C:2

D:3

答案:B 评析: 关系表达式(x&1)&&(z<'z'),(x&1)为真,(z<'z')也为真,两个相与,自然也为真,以整型输出,则输出1。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第九章 位运算部分/知识点/位运算/简单的位运算

4、有以下程序 main() { unsigned char a,b,c; a=0x3; b=a|0x8; c=b<<1; printf("%d %d\n",b,c); } 程序运行后的输出结果是______。

A:-11

12

B:-6 -13

C:12 24

D:11 22

答案:D 评析: 本题的考查点是位运算。 0x3表示十六进制的3,"|"为按位或,"<<"为按位左移,将a,b转换为二进制数进行位运算,再将结果以十进制 打印出,结果为11 22。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间:

127

知识点:没有定义

5、有以下程序 main() { int x=3, y=2, z=1; printf("%d\n",x/y&~z); } 程序运行后的输出结果是______。

A:3

B:2

C:1

D:0

答案:D 评析: 本题的考查点是位运算符的知识点。 &是"按位与"运算符, 参加运算的两个运算量的相应位都为1, 则该位的结果值为1, 否则为0。 ~是"取反"运算符, 用来对一个二进制数按位取反,即将0变1,1变0。本题x/y&~z,x/y的值为1,~z的值为0,所以进行&运算后, 整个表达式的值为0。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间:2008-06-25 最后修改时间: 知识点:第九章 位运算部分/知识点/位运算/简单的位运算

6、有以下程序: main() { unsigned char a,b; a=4|3; b=4&3; printf("%d %d\n",a,b); } 执行后输出结果是______。

A:7

0

B:0

7

C:1

1

128

D:43 0

答案:A 评析: "按位

赞助商链接