文档库 最新最全的文档下载
当前位置:文档库 › C语言考试复习试题及参考答案

C语言考试复习试题及参考答案

C语言考试复习试题及参考答案
C语言考试复习试题及参考答案

中南大学现代远程教育课程考试复习试题及参考答案

C语言程序设计

一、单项选择题

若以下各题所有库函数都可以合法使用,且变量定义如下:

int m=5, i=3,j=2,*p, a=8,b=0;

int arr[10]={0,1,2,3,4,5,6,7,8,9},td[ ][3]={1,2,3,4,5,6};

float x=2.5,y=3.0;

double z=0; long n=1;

char c=’A’,ch[20]={’a’,’b’,’c’,’\0’,’d’,’\0’};

struct student

{ int num;

char name[20];

float score;

struct student *next;

}st1,st2,*ps;

FILE *fp;

1.若将3和10从键盘输入给变量a、x,输入语句为

scanf(“a=%d,x=%f”,&a,&x);正确的键盘输入是(↙表回车):

A a=3,x=10↙

B 3,10↙

C 3 10↙

D 3,10.0↙

2. 以下不是死循环的语句是:

A for ( ;;y+=i++);

B while(a) y+=i++ ;

C do{ y+=i++}while (a>0);

D for (b=0;(c=getchar()!=’\n’);)b++;

3.若p=arr;正确的语句是:

A *p=arr[10];

B *p=arr[2*a];

C p=arr[5];

D p[i]=arr[0];

4.若ps=&st1;则下面描述正确的是:

A ps->num与st1->num等价。

B ps.num与st1.num等价。

C ps->num与num等价。

D ps->num与st1.num等价。

5.语句printf(“%d",aj);的输出结果是:

A 1

B 0

C 8 D都不对

6.表达式 j/i+a%i+x 的值是:

A 6

B 4.5

C 6.0

D 5.5

7.表达式 b||a+i&&i

A 不确定

B 0.0

C 1

D 0

8.若执行语句 a=b+=3*j+(int)x;则b的值为:

A 1

B 8

C 0

D 8.5

9. 若执行语句 a=b>j ?++i : i++;则a与i的值分别为:

C x=

D x=

1a≥b 1 a

11.将字符串“Wan Ming”输入数组ch中,正确的是:

A、scanf(“%s”,ch)

B、scanf(“%s”,&ch)

C、ch=“Wan Ming”

D、gets(ch)

12. 执行语句printf(“%c”,td[1][0]+’A’)的结果是:

A、A

B、B

C、D

D、E

13.下列关于main()函数说法正确的是

A、C语言程序总是从main()开始执行

B、C语言程序可以没有main()函数

C、C语言程序可以包含多个main()函数,但必须在不同的模块中

D、C语言程序中main()函数不能有形式参数

14.下列关于函数说法正确的是

A、C语言程序的函数内还可定义其他的函数

B、C语言程序的函数内不可再定义其他的函数

C、C语言程序的函数不能自己调用自己

D、C语言程序中只有同一源文件中的函数才能有调用与被调用关系

15.若#define squ(x) x*x 执行语句printf(“result=%d”,squ(i+j));结果为:

A、result=36

B、36

C、result=11

D、11

16. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j));结果为:

A、result=36

B、result=17

C、result=11

D、result=25 17.C语言对宏命令叙述正确的是

A、宏替换占用运行时间

B、编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的

C、宏命令的处理是在程序执行时进行的

D、宏命令的处理是在程序连接时进行的

18. 若执行语句a- =a+=a*=10;a的值为:

A、0

B、-10

C、-100

D、100 19.若执行语句p=arr; printf(“%d”,*(p+i));输出结果为

A、0

B、2

C、3

D、1

20.若执行printf(“%s”,ch);结果为:

A、’abc’

B、abc

C、abcd

D、abc\0d

21.若对数组进行初始化:char

carr[ ]={’s’,’t’,’u’,’d’,’e’,’n’,’t’},barr[ ]=”student ”;则正确的是

A、carr与barr长度相同

B、carr比barr长

C、carr与barr相同

D、carr比barr短

22.若有说明语句int (*p)[N];则p是

A、N个指向整型变量的指针

B、可指向有N个整型元素的一维数组的指针

C、指向N个整型变量的函数指针

D、有N个指针元素的一维指针数组

23.若有说明语句int *f( );则函数f是

A、f是一个指向整型变量的数组指针

B、f返回一个整型数据

C、f是一个指向整型变量的函数指针

D、f 返回一个整型指针,指向函数本身

24.若函数f定义如下:void f(char *d, char *s)

{ while ( *d++=*s++);

}

函数f的功能是:

A、串比较

B、串复制

C、求串长

D、串反向

25.表达式100+a+’a’+x*z的值的数据类型为

A、int

B、float

C、double

D、char

26.若要动态申请一个double型内存单元,正确的语句是

A、pd=double malloc(sizeof(double))

B、pd=( *

double)malloc(sizeof(double))

C、pd=double * malloc(sizeof(double))

D、pd=(double

*)malloc(sizeof(double))

27.若要从键盘上输入67892到变量n中,正确的语句是

A、scanf(“%lf”,&n);

B、scanf(“%ld ”,&n);

C、scanf(“%lf ”,n);

D、scanf(“%d ”,&n); 28.判断字符变量c是否不为小写英文字母的正确表达式是

A、’a’<=c <=’z’

B、c>= ‘a’ && c<=’z’

C、’a’≤c ≤’z’

D、c<’a’ || c>’z’ 29.下列每组表达式被执行后,结果完全等价的是

A、!(b= =0)与!(!b )

B、b=(a=4,4*5) 与 b=a=4,4*5

C、float(i/j) 与 float i/j

D、00 && x<100

30.表达式(m&1)==(m%2)的值是

A、 0

B、无法确定

C、 1

D、以上都不对

31.数学式ln2x+asin(60°)的C语言表达式是

A、log(2*x)+a*sin(60)

B、ln(2*x) +a*sin(60/180*3.14)

C、ln(2*x) +a*sin(60)

D、log(2*x)+a*sin(3.14*60/180)

32. 要打开一个已经存在的非空文件file用于修改,则正确的语句是

A、fopen(“file”,”r+”)

B、

fopen(“file”,”w”)

C、fopen(“file”,”a+”)

D、

fopen(“file”,”r”)

33. 若打开文件时发生错误,则fopen()函数的返回值是

A、1

B、0

C、不确定

D、没有返回值

34. 调用函数fseek(fp,-25L,2),其操作结果是

A、文件位置指针从文件开始处前移25字节

B、文件位置指针从文件结尾处后移25字节

C、文件位置指针从文件当前位置处前移25字节

D、文件位置指针从文件当前位置处后移25字节

35. 能正确表示a和b同时为正或同时为负的逻辑表达式是

A、(a>=0||b>=0)&&(a<0||b<0)

B、(a>=0&&b>=0)&&(a<0&&b<0)

C、(a*b>0&&(a*b<=0)

D、a*b>0

36. 若x=y=z=1;表达式(x--||++y)&&(z++)执行后,x,y,z的值分别为:

A. 0,1,1

B. 0,1,2

C. 0,2,1

D. 0,2,2

37.下列变量的初始化,不正确的是:

A. int x,y=5;

B. float x=y=3.5;

C. char s[]=”a”;

D. int a[][3]={{1},{},{0,9}};

38. 可以代替while(x!=0)中的条件x!=0的是:

A. x

B. !x

C. x==1

D. x!=1

39.有关函数参数,下列说法不正确的是:

A. 实参和形参是不同的变量;

B. 实参可以将数据传给形参;

C. 形参可以将数据传给实参;

D. 实参和形参必须个数相等,类型一致。

40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是:

A. 同一行上的未配对if

B. 缩排位置相同的未配对if

C. 它之前最近的未配对的if

D. 它之后最近的未配对if

41.对于一个二维数组,以下几种方法中,不能正确表示i行j列元素的是:

A.td[i][j]

B. *(td[i]+j)

C. *(*(td+i)+j)

D.*(td+i+j)

42.下面语句段不是死循环的是:

A. for(i=1;;i++)

B. k=0;

s=s+i; do{ k++;

}while(k>0);

C. i=0;

D. a=1;

while(1) while(a<10)

{ i++; { if(a>5) continue;

if(i==20) break; } a++; }

43.下列字符串中,可以用作变量名的是:

A. _out2

B. 12abc

C. while

D. stu&3

44. 表达式0

A. 0和0

B. 0和1

C. 1和0

D. 1和1

45.下列常数中,符合C语法规则的是:

A. ‘\’

B. .5e2

C. 018

D. e3

46.以下为合法的整型常量的是:

A. 027a

B. 0.0

C. 0x4e3

D. 3×102

47.以下为合法的整型常量的是:

A.‘3’ B. 281 C. 5af D. ‘\101’

48.以下为合法的实型常量的是:

A. 1.5×102

B. 1e-5

C. 1e1.5

D. E+5

49.以下为合法的实型常量的是:

A. π

B. .5

C. 025.3

D. 0

50.以下为合法的字符型常量的是:

A. "A"

B. 64

C. '啊'

D. '\n'

51. 以下为非法的字符型常量的是:

A. ‘ok’

B. ‘*’

C. ‘A’

D.‘\111’

52.以下为合法的变量定义的是:

A.#define N 10

B. int a=12,b,c; float

x,y,a=1.5;

int a[3*N];

C. int m,f(x);

D. char c,*pc=&c,n;

53.以下为非法的变量定义的是:

A. char 21cn; B. int k=0,*p=&k;

C. int a=b=c=21; D. static char[4]=”Good”;

54.以下是合法的表达式的是:

A. y=m n

B. (x+y)++

C. x+y=8

D. putchar('A ')

55. 以下是非法的表达式的是:

A. a+=b*c

B. i=0,k=k++

C. k==0

D. !a||m≤n &&7 56.以下是合法赋值语句的是:

A.a+b=0 B. pc=&x

C. ps->name=”Tan Jing”

D. static

char[4]=’G’,’o’,’o’,’d’

57.若要从键盘上输入327680到变量n中,正确的语句是:

A. scanf(“%lf” ,&n);

B. scanf(“%d “,&n);

C. scanf(“%ld”,n);

D. scanf(“%ld”,&n);

58. 若有宏定义#define y 9

则表达式’y’==’9’的值为:

A. ‘y’

B. ‘9’

C. 0

D. 1

二、程序理解题(指出程序执行的结果)

1. #include

main( )

{ int i,j,x=0;

for (i=0;i<2;i++)

{ x++;

for (j=0;j<3;j++) { if (j%2 ) continue;

x++;

}

x++;

}

printf(“x=%d\n”,x);

}

2. #include

main( )

{ int k=0,j,x=0;

while (k<2)

{ ++x;

for (j=0;j<3;j++)

{ if (j%2 ) break;

x++;

}

k++; ++x;

}

pr intf(“x=%d\n”,x);

}

3.#include

main()

{int a=2,b=7,c=5;

switch (a>0)

{case 1:switch (b<0)

{ case 1: printf(“$”);break;

case 2: printf(“!”); break;

}

case 0: switch (c= =5)

{ case 0: printf(“*”);break;

case 1:printf(“#”);break;

default: printf(“%”);

}

default: printf(“&”);

} printf(“\n”);

}

4. main()

{ int i,sum=0;

for (i=1;i<=50;i++)

{ sum+=i;

if (sum>10) break;

printf(“sum=%-5d\n”,sum);

}

}

5. 若输入字符串program时,下列程序输出为:

#include

main()

{ char str[80];

void prochar(char *str,char ch);

scanf(“%s”,str);

prochar(str,’r’);

puts(str);

}

void prochar(char *str,char ch)

{ char *p;

for (p=str;*p!='\0';p++)

if (*p==ch){*str=*p;(*str)++;str++;}

*str='\0';

}

6. #include

#include

main()

{ int i,j,temp,

d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1} ,{1,2,3,4}};

for (i=0;i<4;i++)

for (j=0;j

if (d[i][j]>d[j][i]) d[j][i]=d[i][j];

for (i=0;i<4;i++)

{ printf("\n");

for (j=0;j<4;j++)

if (j>=i)

printf("%6d",d[i][j] ) ;

else printf("%6c",' ') ;

}

}

7. #include

main()

{ int k;

printf("\n");

for (k=1;k<10;k++)

switch(k%2)

{case 0: printf("#");break;

case 1: k+=2;printf("*");

defalt: printf("\n");

}

}

8. int d=1;

fun(int p)

{ static int d=5;

d+=p;

printf("(f)%-4d",d);

return (d);

}

main()

{int a=3;

printf("\n(m)%d",fun(a*fun(d)));

}

9. #include

main()

{char a[2][6]={"sun","moon"};

int j,i,len[2];

for(i=0;i<2;i++)

{ for (j=0;j<6;j++)

if (a[i][j]=='\0')

{ len[i]=j;

break;

}

printf("%8s:%d\n",a[i],len[i]);

}

10. int x=2,y=4;

f1(int x)

{ x++;y++;

printf(“f1:x=%d,y=%d\n”,x,y);

}

相关文档