c模拟考试题及参考答案(09级)

c模拟考试题及参考答案(09级)
c模拟考试题及参考答案(09级)

C语言程序设计模拟试卷(09级)

1.2.4.5.9.11.12.13.15.19.20.22 24 25 26 28 29 30

一、单选题(、共30小题,每小题1分,共30分)

1、设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是( )。

A. a < =b

B. !((a〈b)&&!c||1)

C. 'a'&&'b'

D. a||b+c&&b-c

2、设有语句char a='\72';则变量a( )。

A. 包含1个字符

B. 包含2个字符

C. 包含3个字符

D. 说明不合法

3、有以下程序:

void main( )

{ ;

;;

}

程序运行后的结果是( ):

A.编译时有警告错误

B.编译时有语法错误

C.编译没有错误,但是运行时出错

D.程序正常运行,但是无任何输出

4、x为int型变量,执行以下语句后,x的值为( )。

x=10;

x+=x-=x-x;

A.10

B.20

C.30

D.40

5、若有输入语句"scanf("%d,%d,%d" ,&x,&y,&z) ;",欲使x的值为10,y的值为20,z的值为30,则正确的输入应为( ):

A. 10 , 20 ,30〈回车〉

B. 10 20 30〈回车〉

C. 10,20,30〈回车〉

D. 10〈回车〉20〈回车〉30〈回车〉

6、以下不正确的if语句是( )。

A. if (a

B. if (a !=b && b) ;

C. if (a=b) printf("equal" ) ;

D. if (a>b) && (b>c) printf("max=%d",a);

7、关于if后面一对圆括号中的表达式,叙述正确的是( )。

A. 只能用关系表达式

B. 只能用逻辑表达式

C. 只能用关系表达式或逻辑表达式

D. 可以使用任意合法的表达式

8、以下运算符中,优先级最高的是( )。

A. !

B. [ ]

C. ++

D. %

9、假设有两个字符数组a[80],b[80],则正确的输出语句是( )。

A.puts(a,b);

B.printf("%s %s",a[],b[]);

C.putchar(a,b);

D.puts(a); puts(b);

10、对定义"int a[2]; "的正确描述是( )。

A. 定义一维数组a,包含a[1]和a[2]两个元素

B. 定义一维数组a,包含a[0]和a[1]两个元素

C. 定义一维数组a,包含a[0]、a[1]和a[2]三个元素

D. 定义一维数组a,包含a(0)、a(1)和a(2)三个元素

11、在引用数组元素时,其下标表达式的类型必须是( )。

A. 字符型

B. 整型

C. 整型或字符型

D. 整型常量

12、feof(fp)函数是用来测试fp所指的文件是否结束,如果文件结束,则feof(fp)返回的值是():

A. 0

B. 1

C. NULL

D. 以上答案都不对

13、调用fopen函数打开一个文件失败时,函数返回的值是():

A. -1

B. EOF

C. NULL

D. 1

14、在对文件进行操作时,读文件的含义是( ):

A. 将内存中的信息存入磁盘

B. 将磁盘中的信息输入到内存

C. 将CPU中的信息存入磁盘

D. 将磁盘中的信息输入到CPU

15、在C程序中,不合法的浮点型常量是( ):

A.3.4E2.5

B..456

C.0.820000

D.100.3e5

16、C程序中,合法的关键字是( ):

A. int

B. integer

C. Int

D. Integer

17、设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( )

A.P2=k;

B.P1=P2;

C.k=*P1+*P2;

D.k=*P1*(*P2);

18、以下选项中,对指针变量p不正确的操作是( )。

A.int a[6],*p; p=&a;

B.int a[6],*p; p=a;

C.int a[6]; int *p=a=1000;

D.int a[6]; int *p1,*p2=a; *p1=*p2;

19、设有如下的程序段:

char str[]="Hello";

char *ptr;

ptr=str;

执行上面的程序段后,*(ptr+5)的值为( )。

A. 'o'

B. '\0'

C. 不确定的值

D. 'o'的地址

20、While 语句中循环结束的条件是while后面表达式的值是( )。

A. 0

B. 1

C. -1

D. 非0

21、有以下程序段:

int t=0;

while(t=1) t--;

while循环执行的次数是( )。

A. 一次也不执行

B. 只执行一次

C. 无限次

D. 执行2次

22、执行循环语句"for (i=1; i<10; i++) a++;"后,变量i的值是( )。

A. 9

B. 10

C. 11

D. 不确定

23、C语言中while和do-while循环的主要区别为( )。

A. do-while的循环体至少无条件执行一次

B. while的循环控制条件比do-while的循环控制条件严格

C. do-while允许从外部转到循环体内

D. do-while的循环体不能是复合语句

24、以下关于函数调用的描述中错误的是( )。

A.实参可以是常量、表达式或有确定值的变量

B.实参和形参共用同一内存单元

C.实参和形参的类型、个数必须一致

D.只有发生函数调用时,系统才为形参分别存储空间

25、以下正确的描述是( )。

A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义不可以嵌套,但函数的调用可以嵌套

C.函数的定义和函数的调用均不可以嵌套

D.函数的定义和函数的调用均可以嵌套

26、已经有以下函数定义:

fun (char a)

{ printf((“a=%c\n”, a); }

该函数的返回值类型是( )。

A.void

B.char

C.int

D.不确定

27、以下叙述中正确的是( )。

A.在C语言中静态变量在未赋值时,其值为0

B.在C语言中任何变量在未赋值时,其值为0

C.外部变量在程序的任何函数中均有效

D.函数中任何一个局部变量均无法保留上一次调用时的运行结果

28、在VC++6.0中,若有以下说明:

struct st

{ int x;

float y;

};

则:sizeof(struct st) 的值为():

A. 6

B. 8

C. 10

D. 12

29、在下列结构变量st的定义中,不正确的是()。

A. struct student { int num; float score; }st;

B. struct student { int num; float score; }; student st;

C. struct { int num; float score; }st;

D. struct student{ int num; float score; }; struct student st;

30、在VC 6.0中,若有以下共用体说明:

union uu

{ float x;

double y;

char z;

} luck;

luck所占存储单元字节数为():

A. 8

B. 4

C. 13

D. 1

二、填空题(共5小题,每小题3分,共15分)

1、下面程序是实现1+1/2+1/4+1/6+…+1/50的值,请填空:

main()

{ int i=2;

float sum=1;

while (i<=50)

{

sum=sum+1/(float)i;

i++;__________;

}

printf(“sum=%f\n”,sum)

}

答案:i++

i=i+1

++i

i+=1

i++;

i=i+1;

++i;

i+=1;

2、下面的程序可以实现从10个数中找出最大值和最小值功能,请填空。 #include

int max,min;

find(int *p, int n)

{ int *q; max=min=*p;

for(q=p;q

if (___________) max=*q;

else if (min>*q) min=*q;

}

main ( )

{int I,num[10];

printf("Input 10 numbers:\n");

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

scanf("%d",&num[i]);

find(num, 10);

printf("max=%d,min=%d\n",max,min);

}

答案:max<*q

max<=*q

*q>max

*q>=max

3、下面的程序将浮点数写到文件test中,然后读出并显示。

#include

main()

{FILE *fp;

float f=12.34;

if((______(“test”,“wb”))==NULL)

{printf("Cannotopen file." );exit(l);}

fwrite(&f,sizeof(float),1,fp);

rewind(fp) ;

fread(&f,sizeof(float),1,fp);

printf(“%f\n”,f);

fclose(fp);

}

答案:fp=fopen

4、统计学生成绩中不及格的学生名单。

#include

struct student

{

long num;

char name[20];

float score;

}stu[6]={{9910110,”wangling”,85},{9910111,”liming”,90.5},{9910112,”

fengyong”,90.5},{9910113,”fangjun”,56},{9910114,”sunping”,77.5},{9

910115,”kongxiao”,50.5}};

main()

{

struct student *p;

int count=0;

printf(“不及格名单:\n”);

for(p=stu; ________;p++)

if(p->score<60)

{ count++;

printf(“%ld:%-12s %.1f\n”, p->num, p->name, p->score);

}

printf(“不及格人数:%d\n”,count);

}

答案:p

p<=stu+5

5、下面程序输入一个字符串,输出其中所出现过的大写英文字母.如输入字符串“UKSDYckjsjsjJSJJD”;应输出“UKSDYJ”。按程序功能填空。

#include

main()

{ char a[80], b[26];

int i,j,k=0;

gets(a);

for(i=0;a[i]!='\0';i++)

if(a[i]>='A'&&a[i]<='Z')

{ for(j=0;j

if (b[j]==a[i]) break;

if(j= =k)

{ b[k]=a[i]; k++; }

}

b[k] =' \0';

for(i=0; __;i++)

printf("%c ",b[i]);

printf("\n");

}

答案:i

i

i

b[i]!='\0'

b[i]!=0

三、程序改错题(共5小题,每小题3分,共15分)

1、打开C:\CAADATA\36中源程序文件pg4102.cpp,该程序是从键盘上输入一批学生的成绩,计算其中及格的有多少人(以负数作为数据输入结束的标识)?请修改,使程序能正确运行。该源程序内容如下:

#include

void main(void)

{

int count,grades;

printf(“请输入分数:\n”);

scanf("%d",&grades);

while(grades>=0)

{

if(grades>=60) count++;

}

printf("共有%d个学生成绩合格!\n",count);

}

2、打开C:\CAADATA\37中源程序文件pg3104.cpp,该程序是判断一个输入的字符是哪种类型的字符,修改程序,使之能正确运行。该源程序内容如下:

#include

void main()

{

char ch;

printf(“please input a character!”);

ch=getchar();

if ch>='a'&&ch<='z'

printf("this is a lowercase\n");

else if ch>='A'&&ch<='Z'

printf("this is a uppercase\n");

else if ch>='0'&&ch<='9'

printf("this is a number\n");

else

printf("this is a other character\n");

}

3、打开C:\CAADATA\41中源程序文件pg6101.cpp,该程序有小问题,程序结果不正确。请修改,使程序能正确运行。该源程序内容如下:

#include

void main(void)

{

int a[5];

printf("请输入5个整数:");

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

scanf("%d",&a[i]);

printf("这5个数为:");

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

printf("%4d",a[i]);

printf(“\n”);

}

4、打开C:\CAADATA\42中源程序文件pg5101.cpp,该程序是求两个数的和,有一个小问题,请修改,使程序能正确运行。该源程序内容如下:

#include

void main()

{

float a,b,c;

printf("请输入两个数,中间用逗号隔开:");

scanf("%f,%f",&a,&b);

c=add(a,b);

printf("两个数之和为:%f\n",c);

}

float add(float x,float y)

{

float z;

z=x+y;

return z;

}

5、打开C:\CAADATA\43中源程序文件pg8107.cpp,该程序将字符串a的值复制给字符串b。请改正其中的错误。该源程序内容如下:

#include

#include

int main(void)

{

char *a="You are a great boy";

char *b="";

printf("复制前,字符串a: %s,字符串b: %s\n",a,b);

strcpy(b,a);

printf("复制后,字符串a: %s,字符串b: %s\n",a,b);

return 0;

}

四、编程题

1、打开C:\CAADATA\38中的源程序文件pg106.cpp,补充程序使得程序运行时完成以下功能:从键盘输入3个数,并按由大到小的顺序输出。并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分)。(10分)

2、打开C:\CAADATA\39中的源程序文件pg207.cpp,补充程序并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分),使得程序运行时完成以下功能:编写程序找出3×3矩阵中的最大元素及其行列位置并输出。(12分)

3、打开C:\CAADATA\40中的源程序文件pg307.cpp,按要求补充程序并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分),要求为:编写判断一个年份是否为闰年的函数leapyear(),并在主函数调用该函数输出1900~2100年之间的所有闰年。闰年的条件是:能被4整除但不能被100整除,或者能被400整除。(18分)

C语言程序设计模拟题参考答案(09级)

题号 1 2 3 4 5 6 7 8 9 10 答案 B A D B C D D B D B

17 18 19 20 题号11 12 13 14 15

16

答案 B B C B A A A C B A 题号21 22 23 24 25 26 27 28 29 30 答案 C B A B B C A B B A

二、填空题:

1、答案:i++

或: i=i+1

或: ++i

或: i+=1

或: i++;

或: i=i+1;

或: ++i;

或: i+=1;

2、答案:max<*q

或:max<=*q

或:*q>max

或:*q>=max

3、答案:fp=fopen

4、答案:p

或:p<=stu+5

5、答案:i

或:i

或:i

或:b[i]!='\0'

或:b[i]!=0

注意:以上答案只需填一个,多填会被自动评卷系统扣分

三、程序改错题:

1、参考答案:

#include

void main(void)

{

int count,grades;

printf("请输入分数:\n");

scanf("%d",&grades);

count=0; //添加本句

while(grades>=0)

{

if(grades>=60) count++;

scanf("%d",&grades); //添加本句

}

printf("共有%d个学生成绩合格!\n",count);

}

2、参考答案:

#include

void main()

{

char ch;

printf("please input a character!");

ch=getchar();

if(ch>='a'&&ch<='z') //加上括号

printf("this is a lowercase\n");

else if(ch>='A'&&ch<='Z') //加上括号

printf("this is a uppercase\n");

else if(ch>='0'&&ch<='9') //加上括号

printf("this is a number\n");

else

printf("this is a other character\n");

}

3、参考答案:

#include

void main(void)

{

int a[6],i; //增加变量i定义,修改数组长度为6

printf("请输入5个整数:");

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

scanf("%d",&a[i]);

printf("这5个数为:");

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

printf("%4d",a[i]);

printf("\n");

}

4、参考答案:

#include

float add(float x,float y) // 将add函数定义提前到调用add之前

{

float z;

z=x+y;

return z;

}

void main()

{

float a,b,c;

printf("请输入两个数,中间用逗号隔开:");

scanf("%f,%f",&a,&b);

c=add(a,b);

printf("两个数之和为:%f\n",c);

}

5、参考答案:

#include

#include

int main(void)

{

char *a="You are a great boy";

char b[20]=""; // 定义数组b

printf("复制前,字符串a: %s,字符串b: %s\n",a,b);

strcpy(b,a); //参数b必须是数组

printf("复制后,字符串a: %s,字符串b: %s\n",a,b);

return 0;

}

四、编程题:

1、pg106.cpp

参考程序:

#include

void main()

{ int a,b,c,temp;

scanf(“%d,%d,%d”,&a,&b,&c);

if(a

{ temp=a;a=b;b=temp;}

if(a

{ temp=a;a=c;c=temp;}

if(b

{ temp=b;b=c;c=temp;}

printf(“%d,%d,%d\n”,a,b,c);

}

2、pg307.cpp

可在主函数中将二维数组的9个元素初始化为以下值:

8 6 4

2 1 9

7 5 3

参考程序:

#include

void main()

{ int a[3][3]={{8,6,4},{2,1,9},{7,5,3}};

int i,j,row,colum,max;

max=a[0][0];

row=colum=0;

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

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

if(a[i][j]>max)

{ max=a[i][j];

row=i;

colum=j;

}

printf("max=%d,row=%d,colum=%d\n",max,row,colum);

}

3、pg307.cpp

参考程序:

#include

main()

{ int leapyear (int year);

int year;

printf(“1900~2100年之间的所有闰年是:\n”);

for(year=1900;year<2100;year++)

if(leapyear(year)==1) printf(“%8d”,year);

}

int leapyear (int year)

{ int leap;

if (year%4==0)

{ if (year%100==0)

{ if (year%400==0) leap=1;

else leap=0;

}

else leap=1;

}

else leap=0;

return(leap);

}

相关主题
相关文档
最新文档