搜索
您的当前位置:首页正文

C考试模拟题1及参考答案

来源:易榕旅网


考试模拟题1及参考答案

考试模拟题1

一、单项选择题(共20题,每题1分,共20分。) 1. 以下叙述不正确的是。

A. 一个C源程序可由一个或多个函数组成 B. 在C程序中注释说明只能位于一条语句的后面 C. C程序的基本组成单位是函数

D. 一个C源程序必须包含一个main函数

2. 若变量已正确定义并赋值,表达式()不符合C语言语法。 A. 3%2.0 B. a*b/c C. 2, b D. a/b/c 3. 六种基本数据类型的长度排列正确的是()。 A. bool=charA. 空格 B. \\0 C. e D. f

5. 设int a=9,b=8,c=7,x=1;则执行语句if(a>7) if(b>8) if(c>9)

x=2;else x=3;后x的值是()。

A. 2 B. 1 C. 0 D. 3

6. 对以下程序,当输入数据的形式为12a345b789↙,正确的输出结果为()。

int main()

{char c1,c2;int a1,a2;

c1=getchar(1); scanf(\"%2d\c2=getchar(a); scanf(\"%3d\printf(\"%d,%d,%c,%c\\n\ ,,, return 0; }

A. 12,345,a,b

B.

C. 2a,45b,1,3 D. 2,789,1,a 7. 以下程序的输出结果是:()。 int main() {

char st[20]= \"hello\\0\\\\\\\ \";

printf(\"%d %d\\n\return 0; }

A. 9 9 B. 5 20 C. 13 20 (D)20 20 8. 若已定义int a[9],*p=a;并在以后的语句中未改变p的值,则不

能表示a[1]地址的表达式是()。

A. a++ B. a+1 C. p+1 D. ++p

9. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。

A. 外部 B. 静态 C. 自动 D. 寄存器

10. 以下能对二维数组a进行正确初始化的语句是( )。

A. int a[2][]={{1,0,1},{5,2,3}}; B. int a[][3]={{1,2,3},{4,5,6}}; C. int a[2][4]={{1,2,3},{4,5},{6}}; D. int a[][3]={{1,0,1},{ },{1,1}}; 11. 函数fopen()的返回值不能是()。

A. NULL B. O C. 1 D. 某个内存地址 12. 若定义结构体struct st{int no;char name[15];float score;}s1;则结构体变量s1所占内存空间为()。

A. 15 C. sizeof(int)+sizeof(char[15])+sizeof(float) B. sizeof(s1) D. 19 13. 若有以下宏定义: #define N 3

#define Y(n) ((N+1)*n)

则执行语句z=2*(N+Y(5));后,z的结果是()。 A. 语法错误B. 46 C. 66 D. 无定值

14. 已知a为整型变量,那么与表达式 a!=0 真假值情况不相同的表达式有()。

A. a>0||a<0 B. a C. !a==0 D. !a 15. 下述程序代码中有语法错误的行是()。 int i,ia[10],ib[10]; /*第1行*/ for (i=0;i<=9;i++) /*第2行*/ ia[i]=0; /*第3行*/ ib=ia; /*第4行*/

A. 第1行 B. 第2行 C. 第3行 行

16. 以下程序段的循环次数是()次。 inti=1,j=0; while(i+j<=10) { if (i>j) j=j+2; else i=i+2; }

A. 5 B. 6 C. 0 D. 4 17. 已知函数ss的定义如下: void ss(char *s,char *t) { while (*s++=*t++);} 则该函数的功能是()。

D. 第4

A. 串复制 B. 求串长度 C. 串比较 D. 串反向 18. 对两个数组a和b进行如下初始化 char a[]=“ABCDEF”;

char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’}; 则以下叙述正确的是()。

A. a和b数组完全相同 B. a和b长度相同 C. a和b中都存放字符串 D. a数组比b数组长度长 19. 若二维数组a有m列,则在a[i][j]前的元素个数为()。 A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1 20. 设有如下定义: static int a[4]={1,2,3},i; i=a[0]*a[1]+a[2]*a[3]; 则i的值为()。

A. 5 B. 2 C. 3 D. 以上都不对 二、填空题(每空2分,共20分。)

1. 能够构成数组的各个元素必须具有相同的。 2. C语言中用表示逻辑值“真”。

3. 使用C语言描述关系表达式a<=xy) m=y; else m=x; 等效的表达式语句是:。 6. for(;;)语句相当于。

7.用typedef定义一个含10个元素的整型数组ARR为:。

8. 设有定义语句:

static int a[3][4]={{1},{2},{3}} ,则a[1][1]值为。 9. 变量的指针,其含义是指该变量的。

10. C语言源程序文件经过编绎后生成文件的后缀是obj,经过连接后生成文件的后缀是。

三、阅读程序题(共35分) 1. (2分)下面程序的运行结果是。 #include int main()

{int a[5]={10,20,30,40,50},*pa=&a[4]; *--pa;

printf(\"%d\return 0; }

2. (3分)下面程序的运行结果是1*#。 #include int main() { int x=0,y=2,z=3; switch(x)

{ case 0: printf(\"%d\是两个等于号 case 1: printf(\"*\"); break; case 2: printf(\"%\");break;

} switch(z)

{ case 1: printf(\"&\"); case 2: printf(\"*\");break; default : printf(\"#\"); }

return 0; }

3.(4分)下面程序的运行结果是。 #include

struct HAR{char x,y; struct HAR *p;}h[2]; int main()

{ h[0].x='a';h[0].y='b'; h[1].x='c';h[1].y='d'; h[0].p=&h[1];h[1].p=h;

printf(\"%c,%c,\ printf(\"%d,%d\\n\return 0; }

4.(6分)完善下面程序,功能:输入两个正整数m和n,求其最大公约数和最小公倍数。

#include

int main()

{ int p,r,n,m,temp;

printf(\"请输入两个正整数n,m:\"); scanf(\"%d,%d,\ if (nprintf(\"它们的最大公约数为:%d\\n\ printf(\"它们的最小公倍数为:%d\\n\return 0; }

5.(4分)完善下面程序,功能:将字符串s中所有的字符x删除。

#include int main() { char s[80]; int i,j;

printf(\"请输入字符串:\"); gets(s);

for (i=j=0;s[i]!='\\0';i++) if () {s[j]=s[i]; j++ ; } s[j]=; puts(s); return 0; }

6. (6分)完善下面程序,功能:打印如右所示的图案。#include int main() {int i,j,k; for () {for (j=0;;j++) printf(\" \");

* *** *****

for (k=0;k<=2*i;k++) printf(\"*\"); printf(\"\"); } return 0; }

7.(6分)完善下面程序,功能:输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。

#include int main() {int i,j,k,n;

printf(\"水仙花数是: \"); for (n=100; ;n++) { i=n/100;

j= ;

k=n%10; if ()

printf(\"%d \ }

printf(\"\\n\"); return 0;

}

8.(4分)完善下面程序,功能:用于计算n!的值。 #include int main() { int i,s,n; s=1;

printf(\"enter n: \");

scanf(\"%d\ for () ; printf(\"s=%d\return 0; }

四、编写程序题。(共25分)

1. (10分)用冒泡法对一组数(假设5个)按由小到大的顺序排序并输出排序后的数,最后输出的参考结果如下所示。(格式自行

排序后的数是:40 60 70 80 90 请输入一组数:90 80 60 70 40

设置)

2. (15分)设数组中有2个学生的数据记录,每条记录包括num,name,score[3],avr,用input函数输入记录中除avr外的其它成员的值,用average函数求出每条记录的平均值avr,用print函

数输出每个记录,最后输出的参考结果如下所示。(格式自行设置)

考试模拟题1参考答案 一、单项选择题

1.B 2.A 3.A 4.D 5.B 6.B 7.B 8.A 9.C 10.B

11.C 12.C 13.B 14.D 15.D 16.A 17.A 18.D 19.B 20.B

二、填空题

1.数据类型 2.非

NO. name score1 score2 score3 average 101 Li 70.0 80.0 90.0 80.0 102 Ma 80.0 90.0 100.0 90.0

0 3.x>=a&&x4.(ch>=’A’&&ch<=’Z’)||(ch>=’a’&&ch<=’z’)

5.m=x>y?y:x 6.while(1) 7.typedef int ARR[10]; 8.0 9.地址 10..exe

三、阅读程序题

1.40 2.1*# 3.c,a,100,98 4.m!=0 n%m p/n 5.s[i]!= 'x''\\0'

6.i=0;i<=3;i++j<=2-i

\\n

7.n<1000;

n/10-i*10;n==i*i*i+j*j*j+k*k*k 8. i=1; i<=n;i++ s=s*i

四、编写程序题

1.程序如下: #include #define N 5 int main() { int a[N]; int i,j,t;

printf(\"请输入一组数:\");

for (i=0;ifor(i=0;ia[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf(\"排序后的数是:\");

for(i=0;i2.程序如下: #include #define N 2

struct student { char num[6]; char name[8]; float score[3]; float avr; }stu[N];

int main()

{ void input(struct student stu[N]); void print(struct student stu[N]); void average(struct student stu[N]); input(stu); average(stu); print(stu); return 0; }

void input(struct student stu[N]) { int i,j;

for (i=0;i{ printf(\"input score of student %d:\\n\printf(\"NO.: \");

scanf(\"%s\

printf(\"name: \");

scanf(\"%s\ for (j=0;j<3;j++) {printf(\"score %d:\ scanf(\"%f\ } } }

void average(struct student stu[N]) { int i,j; float sum; for (i=0;ifor (j=0;j<3;j++) sum=sum+stu[i].score[j]; stu[i].avr=sum/3; } }

void print(struct student stu[N]) { int i,j;

printf(\"\\n NO. name score3 average\\n\");

score1 score2

for (i=0;i{printf(\"%5s%10s\ for (j=0;j<3;j++)

printf(\"%9.1f\ printf(\"%9.1f\printf(\"\\n\"); }

printf(\"\\n\"); }

考试模拟题2及参考答案

考试模拟题2

一、判断题(正确的打√,错误的打×。每小题1分,共10分) 1. 形参可以是常量、变量或表达式。() 2. for( ; ; )语句相当于while(1)语句。() 3. 若a为一维数组名,则*(a+i)与a[i]等价。() 4. 定义函数时,形参的类型说明放在函数体内。() 5. int *p;定义了一个指针变量p,其值是整型的。() 6. 函数的定义可以嵌套,但函数的调用不可以嵌套。() 7. 用指针作为函数参数时,采用的是“地址传送”方式。) 8. 在嵌套的if语句中,else应与第一个if语句配对。() 9. 只能在循环体内和switch语句体内使用break语句。()

10. C程序中,主函数可以调用任何非主函数的其他函数。() 二、单项选择题(每题1分,共20分)

1. 设a为5,执行下列语句后,b的值不为2的是()。 A. b=a/2 B.b=6-(--a)C.b=a%2D.b=a>3?2:2

2. a是int类型变量,c是字符变量。下列输入语句中哪一个是错误的()。

A.scanf(\"%d,%c\

C.scanf(\"%d%c\3. 执行下面程序段后,c3中的值是()。 int c1=1,c2=2,c3; c3=c1/c2;

A.0 B.1/2 C. 0.5 D.1 4.设有程序段: int k=10; while (k=0) k=k-1;

则下面描述中正确的是()。

A. while循环执行10次 B. 循环是无限循环 C. 循环体语句一次也不执行 D. 循环体语句执行一次

5. 若有定义语句:int a[3][6];,按在内存中的存放顺序,a数组的第10个元素是()。

A. a[0][4]

B. a[1][3] C. a[0][3] D. a[1][4]

6. 若有以下定义和语句:int a[10]={1,2,3,4,5,6,7,8,9,10} ; *p=a ; 则不能表示a数组定义的元素的表达式是()。 A. *p

B. a[10]

C. *a

D. a[p-a]

7.以下不能对二维数组a进行正确初始化的语句是()。 A. int a[2][3]={0};

B. int a[][3]={{1,2},{0}};

C. int a[2][3]={{1,2},{3,4},{5,6}}; D. int a[][3]={1,2,3,4,5,6}; 8. 以下程序的输出结果是(。 int main( ) { int a=12,b=12;

printf(\"%d %d\\n\return 0; }

A. 10 10 B. 12 12 C. 11 10 D. 11 13 9. 有如下程序段: int *p,a=10,b=1; p=&a; a=*p+b;

执行该程序段后,a的值为()。 A. 12

B. 11

C. 10

D. 编译出错

10. 在C语言的函数中,下列正确的说法是()。 A. 必须有形参

B. 形参必须是变量名

D. 数组名不能作形参

C. 可以有也可以没有形参

11. 下列语句应将小写字母转换为大写字母,其中正确的是()。

A. if(ch>='a'&ch<='z') ch=ch-32; B. if(ch>='a'&&ch<='z')ch=ch-32; C. ch=(ch>='a'&ch<='z')?ch-32:ch; D. ch=(ch>='a'&&ch<='z')?ch-32:ch; 12. 有如下程序: int main() { int x=23; do

{printf(\"%d\while(!x); return 0; }

该程序的执行结果是()。 A.321 D.陷入死循环

13. 下面程序段的运行结果是(。 char *s=\"abcde\"; s+=2; printf(\"%s\A. cde

B. 字符'c' C. 字符'c'的地址 D. 无 B.23 C.不输出任何内容

确定的输出结果

14.以下程序的运行结果是()。

int main() { int n;

for(n=1;n<=10;n++) { if(n%3==0) continue; printf(\"%d\ } return 0; }

A. 12457810B. 369C. 12D. 1234567890 15. 以下程序的输出结果为()。 int main()

{int a=1,b=2,c=3,d=4,e=5; int func(int x,int y);

printf(\"%d\\n\return 0; }

int func(int x,int y) { return(x+y); }

A. 15B. 13C. 9D. 函数调用出错 16. 以下程序的执行结果是()。 int main() { int num = 0;

while(num<=2) { num++;

printf(\"%d,\} return 0; }

A. 0,1,2B. 1,2,C. 1,2,3,D. 1,2,3,4, 17. 以下程序执行后sum的值是()。 int main() {int i,sum;

for(i=1;i<6;i++) sum+=i; printf(\"%d\\n\return 0; }

A. 15B. 14 C. 不确定 D. 0 18. 若有以下程序: int main() {int y=10; while(y--);

printf(\"y=%d\\n\return 0; }

程序运行后的输出结果是()。

A. y=0 B. y=-1 C. y=1 D. while构成无限循环

19. 以下程序的运行结果是()。 int main() { int m=5;

if(m++>5) printf(\"%d\\n\ else printf(\"%d\\n\return 0; }

A. 4 B. 5 C. 6 D. 7 20. 有以下程序: int 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\return 0; }

执行后输出结果是()。

A. 4 5 6 B. 2 5 8 C. 3 6 9 D. 7 8 9 三、阅读程序题(每题4分,共20分)

1. 下面程序的运行结果是2。 #include int main()

{ int a=1,b=4,c=2; a=(a+b)/c;

printf(\"%d \\n\return 0; }

2. 下面程序的运行结果是a=1,b=0。 #include int main() { int x=1,a=0,b=0; switch (x) { case 0: b++; case 1: a++; case 2: a++;b++; }

printf(\"a=%d,b=%d\\n\return 0; }

3. 下面程序的运行结果是sum= 15。 #include

int main() {int i,sum=0;

int a[3][3]={1,2,3,4,5,6,7,8,9}; for (i=0;i<3;i++) sum=sum+a[i][i];

printf(\"sum=%6d\\n\return 0; }

4. 下面程序的运行结果是Max value is 34。 #include int main()

{ int max_value(int array[][4]);

int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}; printf(\"Max value is %d\\n\return 0; }

int max_value(int array[][4]) { int i,j,max; max=array[0][0]; for (i=0;i<3;i++) for(j=0;j<4;j++) if (array[i][j]>max)

max=array[i][j]; return (max); }

5. 下面程序运行后的显示结果是m=12,n=-8。 #define N 10 #include int main()

{void mn(int arr[],int *pt,int *pt2,int n);

int array[N]={1,8,10,2,-5,0,7,12,4,-8},*p1,*p2,a,b; p1=&a; p2=&b;

mn(array,p1,p2,N); printf(\"m=%d,n=%d\return 0; }

void mn(int arr[],int *pt1,int *pt2,int n) {int i;

*pt1=*pt2=arr[0]; for (i=1;i{ if (arr[i]>*pt1) *pt1=arr[i]; if (arr[i]<*pt2) *pt2=arr[i]; }

}

四、完善程序题(每空2分,共20分)

1. 下面程序的功能是:从健盘输入若干学生的成绩,并输出最高和最低成绩,当输入负数时结束。请填空完善。

#include int main()

{ float x,⑴ ,amin; scanf(\"%f\amax=x; amin=x; while (x>=0)

{ if (x>amax) ⑵ ; else if (xprintf(\"\\n

amax=%f\\n

amin=%f\\n\

return 0; }

2. 下面程序的功能是:输入两个正整数m和n,求其最大公约数和最小公倍数。请填空完善。

#include

int main() { int p,r,n,m,temp;

printf(\"请输入两个正整数n,m:\"); scanf(\"%d,%d,\ if (n{ temp=n;n=m;m=temp; } p=n*m; while(m!=0) { r=⑴ ; n=m; ⑵ ; }

printf(\"它们的最大公约数为:%d\\n\ printf(\"它们的最小公倍数为:%d\\n\⑶ ); return 0; }

3. 下面程序的功能是:输入一组学生的姓名和成绩,然后根据成绩排名次。请填空完善。

#include #include int main()

{ char name[40][10],str[10];

int score[40],num,i,j,t; printf(\"输入学生人数:\"); scanf(\"%d\ for (i=0;i{ printf(\"输入第%d学生的姓名和成绩:\scanf(\"%s%d\name[i]⑴ ,&score[i]); }

for (i=0;iscore[i]) { t=score[i]⑶ ; score[i]=score[j]; score[j]=t; strcpy(str,name[i]);

strcpy(name[i],name[j] ⑷ ); strcpy(name[j],str); }

printf(\"排了名次的成绩如下:\\n\");

printf(\"%8s%12s%8s\\n\名次\姓名\成绩\"); for (i=0;iprintf(\"%8d%12s%8d\\n\

return 0;

}

五、编写程序题(每题10分,共30分) 1. 计算1+3+5+…+(2n-1)的值。 #include int main() {

int a[11]; int i,m,n;

printf(\"请输入10个数字:\"); for(i=0;i<10;i++)

scanf(\"%d\

m=a[0]; for(i=1;i<10;i++) { } a[n]=a[0]; a[0]=m;

if(a[i]m=a[i]; n=i;

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

printf(\"%6d\

printf(\"\\n\"); return 0; }

2. 从键盘输入10个整数,将其中最小的数与第一个数对换,然后输出对换后的10个数。

#include int main() {

int a[11]; int i,m,n;

printf(\"请输入10个数字:\"); for(i=0;i<10;i++)

scanf(\"%d\

m=a[0]; for(i=1;i<10;i++) {

if(a[i]m=a[i]; n=i;

}

}

a[n]=a[0]; a[0]=m; for(i=0;i<10;i++)

printf(\"%6d\

printf(\"\\n\"); return 0; }

3. 一个班有50个学生,每个学生数据包括学号、姓名及3门课程成绩。分别用函数实现下列功能:

(1)从键盘输入每个学生数据;

(2)输出平均成绩在85分以上的学生数据。

考试模拟题2参考答案 一、判断题

1.×2.√ 3.√ 4.× 5.× 6.× 7.√ 8.× 9.√ 10.√

二、单项选择题

1.C 2.B 3.A 4.C 5.B 6.B 7.C 8.D 9.B 10.C

11.B 12.C 13.A 14.A 15.B 16.C 17.C 18.B 19.C 20.C

三、阅读程序题

1.1 2.a=2,b=1 3.sum= 15 4.Max value is 34 5.m=12,n=-8

四、完善程序题

1. ⑴amax⑵amax=x ⑶&x

2. ⑴n%m ⑵m=r 3. ⑴name[i] ⑵score[j] 五、编写程序题 1.程序如下: #include int main() { int i,n,sum=0; i=1;

scanf(\"%d\while (i<=2*n-1) { sum=sum+i; i=i+2; }

printf(\"sum=%d\\n\return 0;

⑶p/n ⑶score[i] ⑷name[j]

}

2.程序如下: #include int main() {

int i,number[10]; int min,k=0,temp;

printf(\"请输入10个数:\\n\"); for (i=0;i<10;i++)

scanf(\"%d\ //输入10个数 min=number[0]; for (i=1;i<10;i++) if (number[i]{ min=number[i];k=i;} // 查找最小值并记下下标 temp=number[0]; number[0]=number[k];

number[k]=temp; //交换 printf(\"交换后的10个数是:\\n\");//输出 for (i=0;i<10;i++)

printf(\"%d \printf(\"\\n\"); return 0;

}

3.程序如下: #include #define N 50 struct student { char num[6]; char name[8]; float score[3]; } stu[N]; intmain() {

void input(struct student s[],int n); void output(struct student s[],int n); input(stu,N); output(stu,N); return 0; }

void input(struct student s[],int n) { int i,j;

for (i=0;i{ printf(\"请输入第 %d个学生信息:\\n\ printf(\"NO.:\"); scanf(\"%s\ printf(\"name:\"); scanf(\"%s\for (j=0;j<3;j++)

{ printf(\"score %d:\ scanf(\"%f\ } } }

void output(struct student s[],int n) { int i,j; float sum,aver; for (i=0;ifor (j=0;j<3;j++) sum+=stu[i].score[j]; aver=sum/3; if (aver>=85) {

printf(\"NO. name score1 score2 score3 average\\n\");

printf(\"%-5s %-5s\

printf(\"%-7.2f %-6.2f %-6.2f %-6.2f\\n\1],stu[i].score[2],aver);

} } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top