一、单选 ??共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 <stdio.h>
?????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 ??<stdio.h>
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 <stdio.h>
????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列开始,<CR>代表回车,注意:回车也是一个字符)
????12<CR>
????34<CR>
则输出结果是
A:12
???????????????3
B:12
C:1234
D:12
???????????????34
答案:A
第7题 (1.0分) ???????题号:7044 ???????难度:较易 ???????第3章
有以下程序
????#include <stdio.h>
????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 <stdio.h>
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 <stdio.h>
????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 <stdio.h>
????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 <stdio.h>
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 <stdio.h>
????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 <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:7
B:0
C:3
D:8
答案:C
第22题 (1.0分) ???????题号:6577 ???????难度:中 ???????第6章
有以下程序
#include <stdio.h>
#include <string.h>
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 ??<stdio.h>
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 <stdio.h>
????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 ??<stdio.h>
void fun(int ?a[ ], int ?n)
{ ?
???int i;
???for (i=0; i<n; 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 ??<stdio.h>
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 <stdio.h>
?????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<stdio.h>
?????#include<string.h>
?????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 ??<stdio.h>
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 <stdio.h>
?????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 <stdio.h>
#include <string.h>
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 ??<stdio.h>
#include ??<string.h>
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 <stdio.h>
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 ??<stdio.h>
#include ??<math.h>
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 <stdio.h>
#include <stdlib.h>
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 <stdio.h>
#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<M;i++)
???????????for(j=0;j<N;j++)
?????????????scanf("%d",&a[i][j]);
????????
????????/**********Program**********/
?????
???????
???????/********** ?End ?**********/
????????printf("外围元素的平均值为:%lf\n", sum/k);
}
答案: ?for(i=0;i<M;i++)
for(j=0;j<N;j++)
???if(i==0||i==M-1||j==0||j==N-1) ?//四周边元素
????{
sum=sum+a[i][j];
k++;
}