一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6923 难度:较易 第1章
以下叙述中正确的是
A:C语言规定必须用main作为主函数名,程序将从此开始执行
B:可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C:C语言程序将从源程序中第一个函数开始执行
D:main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等
答案:A
第2题 (1.0分) 题号:6949 难度:较易 第2章
有以下程序
#include <stdio.h>
main()
{
int a=1, b=2, c=3, x;
x = (a^b)&c;
printf("%d\n",x);
}
程序的运行结果是
A:3
B:1
C:2
D:0
答案:A
第3题 (1.0分) 题号:6555 难度:易 第2章
设有定义:int k=3,i=2; 以下选项中,变量k的值与其他三个不同的是().
A:k-=i;
B:k=--i;
C:k=i-1;
D:k=i--;
答案:D
第4题 (1.0分) 题号:6169 难度:中 第2章
以下是正确C语言实型常量的是().
A:.8e+8.
B:e+8
C:+8e.8
D:+8.8e+8
答案:D
第5题 (1.0分) 题号:6957 难度:较易 第2章
有以下定义语句,编译时会出现编译错误的是
A:char a='\x2d';
B:char a='\n';
C:char a='a';
D:char a="aa";
答案:D
第6题 (1.0分) 题号:6232 难度:中 第3章
若有定义:double a; char d; float b;
若想把1.2输入给变量a,字符'k'输入给变量d,3.4输入给变量b,程序运行时键盘输入:
1.2 k 3.4 <回车>
则以下正确的读入语句是().
A:scanf("%lf%c%f", &a, &d, &b);
B:scanf("%lf %c %f", &a, &d, &b);
C:scanf("%f %c %f", &a, &d, &b);
D:scanf("%f%c%f", &a, &d, &b);
答案:B
第7题 (1.0分) 题号:6733 难度:中 第3章
以下能正确表述算式 sin(2πr+30°)的C语言表达式是
A:sin(2*3.14*r+3.14*30/180.0)
B:sin(2*π*r+ 30 )
C:sin(2*3.14*r+ 30 )
D:sin(2*3.14*r+30*3.14/360.0)
答案:A
第8题 (1.0分) 题号:7049 难度:较易 第3章
有以下程序段
int i, n;
for( i=0; i<8; i++ )
{ n = rand( ) % 5;
switch (n)
{ case 1:
case 3: printf("%d \n", n); break;
case 2:
case 4: printf("%d \n", n); continue;
case 0: exit(0);
}
printf("%d \n",n);
}
以下关于程序段执行情况的叙述,正确的是
A:for循环语句固定执行8次
B:当产生的随机数n为4时结束循环操作
C:当产生的随机数n为1和2时不做任何操作
D:当产生的随机数n为0时结束程序运行
答案:D
第9题 (1.0分) 题号:6348 难度:易 第4章
对于if(表达式)语句,以下叙述正确的是
A:"表达式"不能是变量
B:"表达式"的值只能是整数值
C:"表达式"可以是常量
D:"表达式"中不可以出现字符型变量的比较
答案:C
第10题 (1.0分) 题号:6743 难度:中 第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、b、c中的最小值
D:输出a的原始值
答案:D
第11题 (1.0分) 题号:6388 难度:中 第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;
case 3: a++; b++;
}
printf("a=%d, b=%d\n", a, b);
}
程序的运行结果是().
A:a=2,b=2
B:a=2,b=1
C:a=1,b=1
D:a=1,b=0
答案:B
第12题 (1.0分) 题号:6461 难度:易 第4章
对于 if(表达式) 语句,以下叙述正确的是( ).
A:"表达式"可以是常量
B:"表达式"的值只能是整数值
C:"表达式"不能是变量
D:"表达式"中不可以出现字符
答案:A
第13题 (1.0分) 题号:7289 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{ int a, b;
for( a=1,b=1; a<=100; a++ )
{ if(b>=20) break;
if(b % 3==1) { b=b+3; continue; }
b=b-5;
}
printf("%d\n",a);
}
程序的输出结果是
A:10
B:9
C:8
D:7
答案:C
第14题 (1.0分) 题号:6931 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{ int k=5;
while(--k) printf("%d",k -= 3);
printf("\n");
}
执行后的输出结果是
A:1
B:2
C:4
D:死循环
答案:A
第15题 (1.0分) 题号:6846 难度:较难 第5章
有以下程序:
#include <stdio.h>
main()
{int i,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>0;j-- )
{ if(i*j>3) break;
m*=i*j;
}
}
printf("m=%d\n",m);
}
程序运行后的输出结果是().
A:m=4
B:m=2
C:m=6
D:m=5
答案:C
第16题 (1.0分) 题号:6737 难度:中 第5章
以下程序段中,循环次数不超过10的是
A:int i=10; do{ i=i+1;} while(i<0);
B:int i=5; do{ i+=1;} while(i>0);
C:int i=1; do{ i+=2;} while(i!=10);
D:int i=6; do{ i-=2;} while(i!=1);
答案:A
第17题 (1.0分) 题号:7224 难度:中 第5章
以下叙述中正确的是
A:continue语句使得整个循环终止
B:break语句不能用于提前结束for语句的本层循环
C:使用break语句可以使流程跳出switch语句体
D:在for语句中,continue与break的效果是一样的,可以互换
答案:C
第18题 (1.0分) 题号:7109 难度:中 第5章
若有以下程序
#include <stdio.h>
main()
{ int a=6, b=0, c=0;
for ( ;a; ) { b += a; a -= ++c; }
printf("%d,%d,%d\n", a,b,c);
}
则程序的输出结果是
A:1,14,3
B:0,14,3
C:0,18,3
D:0,14,6
答案:B
第19题 (1.0分) 题号:6250 难度:中 第6章
有以下程序
#include <stdio.h>
#include <string.h>
main()
{ char s[5][8]={"red","yellow","green","blue","white"};
int i,j; char t[8];
for(i=0; i<4; i++)
for(j=i+1;j<5; j++)
if(strlen(s[i])<strlen(s[j]))
{ strcpy(t,s[i]); strcpy(s[i],s[j]); strcpy(s[j],t); }
printf("%s\n",s[0]);
}
程序的运行结果是
A:red
B:white
C:yellow
D:green
答案:C
第20题 (1.0分) 题号:6879 难度:较易 第6章
以下定义数组的语句中错误的是().
A:int num[][3]={ {1,2},3,4,5,6 };
B:int num[2][4]={ {1,2},{3,4},{5,6} };
C:int num[]={ 1,2,3,4,5,6 };
D:int num[][4]={1,2,3,4,5,6};
答案:B
第21题 (1.0分) 题号:6086 难度:较难 第6章
有以下程序
#include <stdio.h>
main( )
{ int a[4],p,x,i;
for( i=3;i>0;i-- )
a[i-1]=i*2-1;
scanf("%d",&x);
i=0;
while( a[i]<x )
i++;
p=i;
for( i=3;i>p;i-- )
a[i]=a[i-1];
a[p]=x;
for( i=0;i<4;i++ )
printf("%3d",a[i]);
printf("\n");
}
执行时输入:2<回车>,则输出结果是
A:1 2 3 4
B:5 4 3 1
C:1 2 3 5
D:3 2 1 4
答案:C
第22题 (1.0分) 题号:6243 难度:中 第6章
下面说法正确的是().
A:方括号数组说明符中不能使用带有运算符的表达式
B:char c1 = 'A', c2, *c3; 是合法的变量定义语句
C:数组下标的下限在定义数组时设置,可以设定为负数
D:对于数组元素是浮点值的数组float array[3],array[1.5]是合法的
答案:B
第23题 (1.0分) 题号:6089 难度:较易 第6章
语句printf("%d\n", strlen("\t\"\\\n\'\065\08AB"));的输出结果是
A:6
B:7
C:8
D:9
答案:A
第24题 (1.0分) 题号:6444 难度:较难 第6章
有以下程序
#include <stdio.h>
main()
{ char s[][6]={"abcd","abc","ab"}; int i;
for( i=0;i<3;i++ ) puts(s[i]);
}
执行后的输出结果是( ).
A:abcd
abc
ab
B:a
a
a
C:abcd
bcd
cd
D:a
b
c
答案:A
第25题 (1.0分) 题号:6539 难度:易 第7章
下面关于编译预处理的命令行中,正确的是().
A:#define int INT
B:##define eps 0.001
C:##DEFINE TRUE
D:#define E 2.88
答案:D
第26题 (1.0分) 题号:6992 难度:较难 第7章
设有以下函数:
void fun(int n,char *s)
{ …… }
则下面对函数指针的定义和赋值均正确的是
A:void (*pf)(int,char); pf=&fun;
B:void *pf(); pf=fun;
C:void *pf(); *pf=fun;
D:void (*pf)(int, char*); pf=fun;
答案:D
第27题 (1.0分) 题号:6188 难度:较难 第7章
有下列程序
#include <stdio.h>
int a = 1;
int func(int a)
{ int b = 1;
static int c = 1;
a++; b++; ++c;
return a + b + c;
}
main( )
{ int k, a = 4;
for (k=0; k<3; k++)
printf("%d,", func(a));
}
程序执行后的输出结果是().
A:9,9,9,
B:6,8,10,
C:6,7,8,
D:9,10,11,
答案:D
第28题 (1.0分) 题号:6220 难度:较难 第7章
有以下程序
#include <stdio.h>
int a[5]={ 7,2,9,10,3 };
void st(int *,int);
void main()
{
int i;
st(a,5);
for(i=0;i<5;i++)
printf("%4d",a[i]);
printf("\n");
}
void st(int *b,int n)
{
int i,m,t;
if(n==1) return;
m=0;
for(i=1;i<n;i++)
if(b[i]<b[m]) m=i;
t=b[0];b[0]=b[m];b[m]=t;
b++;n--;
st(b,n);
}
程序的运行结果是().
A:2 3 7 9 10
B:10 9 7 3 2
C:2 10 3 9 7
D:2 7 3 9 10
答案:A
第29题 (1.0分) 题号:6441 难度:易 第7章
若有函数定义如下
int fun(int x,int y)
{ return x-y; }
则以下涉及上述函数的说明语句错误的( ).
A:int fun( int x,y );
B:int fun( int ,int );
C:int fun( int a,int b );
D:int i,fun(int x,int y);
答案:A
第30题 (1.0分) 题号:6726 难度:中 第7章
有以下程序
#include <stdio.h>
int fun(int n)
{ static int t=1; int i=1;
for( ; i<=n; i++) t*=i;
return t;
}
main()
{ int t=1,i;
for(i=2;i<4; i++)
t+=fun(i);
printf("%d\n",t);
}
程序的运行结果是
A:8
B:11
C:15
D:4
答案:C
第31题 (1.0分) 题号:6578 难度:中 第8章
有以下程序(其中的strstr()函数头部格式为:char *strstr(char *p1, char *p2) 确定
p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)
#include <stdio.h>
#include <string.h>
char *a="you";
char *b="Welcome you to Beijing!";
main()
{ char *p;
p = strstr(b, a) + strlen(a) + 1;
printf("%s\n", p);
}
程序的运行结果是
A:to Beijing!
B:you to Beijing!
C:Welcome you to Beijing!
D:Beijing!
答案:A
第32题 (1.0分) 题号:5947 难度:较难 第8章
有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun(int **s, int x[2][3])
{ **s=*(x[1]+1); }
main()
{ int a[2][3] = {1,2,3,4,5,6}, *p;
p = (int*)malloc(sizeof(int));
fun(&p,a);
printf("%d\n",*p);
}
程序的运行结果是
A:6
B:2
C:5
D:3
答案:C
第33题 (1.0分) 题号:6357 难度:易 第8章
以下叙述正确的是
A:char c1, *c2, *c3[10]; 是合法的变量定义语句
B:数组说明符的一对方括号中不能使用表达式
C:数组元素下标可以是非整数
D:若有定义 char array[4]; 则语句 printf("%c", array["3"]);是合法的
答案:A
第34题 (1.0分) 题号:6912 难度:较易 第8章
设有定义:
char *c;
以下选项中能够使c正确指向一个字符串的是
A:char str[ ]="string"; c=str;
B:scanf("%s",c);
C:c=getchar( );
D:*c="string";
答案:A
第35题 (1.0分) 题号:6019 难度:较易 第8章
以下关于指针的叙述,错误的是
A:两个基类型相同的指针变量不能指向同一个对象
B:可以通过对指针变量加上或减去一个整数来移动指针
C:在关系表达式中可以对两个指针变量进行比较
D:一个指针变量可以通过不同的方式获得一个确定的地址值
答案:A
第36题 (1.0分) 题号:6567 难度:中 第8章
对于函数声明
void fun(float array[], int *ptr);
以下叙述中正确的是().
A:调用函数时,array按值传送地址,ptr是按地址传送数值
B:函数参数 array 是数组名,不是指针变量,ptr 是指针变量
C:调用函数时,调用处的实参数组的所有值都会自动复制到array数组中
D:函数参数 array, ptr 都是指针变量
答案:D
第37题 (1.0分) 题号:6346 难度:中 第9章
有下列程序
#include <stdio.h>
#include <string.h>
typedef struct stu {
char name[9];
char gender;
int score;
} STU;
void f(STU *a)
{ STU c={"Sun", 'f', 90},*d=&c;
a = d;
strcpy(a->name,c.name);
a->gender = c.gender;
a->score = c.score;
printf("%s,%c,%d,", a->name, a->gender, a->score);
}
main( )
{ STU a={"Zhao", 'm', 85};
f(&a);
printf("%s,%c,%d", a.name, a.gender, a.score);
}
程序执行后的输出结果是().
A:Zhao,m,85,Sun,f,90
B:Sun,f,90,Sun,f,90
C:Sun,f,90,Zhao,m,85
D:Zhao,m,85,Zhao,m,85
答案:C
第38题 (1.0分) 题号:6093 难度:较易 第9章
设有定义:
struct complex
{ int real,unreal;} data1={1,8},data2;
则以下赋值语句中错误的是
A:data2=(2,6);
B:data2=data1;
C:data2.real=data1.real;
D:data2.real=data1.unreal;
答案:A
第39题 (1.0分) 题号:7033 难度:较易 第9章
以下结构体类型说明和变量定义中正确的是
A:struct REC ;
{ int n; char c; };
REC t1,t2;
B:typedef struct
{ int n; char c; } REC;
REC t1,t2;
C:typedef struct REC;
{ int n=0; char c='A'; } t1,t2;
D:struct
{ int n; char c; } REC;
REC t1,t2;
答案:B
第40题 (1.0分) 题号:7272 难度:中 第10章
以下叙述中正确的是
A:函数的返回值不能是结构体类型
B:在调用函数时,可以将结构体变量作为实参传给函数
C:函数的返回值不能是结构体指针类型
D:结构体数组不能作为参数传给函数
答案:B
二、程序填空 共1题 (共计18分)
第1题 (18.0分) 题号:619 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能: 打印以下图案:
*********
*******
*****
***
*
-------------------------------------------------------*/
#include<stdio.h>
void main()
{
int k=0 , j=0 ,i=0;
/***********SPACE***********/
for( i=0 ; i<5;i【?】 )
{
printf("\n");
/***********SPACE***********/
for( j=1 ; j【?】2*i ; j++ )
/***********SPACE***********/
【?】("%c",' ');
for( k=0 ; k < 9-2*i ; k++ )
/***********SPACE***********/
printf("%【?】",'*');
}
printf("\n");
}
答案:
=======(答案1)=======
++
=========或=========
=i+1
=========或=========
=1+i
=========或=========
+=1
=======(答案2)=======
<=
=======(答案3)=======
printf
=======(答案4)=======
c
三、程序改错 共1题 (共计18分)
第1题 (18.0分) 题号:393 难度:难 第20章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:void add(char a[],char b[],char c[])函数将由'0','1'
组成的字符串a,b按二进制数加法规则相加,和仍以'0','1'
组成的字符串形式保存到字符串c中。
例如:字符串a为"1100",字符串b为"111",调用add函数后字符串c
为"10011"。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i,len;
char t;
/*******************FOUND*******************/
len=strlen(s)-1;
for(i=0;i<len/2;i++)
{
t=s[i];
s[i]=s[len-i-1];
s[len-i-1]=t;
}
}
void add(char a[],char b[],char c[])
{
int i,j,k,t,flag;
i=strlen(a)-1;
j=strlen(b)-1;
k=flag=0;
while(i>=0||j>=0)
{
if(i<0)
t=b[j]-48+flag;
else if(j<0)
t=a[i]-48+flag;
else
t=a[i]-48+b[j]-48+flag;
/*******************FOUND*******************/
c[k]=t/2;
k++;
if(t>1)
flag=1;
i--;
j--;
}
/*******************FOUND*******************/
if(flag==0)
c[k++]='1';
c[k]='\0';
reverse(c);
}
int main()
{
char a[50],b[50],c[51];
printf("Input a(binary):\n");
scanf("%s",a);
printf("Input b(binary):\n");
scanf("%s",b);
add(a,b,c);
printf("After adding a+b=%s\n",c);
return 0;
}
答案:
=======(答案1)=======
len=strlen(s);
=======(答案2)=======
c[k]=t%2+48;
=========或=========
c[k]=48+t%2;
=========或=========
c[k]=t%2+'0';
=========或=========
c[k]='0'+t%2;
=======(答案3)=======
if(flag)
=========或=========
if(flag==1)
=========或=========
if(flag!=0)
=========或=========
if(1==flag)
=========或=========
if(0!=flag)
四、程序设计 共1题 (共计24分)
第1题 (24.0分) 题号:786 难度:中 第1章
/*----------------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------------
题目:请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值
返回调用函数。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
--------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define M 4
int fun (int a[][M])
{
/**********Program**********/
/********** End **********/
}
main( )
{
int arr[2][M]={5,8,3,45,76,-4,12,43} ;
printf("max =%d\n", fun(arr)) ;
system("pause");
}
答案: int i,j,max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(max<a[i][j])
max=a[i][j];
return max;