一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6104 难度:易 第1章
以下叙述正确的是
A:有些算法不能用三种基本结构来表达
B:C语言程序不编译也能直接运行
C:结构化程序的三种基本结构是循环结构、选择结构、顺序结构
D:如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序
答案:C
第2题 (1.0分) 题号:6928 难度:易 第2章
以下选项中不能作为C语言合法常量的是
A:1.00E+05
B:cd'
C:"\a"
D:\011'
答案:B
第3题 (1.0分) 题号:7159 难度:较易 第2章
若有以下程序
#include
main()
{ int c;
c = 13|5;
printf("%d\n", c);
}
则程序的输出结果是
A:13
B:15
C:18
D:5
答案:A
第4题 (1.0分) 题号:6041 难度:易 第2章
以下是正确C语言实型常量的是
A:.e-1
B:e-1
C:-1e
D:1e-1
答案:D
第5题 (1.0分) 题号:6840 难度:中 第2章
有以下程序:
#include
main()
{int x, y, z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
程序运行后的输出结果是().
A:2,3,3
B:2,3,2
C:2,3,1
D:2,2,1
答案:C
第6题 (1.0分) 题号:6075 难度:中 第3章
有以下程序
#include
main()
{ char a,b,c,d;
scanf("%c%c",&a, &b);
c=getchar();
d=getchar();
printf("%c%c%c%c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,
12
34
则输出结果是
A:12
3
B:12
C:1234
D:12
34
答案:A
第7题 (1.0分) 题号:7044 难度:较易 第3章
有以下程序
#include
main()
{
char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c", &c1,&c2,&c3,&c4);
c5=getchar();
c6=getchar();
putchar(c1);
putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1列开始)
123<回车>
45678<回车>
则输出结果是
A:1245
B:1256
C:1278
D:1267
答案:A
第8题 (1.0分) 题号:6143 难度:较易 第3章
若有定义 float a=12.3f; double b=456.78; 若想用printf函数输出a和b的值,关于输出格式,以下说法正确的是().
A:只能用%lf输出a,用%f输出b
B:只能用%f输出a,用%lf输出b
C:只能用%lf输出a,用%lf输出b
D:既可以用%f输出a,也可以用%f输出b
答案:D
第9题 (1.0分) 题号:6436 难度:较易 第4章
有以下程序段
#include
main()
{ int a, b, c;
a=10; b=50; c=30;
if (a>b) a=b, b=c; c=a;
printf("a=%d b=%d c=%d\n", a, b, c);}
程序的输出结果是( ).
A:a=10 b=50 c=10
B:a=10 b=50 c=30
C:a=10 b=30 c=10
D:a=50 b=30 c=50
答案:A
第10题 (1.0分) 题号:7170 难度:中 第4章
有以下程序
#include
main()
{ int x=1, y=0,a=0,b=0;
switch( x )
{ case 1: switch ( y )
{ case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;
}
printf("a=%d,b=%d\n",a,b );
}
程序运行后的输出结果是
A:a=1,b=0
B:a=1,b=1
C:a=2,b=1
D:a=2,b=2
答案:C
第11题 (1.0分) 题号:6435 难度:较易 第4章
若有定义:
float x=1.5;
int a=1,b=3,c=2;
则正确的switch语句是( ).
A:switch(a+b)
{ case 1: printf("*\n");
case 2+1: printf("**\n"); }
B:switch((int)x);
{ case 1: printf("*\n");
case 2: printf("**\n"); }
C:switch(x)
{ case 1.0: printf("*\n");
case 2.0: printf("**\n"); }
D:switch(a+b)
{ case 1: printf("*\n");
case c: printf("**\n"); }
答案:A
第12题 (1.0分) 题号:6714 难度:中 第4章
有以下程序段
scanf("%d%d%d",&a,&b,&c);
if(a>b) a=b;
if(a>c) a=c;
printf("%d\n",a);
该程序段的功能是
A:输出a、b、c中的最小值
B:输出a、b、c中的最大值
C:输出a的原始值
D:输出a、b、c中值相等的数值
答案:A
第13题 (1.0分) 题号:6740 难度:较难 第5章
有以下程序
#include
main()
{
int i=1,k=0;
for( ; i<6 ; )
{ switch(i%3)
{ case 0: k++;
case 1: k++; break;
case 2: k++; continue;
}
i+=1;
}
printf("%d\n",k);
}
程序的运行情况是
A:形成无限循环
B:输出6
C:输出5
D:输出4
答案:A
第14题 (1.0分) 题号:7286 难度:中 第5章
若变量已正确定义
for( x=0,y=0; ( y!=99 && x<4 ); x++ )
则以上for循环
A:执行3次
B:执行4次
C:执行无限次
D:执行次数不定
答案:B
第15题 (1.0分) 题号:6773 难度:较难 第5章
有如下程序段
for (i=0; i<10; i++)
if (i <= 5) break;
则循环结束后i的值为
A:1
B:0
C:5
D:10
答案:B
第16题 (1.0分) 题号:7373 难度:中 第5章
有以下程序
#include
main()
{ int a=1, b=0;
for(;a<5; a++)
{ if (a%2==0) break;
b += a;
}
printf("%d \n", b);
}
程序的运行结果是
A:1
B:10
C:0
D:4
答案:A
第17题 (1.0分) 题号:6960 难度:中 第5章
有以下程序
#include
main()
{ int i;
for(i=1; i<=40; i++)
{ if(i++%5==0)
if(++i%8==0) printf("%d ",i);
}
printf("\n");
}
执行后的输出结果是
A:5
B:24
C:32
D:40
答案:C
第18题 (1.0分) 题号:7256 难度:中 第5章
以下叙述中正确的是
A:只能在循环体内和switch语句体内使用break语句
B:当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行
C:continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环
D:在while语句和do-while语句中无法使用continue语句
答案:A
第19题 (1.0分) 题号:5934 难度:易 第6章
设有如下程序段
int a[1] = {0};
int b[] = {9};
char c[3] = {"A", "B"};
char d = "12";
以下叙述正确的是
A:a, b的定义合法,c, d的定义不合法
B:a,b,c,d的定义都是合法的
C:a,b,c的定义是合法的,d的定义不合法
D:只有a的定义是合法的
答案:A
第20题 (1.0分) 题号:7269 难度:中 第6章
以下叙述中正确的是
A:任何情况下都不能用函数名作为实参
B:函数既可以直接调用自己,也可以间接调用自己
C:函数的递归调用不需要额外开销,所以效率很高
D:简单递归不需要明确的结束递归的条件
答案:B
第21题 (1.0分) 题号:6115 难度:中 第6章
有以下程序
#include
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:7
B:0
C:3
D:8
答案:C
第22题 (1.0分) 题号:6577 难度:中 第6章
有以下程序
#include
#include
main()
{ int i;
char a[]="How are you!";
for (i=0; a[i]; i++)
if (a[i] == ' ')
{ strcpy(a, &a[i+1]);
i=0;
}
printf("%s\n",a);
}
程序的运行结果是
A:you!
B:Howareyou!
C:areyou!
D:are you!
答案:A
第23题 (1.0分) 题号:6993 难度:易 第6章
若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是
A:#define n 5
int a [2*n];
B:int n=10,a[n];
C:int a[5+5];
D:#define N 10
int a[N];
答案:B
第24题 (1.0分) 题号:7264 难度:中 第6章
以下叙述中正确的是
A:语句 int a[4][3] = {{1,2}, {4,5}}; 是错误的初始化形式
B:语句 int a[4][3] = {1,2,4,5}; 是错误的初始化形式
C:语句 int a[][3] = {1,2,4,5}; 是错误的初始化形式
D:在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵
答案:D
第25题 (1.0分) 题号:7240 难度:中 第7章
下面选项中关于编译预处理的叙述正确的是
A:预处理命令行必须使用分号结尾
B:凡是以#号开头的行,都被称为编译预处理命令行
C:预处理命令行不能出现在程序的最后一行
D:预处理命令行的作用域是到最近的函数结束处
答案:B
第26题 (1.0分) 题号:6118 难度:难 第7章
有以下程序
#include
void fun( int n )
{ static int k=0;
if(n<0) { printf("-"); n=-n; }
k+=n%10;
printf("%d,",k);
if(n/10)
fun(n/10);
}
main( )
{ int x=-12;
fun(x);
printf("\n");
}
程序运行后的输出结果是
A:-2,3
B:-1,-2,
C:-2,-3,
D:-2,1
答案:A
第27题 (1.0分) 题号:6752 难度:中 第7章
有以下程序
#include
main()
{ int findmax(int,int,int),m;
┋
m=findmax(a,b,c);
┋
}
int findmax(int x,int y,int z)
{ … }
则以下叙述正确的是
A:在main函数中声明了findmax函数
B:在main函数中定义了findmax函数
C:在main函数中两次调用了findmax函数
D:在main函数内、外重复定义了findmax函数
答案:A
第28题 (1.0分) 题号:6563 难度:中 第7章
以下说法正确的是().
A:函数可以返回另一个函数的整个函数体
B:函数返回值只能是基本数据类型的数值或指针
C:函数返回值可以是一个指向函数的指针
D:函数返回值可以是一个数组,同时返回多个值
答案:C
第29题 (1.0分) 题号:5964 难度:中 第7章
有以下程序
#include
void fun(int a[ ], int n)
{
int i;
for (i=0; i { if (i % 3 == 0) a[i] -= n; else a[i] += n; } } main( ) { int c[5] = {6,7,8,9,10},i; fun(c, 5); for (i=0;i<5; i++) printf("%d,", c[i]); printf("\n"); } 程序运行后的输出结果是 A:1,12,13,4,15, B:10,9,8,7,6, C:1,7,13,9,15, D:10,12,8,4,6, 答案:A 第30题 (1.0分) 题号:6057 难度:较易 第7章 有以下程序 #include int new_div(double a, double b) { return a / b + 0.5; } main( ) { printf("%d", new_div(7.8, 3.1)); } 程序运行后的输出结果是 A:1 B:2 C:3 D:0 答案:C 第31题 (1.0分) 题号:6936 难度:中 第8章 设有定义 double a[10] ,*s=a; 以下能够代表数组元素a[3]的是 A:(*s)[3] B:*(s+3) C:*s[3] D:*s+3 答案:B 第32题 (1.0分) 题号:7175 难度:中 第8章 有以下程序 #include main() { int y=1,x,a[]={2,4,6,8,10},*p; p=&a[1]; for( x=0; x<3; x++ ) y=y+*( p+x ); printf( "%d\n", y ); } 程序运行后的输出结果是 A:17 B:19 C:18 D:20 答案:B 第33题 (1.0分) 题号:6187 难度:难 第8章 有以下程序 #include #include char *p[10]; int n=0; int fun(char *q) { int len=strlen(q); n=0;p[n]=q; if(len>1) p[++n]=q+1; if(len>3) p[++n]=q+3; if(len>5) p[++n]=q+5; return n; } void main() { char s[100]; gets(s); n=fun(s); for(--n;n>=0;n--) printf("%s\n",p[n]); } 程序运行时输入:HELLO WORLD!<回车>,则输出结果是(). A:LO WORLD! ELLO WORLD! HELLO WORLD! B:WORLD! LLO WORLD! HELLO WORLD! C:HELLO WORLD! ELLO WORLD! LO WORLD! D:ELLO WORLD! LO WORLD! WORLD! 答案:A 第34题 (1.0分) 题号:6376 难度:难 第8章 有以下程序 #include void fun(char *a,char *b) { char *s=a; while(*s) s++; s--; while(s>=a) { *b=*s; s--; b++; } *b='\0'; } main() { char s1[]="abc",s2[6]; fun(s1,s2); puts(s2); } 程序运行后的输出结果是 A:cbaabc B:abc C:cba D:abccba 答案:C 第35题 (1.0分) 题号:6113 难度:中 第8章 对于以下函数声明 void fun(int array[4], int *ptr); 以下叙述中正确的是 A:array, ptr 都是指针变量 B:调用fun函数时,实参的值将逐一复制给array C:调用fun函数时,array按值传送,ptr按地址传送 D:array 是数组,ptr 是指针,它们的性质不同 答案:A 第36题 (1.0分) 题号:7029 难度:较难 第8章 有以下程序 #include void fun( char *a, char *b ) { while( *a=='*' ) a++; while( *b=*a ){ b++;a++; } } main() { char *s="*****a*b****" , t[80]; fun(s,t); puts(t); } 程序的运行结果是 A:ab B:a*b C:*****a*b D:a*b**** 答案:D 第37题 (1.0分) 题号:6947 难度:中 第9章 有以下程序 #include #include struct A { int a; char b[10]; double c; }; struct A f(struct A t); main() { struct A a={1001,"ZhangDa",1098.0}; a=f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c); } struct A f(struct A t) { t.a=1002; strcpy(t.b,"ChangRong"); t.c=1202.0; return t; } 程序运行后的输出结果是 A:1002,ZhangDa,1202.0 B:1002,ChangRong,1202.0 C:1001,ChangRong,1098.0 D:1001,ZhangDa,1098.0 答案:B 第38题 (1.0分) 题号:6945 难度:中 第9章 有以下结构体说明、变量定义和赋值语句 struct STD { char name[10]; int age; char sex; } s[5],*ps; ps=&s[0]; 则以下scanf函数调用语句有错误的是 A:scanf("%s",s[0].name); B:scanf("%d",&s[0].age); C:scanf("%c",&(ps->sex)); D:scanf("%d",ps->age); 答案:D 第39题 (1.0分) 题号:6890 难度:中 第9章 有以下程序: #include #include typedef struct { char name[9]; char sex; int score[2]; } STU; STU f (STU a) { STU b={"Zhao", 'm', 85, 90}; int i; strcpy( a.name, b.name ); a.sex = b.sex; for ( i=0; i<2; i++ ) a.score[i] = b.score[i]; return a; } main() { STU c= { "Qian", 'f', 95, 92 }, d; d = f(c); printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]); printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]); } 程序运行后的输出结果是(). A:Zhao,m,85,90, Qian,f,95,92 B:Zhao,m,85,90, Zhao,m,85,90 C:Qian,f,95,92, Qian,f,95,92 D:Qian,f,95,92, Zhao,m,85,90 答案:A 第40题 (1.0分) 题号:6950 难度:中 第10章 有以下程序 #include main() { FILE *fp; int k, n, a[6]={1,2,3,4,5,6}; fp = fopen("d2.dat", "w"); fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]); fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]); fclose(fp); fp = fopen("d2.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n); fclose(fp); } 程序运行后的输出结果是 A:1 2 B:1 4 C:123 4 D:123 456 答案:D 二、程序填空 共1题 (共计18分) 第1题 (18.0分) 题号:316 难度:中 第1章 /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:函数fun的功能是:计算如“图片1”直到“图片2” 。 若x=2.5,函数值为1.917915。 -------------------------------------------------------*/ #include #include double fun(double x) { double f, t; int n; f = 1.0 + x; /***********SPACE***********/ t=【?】; n = 1; do { n++; /***********SPACE***********/ t*=(-1.0)*x/【?】; f += t; } /***********SPACE***********/ while(【?】 >=1e-6); return f; } main() { double x, y; x=2.5; y = fun(x); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f\n", x, y); } 答案: =======(答案1)======= x =======(答案2)======= n =======(答案3)======= fabs(t) 三、程序改错 共1题 (共计18分) 第1题 (18.0分) 题号:247 难度:难 第2章 /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:判断整数x是否是同构数。若是同购数,函数返回1;否则返回0。 说明:所谓“同构数”是指这个数出现在它的平方数的右边。 例如:输入整数25,25的平方数是625,25是625中右侧的数, 所以25是同构数。 注意:x的值由主函数从键盘读入,要求不大于1000。 ------------------------------------------------------*/ #include #include int fun(int x) { /**********FOUND**********/ int k /**********FOUND**********/ k=x; /**********FOUND**********/ if((k%10==x)&&(k%100==x)&&(k%1000==x)) return 1; else return 0; } main() { int x,y; printf("\nPlease enter a integer numbers:"); scanf("%d",&x); if(x>100){printf("data error!\n");exit(0);} y=fun(x); if(y) printf("%d YES\n",x); else printf("%d NO\n",x); } 答案: =======(答案1)======= int k; =======(答案2)======= k=x*x; =======(答案3)======= if((k%10==x)||(k%100==x)||(k%1000==x)) 四、程序设计 共1题 (共计24分) 第1题 (24.0分) 题号:579 难度:中 第1章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:编程从键盘输入一个M×N的二维数组,求该数组中最外圈元素的平均值, 并输出结果。 -------------------------------------------------------*/ #include #define M 3 #define N 4 void main() { int a[M][N]; int i,j,k=0; /*k用来保存外围元素的个数*/ double sum=0.0; printf("请输入数组:\n"); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); /**********Program**********/ /********** End **********/ printf("外围元素的平均值为:%lf\n", sum/k); } 答案: for(i=0;i for(j=0;j if(i==0||i==M-1||j==0||j==N-1) //四周边元素 { sum=sum+a[i][j]; k++; }