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