一、单选 共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++;
}