一、选择题(在每个小题四个备选答案中选出一个正确答案,填在题末的括号中)(本大题共20小题,每小题2分,总计40分)
1、以下叙述中错误的是( )
A.C语言源程序经编译后生成后缀为.obj的目标程序
B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
2、下面程序段的输出结果是( )
char c[ ] =”\t\v\\\0will\n”
printf(“%d”,strlen(c));
A.14 B. 3 C .9 D. 6
3、若希望当A的值为奇数时,表达式的值为“真”,A为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( )
A.A%2==1 B.A%2! C.!(A%2==0) D. (A%2)
4、以下程序的结果是( )
x = -1 ;
do{
x=x*x;}
while (!x) ;
A.死循环 B.循环二次 C.循环一次 D.语法错误
5、设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
A.EOF B.非0值 C.0 D.NULL
6、下列运算符中运算级别最低的是( )
A.<= B.= C.&& D.%
7、若要求从键盘读入含有空格字符的字符串,应使用函数
A.getc() B.gets() C.getchar() D.scanf(
8、以下叙述中不正确的是( ):
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
9、若函数为int型,变量z为float型,该函数体内有语句return(z);,则该函数返回值是( )
A.int 型 B.float型 C.编译出错 D.不确定
10、下面程序的输出结果是( )
main()
{union u{char *name;
int age;
int income;
}s;
s.name=”Wangling”;
s.age=28;
s.income=1000;
printf(“%d\n”,s.age);}
A.1000 B. 28 C . 不确定 D.0
11、要对字符串赋值,下面的( )语句是正确的
A.char *q; *q=”Hello!”; B.char *q; q=”Hello!”;
C.char q[10]; q=”Hello!” D.char q[10]; scanf(“%s”,&q);
12、若有程序段如下:
int w[4]={8,20},*p;
p=w;
则输出*(p++)的值为( )
A.8 B.20 C.0 D.不定
13、已知学生记录描述为
struct student
{ int num;
char name[10];
struct{ int y;int m;int d; }birth;
char sex;
}stu[3]
A.d=12 B.birth,d= 12 C .stu[1]birth.d=12 D.stu[1].birth,d=12
14、设有如下的语句:
char b=’b’,e=’e’;
printf("%d,%c\n",e-b,e-‘a’+’A’);
则输出结果是( )
A.2,M B.2,E C.3,M D.3,E
15、下列程序段中,不构成死循环的是( ):
A.int k=100; B.int k=100
while( ) do{++k;}while(k>=100)
{k=k%100+1;
if (k>100) break;
}
C.for( ; ; ) D.int k=100;
while(k); --k;
16. 以下程序运行的结果是( )
#include <stdio.h>
main()
{char a[ ] = “morning” , t ;
int i,j = 0;
for (i=1;i<7; i++) if (a[j] < a[i])j=i ;
t = a[j] ; a[j]=a[7] ; a[7]= a[j] ; puts (a) ;
}
A. mogninr B. morning C.mo D.mornin
17、以下程序的输出结果是( )
main()
{ int i ,k,m,a=5;
for (i=1 ;i<=5 ; i++){
a=a+3;
for (k = 1 ; k<=6 ; k++){
a=a+3;
for(m = 1 ; m<= 7 ; m++){
a=a+3;
}}}
Printf(“%d”, a);
}
A.740 B. 876 C .793 D.852
18、执行表达式“x=(y=4,z=16,k=32)”后,x的值是( )
A.4 B.16 C.32 D.52
19、运行下列程序后,输出结果是( )
f(int m,int n)
{return(m+=m-n);}
main()
{int k=4,m=1;
printf(“%d”,f(k,m));
printf(“%d”,f(k,k-m));
}
A.3,1 B.7,5 C.7,13 D.3,13
20、若有定于语句“int m,n=2,*p=&m;”,则能完成m=n功能的语句是( )
A.m=*p B.*p=*&m C.m=&n D.m=**p
二、程序填充题(给出下列程序,将横线处缺少的部分补上,使其能正确运行)(本大题共3小题,21、22题每空2分,23题每空1分,总计20分)
21、一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”,例:153=13+53+33,找出所有的这种数。
main()
{int n,a,b,c;
for(c=1;c<=9;c++)
for(b=0;b<=9;b++)
for( ;a++)
{n= ;
if(a* a* a+ b* b* b+ c* c* c n)
printf("%d \n",n);
}
}
22、 下面程序的功能是输出1000以内能被3整除,且个位为6的所有整数。
main()
{int i,m;
for(i=1; ;i++)
{if( && )
printf("%d \n", ); } }
23、下列程序的主要功能是输入字符数组a的值并输出。
#include “stdio.h”
main()
{int a[4] [4];int i,j;
for( )
for( )
scanf(“% d ”, ) ;
for( )
for( )
printf(“% d ”, ); }
三、程序分析题(阅读下列程序,将输出结果写到各题右侧的空白出)(本大题共4小题,每小题5分,总计20分)
24、程序运行后的输出结果是
main()
{int k =5,n=0;
do
{switch(k)
{case 1: case3:n+=1; k --; break;
default:n=0;k --;
case 2: case 4:n+=2; k--;break;
}
printf(“%d”,n);
}while(k >0&&n<5);
}
25、程序运行后的输出结果是
main()
{int a[4][4]={{1,4,3,2,}, {8,6,5,7,},{3,7,2,5,},{4,8,6,1}}, i ,k ,t;
for( i =0 ; i <3; i ++)
for(k=i+1;k<4;k++)
if(a[i][i]<a[k][k])
{t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}
for(i =0; i <4;i ++) printf(“%d,”,a[0][i]);
}
26、程序运行后的输出结果是
void f(int v,int w)
{int t;
t=v;v=w;w=t;}
main()
{int x =5,y=0;,z=3
if(x<y) f(x,y);
else if(y>z) f(y,z);
else f(x,z);}
printf(“%d, %d, %d”,z,y,x);
}
27、程序运行后的输出结果是
#include<studio.h>
main()
{
int a[]={1,2,3,4,5,6},*p;
p=a;
*(p+4)+=3;
printf(“%d,%d\n”,*p,*(p+4));
}
五、程序设计题(本大题共3小题,第28、29两题每题6分,第30题8分,总计20分)
28、 从键盘输入一个8位整数a,从低位到高位将a的每一位上的数字,组成一个8个元素的数组,并输出该数组。
29、利用指针,将选出主函数传送过来的3个数按由大到小顺序排列,并在主调函数中输出。
30、请编程输出如下数字阵列;
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1