C语言易错题

更新时间:2024-04-07 08:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

易错题整理

1. void main() {

float y=3.667;

printf(\}

结果:* 4*

2.void main() {

int x=1,y=2;

printf(\ printf(\ printf(\}

结果: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=0, y=5, z=2

4. 若有定义和语句:double x=34213.6894; printf(\则下列说法真确的是:

A. 输出值为*3.42e+04* B. 输出值为*3.42e+004*

C. 输出值为*34.21e+04* D. 输出格式符宽域不够,不能输出值 答案:B

5. void main() {int a=2,b=5;

printf(\

1

}

结果为:

A. a=%2,b=%5 B. a=2,b=5

C. a=%%d,b=%%d D. a=%d,b=%d 答案: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

void main() {

unsigned long a=23588,n=0;/*数据类型长度可能不够*/ while(a)

{n=10*n+a%2; /*首次a%2可能为0 */ a=a/2;

}

while(n)

{printf(\ n=n/10; }

printf(\}

对:#include

void main() {

int a=23588,n=0,b[20]; while(a)

{b[n++]=a%2; a/=2; }

2

for(n--;n>=0;n--)

printf(\ printf(\}

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 #define PR printf #define NL \#define 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 C. 1 D.程序错误,值为任意值 12 1 2 12

3

14. 下列程序的结果是: #include

#define PR(a) printf(\ #define PRINT(a) PR(a);printf(\ main()

{int i,a=1;

for(i=0;i<3;i++) PRINT(a+i); printf(\ }

结果为: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(\ }

结果: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的值是

4

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; }

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(\} 解:char占一个字节,int占两个字节,共用体变量mk的两个成员共占用存储单元,给数组赋值后,存储状况如下图:

5

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(\}

A.58 B.56 C.45 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() main() {int *p; {int *p; fun(p); fun(&p); } }

C.#include D.#include int fun(int **p) int fun(int p)

{*p=(int *)malloc(2);} {p=(int *)malloc(sizeof(int));} main() main() {int *p; {int *p; fun(&p); fun(p);

答案: C

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 。

6

x y z

28.下列选项中非法的表达式是:

A.0<=x<100 B.i=j==0 C.(char) (65+3) 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.有以下程序的输出结果是: 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(\}

A.Ab B.aa C.Aa D.Bb

32.若程序中包含头文件stdio.h ,以下选项中,正确运用指针变量的程序段是 A.int *i=NULL; B.float *f=NULL; scanf(\C.char t='m', *c=&t; D.long *L; *c=&t; L='\\0';

33.有以下程序执行的结果是: char fun(char x,char y) {if (x

main()

7

{char a='9',b='8',c='7';

printf(\ }

A.函数调用出错 B.8 C.9 D.7

34.有以下程序执行后输出结果是 #include int a=2;

int f(int *a) {return (*a)++;} main() {int s=0; {int a=5; s+=f(&a); } s+=f(&a);

printf(\}

A.10 B.9 C.8 D.7

35.有以下程序执行后输出结果是 #define f(x) x*x main() {int i;

i=f(4+4)/f(2+2); printf(\}

A.28 B.64 C.4 D.3

36. 有以下程序执行后输出结果是 #include struct STU

{char name[10]; int num; int score; };

main()

{struct STU

s[5]={{\ 0043,680},{\ 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)

8

{t=p[i];p[i]=p[j];p[j]=t;}

printf(\}

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(\}

答案: 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; *q=*p+5;

printf(\}

A.运行后报错 B.6 6 C.6 11 D.5 10 注:(指针q无指向) 若是 main()

{int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q; q=p+5;

printf(\ %d\\n\}

则答案为C

9

40.有以下程序运行后输出结果是

main()

{char s[]=\ puts(ps+4); *(ps+4)=0; puts(s); }

A.n/No B./No C.n/No D. Yes Yes Yes /No /No Yes 注: 在C语言中,所有指针变量都可以赋予“空”值,以下语句是等价的: p=NULL;p=0;p='\\0'; *(ps+4)=0;等价于*(ps+4)= '\\0'或*(ps+4)= NULL;

41.以下程序中,for循环体执行的次数是 4 。 #define N 2 #define M N+1

#define K M+1*M/2 main()

{int i,n=0;

for(i=1;i

42.执行下面的程序段后,变量k中的值为 A) 不定值 B) 0 C) 30 D) 10 int k=3, s[2]; s[0]=k; k=s[1]*10;

43.在C程序中,可把整型数以二进制形式存放到文件中的函数是 A) fprintf函数 B) fread函数 C) fwrite函数 D) fputc函数 44.下列程序执行后的输出结果是

A) -32767 B) FFFE C) -1 D) -32768

10

main()

{ char x=0xFFFF; printf(\

45.若有定义: float w; int a, b; 则合法的switch语句是 A) switch(w) B) switch(a);

{ case 1.0: printf(\ case 2.0: printf(\} }

C) switch(b) D) switch(a+b);

{ case 1: printf(\default: printf(\case 1+2: printf(\} } 46.以下程序段的执行结果是

A) a=12 y=12 B) a=12 y=12 a=14 y=16 a=16 y=28 a=16 y=20 a=18 y=24

int a, y; a=10; y=0; do

{ a+=2; y+=a;

printf(\if(y>20) break; } while(a=14);

C) a=12 y=12 D) a=12 y=12 a=14 y=26 a=14 y=44 11

47.语句printf(\的输出结果是 (说明:'\\b'是退格符←)

A) a\\bre\\'hi\\'y\\\\\\bou B) a\\bre\\'hi\\'y\\bou C) re'hi'you D) abre'hi'y\\bou

12

本文来源:https://www.bwwdw.com/article/p5ar.html

Top