资源描述
C语言程序设计 笔试试卷(一)
考试时间:120分钟
注意:请将答案书写在答卷纸上,否则不给分!
一、 单项选择题(每个选项1.5分,共60分)
1、以下叙述中正确的是( A )。
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其它函数之前
D)所有被调用的函数一定要在调用之前进行定义
2、以下对C语言函数的有关描述中,正确的是( C )。
A)函数必须有返回值,否则不能使用函数
B)C函数既可以嵌套定义又可以递归调用
C)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
D)C程序中有调用关系的所有函数必须放在同一个源程序文件中
3、C语言的基本数据类型包括( B )。
A)整型,实型,逻辑型 B)整型,实型,字符型
C)整型,字符型,逻辑型 D)整型,实型,逻辑型,字符型
4、C语言中用于结构化程序设计的三种基本结构是( A )。
A)顺序结构、选择结构、循环结构 B)if、switch、break
C)for、while、do-while D)if、for、continue
5、下述合法的C语言的字符常量是( D )。
A)A B)65 C)"A" D)'\t'
6、下面不正确的赋值语句是( D )。
A)++t; B)n1=(n2=(n3=0)); C)k=i==j; D)a=a+b=1;
7、"b"在内存中以( B )个字节存放。
A)1 B)2 C)3 D)不确定
8、a是int类型变量,c是字符变量。下列输入语句中哪一个是错误的( B )。
A)scanf ("%d, %c",&a, &c); B)scanf (" %d%c", a, c);
C)scanf (" %d%c", &a,&c ); D)scanf ( "d=% d, c=%c",&a, &c);
9、假设定义:int x = 3, y = 3; 则复合赋值表达式x /= 1+y的值为( A )。
A)0 B)0.75 C)6 D)以上都错
10、a=3*4,a+5; a的值为( B )。
A)17 B)12 C)60 D)5
11、若已定义x和y为double类型,则表达式: x=1,y=x+3/2的值是( C )。
A)1 B)2 C)2.0 D)2.5
12、设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是( A )。
A)10<a<15 B)a==11||a==12||a==13||a==14
C)a>10&&!a>15 D)!(a<=10&&a>=15)
13、对于int x, y; 语句 if (x<0) y= -1; else if (!x) y=0; else y=1; 等价于( B )。
A) y=0; if (x>=0) if (x) y=1; else y= -1;
B) if (x!=0) if (x>0) y=1; else y= -1; else y=0;
C)if (x<0) y= -1; if (x!=0) y=1; else y=0;
D)y= -1; if (x!=0) if (x>0) y=1; else y=0;
14、下列程序段执行后s值为( C )。
int i=1, s=0;
do { if (!(i%2)) continue; s+=i; } while (++i<10);
A) 1 B) 45 C) 25 D) 以上均不是
15、下列程序执行后,输出结果为( D )。
int func(int x,int y)
{return x+y;}
main()
{ int a=1,b=2,c=3,d=4,e=5;
printf("%d\n",func((a+b,b+c,c+a),(d,e)));
}
A) 15 B)5 C)函数调用出错 D)9
16、对于以下程序段, 运行后i值为( B )。
int i=0, a=1;
switch (a) {
case 1: i+=1;
case 2: i+=2; break;
default: i+=3;
}
A) 1 B) 3 C) 6 D) 上述程序有语法错误
17、设有以下程序段,则( B )。
int x=0,s=0;
while(!x!=0) s+=++x;
printf(“%d”,s);
A)运行程序段后输出0 B)运行程序段后输出1
C)程序段中的控制表达式是非法的 D)程序段执行无限次
18、下列程序中的变量已正确定义,要求程序段完成求5!(阶乘)的计算,不能完成此操作的程序段是( B )。P=1要在循环体外
A)for(i=1,p=1;i<=5;i++) p*=i;
B)for(i=1;i<=5;i++) { p=1; p*=i;}
C)i=1; p=1; while(i<=5){p*=i; i++;}
D)i=1; p=1; do{p*=i; i++; } while(i<=5);
19、下列程序运行后的输出结果是( C )。
main()
{int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
printf("%d,%d\n",k,m);
}
A) 0,0 B) 0,1 C) 1,0 D) 1,1
20、下列程序运行后的输出结果是( D )。
void fun(char *c,intd)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
21、下列程序运行后的输出结果是( )。
int f(int n)
{if (n==1) return 1;
else return f(n-1)+1;
}
main()
{int i,j=0;
for(i=1;i<3;i++) j+=f(i);
printf("%d\n",j);
}
A) 4 B) 3 C) 2 D) 1
22、下列程序执行后的输出结果是( )。
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
A) hello B) hel C) hlo D) hlm
23、在位运算中,操作数每左移1位,其结果相当于( )。
A)操作数乘以2 B)操作数除以2
C)操作数除以16 D)操作数乘以16
24、下列数组定义语句中合法的是( )。
A)int a[]=″string″; B)int a[5]={0,1,2,3,4,5};
C)char a=″string″; D)char a[]={0,1,2,3,4,5};
25、若有以下的定义:
int a[]={1,2,3,4,5,6,7,8,9,10},*p=a
则值为3的表达式是( )。
A)p+=2,*(p++) B)p+=2,*++p C)p+=3,*p++ D)p+=2,++*p
26、下列语句或语句组中,能正确进行字符串赋值的是( )。
A)char *sp;*sp="right!"; B)char s[10];s="right!";
C)char s[10];*s="right!"; D)char *sp="right!";
27、假定所有变量均已正确说明,下列是程序段运行后x的值是( )。
a=b=c=0;x=35;
if(!a) x--;
else if(b);
if(c) x=3;
else x=4;
A)34 B)4 C)35 D)3
28、下列程序运行后的输出结果是( )。
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
A)42 B)45 C)56 D)60
29、下列程序运行后的输出结果是( )。
int f1(int x,int y){return x>y?x:y;}
int f2(int x,int y){return x>y?y:x;}
main()
{
int a=4,b=3,c=5,d=2,e,f,g;
e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d));
g=a+b+c+d-e-f;
printf("%d,%d,%d\n",e,f,g);
}
A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7
30、下列函数的功能是( )。
fun(char *a,char *b)
{ while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{a++;b++;}
return(*a-*b);
}
A)计算a和b所指字符串的长度之差
B)将b所指字符串连接到a所指字符串中
C)将b所指字符串连接到a所指字符串后面
D)比较a和b所指字符串的大小
31、下列程序运行后的输出结果是( )。
point(char *p){p+=3;}
main()
{char b[4]={'a','b','c','d'},*p=b;
point(p);printf("%c\n",*p);
}
A)a B)b C)c D)d
32、下列程序运行后的输出结果是( )。
void ss(char *s,char t)
{ while(*s)
{if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{char str1[100]="abcddfefdbd",c='d';
ss(str1,c); printf("%s\n",str1);
}
A)ABCDDEFEDBD B)abcDDfefDbD
C)abcAAfefAbA D)Abcddfefdbd
33、C语言中函数返回值的类型是由( )决定的。
A)return语句中的表达式类型 B)调用该函数的主调函数类型
C)调用函数时临时指定 D)定义函数时所指定的函数类型
34、设有定义:
struct sk
{int a;float b;}data,*p;
若有p=&data;,则对data中的a域的正确引用是( )。
A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a
35、若有下列说明和定义,则以下叙述中错误的是( )。
union dt
{int a;char b;double c;}data;
A)data的每个成员起始地址都相同
B)变量data所占的内存字节数与成员c所占字节数相等
C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000
D)data可以作为函数的实参
36、以下叙述中错误的是( )。
A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B)在程序结束时,应当用fclose函数关闭已打开的文件
C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据
D)不可以用FILE定义指向二进制文件的文件指针
37、有下列程序
#include <string.h>
main(int argc,char *argv[])
{int i,len=0;
for(i=1;i<argc;i++) len+=strlen(argv[i]);
printf("%d\n",len);
}
程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:
ex1 abcd efg 10<回车>
则运行的结果是( )。
A) 22 B) 17 C) 12 D) 9
38、若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。
A)数组首地址 B)数组的第一个元素值
C)数组中全部元素的值 D)数组元素的个数
39、有一函数:
int f(int a) {
auto int b = 0;
static int c = 3;
b = b+1;
c = c+1;
return(a+b+c);
}
如果有int i, j; 则执行两次调用:i=f(2); j=f(2) 后, i, j值为( )。
A) i = 7, j = 7 B) i = 7, j = 8
C) i = 8, j = 7 D) i = 8, j = 8
40、有下列函数则,调用f(“1234”)的返回结果是( )。
int f(char *s)
{
int k = 0;
while (*s) k = k*10+*s++-’0’;
return(k);
}
A) “1234” B) 1234 C) “4321” D) 4321
二、 填空题(每空2分,共40分)
1、判断一个字符是否是字母或数字的逻辑表达式是: 【1】 。
2、执行语句:for(i=1;i++<4;)后;变量i的值是 【2】 。
3、设有定义:int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。
scanf("%d", 【3】 ); printf("%d\n", 【4】 );
4、以下程序运行后的输出结果是 【5】 。
main()
{int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d,%d\n",x,y);
}
5、以下程序的输出结果为 【6】 。
main()
{ int x=2;
while (x--);
printf(“%d\n”,x);
}
6、以下程序运行后的输出结果是 【7】 。
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3){x++;break;}
else continue;
}
printf("%d\n",x);
}
7、下面程序的功能是输出以下形式的金字塔图案是:
*
***
*****
*******
main( )
{ int i,j;
for(i=1;i<=4;i++)
{ for(j=1;j<=4-i;j++) printf(“ “);
for(j=1;j<= 【8】__;j++) printf(“*”);
printf(“\n”);
}
}
8、下面程序的功能是:将n行n列的矩阵A转置为A’,例如:
则A'=
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
当A=
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
#define N 4
main()
{ int a[][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,t;
for(i=0;i<N;i++)
for(j=0; 【9】 ;j++)
{ t=a[i][j];
【10】 ;
a[j][i]=t;
}
}
9、下面程序的功能是用公式求π的近似值,直到最后一项的小于10- 6为止。请填空。
#include <stdio.h>
#include <math.h>
main()
{
long i=1;
【11】 pi=0;
while(i*i<=1e+6) { pi= 【12】 ; i++; }
pi=sqrt(6.0*pi);
printf(“pi=%10.6f\n”,pi);
}
10、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= 【13】 ;
}
return m;
}
main()
{ printf("m=%d\n", 【14】 ); }
11、以下程序运行后的输出结果是 【15】 。
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}
12、以下程序运行后的输出结果是 【16】 。
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y);
}
main()
{ int a=3,b=4;
swap(a,b);printf("%d %d\n",a,b);
}
13、输入一个小于32768的正整数,程序求该数各位之和,如325,3+2+5=10。
main()
{
int i,t=【17】 ;
scanf(“%d”,&i);
while(【18】)
{ t+= 【19】 ; i/=10;}
printf(“%d\n”,t);
}
16、请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
double max( 【20】 );
main()
{ double x,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
double max(double a,double b)
{ return(a>b?a:b); }
10
展开阅读全文