一、单选 ??共40题 (共计40分)
第1题 (1.0分) ???????题号:6132 ???????难度:中 ???????第1章
以下叙述正确的是
A:通过分解成简单子任务,可以完成任何复杂任务
B:每个结构化程序都要包含全部三种基本结构
C:C语言程序的所有自定义函数只能写在同一个源文件中
D:C语言程序允许使用多个main函数,只要它们的函数体各不相同即可
答案:A
第2题 (1.0分) ???????题号:6597 ???????难度:中 ???????第2章
有以下程序
#include <stdio.h>
main()
{
???int ?a, b, c=241;
???a = c/100 % 9;
???b = ( -1 )&&( -1 );
???printf("%d, %d\n", a, b );
}
程序运行后的输出结果是
A:2,1
B:6,1
C:6,0
D:2,0
答案:A
第3题 (1.0分) ???????题号:7190 ???????难度:较易 ???????第2章
以下选项中合法的实型常量是
A:0
B:3.13e-2.1
C:0.914
D:2.0*10
答案:C
第4题 (1.0分) ???????题号:6869 ???????难度:中 ???????第2章
若有定义语句:int ?x=10; ,则表达式x-=x+x的值为().
A:0
B:-20
C:-10
D:10
答案:C
第5题 (1.0分) ???????题号:7103 ???????难度:中 ???????第2章
若有以下程序
????#include <stdio.h>
????main()
????{ ?int ?a=0,b=0,c=0;
???????c= (a -= ++a), (a+=b, b+=4);
???????printf("%d,%d,%d\n",a,b,c);
????}
则程序的输出结果是
A:0,4,0
B:0,4,4
C:1,4,1
D:1,4,4
答案:A
第6题 (1.0分) ???????题号:6529 ???????难度:中 ???????第3章
若有定义:int a,b,c;,想通过语句:scanf("%d,%d%d",&a,&b,&c);把1、2、3分别输入给变量a、b、c,则正确的键盘输入是().
A:1,2,3<回车>
B:1,2<tab>3<回车>
C:1<回车><tab>2<tab>3
D:1<回车>2<回车>3
答案:B
第7题 (1.0分) ???????题号:6322 ???????难度:中 ???????第3章
设有如下语句:
????????int k=0; ?
????????k=printf("OK\n");
则以下叙述中正确的是().
A:printf必须作为独立语句出现
B:变量k得到的是输出的可见字符个数2
C:变量k得到的是输出字符的总个数3
D:变量k仍保持初值0
答案:C
第8题 (1.0分) ???????题号:7194 ???????难度:较易 ???????第3章
有以下程序
????#include <stdio.h>
????main()
????{ ?int ?x=35, B; ??char ?z='B' ;
???????B = (( x ) && ( z <'b' ));
???????printf("%d\n", B );
????}
程序运行后的输出结果是
A:1
B:0
C:35
D:66
答案:A
第9题 (1.0分) ???????题号:7046 ???????难度:较易 ???????第4章
以下选项中与
????if(a==1)a=b;
????else a++;
语句功能不同的switch语句是
A:switch(a==1)
{case 0:a=b;break;
??case 1:a++;
}
B:switch(a)
{case 1:a=b;break;
??default : a++;
}
C:switch(a)
{default:a++;break;
??case 1:a=b; ?
}
D:switch(a==1)
{case 1:a=b;break;
??case 0:a++;
}
答案:A
第10题 (1.0分) ???????题号:6462 ???????难度:中 ???????第4章
以下选项中,当且仅当x的绝对值在1至6范围内表达式值为"真"的是( ).
A:(x>=-6)&&(x<=-1)||(x>=1)&&(x<=6)
B:(x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1)
C:(x>=-6)||(x<=-1)||(x>=1)||(x<=6)
D:(x>=1)&&(x<=6)||(x>=-1)&&(x<=-6)
答案:A
第11题 (1.0分) ???????题号:6930 ???????难度:中 ???????第4章
有如下嵌套的if语句
????if(a<b)
????????if(a<c) k=a;
????????else ?k=c;
????else
????????if(b<c) k=b;
????????else ?k=c;
以下选项中与上述if语句等价的语句是
A:k=(a<b)?((b<c)?a:b):((b>c)?b:c);
B:k=(a<b)?((a<c)?a:c):((b<c)?b:c);
C:k=(a<b)?a:b;k=(b<c)?b:c;
D:k=(a<b)?a:b;k=(a<c)?a:c;
答案:B
第12题 (1.0分) ???????题号:7138 ???????难度:较易 ???????第4章
若有以下程序
????#include <stdio.h>
????main()
????{ ?int ?a=1,b=2,c=3,d=4, r=0;
???????if (a!=1) ; ?else ?r=1;
???????if (b==2) ?r+=2;
???????if (c!=3); ?r+=3;
???????if (d==4) ?r+=4;
???????printf("%d\n", r);
????}
则程序的输出结果是
A:3
B:7
C:6
D:10
答案:D
第13题 (1.0分) ???????题号:6018 ???????难度:中 ???????第5章
有以下程序
#include ??<stdio.h>
main( )
{
????char ?ch = 'B';
????while (ch < 'E')
????{
????????printf("%d", ch - 'A');
????????ch++;
????}
????printf("\n");
}
程序运行后的输出结果是
A:123 ?
B:ABC ??
C:abc ??
D:012
答案:A
第14题 (1.0分) ???????题号:7225 ???????难度:较易 ???????第5章
以下叙述中正确的是
A:循环发生嵌套时,最多只能两层
B:三种循环for,while,do-while可以互相嵌套
C:循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误
D:for语句的圆括号中的表达式不能都省略掉
答案:B
第15题 (1.0分) ???????题号:6655 ???????难度:中 ???????第5章
有如下程序
#include <stdio.h>
main()
{
????int i;
????for (i=0; i<5; i++)
????????putchar('9' - i); ?printf("\n");
}
程序运行后的输出结果是
A:54321
B:98765
C:9''8''7''6''5'
D:43210'
答案:B
第16题 (1.0分) ???????题号:6903 ???????难度:中 ???????第5章
有以下程序
????#include <stdio.h>
????main()
????{ int ?y=10;
??????while(y--); ?printf("y=%d\n", y);
????}
程序执行后的输出结果是
A:y=0
B:y=-1
C:y=1
D:while构成无限循环
答案:B
第17题 (1.0分) ???????题号:6905 ???????难度:较难 ???????第5章
有以下程序
????#include <stdio.h>
????main()
????{ ?int ??i=5;
???????do
???????{ ?if (i%3==1)
????????????if (i%5==2)
????????????{ ?printf("*%d", i); ?break; ?}
??????????i++;
???????} ?while(i!=0);
???????printf("\n");
????}
程序的运行结果是
A:*2*6
B:*3*5
C:*5
D:*7
答案:D
第18题 (1.0分) ???????题号:6845 ???????难度:中 ???????第5章
有以下程序:
#include ??<stdio.h>
main()
{ int ??y=9;
for( ?; ?y>0; ?y--)
?if(y%3==0) ?printf("%d", --y);
}
程序的运行结果是().
A:852
B:963
C:741
D:875421
答案:A
第19题 (1.0分) ???????题号:6827 ???????难度:中 ???????第6章
有以下程序:
#include ?<stdio.h>
main()
{ char ?s[]="012xy\08s34f4w2";
int ?i, n=0;
for ( i=0; s[i]!=0; i++ )
?if(s[i] >= '0' && s[i] <= '9') ?n++;
printf("%d\n",n);
}
程序运行后的输出结果是().
A:0
B:3
C:7
D:8
答案:B
第20题 (1.0分) ???????题号:6085 ???????难度:中 ???????第6章
设有以下程序段
????????float ?a[8] = {1.0, 2.0};
????????int ?b[1] = {0};
????????char ?c[] = {"A", "B"};
????????char ?d == "1";
以下叙述正确的是
A:只有变量c的定义是合法的
B:只有变量a,b,c的定义是完全合法的
C:所有变量的定义都是完全合法的
D:只有变量a, b的定义是完全合法的
答案:D
第21题 (1.0分) ???????题号:6306 ???????难度:中 ???????第6章
若有定义语句:int x[][3]={1,2,3,4,5,6}; ,则以下选项中与该语句等价的是().
A:int x[][3]={{1,2,3},{4,5},{6}};
B:int x[][3]={{1,2},{3,4},{5,6}};
C:int x[][3]={{1},{2,3},{4,5,6}};
D:int x[][3]={{1,2,3},{4,5,6}};
答案:D
第22题 (1.0分) ???????题号:6472 ???????难度:中 ???????第6章
有以下程序
#include ??<stdio.h>
main( )
{ ?int ?i,j=0;
???char ?a[]="How are you!";
???for ( i=0; a[i]; i++ )
??????if ( a[i] != ' ' )
??????????a[j++] = a[i];
???a[j] = '\0';
???printf( "%s\n",a );
}
程序运行后的输出结果是
A:Howareyou!
B:areyou!
C:you!
D:Howareyou!u!
答案:A
第23题 (1.0分) ???????题号:5938 ???????难度:较易 ???????第6章
有如下程序
#include ??<stdio.h>
#include ??<string.h>
main( )
{
????printf("%d\n", strlen("0\t\nA011\1"));
}
程序运行后的输出结果是
A:8
B:9
C:7
D:10
答案:A
第24题 (1.0分) ???????题号:6253 ???????难度:中 ???????第6章
若有定义: char s1[100 ]="name", s2[ 50]="address", s3[80]="person";,要将它们连接成新串:"personnameaddress",正确的函数调用语句是().
A:strcat(strcat(s1,s2),s3); ??
B:strcat(s3,strcat(s1,s2));
C:strcat(s3,strcat(s2,s1));
D:strcat(strcat(s2,s1),s3);
答案:B
第25题 (1.0分) ???????题号:6336 ???????难度:中 ???????第7章
有以下程序
????#include <stdio.h>
????#define SWAT(t,a,b) ?t=a; a=b; b=t;
????main()
????{ int ?x=6,y=4,z=3,s=0;
??????if(x<y) ?SWAT(s,x,y);
??????if(x<z) ?SWAT(s,x,z);
??????if(y<z) ?SWAT(s,y,z);
??????printf("%d,%d,%d\n", x,y,z);
????}
执行后的输出结果是
A:6,4,3
B:3,4,6
C:0,3,4
D:3,0,0
答案:D
第26题 (1.0分) ???????题号:6715 ???????难度:较易 ???????第7章
以下关于函数的叙述中正确的是
A:函数调用必须传递实参
B:函数必须要有形参
C:函数必须要有返回值
D:函数形参的类型与返回之的类型无关
答案:D
第27题 (1.0分) ???????题号:6822 ???????难度:较难 ???????第7章
有以下程序:
#include ?<stdio.h>
void fun( int ?a[], int ?n)
{ int ??i, t;
for(i=0; i<n/2; i++) ?{ t=a[i]; ?a[i]=a[n-1-i]; ?a[n-1-i]=t; }
}
main()
{ int ??k[10]={ 1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2; i<8; i++) printf("%d",k[i]);
printf("\n");
}
程序的运行结果是().
A:321678
B:876543
C:1098765
D:345678
答案:A
第28题 (1.0分) ???????题号:6876 ???????难度:中 ???????第7章
有以下程序:
#include ??<stdio.h>
int ?f( int x,int y)
{ return((y-x)*x); }
main()
{ int a=3,b=4,c=5,d;
??d=f(f(a,b),f(a,c));
??printf("%d\n",d);
}
程序运行后的输出结果是().
A:7
B:10
C:8
D:9
答案:D
第29题 (1.0分) ???????题号:6601 ???????难度:中 ???????第7章
函数调用语句:fun( ( exp1, exp2 ), ( exp1, exp2, exp3) ); 含有的实参个数是
A:1
B:4
C:5
D:2
答案:D
第30题 (1.0分) ???????题号:7325 ???????难度:较难 ???????第7章
有以下程序
????#include <stdio.h>
????#define ??N ???3
????void ?fun( int ?a[][N], int ?b[] )
????{ ?int ?i, j;
???????for( i=0; i<N; i++ )
???????{ ?b[i] = a[i][0];
??????????for( j=1; j<N; j++ )
??????????????if ( b[i] < a[i][j] ) ?b[i] = a[i][j];
???????}
????}
????main()
????{ ?int ?x[N][N] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, y[N] ,i;
???????fun( x, y );
???????for ( i=0; i<N; i++ ) ???printf( "%d,", y[i] );
???????printf( "\n" );
????}
程序运行后的输出结果是
A:3,5,7
B:1,3,5,
C:2,4,8,
D:3,6,9,
答案:D
第31题 (1.0分) ???????题号:6301 ???????难度:难 ???????第8章
有以下程序
?????#include<stdio.h>
?????int f1(int a)
?????{ ?return a*3;}
?????int f2(int *b)
?????{ ?return *b*5;}
?????main()
?????{
????????int x=3,y=5;
????????printf("%d ,%d\n",f1(x),f2(&y));
?????}
程序的运行结果是().
A:9 ,125
B:9,25
C:3,15
D:3,45
答案:B
第32题 (1.0分) ???????题号:6084 ???????难度:较难 ???????第8章
有以下程序
#include ??<stdio.h>
void change( char* ?array, int ?len )
{ ?for (len--; len>=0; len--)
????????array[len] += 1;
}
main( )
{ ?int ?i;
???char ?array[5] = "ABCD";
???change(array, 4);
???for (i=0; i<4; i++)
????????printf("%c,", array[i]);
}
程序运行后的输出结果是
A:B,C,D,E,
B:A,B,C,D,
C:C,D,E,F,
D:B,D,F,H,
答案:A
第33题 (1.0分) ???????题号:7174 ???????难度:中 ???????第8章
以下选项中函数形参不是指针的是
A:fun( int ?*a ){…}
B:fun( int ?a[10] ){…}
C:fun( int ?&p ){…}
D:fun( int ?p [ ] ){…}
答案:C
第34题 (1.0分) ???????题号:6603 ???????难度:中 ???????第8章
有以下程序
#include <stdio.h>
main()
{
???int ?a[10] = { 11,12,13,14,15,16,17,18,19,20 },*p=a,i=9 ;
???printf( "%d,%d,%d\n",a[ p-a ], p[i],*( &a[i] ) );
}
程序运行后的输出结果是
A:11,19,19
B:12,20,20
C:11,20,20
D:12,19,20
答案:C
第35题 (1.0分) ???????题号:6663 ???????难度:中 ???????第8章
以下涉及字符串数组、字符指针的程序段,不会产生编译错误的是
A:char* str, name[10]; str ?= "Hello World";
B:char* str, name[10]; name = "Hello World";
C:char str1[10] = "prog.c", str2[10]; str2 = str1;
D:char head_line[]; head_line = "=============";
答案:A
第36题 (1.0分) ???????题号:7234 ???????难度:中 ???????第8章
下面选项中的程序段,没有编译错误的是
A:char* sp, s[10]; sp = "Hello";
B:char* sp, s[10]; s = "Hello";
C:char str1[10] = "computer", str2[10]; str2 = str1;
D:char mark[]; mark = "PROGRAM";
答案:A
第37题 (1.0分) ???????题号:6700 ???????难度:较难 ???????第9章
有如下程序
#include <stdio.h>
struct ?S
{
????int x, y;
};
main()
{
????struct S ?data[2] = {4, 3, 1, 9};
????int i; ???
????for (i=0; i<2; i++)
????????printf("%d,%d;", data[i].x, data[i].y >> 1);
????printf("\n");
}
程序运行后的输出结果是
A:4,1;1,4;
B:4,1;2,4;
C:4,3;1,9;
D:4,3;2,3;
答案:A
第38题 (1.0分) ???????题号:6859 ???????难度:较易 ???????第9章
以下叙述中错误的是().
A:可以通过typedef增加新的类型
B:可以用typedef将已存在的类型用一个新的名字来代表
C:用typedef定义新的类型名后,原有类型名仍有效
D:用typedef可以为各种类型起别名,但不能为变量起别名
答案:A
第39题 (1.0分) ???????题号:7123 ???????难度:中 ???????第9章
若有以下程序
?????#include <stdio.h>
?????#define ?S(x) ?x*x
?????#define ?T(x) ?S(x)*S(x)
?????main()
?????{ ?int ?k=5, j=2;
????????printf("%d,%d\n", S(k+j),T(k+j));
?????}
则程序的输出结果是
A:17,289
B:492,401
C:17,37
D:49,289
答案:C
第40题 (1.0分) ???????题号:7007 ???????难度:易 ???????第10章
设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是
A:只能写不能读
B:写操作结束后可以从头开始读
C:可以在原有内容后追加写
D:可以随意读和写
答案:A
二、程序填空 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:309 ???????难度:中 ???????第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。
??????函数fun的功能是输出这位学生的信息。
-------------------------------------------------------*/
#include ????<stdio.h>
typedef ?struct
{ ?
????????int ?num;
????????char ?name[9];
????????char ?sex;
????????struct { int ?year,month,day ;} birthday;
????????float ?score[3];
}STU;
/***********SPACE***********/
void show(STU ?【?】)
{ ?
????????int ?i;
????????printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex,
????????????tt.birthday.year, tt.birthday.month, tt.birthday.day);
????????for(i=0; i<3; i++)
/***********SPACE***********/
????????????????printf("%5.1f", 【?】);
????????printf("\n");
}
main( )
{ ???????
????????STU ?std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 };
????????printf("\nA student data:\n");
/***********SPACE***********/
????????show(【?】);
}
答案:
=======(答案1)=======
tt
=======(答案2)=======
tt.score[i]
=======(答案3)=======
std
三、程序改错 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:300 ???????难度:易 ???????第2章
/*------------------------------------------------------ ???
【程序改错】
--------------------------------------------------------
功能:编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/
#include <stdio.h>
#define N 20
int fun(int m)
{
??/**********FOUND**********/
??int s=0,i;
??for(i=1;i<N;i++)
????/**********FOUND**********/
????if(i%m=0)
??????/**********FOUND**********/
??????s=*i;
??return s;
}
main()
{
??int sum;
??sum=fun(5);
??printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);
}
答案:
=======(答案1)=======
int ?s=1 , i ;
=======(答案2)=======
if(i%m==0)
=========或=========
if(0==i%m)
=========或=========
if(!(i%m))
=======(答案3)=======
s=s*i;
=========或=========
s=i*s;
=========或=========
s*=i;
四、程序设计 ??共1题 (共计24分)
第1题 (24.0分) ???????题号:205 ???????难度:中 ???????第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编程求100以内所有能同时被5和7整除的自然数之和。
??
-------------------------------------------------------*/
# include "stdio.h" ????????
main()
{ ?
????int i,s=0; ???
????/**********Program**********/
????/********** ?End ?**********/
????printf("%d",s);
} ???????
答案: for(i=1;i<=100;i++) ???????
??????if(i%5==0&&i%7==0) s=s+i;