页
一、选择题。
(本大题共40个选项,【1】~【40】每个选择项1.5分,共60分) 1、C语言中,用户能使用的合法标识符是 【1】 。C 【1】 A) a,b B) -xyz C) fa2 D) 5i void define sort_a x.i a123 s(x) string malloc 2、若执行printf(\语句其输出结果是 【2】 D
【2】 A) 8 B) 7 C) 6 D) 4
3、若int a, b, c; 则表达式(a=2, b=5, b++, a+b)的值是 【3】 。B 【3】 A) 7 B) 8 C) 6 D) 2 4、以下正确的叙述是 【4】 。C
【4】 A) 在C语言中,main函数必须位于文件的开头 B) C语言每行中只能写一条语句 C) C语言本身没有输入、输出语句 D) 对一个C语言进行编译预处理时,可检查宏定义的语法错误 5、若执行以下程序段:
int a=1, b=2, m=2, n=2; (m=a>b)&&++n;
则n的值是 【5】 。 B 【5】 A) 1 B) 2 C) 3 D) 4 6、已知各变量的类型如下: int i=8, a, b;
double x=1.42, y=5.2;
则以下符合C语言语法的表达式是 【6】 。A 【6】 A) a+=a-=(b=4)*(a=3) B) a=a*3=2 C) x%(-3) D) y=float(i) 7、以下程序的运行结果是 【7】 。B #include
int m=5;
if(m++>5) printf(\ else printf(\}
【7】 A) 7 B) 6 C) 5 D) 4 8、以下程序的运行结果是 【8】 。D #include
char c='y';
if(c>='a'&&c<='u') c+=5;
else if(c>='v'&&c<='z') c-=21; 共
putchar(c); }
(将字母改为其后第五个字母,按循环次序) 【8】 A) 'y' B) 'd' C) y D) d 9、若定义int i; 则以下循环语句的循环执行次数是 【9】 。B for(i=2; i==0;) printf(\【9】 A) 无限次 B) 0次 C) 1次 D) 2次 10、以下程序的运行结果是 【10】 。C #include
int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12}; int *p[4], j;
for(j=0; j<4; j++) p[j]=a[j];
printf(\*p[1], (*p)[1], p[3][2], *(p[3]+1)); }
【10】 A) 4, 4, 9, 8 B) 程序出错 C) 4, 2,12,11 D) 1, 1, 7, 5
11、以下程序的输出结果是 【11】 。A #include
int i=0; while(1) {
printf(\ i++;
if(i<3) break; }
printf(\}
【11】 A) * B) *** C) ** D) **** 12、若定义a[][2]={1,2,3,4,5,6,7}; 则a数组中行的大小是 【12】 。C 【12】 A) 2 B) 3 C) 4 D) 无确定值 13、要使以下程序中t的输出结果是4,则输入a和b应满足的条件是 【13】 A #include
int s, t, a, b;
scanf(\ s=t=1;
if(a>0) s+=1; if(a>b) t=s+t;
1
else
if(a==b) t=5; else t=2*s;
printf(\}
【13】 A) a>0并且a0并且a>b D) a<0并且{
char *s=\ int a, b, c, d; a=b=c=d=0;
for(; *s; s++) switch(*s) a>b'
14、以下程序的运行结果是 【14】 。B #include
int i=0;
while(b[i]<=10) {
b[i]+=2; i++; } }
main() {
int i, a[]={ 1, 5,10, 9,13, 7}; f(a+1);
for(i=0; i<6; i++) printf(\}
(从第一个元素起到大于10为止,各加2) 【14】 A) 2 7 12 11 13 9 B) 1 7 12 11 13 7 C) 1 7 12 11 13 9 D) 1 7 12 9 13 7 15、以下各语句或语句组中,正确的操作是 【15】 。C 【15】 A) char s[5]=\B) char *s; gets(s); C) char *s; s=\D) char s[5]; scanf(\&s);
16、以下C语言中,对函数不正确的描述是 【16】 。D 【16】 A) 当用数组名作形参时,形参数组改变可使实参数组随之改变 B) 允许函数递归调用 C) 函数形参的作用范围只是局限于所定义的函数内 D) 函数说明必须在主调函数之前
17、在循环语句的循环体中,continue语句的作用是 【17】 。C 【17】 A) 立即终止整个循环 B) 继续执行continue语句之后的循环体各句 C) 结束本次循环 D) 结束本次循环并跳出循环 18、以下程序的运行结果是 【18】 。A #include
{
case 'c': c++; case 'b': b++;
default : d++; break; case 'a': a++; }
printf(\}
(a='a'的个数、b='b','c'的个数、c='c'的个数、d=非'a'的个数) 【18】 A) a=1,b=5,c=3,d=8 B) a=1,b=2,c=3,d=3 C) a=9,b=5,c=3,d=8 D) a=0,b=2,c=3,d=3
19、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是【19】 。B
fseek(fp, 0, SEEK_END) i=ftell(fp);
printf(\【19】 A) -1 B) fp所指文件的长度,以字节为单位 C) 0 D) 2 20、以下程序的输出结果是 【20】 。A #include
int i=1, j=2;
fun(fun(i, &j), &j); }
fun(int a, int *b) {
static int m=2; i+=m+a; m=++(*b);
printf(\ return (m); }
【20】 A) 3,3 B) 3,3 C) 3,3 D) 3,3 9,4 6,3 9,3 6,4 21、定义compare(char *s1, char *s2)函数,以实现比较两个字符串大小的功能。以下程序运行结果为-32,选择正确答案填空。 #include
2
main() {
printf(\}
compare(char *s1, char *s2) {
while(*s1&&*s2&& 【21】 ) B {
s1++; s2++; }
return *s1-*s2; }
B 【21】 A) *s1!=*s2 B) *s1==*s2 C) *s1=*s2 D) s1!=s2 22、若有以下程序: #include
main(int argc, char *argv[]) {
while(--argc) printf(\ printf(\}
(逆序参数回送)
该程序经编译和连接后生成可执行文件S.EXE。现在DOS提示符下键入S AA BB CC回车,则输出结果是【22】 。C 【22】 A) AABBCC B) AABBCCS C) CCBBAA D) CCBBAAS 23、若有定义typedef char STRING[255]; STRING s; 则s是 【23】 。B 【23】 A) 字符指针数组变量 B) 字符数组变量 C) 字符变量 D) 字符指针变量 24、以下程序的运行结果是 【24】 。D #include
static char str[]=\ fun(str); }
void fun(char *s) {
if(*s) {
fun(++s);
printf(\ } }
【25】 A) 3 B) 123 C) 1 D) 3 32 12 12 23 321 1 123 123 25、判断以下程序段的结果是 【25】 。B #define A 3
#define B(a) ((A+1)*a) ... int x;
x=3*(A+B(7)); 【25】 A) 程序错误,不允许嵌套宏定义 B) x=93 C) 语法错误,宏体中不允许带括号 D) x=21 26、以下程序的运行结果是 【26】 。A #include
int x; int *y; }*p;
int dt[]={1,2,3,4};
struct stu a[4]={5, &dt[0], 6, &dt[1], 7, &dt[2], 8, &dt[3]}; main() {
p=a;
printf(\ printf(\
printf(\}
【26】 A) 6,7,3 B) 6,6,3 C) 6,6,2 D) 5,7,2 27、以下程序的运行结果是 【27】 。D #include
void sub(int *x, int y, int z) {
*x=y-z; }
main() {
int a, b, c; sub(&a, 10, 5); sub(&b, a, 7); sub(&c, a, b);
printf(\}
【27】 A) 10,-2,5 B) 10,5,7 C) 10,-2,7 D) 5,-2,7 28、以下程序的运行结果是 【28】 。C #include
3
{
int i, j;
for(i=j=0; *(p+i)!='\\0'; i++) if(*(p+i)<'n') {
*(p+j)=(p+i); j++; }
*(p+j)='\\0'; }
main() {
char str[]=\ abc(str); puts(str); }
(保留小于字母'n'的字母) 【28】 A) morig B) morning C) mig D) or
29、若有定义char *language[]={\\\\则language[2]的值是【29】 。B 【29】 A) 一个字符 B) 一个地址 C) 一个字符串 D) 不定值 30、以下程序的运行结果是 【30】 。D #include
int a=3, b=2, c=1; {
int b=5, c=12; c-=b*2;
printf(\ a+=c; }
printf(\}
【30】 A) a=3,b=2,c=-3 B) a=3,b=5,c=2 a=0,b=2,c=-3 a=5,b=5,c=2 C) a=3,b=2,c=1 D) a=3,b=5,c=2 a=5,b=5,c=2 a=5,b=2,c=1 31、以下程序的运行结果是 【31】 。C #include
int a=10, b=20, c; c=a/b;
#ifdef DEBUG
printf(\ #endif
printf(\}
【31】 A) a=10,b=20 B) 编译出错 C) a=10,b=20 D) c=0 c=0 32、以下程序的输出结果是 【32】 。B #include
union {
long a; int b; char c; }m;
printf(\}
【32】 A) 2 B) 4 C) 1 D) 7 33、若执行以下程序段 int x=3, y=6, z; z=x^y<<2;
则z的二进制值是 【33】 。A 【33】 A) 00011011 B) 00010100 C) 00011000 D) 00000110 34、若有以下定义和语句,则对a数组元素地址的正确引用是 【34】 。C int a[2][3], (*p)[3]; p=a; 【34】 A) *(p+2) B) p[2] C) p[1]+1 D) (p+1)+2 35、若执行以下程序段,其运行结果是 【35】 。D char c[]={'a', 'b', '\\0', 'c', '\\0'}; printf(\【35】 A) ab c B) 'a''b' C) abc D) ab
36、若有int max(), (*p); 为使函数指针变量p指向函数max,正确的赋值语句是【36】 。A 【36】 A) p=max; B) *p=max; C) p=max(a, b);D) *p=max(a, b);
(应为(*p)())
37、若有定义int a[3][5], i, j; (且0≤i<3, 0≤j<5),则a[i][j]不正确的地址表示是 【37】 。D 【37】 A) &a[i][j] B) a[i]+j C) *(a+i)+j D) *(*(a+i)+j)
38、以下程序的运行结果是 【38】 。D #include
4
enum
{aa, bb=5, cc, dd}e; for(e=bb; e>=aa; e--) printf(\ printf(\}
【38】 A) 543000 B) 5430 C) 543210 D) 程序出错 39、C语言规定,函数返回值的类型由 【39】 所决定。D 【39】 A) return语句中的表达式类型 B) 调用该函数时的主调函数类型 C) 调用该函数时的形参类型 D) 在定义该函数时所指定的函数类型
40、若建立以下链表结构,其指针p,q定义如下: struct node {
int data;
struct node *next; }p, q;
p,q指向图中所示结点,则能将q所指的结点插入到链表末尾组成单向链表的一组语句是【40】 。ABD
p q 10 20 30
NULL (应为*p, *q,除C外都能实现) 【40】 A) q->next=NULL; B) p=p->next; p=p->next; q->next=p->next; p->next=q; p->next=q; C) p=p->next; D) p=(*p).next; q->next=p; (*q).next=(*p).next; p->next=q; (*p).next=q; 二、请正确填充下面的划线部分,使其完成所要求的功能:
(本大题共20个空,每空2分,共40分。请将答案写在答题卡对应栏中,答在试卷上不得分)
1、计算sum=1+1/2+1/4+...+1/50的值,并显示出来。 #include
int i=2;
float sum=1.0;
while(i<= 【1】 ) 50 {
sum+=1/ 【2】 ; (float)i i+=2; }
printf(\
}
2、以下程序是用来统计从键盘输入的一个正整数中各位数字中零的个数,并求各位数字中最大者。例如:1080其零的个数是2,各位数字中最大者是8。 #include
unsigned long num, max, t; int count; count=max=0;
scanf(\ do{
t= 【3】 ; num if(t==0) ++count; else
if(max printf(\} 3、以下程序用来检查二维数组是否对称(即:对所有i,j都有a[i][j]=a[j][i])。 #include int a[4][4]={1,2,3,4, 2,2,5,6, 3,5,3,7, 8,6,7,4}; int i, j, found=0; for(j=0; j<4; j++) { for(i=0; i<4; i++) if( 【5】 ) a[i][j]!=a[j][i] { found= 【6】 ; 1 break; } if(found) break; } if(found) printf(\不对称\\n\ else printf(\对称\\n\} 4、以下程序用来完成数学函数f(x, y)的计算: f(x,y)?xy3x?2y?1?32(x?2y) #include 5