C语言易错题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C. 1 12
D.程序错误,值为任意值
14. 下列程序的结果是: #include <stdio.h> #define PR(a) printf("%d\t",(int)(a)); #define PRINT(a) PR(a);printf("ok!") main() {int i,a=1; for(i=0;i<3;i++) PRINT(a+i); printf("\n");
D.7
C.8
D.7
ຫໍສະໝຸດ Baidu=f(4+4)/f(2+2); printf("%d\n",i); } A.28 B.64 C.4 D.3
36. 有以下程序执行后输出结果是 #include <stdio.h> struct STU {char name[10]; int num; int score; }; main() {struct STU s[5]={{"YangSan",0041,703},{"LiSiguo",0042,580},{"WangYin", 0043,680},{"Sundan",0044,550},{"PengHua",0045,537}},*p[5],*t; int i,j; for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(p[i]->score > p[j]->score) {t=p[i];p[i]=p[j];p[j]=t;} printf("%d %d\n",s[1].score,(*p[1]).score); } A.550 550 B.680 680 C.580 550 D.580 680 37.下面程序的运行结果是: int f(int a[],int n) {if(n>1) return a[0]+f(&a[1],n-1); else return a[0]; } main() {int aa[3]={1,2,3},s; s=f(&aa[0],3); printf("%d\n",s); } 答案: 6 38.结构化程序有三种基本结构组成,三种基本结构组成的算法: A. 可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完成符合结构化的任务 D. 只能完成一些简单的任务 39.有以下程序运行后输出结果是 main() {int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q;
} 10.设有如下函数: func(float a) {printf(“%d\n”,a*a); } 则函数的类型是: A.无法确定 B.int C.float D.void (在 C 语言中,若对函数类型未加显示地说明,则函数的隐含类型为 int 型) 11. 宏定义#define E 2.71828 中,宏名“E”代替一个 字符串 。 12.下面的叙述中,错误的是: A.#include 命令可以包含扩展命名为“.c”的文件 B.#include“test\\test.h”是一个正确的文件包含命令 C.#include<…>中可以包含路径 D.使用#include<…>比#include“…”节约编译时间 (#include 命令的包含文件可以带目录,并且目录的书写格式必须符合操作系统的习惯, 由于它不是 C 语言的字符串,不能用“\\”来表示“\” ) 13.下列程序的结果是: #include <stdio.h> #define PR printf #define NL "\n" #define D "%d" #define D1 D NL #define D2 D D NL main() {int a=1,b=2; PR(D1,a); PR(D2,a,b); } A. 1 B. 1 12 1 2
main() {int *p; fun(&p); } D.#include <stdlib.h> int fun(int p) {p=(int *)malloc(sizeof(int));} main() {int *p; fun(p);
26.以下叙述中不正确的是: A. C 语言中的文本文件以 ASCⅡ码形式存储数据 B. C 语言中对二进制文件的访问速度比文本文件快 C. C 语言中,随机读写方式不适用于文本文件 D. C 语言中,顺序读写方式不适用于二进制文件 27.设有以下定义: struct ss {int info; struct ss *link;} x,y,z; 且已建立如下图所示链表结构: 请写出删除点 y 的赋值语句是 x.link = y.link 。
结果为: A. a=%2,b=%5 C. a=%%d,b=%%d 答案:D
B. a=2,b=5 D. a=%d,b=%d
6. 以下叙述中正确的是?????? A)用 C 程序实现的算法必须要有输入和输出操作 B)用 C 程序实现的算法可以没有输出但必须要有输入 C)用 C 程序实现的算法可以没有输入但必须要有输出 D)用 C 程序实现的算法可以既没有输入也没有输出 7. 结构化程序由三种基本结构组成,三种基本结构组成的算法 A) 可以完成任何复杂的任务 ? B) 只能完成部分复杂的任务 C) 只能完成符合结构化的任务? ? D) 只能完成一些简单的任务 8.以下选项中可作为 C 语言合法常量的是??? A)-80. B)-080 C)-8e1.0 D)-80.0e01? 9.将十进制数 23588 转化成二进制: 错:#include <stdio.h> void main() { unsigned long a=23588,n=0;/*数据类型长度可能不够*/ while(a) {n=10*n+a%2; /*首次 a%2 可能为 0 */ a=a/2; } while(n) {printf("%d",n%10); n=n/10; } printf("\n"); } 对:#include <stdio.h> void main() { int a=23588,n=0,b[20]; while(a) {b[n++]=a%2; a/=2; } for(n--;n>=0;n--) printf("%d",b[n]); printf("\n");
D.24
25.以下程序段中,能过通过调用函数 fun,使 main 函数中的指针变量 p 指向一个合法的整 型单元是: A.int fun(int *p) B.int fun(int **p) {int s; p=&s;} {int s; *p=&s;}
main() {int *p; fun(p); } C.#include <stdlib.h> int fun(int **p) {*p=(int *)malloc(2);} main() {int *p; fun(&p); 答案: C
} D.fund(int *x,int *y) {*x=*y;*y=*x; } 21.设有如下定义 struct sk {int n; float x; }data,*p; 若要使 p 指向 data 中 n 域,真确的赋值语句是: A.p=&data.n; B.*p=data.n; C.p=(struct sk *) &data.n; D.p=( struct sk *) data.n; 22.以下程序的输出结果是 256 。 union {char m[2]; int k;} mk; main() {mk.m[0]=0; mk.m[1]=1; printf("%d\n",mk.k); } 解:char 占一个字节,int 占两个字节,共用体变量 mk 的两个成员共占用存储单元,给数 组赋值后,存储状况如下图:
} 结果为:1
2
3
ok!
15.以下可以讲 char 型变量 s 中的大小写字母进行转化(即大写改小写,小写改大写)的语 句是: A.s=s^32 B.s=s&32 C.s=s|32 D.s=s+32 16.以下程序的输出结果是: main() {char a=0xf0,b=03,c; c=~a&020>>b; printf("%x\n",c); } 结果:2 (注意运算符优先级高低) 17.若有以下定义和语句: int *p,i=1; double *w,a=3.5; p=&i; w=&a; 在执行了 p=(int *)w;语句后,*p 的值为: A.4 B.3.5 C.3 D.一个整数 注意:double 类型的数据与 int 类型数据存放的机制不同, 因此无法估计此证书的确切值 18.已知函数说明语句:void *f() ;则它的含义是: A.函数 f 的返回值是一个通用型指针 B.函数 f 的返回值可以是任意的数据类型 C.函数 f 无返回值 D.指针 f 指向一个函数,该函数无返回值 19.已知 int a[]={1,2,3,4},y,*p=&a[1]; y=(*--p)++;则 y 的值是 A.1 B.2 C.3 D.4 20.函数的功能是交换变量 x 和 y 的值,且通过正确调用返回交换结果,能正确执行此功能 的函数是: A.funa(int *x,int*y) {int *p; *p=x;*x=*y;*y=*p; } B.funb(int x,int y) {int t; t=x;x=y;y=t; } C.func(int *x,int *y) {*x=*x+*y;*y=*x-*y;*x=*x-*y;
x 28.下列选项中非法的表达式是: A.0<=x<100 C.(char) (65+3)
y
z
B.i=j==0 D.x+1=x+1;
29.若已定义的函数有返回值,则以下关于该函数的调用的叙述中错误的是: A. 函数调用可以作为独立的语句存在 B. 函数调用可以作为一个函数的实参 C. 函数调用可以出现在表达式中 D. 函数调用可以作为一个函数的形参 30.有以下函数定义: void fun(int n,double x) { …… } 若下列选项中的变量都已正确定义并赋值,则对函数 fun 的正确调用语句是: A.fun(int y,double m); B.k=fun(10,12.5); C.fun(x,n); D.void fun(n,x); 31.有以下程序的输出结果是:
23.下列叙述中正确的是: A. C 语言中既有逻辑类型也有集合类型 B. C 语言中没有逻辑类型但有集合类型 C. C 语言中有逻辑类型但没有集合类型 D. C 语言中既没有逻辑类型也没有集合类型 24.以下程序的输出结果是: 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++]; printf("%d\n",k); } A.58 B.56 C.45
易错题整理 1. void main() { float y=3.667; printf("*%8.0f*\n",y); } 结果:* 4* 2.void main() { int x=1,y=2; printf("%d,",x>y?y++:x++); printf("%d,",x<=y?++y:++x); printf("%d,%d",x,y); } 结果:1, 3, 2,3 3.void main() { int x=0,y=0,z=0; do { switch(y++) { case 1:x++;break; case 3:x+=3;break; default:x=x%2;continue; } z++; } while(y<5); printf("x=%d,y=%d,z=%d\n",x,y,z); } 结果:x=0, y=5, z=2 4. 若有定义和语句:double x=34213.6894; printf("*%8.2e*\n", x); 则下列说法真确的 是: A. 输出值为*3.42e+04* B. 输出值为*3.42e+004* C. 输出值为*34.21e+04* D. 输出格式符宽域不够,不能输出值 答案:B 5. void main() {int a=2,b=5; printf("a=%%d,b=%%d\n"); }
void fun(char *a,char *b) {a=b; (*a)++;} main() {char c1='A',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); } A.Ab B.aa
C.Aa
D.Bb
32.若程序中包含头文件 stdio.h ,以下选项中,正确运用指针变量的程序段是 A.int *i=NULL; B.float *f=NULL; scanf("%d",i); *f=10.5; C.char t='m', *c=&t; D.long *L; *c=&t; L='\0'; 33.有以下程序执行的结果是: char fun(char x,char y) {if (x<y) return x; return y; } main() {char a='9',b='8',c='7'; printf("%c\n",fun(fun(a,b),fun(b,c))); } A.函数调用出错 B.8 C.9 34.有以下程序执行后输出结果是 #include <stdio.h> int a=2; int f(int *a) {return (*a)++;} main() {int s=0; {int a=5; s+=f(&a); } s+=f(&a); printf("%d\n",s); } A.10 B.9 35.有以下程序执行后输出结果是 #define f(x) x*x main() {int i;