C语言程序设计试题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》(卷)考核班级
学生数印数考核方式闭卷考核时间120 分钟
(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
第一部分:基础知识(20项,共40分)
1.一个C语言程序是由()组成的。

A.主程序B.子程序C.函数D.过程
2.转换说明符%x的输出形式是()。

A.十进制B.八进制C.十六进制D.二进制
3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b) printf ( “------------“) ;的正确说法是()。

A.循环体只执行一次B.死循环
C.循环体一次也不执行D.输出-----------
4.若x、y、z均为int 型变量,则执行下列语句后的z值为()。

x=1; y=2; z=3; z=(x>y)?z :y ; z = (z<y)?z:x;
A.1 B.4 C.2 D.3
5.下面标识符中,合法的用户标识符为()。

A.P#Ad B.12a C.char D._int
6.‘A’+ 3 的结果是()。

A.’A’B.’D’的ASCⅡ码C.65 D.3
7.语句char str[20];说明str是一个字符串,最多能表示()。

A.20个字符B.19个字符C.18个字符D.21个字符
8.将int 型变量n转换成float型变量的方法是()。

A.float n B.(float)n C.float(n) D.21个字符
9.以下不正确的描述是()。

A.使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成B.while循环是先判断表达式后执行循环体语句
C.do-while和for循环均是先执行循环体语句,后判断表达式
D.for、while、do-while循环中的循环体均可以由空语句构成
10.在循环中使用break 语句的功能是()。

A.使程序的执行跳出break所在的那一重循环
B.使程序执行结束
C.跳出包含此break语句的所有循环
D.终止本次循环,继续下次循环
11.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是()。

A.*pz B.a C.px D.&a
12.若指针px为空指针,则()。

A.px指向不定B.px的值为零
C.px的目标为零D.px的地址为零
13.对于语句int *px[10],以下说法正确的是()。

A. px是一个指针,指向一个数组,数组的元素是整数型。

B. px是一个数组,其数组的每一个元素是指向整数的指针。

C. A和B均错,但它是C语言的正确语句。

D. C语言不允许这样的语句。

14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是()。

A.P = Y B.*P = Y[i]
C.P + &Y[i] D.P = &Y
15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式*(p[0]+1)+**(q+2)的值是()。

A.5 B.4 C.6 D.7
16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是()。

A.*S1++=*S2++ B.S1[n-1]=S2[n-1]
C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)
17.调用函数的实参与被调用函数的形参应该有如下关系()。

A.只要求实参和形参个数相等B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同D.上述三点均需具备
18.联合体成员的数据类型()。

A.相同B.可以不同也可以相同
C.长度一样D.是结构体变量
19.由系统分配和控制的标准输出文件为()。

A.键盘B.磁盘C.打印机D.显示器
20.C语言标准库函数fread(fd,buffer,n)的功能是()。

A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域
B.从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域
C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域
D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域
第二部分:简单程序(12项,共30分)
21.下列程序
main()
{ int x,y,z;
x=y=2;z=3;
y=z++-1;
printf(“%d\t%d\t”,x,y);
y=++x-1;
printf(“%d \t%d\n”,x,y);
y=z---1;
printf(“%d\t%d\t”,z,y);
y=--z-1;
printf(“%d\t%d\n”,z,y);
}
运行后输出的数据为¬¬¬_______。

A. 3 1 4 2
B. 3 1 3 3
C. 2 2 3 2
D. 2 1 3 2
2 4 1
3 2
4 2 2 3 3 2 1 1 3 1 2
22.下列程序
main()
{ int i,j;char *a,c;
a=”computer”;
printf(“%s”,a);
for(i=0,j=7;i<j;i++,j--)
{ c=a[i];
*(a+i)=*(a+j);
a[j]=c;
}
printf(“->%s\n”,a);
c=a[j-1,i=2+j];
printf(“a[%d]=%c\n”,i,c);
}
运行后输出的数据为___ .
A. computer->computer
B. computer->retupmoc
a[3]=u a[5]=m
C. computer->retupmoc
D. computer->retupmoc
a[4]=p a[2]=t
23.下列程序
int sum(int n)
{ int p=1,s=0,i;
for(i=1;i<=n;i++) s+=(p*=i);
return s;
}
main()
{ printf(“sum(5)=%d\n”,sum(5));
}
运行后输出的数据为_ ___
A.sum(5)=151
B.sum(5)=152
C.sum(5)=153 Dsum(5)=155
24.下列程序
main()
{ static int a[]={5,6,7,3,2,9};
int s1,s2,i,*ptr;
s1=s2=0;
ptr=&a[0];
for(i=0;i<5;i+2=2)
{ s1+=*(ptr+i);
s2+=*(ptr+i+1);
}
printf(“s1=%d,s2=%d\n”,s1,s2);
}
运行后输出的数据为_____
A.s1=18,s2=14
B.s1=14,s2=32
C.s1=14,s2=18
D.s1=15,s2=19
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n”,a,b,c);
func();
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{ static int a=4;int b=10;
a+=2;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运行后输出的数据为_ ___.
A. a=5 b=6 c=1
B. a=5 b=6 c=1 a=6 b=21 c=11 a=7 b=17 c=11 a=5 b=6 c=11 a=5 b=6 c=11 a=8 b=31 c=21 a=9 b=17 c=21
C. a=5 b=6 c=1
D. a=5 b=6 c=1 a=6 b=21 c=11 a=7 b=17 c=11 a=6 b=21 c=11 a=7 b=17 c=11 a=8 b=31 c=21 a=9 b=38 c=21 26.已知
struct student
{char ﹡name;
int student_n;
char grade;
};
struct student temp,*p=&temp;
=”chou”;
则下面不正确的是_______。

表达式值
A.p→name chou
B.(*p)→name+2 h
C.*p→name+2 e
D.*(p→name+2) o
27.下列程序
#define MAX 10
main()
{ int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10};
sum=1;
for(i=0;i<MAX;i++)
sum-=a[i];
printf(“SUM=%d”,sum);
}
程序运行结果是:
A.SUM=55
B.SUM=-54
C.SUM=-55
D.SUM=54
28.下列程序
void inv(int*x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;i<p;i++,j--)
{ t=*i;
*i=*j;
*j=t;
}
return;
}
main( )
{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
程序运行结果:
A.0,2,3,4,5,6,7,7,9,11
B.11,9,7,7,6,5,4,3,2,0
C.3,7,9,11,0,6,7,5,4,2
D.2,4,5,7,6,0,11,9,7,3
29.下列程序
main()
{ int a[10],b[10],*pa,*pb,i;
pa=a;pb=b;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
printf(“\n”);
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);
}
}
运行后输出的数据为______。

A. 0 0
B.0 0
C. 0 0
D. 0 0
1 2 1 2 1 2 2 2
2 4 2 4 2 4 2 4
0 0 0 0 0 0 0 0
2 2 2 2 1 2 1 2
4 8 2 4 2 4 4 8
30.下列程序
copy_string(from,to)
char *from,*to;
{ while(*from) *to++=*from++;
*to=’\0’;
}
main()
{ static char s1[ ]=”c_program.”;
static char s2[80];
copy_string(s1,s2);
printf(“%s\n”,s2);
copy_string(“123”,s2);
printf(“%s\n”,s2);
}
运行后输出的数据为()。

A. c_program 123
B.123
C. c_program123
D. c_program
123
31.下列程序:
#include <stdio.h>
main()
{ char a[40],b[40];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=j=0;
while(a[i]!=’\0’)
{ if(!(a[i]>=’\0’&&a[i]<=’9’))
{ b[j]=a[i]; j++;
}
++i;
}
b[j]=’\0’;
printf(“%s”,b);
}
运行后输出的结果是()。

A. 把键盘输入的字符串显示在屏幕上
B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串
C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串
D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串
32.下列程序
#include<stdio.h>
main()
{ char a[80];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=0;
while(a[i]!=’\0’)
{ if(a[i]>=’A’&&a[i]<=’Z’)
a[i]=a[i]-‘A’+’a’;
}
printf(“%s”,a);
}
运行后输出的结果是()。

A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。

B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。

C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。

D. 把键盘输入的字符串原封不动地显示在屏幕上。

第二卷
说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。

(2)每空栏填对得3分,两大题共10个空栏,全填对得30分。

试题一
一个整数称为完全平方数,是指它的值是另一个整数的平方。

如81是个完全平方数,因为它是9的平方。

下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。

程序如下:
main()
{ int n,k,a,b,c;
for(k=1; ;k++)
{______①______
if(n<100) _____②_____
if(n<999) _____③_____
a=n/100;
b=_____④_____
c=n%10,
if(flag(a,b,c))
printf(“n=%d=%d*%d\n”,n,k,k);
}
}
flag_____⑤_____
{ return(!(x-y)*(x-z)*(y-z));
}
试题二
以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符数组s2中。

说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。

下列程序运行的结果是输出:
ABCXYZdefg abABCXYZd abab
程序如下:
replace(char *s1,char *s2,char *str1,char *str2)
{ char *t0,*t1,*t2;
while( ⑥)
{ for(t0=s1,t1=str1;*t1!=’\0’&& ⑦;t0++,t1++);
if(*t1!=’\0’)
*s2++= ⑧;
else { for(t1=str2;*t1!=’\0’;)
*s2++= ⑨;
⑩;}
}
*s2=’\0’;
}
main()
{ char s1[]=”abcdefg ababcd abab.”;
char s2[80];
repla ce(s1,s2,”abc”,”ABCXYZ”);
printf(“%s\n”,s2);
}
参考答案
第一卷
一.基础知识(20项,共40分)
1.C
2.C
3.C
4.A
5.D
6.B
7.B
8.B
9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A
二.简单程序
21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A
第二卷试题一:①n=k*k ②continue③break④n%100/10或(n-100*a)/10或n/10-(n/100)*10⑤int x,int y,int z 试题二:
⑥*s1或s1!=’\0’⑦*t0==*t1或*t1==*t0 ⑧*s1++
⑨*t1++ ⑩s1=t0或s1=s1+strlen(str1)
《C语言程序设计》(卷)考核班级
学生数印数考核方式闭卷考核时间120 分钟(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
说明:(1)第一卷全部为选择题,每题可供选择的答案中,只有一个正确答案。

(2)答本卷的题目时,要在标准答题纸上编号对应的栏口中,用铅笔将正确答案涂黑。

在试题上直接勾划不得分。

(3)本卷共分70分,其中第1—26题每题2分,第27—32题每题3分。

第一部分:基础知识(20题,共40分)
1、一个C语言的源程序中,()。

(A)必须有一个主函数(B)可以有多个主函数
(C)必须有主函数和其他函数(D)可以没有主函数
2、下列数据中,为字符串常量的是()。

(A)‘A’(B)“house”(C)How do you do.(D)’$abc’
3、若有定义:int a=8,b=5,c;,执行语句c=a/b十0.4;后,c的值为()。

(A)1.4 (B)1 (C)2.0 (D)2
4、设有int x=11;则表达式(x++*l/3)的值为()。

(A)3 (B)4 (C)11 (D)12
5、执行x=5>1+2&&2||2*4<4-!0后,x的值为()。

(A)-l (B)O (C)1 (D)5
6、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子:(x)/(y×z)的c语言表达式是()。

(A)x/y*z (B)x*(1/(y*z)) (C) x/y*1/z (D)x/y/z
7、设有以下说明语句
struct ex
{int x;float y; char z;}example;
则下面的叙述不正确的是()。

(A)struct是结构体类型的关键字(B)example是结构体类型名
(C)x,y,z都是结构体成员名(D)struct ex是结构体类型
8、假定w、x、y、z、m均为int型变量;有如下程序段:
w=1;x=2;y=3;z=4;
m=(w<x)?w:x;m=(m<y)?m:y; m=(m<z)?m:z;
则该程序段执行后,m的值是()。

(A)4 (B)3 (C)2 (D) 1
9、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。

(A) 地址传递(B) 单向值传递
(C) 由实参传给形参,再由形参传回实参(D) 传递方式由用户指定
10、以下定义语句中,错误的是()。

(A)int a[]={1,2};(B) char *a[3];
(C)char s[10]="text";(D) int n=5,a[n];
11、下列程厅执行后的输出结果是()。

main()
{ char arr[2][4];strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
(A)you&me (B)you (C) me (D)err
12、标有/* */的语句的执行次数是()。

int y,i;
for(i=O;i<20;i++)
{ if(i%2==0)
continue;
y+=i; /* */
}
(A) 20 (B) 19 (C) 10 (D) 9
13、若用数组名作为函数调用的实参,传递给形参的是()。

(A) 数组的首地址(B) 数组第一个元素的值
(C) 数组中全部元素的值(D) 数组元素的个数
14、下列语句执行后的结果是()。

y=5;p=&y;x=*p++;
(A) x=5,y=5 (B) x=5,y=6 (C) x=6,y=5 (D) x=6,y=6
15、执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为()。

int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;
(A) 8 (B) 7 (C) 6 (D) 5
16、经过下面的语句后
int i,a[10],*p;
定义后,下列语句中合法的是()。

(A) p=100:(B) p=a[5];(C) p=a+2;(D) p=&(i+2);
17、若有以下说明和语句,则对pup中sex域的正确引用方式是()。

struct pupil
{char name[20];
int sex;
}pup,*p;
p=&pup;
(A)p.pup.sex (B)p->pup.sex (C)(*p).pup.sex (D)(*p).sex
18、若已定义了如下的共用体类型变量x,则x所占用的内存字节数为()。

union data
{ int i;
char ch;
double f;
}x;
(A) 7 (B) 11 (C)8 (D) 10
19、若有下面的说明和定义:
struct test
{ int m1;char m2;float m3;
union uu{ char u1[5];int u2[2];}ua;
} myaa;
则sizeof(struct test)的值是()。

(A) 12 (B) 16 (C) 14 (D)9
20、若要打开:A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()。

(A)fopen("A:\\user\\abc.txt","r") (B) fopen("A:\\user\\abc.txt","r+")
(C)fopen("A:\\user\\abc.txt","rb") (D) fopen("A:\\userl\\abc.txt","w")
第二部分:简单程序(12题,共30分)
21、以下程序的运行情况是()。

main()
{int i=1,sum=0;
while(i<10)
sum=sum+1;
i++;
printf("i=%d,sum=%d",i,sum);
}
(A) i=10,sum=9 (B) i=9,sum=9 (C) i=2,sum=l (D) 运行出现错误
22、若输入B,以下程序的运行结果为()。

main()
{ char grade;scanf("%c",&grade);
switch(grade)
{case 'A':printf(">=85");
case 'B':
case 'C':printf(">=60");
case 'D':printf("<60");
default:printf("error");}
}
(A)>=85 (B)>=60 (C)>=60<60error (D) error
23.有如下程序main()
{ int x=23;
do
{ printf("%d",x--);}while(!x);
}
该程序的执行结果是()。

(A)321 (B)23 (C)不输出任何内容(D)陷入死循环
24.有如下程序
int func(int a,int b)
{ return (a+b);}
main()
{int x=2,y=5,z=8,r;
r=func(func(x,y),z);printf("%d\n",r);
}
该程序的输出结果是()。

(A) 12 (B) 13 (C)14 (D)15
25.以下程序的输出结果是()。

main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=10) break;
if(b%3==1)
{ b+=3;continue;}
}
printf("%d\n",a);
}
(A)101 (B) 6 (C)5 (D)4
26.以下程序的输出结果是()。

int a,b;
void fun()
{ a=100;b=200;}
main()
{ int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}
(A) 100200 (B)57 (C)200100 (D)75
27.下面的程序执行后,文件test.t中的内容是()。

#include <stdio.h>
void fun(char *fname,char *st)
{ FILE *myf; int i;
myf=fopen(fname,"w");
for(i=0;i<strlen(st);i++)fputc(st[i],myf);
fclose(myf);
}
main()
{ fun("test.t","new world");fun("test.t","hello,");}
(A) hello,(B)new,worldhello (C) new,world (D)hello,rld
28.以下程序的运行结果是()。

#include <stdio.h>
main(){
static char s[30]="abcdefg";
static char t[]="abcd";
int i,j;
i=0;
while(s[i]!='\0')
i++;
j=0;
whi1e(t[j]!='\0')
{ s[i+j]=t[j];
j++;}
s[i+j]='\0';
printf("%s\n",s);
}
(A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序
main()
{ char ch[2][5]={"6937","8254"},*p[2];
int i, j, s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
该程序的输出结果是()。

(A)69825 (B)63825 (C)6385 (D)693825
30.若已建立如下图所示的单向链表结构
在该链表中,指针p,s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是()。

(A) p=p->next;s->next=p;p->next=s;
(B) p=p->next;s->next=p->next;p->next=s;
(C) s->next=NULL;p=p->next;p->next=s
(D) p=(*p).next;(*s).next=(*p).next; (*p).next =s;
31.请选择正确的运行结果填入()中。

include <stdio.h>
int x,y;
num()
{
int a=15,b=10;
int x,y;
y=a-b;
y=a+b;
return;
}
main()
{ int a=7,b=5;
x=a+b;
y=a-b;
num();printf("%d,%d\n",x,y);
}
(A) 12,2 (B) 5,25 (C)2,12 (D)不确定
32.以下程序的输出结果是()。

#define M(x,y,z) x*y+z
main()
{ int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));}
(A)19 (B)17 (C)15 (D)12
第二卷
说明:(1)第二卷含两大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。

(2)每空栏填对得3分,两大题共10个空栏,全对得30分。

试题一:
有一函数,实参传来一个字符串,统计此字符串中字母、数字、空各和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

int letter,digit,space,others;/*是全局变量*/
main()
{int count(char _____(1)_____);
char text[80];
printf("\nlnput string:\n");
____(2)___;
printf("string:");
puts(text);
letter=O;
digit=O;
space=O;
others=O;
_____(3)_____;
printf("letter:%d,digit:%d,space:%d,other:%d\n",letter,digit,
space,others); }
int count(char str[])
{int i;
for(i=O;str[i]!='\0';i++)
if((____(4)____>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
letter++;else if(str[i]>='0'&&str[i]<='9')
digit++;
else if(str[i]==' ')
space++;
else
____(5)____;
}
试题二:
把下列程序补充完整,实现两个字符串的比较,即自己写个strcmp函数,函数原型
为:int strcmp(char *p1,char *p2)
设p1指向字符串s1,p2指向字符串s2。

要求:当s1=s2时,返回值为0。

当sl<>s2时,返回它们两者的第一个不同的字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果sl<s2,则输出负值。

main()
{ int m;
char ___(6)____,str2[20],*p1,*p2;
printf("Input two string:\n");
scanf("%s",strl);
scanf("%s",___(7)______);
p1=&strl[0];
p2=_____(8)_____;
m=strcmp(p1,p2);
printf("result:%d,\n",m);
}
strcmp(char ___(9)_____,char *p2)
/*两个字符串比较的函数*/
{ int i;
____(10)______;
while(*(pl+i)==*(p2+i))
if(*(p1+i++)=='\0') return(0);
return(*(pl+i)-*(p2+i)); /*不等时返回结果为第一个不等字符ASCII码的差值*/
}
参考答案
第一卷
第一部分:基础知识
1.A
2.B
3.B
4.A
5.C
6.A
7.B
8.D
9.B 10.D
11.A 12.C 13.A 14.A 15.D 16.C 17.D 18.C 19.A 20.B
第二部分:简单程序
21.D 22.C 23.B 24.D 25.D 26.B 27.A 28.D 29.C 30.A 31.A 32.D
第二卷
试题一:
1、str[]
2、gets(text)或scanf(“%s”,text)
3、count(text)
4、str[i]
5、others++
试题二:6、str1[20] 7、str2 8、&str2[0] 9、*p1 10、i=0
C语言程序设计》(卷)考核班级
学生数印数考核方式闭卷考核时间120 分钟
(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷本卷共70分,其中第1~26题每题2分,第27~32题每题3分。

第一部分:基础知识
1、一个C语言程序是从______开始执行的。

A、程序中的第一个语句
B、包含文件(头文件)的第一个函数
C、名为main的函数
D、程序中的第一个函数
2、语句while(!E) { ……}中的条件!E等价于_____
A、E==0
B、E!=1
C、E!=0
D、~E
3、若有以下类型说明语句:
char w;
int x;
float y;
double z;
则表达式w*x+z-y的结果为_____类型。

A、float
B、double
C、int
D、char
4、一个函数返回值的类型是由____决定的
A、return语句中的表达式类型;
B、定义函数时所指定的函数类型
C、调用该函数的函数的类型
D、调用函数时临时类型
5、设x、y、z和k都是int型变量,则执行下列表达式后,变量x的值为_____. x=(y=4,z=16,k=32);
A、4
B、16
C、32
D、52
6、有以下程序:
main( )
{ int i=10,j=1;
printf(“%d,%d\n”,i--,++j);
}
执行后输出的结果是________
A、9,2
B、10,2
C、9,1
D、10,1
7、以下指针s的指字符串的长度为_______
char *s=”\t\’Name \\Address\n”;
A、19
B、15
C、18
D、-12
8、设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是____
A、3
B、0
C、9
D、-12
9、对于下面的for循环语句,可以断定它____。

for(x=0,y=0;(y!=123)&&(x<4);x++)
printf(“--------“);
A、是无限循环(死循环)
B、循环次数不定
C、共执行4次循环
D、共执行3次循环
10、设有以下语句,则_______不是对a数组元素的正确引用,其中0 i10.
int a[10]={0,1,2,3,4,5,6,7,8,9};
int *p=a;
A、a[p-5]
B、*(&a[i])
C、a[i]
D、*(a+i)
11、为了判断两个字符串s1和s2是否相等,应当使用______
A、if(s1==s2)
B、if(s1=s2)
C、if(strcmp(s1,s2))
D、if(strcmp(s1,s2)==0)
12、对于C语言程序中的函数,下列叙述中正确的是______
A、函数的定义不能嵌套,但函数调用可以嵌套
B、函数的定义可嵌套,但函数的调用不能嵌套
C、函数的定义和调用均不能嵌套
D、函数的定义和调用均可嵌套
13、有以下程序
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 1: printf(“%d”,i);
case 2: printf(“%d”,i);
default: printf(“%d”,i);
}
}
执行后输出的结果是______
A、011122
B、012
C、012020
D、120
14、假定有以下变量定义:int k=7, x=12;则能使值为3的表达式是____
A、x%=(k%=5)
B、x%=(k-k%5)
C、x%=(k-k%5)
D、(x%=k)-( k%=5)
15、以下程序的输出结果是_____
main()
{ int x=4,y=8;
x+=y;y+=x;
printf(“%d %d\n”,x,y);
}
A、12 20
B、4 8
C、12 12
D、8 4
16、有以下程序执行后输出的结果是_____
main()
{ int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf(“%d\n”, s[2]);
}
A、随机值
B、0
C、5
D、6
17、以下函数的功能是______
fun(char *s1,char *s2)
{ int i=0;
while(s1[i]==s2[i] &&s2[i]!=’\0’)
i++;
return(s1[i]==’\0’&&s2[i]==’\0’);
}
A、将s2所指字符串赋给s1
B、比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C、比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D、比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
18、以下叙述中正确的是____
A、全局变量的作用域一定比局部变量的作用域范围大
B、静态(static)类型变量的生存期贯穿于整个程序的运行期间
C、函数的形参都属于全局变量
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
19、有以下程序,执行后输出的结果是____
main()
{ int i=1,j=1,k=2;
if ((j++||k++)&&i++)
printf(“%d, %d,%d\n”,i,j,k);
}
A、1,1,2
B、2,2,1
C、2,2,2
D、2,2,3
20、以下函数abc的功能是____
int abc(char *ps)
{ char *p;
p=ps;
while(*p++);
return (p-ps);
}
A、比较两个字符串的大小
B、求字符串的长度
C、将串ps复制到串p中
D、以上三种说法都不对
第二部分:简单程序
21、以下程序的输出结果是:_____
main( )
{ int i=10,j=10;
printf(“%d ,%d\n”,++i+j++,j--);
}
A、21,10
B、20,10
C、21,9
D、20,9
22、以下程序的输出结果是:__________
main( )
{ int m=5;
if (m++>5)
printf(“%d\n”,m);
else
printf(“%d \n”,m--);
}
A、7
B、6
C、5
D、4
23、当a=1, b=3, c=5, d=4时,执行下面一段程序后,x的值为____
if (a<b)
if(c<d)
x=1;
else if(a<c)
if(b<d)
x=2;
else
x=3;
else
x=6;
else x=7;
A、1
B、2
C、3
D、6
24、以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。

出错的原因是_______
#include <stdio.h>
main( )
{ FILE *fout;
char ch;
fout=fope n( ‘abc.txt’,’w’);
ch=fgetc(stdin);
while(ch!=’#’)
{fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
}
A、函数fopen调用形式有误
B、输入文件没有关闭
C、函数fgetc调用形式有误
D、文件指针stdin没有定义
25、有以下程序,执行后输出结果是______
main()
{union {unsigned int n;
unsigned char c;
}ul;
ul.c=’A’;
pri ntf(“%c\n”,ul.n);
}
A、产生语法错
B、随机值
C、A
D、65
26、有以下程序,执行后输出结果是_____
main()
{ int m[ ][3]={1,4,7,2,5,8,3,6,9};
int i,k=2;
for(i=0; i<3; i++)
printf(“%d ”, m[k][i]);
}
A、4 5 6
B、2 5 8
C、3 6 9
D、7 8 9
27、以下程序运行后,输出结果是_______
int func(int a, int b)
{ static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
main()
{ int k=4,m=1,n;
n=func(k, m);
printf(“%d, ”, n);
n=func(k, m);
printf(“%d ”, n);
}
A、8, 15
B、8, 16
C、8, 17
D、8, 8
28、在执行以程序时,如果从键盘上输入:ABCdef,则输出结果为:____ #include <stdio.h>
main( )
{ char ch;
while((ch=getchar())!=’\n’)
{ if(ch>=’A’&&ch<=’Z’)
ch=ch+32;
else if(ch>=’a’ && ch<=’z’)
ch=ch-32;
printf(“%c”,ch);
}
printf(“\n”);
}
A、ABCdef
B、abcDEF
C、abc
D、DEF
29、有以下程序,执行后输出结果是____
int *f(int *x, int *y)
{ if(*x<*y)
return x;
else
return y;
}
main( )
{ int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=f(p,q);
printf(“%d,%d,%d\n”,*p,*q,*r);
}
A、7, 8, 8
B、7, 8, 7
C、8, 7, 7
D、8, 7, 8
30、下面程序的输出结果是_____
fun(char *s, int p1, int p2)
{ char c;
while (p1<p2)
{ c=s[p1];
s[p1]=s[p2];
s[p2]=c;
p1++;p2--;
}
}
main( )
{ char a[ ]=”ABCDEFG”, k, *p;
fun(a, 0, 2);
fun(a, 4, 6);
printf(“%s\n”,a);
}
A、ABCDEFG
B、DEFGABC
C、GFEDCBA
D、CBADGFE
31、以下程序的运行结果是____
#include <stdio.h>
long func(int x)
{ long p;
if(x==0||x==1)
return (2);
p=x*func(x-1);
return (p);
}
main( )
{
printf(“%d \n”,func(4));
}
A、8
B、12
C、24
D、48
32、下面的程序运行后,全局量t.x和t.s的正确结果为__________ struct tree
{ int x;
char *s;
}t;
func(struct tree t)
{ t.x=10;
t.s=”computer”;
return(0);
}
main()
{ t.x=1;
t.s=”minicomputer”;
func(t);
pr intf(“%d, %s ”, t.x, t.s);
}
A、10, computer
B、1, computer
C、1, minicomputer
D、10, minicomputer
第二卷
说明:(1)第二卷均为填空题,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句以构成一个正确的C语言程序。

(2)答本卷的题目时,要在本卷答题纸上编号对应的栏目中,用钢笔或圆珠笔书写。

用铅笔答题无效,在试题上直接答题者无效。

请勿在第一卷的答题卡上填写本卷答案。

(3)每空栏3分,共10个空栏,共30分。

试题一下列程序是求1+1/2+1/4+……+1/50的值。

#include “stdio.h”
main( )
{ int i=2;
float sum=1;
while (___(1)_____)
{ sum=sum+1.0/i;
_____(2)_______;
}
printf(“sum=%f”, sum);
}
试题二下列函数用于统计一行字符中的单词个数,单词之间用空格分隔。

word_num(char str[ ])
{
int i, num=0, word=0;
for(i=0; str[i]!=____(3)___; i++)
if(____(4)______==’ ‘)
word=0;
else if(word==0)
{ word=1;
______(5)______;
}
return(num);
}
试题三以下函数的功能是删除字符串s中的所有数字字符。

void dele (char *s)
{ int n=0,i;
for(i=0; s[i]; i++)
if(____(6)_____)
s[n++]=s[i];
s[n]=____(7)_____;
}
试题四以下程序的功能是:从键盘输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。

main( )
{ float x[1000], sum = 0.0, ave, a ;
int n=0, i;
printf(“Enter mark:\n”);
scanf(“%f”,&a);
while(a>=0.0 && n<1000)
{
sum =____(8)____;
x[n]=___(9)_____;
n++;
scanf(" % f ", &a);
}
ave= sum / n ;
printf(“Output: \n”);
printf(“ave=%f\n”,ave);
for(i=0; i<n; i++)
if_____(10)______
printf("% f\n”,x[i]);
}
参考答案
第一卷
一、基础知识1.C 2.A 3.B 4.B 5.C 6.B 7.B 8.D 9.C 10.A
11.D 12.A 13.A 14.D 15.A 16.B 17.C 18.B 19.C 20.B 二、简单程序21.B 22.B 23.B 24.A 25.C 26.C 27.C 28.B 29.B 30.D
31.D 32.C
第二卷
1、i<=50
2、i+=2或i=i+2
3、‘\0’
4、str[i]
5、num++
6、!(s[i]>='0'&&s[i]<='9')
7、'\0'
8、sum+a
9、a
10、(x[i]<ave)
《C语言程序设计》(卷)考核班级
学生数印数考核方式闭卷考核时间120 分钟
一、选择题(每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

(1)数据的逻辑结构可以分为()。

A)静态结构和动态结构B)物理结构和存储结构
C)线性结构和非线性结构D)紧凑结构和松散结构
(2)对线性表,采用顺序存储的优点是()。

A)便于随机存取B)便于进行插入和删除操作
C)需要的存储空间不必连续D)方便线性表的扩充
(3)设具有n个结点的完全二叉树的第1层为根结点,若一个结点i满足2i>n,则该结点没有()。

A)左子结点B)右子结点
C)左子结点和右子结点D)左子结点、右子结点和兄弟结点
(4)快速排序算法的平均时间复杂度为()。

A)O(n)B)O(n2)C)O(nlog2n)D)O(log2n!)
(5)在面向对象的程序设计方法中,描述对象静态和动态特征的三要素是()。

A)封装、继承和重载B)属性、事件和方法
C)数据、代码和接口D)内聚、耦合和驱动
(6)软件测试的目的是()。

A)证明软件的正确性B)找出软件系统中存在的所有错误
C)证明软件系统中存在错误D)尽可能多地发现软件系统中的错误
(7)软件开发范型的作用是()。

A)为了控制软件需求的易变性B)作为一种软件工程方法学
C)作为一种项目管理方法D)作为需求分析的指导
(8)在数据库三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是()。

A)外模式B)内模式C)存储模式D)模式
(9)在数据库技术中,面向对象数据模型是一种()。

A)概念模型B)结构模型C)物理模型D)逻辑模型
(10)数据库(DB)、数据库系统(DBS)、数据库管理系统(DBMS)三者之间的关系是()。

A)DBS包括DB和DBMS B)DBMS包括DB和DBS
C)DB包括DBS和DBMS D)DBS就是DB,也就是DBMS
(11)阅读以下程序
main()
{ int x;
scanf(”%d”,&x);
if(x - - <5)printf(”%d\n”,x);
else prinff(”%d\n”,x++);}
程序运行后,如果从键盘上输入5,则输出结果是()。

A)3 B)4 C)5 D)6
(12)假定W,X,Y,z和m均为int型变量,有如下程序段:
w=1;x=2;y=3;z:4;
m=(w<x)?w:x;m=(m<y)?m:y;m=(m<z)?m:z;
则该程序段执行后,m的值为()。

A)4 B)3 C)2 D)1
(13)t为int型变量,进入下面的循环之前,t的值为0。

while(t-1)
{……}
则以下叙述中正确的是()。

A)循环控制表达式的值为0 B)循环控制表达式的值为1
C)循环控制表达式不合法D)以上说法都不对
(14)以下程序的输出结果是()。

main()
{ int num=0;
while(num<=2)
{ num++;printf(”%d\n”,num);} }
A)1 B)1 C)1 D)l
2 2 2
3 3
4
(15)以下各选项企图说明一种新的类型名,其中正确的是()。

A)typedef vl int;B)typedef v2=int;
C)typedef int v3;D)typedef v4:int;
(16)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。

A)地址传递B)单向值传递
C)由实参传给形参,再由形参传给实参D)传递方式由用户指定
(17)以下函数值的类型是()
fun(float x)
{ float y;
y=3*x-4:
return y;}
A)int B)不确定C)void D)float
(18)设有以下函数:
f(int a)
{ int b=0;
static int c=3;
b++;c++;
return(a+b+c);}
如果在下面的程序中调用该函数,则输出结果是()。

main()
{ int a=2,i;
for(i=0;i<3;i++)
printf("%d\n",f(a));}
A)7 B)7 C)7 D)7
8 9 10 7
9 11 13 7
(19)以下程序的输出结果是()。

main()
{ char c='Z';
printf("%c",c-25);}
A)a B)Z C)z-25 D)Y
(20)以下选项中,非法的字符常量是()。

A)'\t' B)'\17' C)"\n" D)'\xaa'
(21)若有说明int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是()。

A)i=*p;B)*p=*&j;C)i=&j;D)i=**p;
(22)以下定义语句中,错误的是()。

A)int a[ ]={1,2};B)char *a[3];C)char s[10]="test";D)int n=5,a[n];(23)假设int型变量占两个字节的存储单元,若有定义int x[10]={0,2,4};,则数组x在内存中所占字节数为。

A)3 B)6 C)10 D)20
(24)以下程序的输出结果是()。

main()
{ int i,a[10];
for(i=9;i>=0;i- -)
a[ i ]=10 - i:
printf("%d%d%d",a[2],a[5],a[8]);}
A)258 B)741 C)852 D)369
(25)以下数组定义中不正确的是()。

A)int a[2][3];B)int b[][3]={0,1,2,3};
C)int c[100][100]={0};D)int d[3][]={{1,2},{1,2,3},{1,2,3,4}}; (26)以下程序的输出结果是()。

main()
{int a[4][4]={{l,3,5},{2,4,6},{3,5,7}};
prinff("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);}
A)0650 B)1470 C)5430 D)输出值不确
(27)以下程序的输出结果是()。

#include <string.h>
main()
{char st[20]="hello\0\t\’\\";
printf("%d%d\n",stden(st,sizeof(st));}
A)9 9 B)5 20 C)13 20 D)20 20
(28)以下程序的输出结果是()。

amovep(int *p,int (*a)[3],int n)
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{*p=a[i][j];p++;}
}
main()
{ int *p,a[3][3]={{1,3,5},{2,4,6}};
p=(int *)malloc(100);
amovep(p,a,3);
printf("%d%d\n",p[2],p[5]);
free(p);
}
A)56 B)25 C)34 D)程序错误(29)以下程序的输出结果是()。

struct HAR
{ int x,y;
struct HAR *p;} h[2];
main()
{ h[0].x=l;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p-h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);}
A)12 B)23 C)14 D)32
(30)以下程序的输出结果是()。

main()
{ int a,b;
for(a=l,b=l;a<=100;a++)
{ if(b>=10)break;
if(b%3==1)
{ b+=3;continue;}
}
printf("%d\n",a);
}
A)101 B)6 C)5 D)4
(31)以下程序的输出结果是()。

union myun
{ struct { int x,y,z;}u;
int k;}a;
main()
{ a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
A)4 B)5 C)6 D)0
(32)以下程序的输出结果是()。

int a,b;
void fun()
{ a=100;b=200;}
main()
{ int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A)100200 B)57 C)200100 D)75
(33)以下程序的输出结果是()。

#define M(x,y,z)x*y+z
main()
{ int a=l,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));
}
A)19 B)17 C)15 D)12
(34)整型变量X和Y的值相等,且为非0值,则以下选项中,结果为0的表达式是()。

A)x||y B)x|y C)x&y D)x^y
(35)下面的程序执行后,文件test.t中的内容是()。

#include <stdio.h>
#include<string.h>
void fun(char *fname,char *st)
{ FILE *myf;
int i;
myf=fopen(fname,"w");
for(i=0;i<strlen(st);i++)
fputc(st[i],myf);
fclose(myf);
}
main()
{ fun("test.t","new world");
fun("test.t","hello,");
}
A)hello,B)new worldhello,C)new world D)hello,world
二、填空题(每空2分,共30分)
请将每一个空的正确答案写在答题卡[1]至[15]序号的横线上,答在试卷上不得分。

(1)算法的复杂性指的是[1] 和空间复杂性。

(2)设栈S的初始状态为空,队列Q的初始状态如下图所示:
a1 a2 a3 a4
↑↑
队头队尾
对栈S和队列Q进行如下两步操作:①Q中的元素依次出队,并压入栈S中,直至Q为空;
②依次弹出S中的元素并进入Q,直至S为空。

在上述两步操作后,队列Q的状态是[2] 。

(3)面向对象程序设计使用的对象是[3] 的封装体。

(4)在关系数据库中,关系模型的三类完整性是指[4] 、参照完整性和用户定义的完整性。

(5)为数据库建立索引,是一种以牺牲[5] 换取提高数据库访问速度的策略。

(6)以下函数的功能是求x的y次方,请填空。

相关文档
最新文档