一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6100 难度:中 第1章
下列叙述中正确的是
A:程序可以作为算法的一种表达方式
B:算法的有穷性是指算法的规模不能太大
C:算法的复杂度用于衡量算法的控制结构
D:算法的效率与数据的存储结构无关
答案:A
第2题 (1.0分) 题号:6372 难度:中 第2章
以下选项中与 ( !a== 0 )的逻辑值不等价的表达式是
A:( a== !0 )
B:a
C:(a>0 || a<0)
D:(a!= 0 )
答案:A
第3题 (1.0分) 题号:6842 难度:中 第2章
若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是().
A:(x-y<0||x-y>0)
B:(x-y<0)
C:(x-y>0)
D:(x-y==0)
答案:A
第4题 (1.0分) 题号:6134 难度:较易 第2章
若变量已正确定义并赋初值,以下合法的赋值语句是
A:k=(m==n);
B:k=-m-n
C:k=int(m+n);
D:k=m*n=1;
答案:A
第5题 (1.0分) 题号:6126 难度:较易 第2章
有以下程序
#include <stdio.h>
main( )
{
int a = 2, b;
b = (a >>= 1) + 4;
printf("%d,%d", a, b);
}
程序运行后的输出结果是
A:1,5
B:2,4
C:2,6
D:2,5
答案:A
第6题 (1.0分) 题号:6742 难度:中 第3章
有以下程序段
char c1,c2,c3;
scanf("%c%c%c",&c1,&c2,&c3);
若要给c1、c2、c3分别输入字母A、B、C,则以下对输入形式的描述正确的是
A:字母A、B、C之间可以用空格分隔
B:字母A、B、C之间不能有分隔符
C:字母A、B、C之间可以用回车符分隔
D:字母A、B、C之间可以用Tab键分隔
答案:B
第7题 (1.0分) 题号:6499 难度:中 第3章
若有定义:char ch; int a; double d;, 当输入为12345 678910.36时,以下选项中能给各个变量正确输入数据的是().
A:scanf("%d%c%lf",&a,&ch,&d);
B:scanf("%5d%2c%7.2lf",&a,&ch,&d);
C:scanf("%d%c%lf",a,ch,d);
D:scanf("5d%2c%7.2lf%",&a,&ch,&d);
答案:A
第8题 (1.0分) 题号:7195 难度:较易 第3章
与数学表达式x≥y≥z对应的C语言表达式是
A:(x>=y)||(y>=x)
B:(x>=y>=z)
C:(x>=y)!(y>=z)
D:(x>=y)&&(y>=z)
答案:D
第9题 (1.0分) 题号:6770 难度:中 第4章
有如下程序
#include <stdio.h>
main( )
{
int a = 0, b = 1;
if (a++ && b++)
printf("TRUE");
else
printf("FALSE");
printf("_OUT:a=%d,b=%d\n", a, b);
}
程序运行后的输出结果是
A:FALSE_OUT:a=1,b=1
B:FALSE_OUT:a=0,b=2
C:TRUE_OUT:a=1,b=2
D:TRUE_OUT:a=0,b=1
答案:A
第10题 (1.0分) 题号:6106 难度:较难 第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
第11题 (1.0分) 题号:6843 难度:中 第4章
有以下程序:
#include <stdio.h>
main()
{ int x=1, y=0;
if (!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d\n", y);
}
程序运行后的输出结果是().
A:3
B:2
C:1
D:0
答案:D
第12题 (1.0分) 题号:6266 难度:中 第4章
设有定义:int m=1,n=2;
则以下if语句中,编译时会产生错误信息的是().
A:if(m>n) m--
else n--;
B:if(m=n){ m++; n++; }
C:if(m<0 && n<0) { }
D:if(m>0) ;
else m++;
答案:A
第13题 (1.0分) 题号:6267 难度:中 第5章
有以下程序
#include <stdio.h>
void main()
{
int i, m = 0, n = 0, k = 0;
for(i = 9; i <= 11; i++)
switch(i / 10)
{ case 0: m++; n++; break;
case 10: n++; break;
default: k++; n++;
}
printf("%d %d %d\n", m, n, k);
}
程序运行后的输出结果是().
A:4 5 1
B:3 5 4
C:1 5 4
D:1 3 2
答案:D
第14题 (1.0分) 题号:7197 难度:较易 第5章
有以下程序
#include <stdio.h>
main()
{ int i, sum;
for( i=1; i<6; i++ ) sum+=i;
printf("%d\n", sum);
}
程序运行后的输出结果是
A:随机值
B:0
C:15
D:16
答案:A
第15题 (1.0分) 题号:6851 难度:较难 第5章
有以下程序:
#include <stdio.h>
main()
{ int a[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0: switch(a[i]%2)
{ case 0:a[i]++;break;
case 1:a[i]--;
} break;
case 1:a[i]=0;
}
for(i=0;i<4;i++) printf("%d ",a[i]); printf("\n");
}
程序运行后的输出结果是().
A:0 3 0 4
B:2 0 5 0
C:3 3 4 4
D:3 0 4 0
答案:D
第16题 (1.0分) 题号:5962 难度:易 第5章
有如下程序段
int k;
for(k=2;k==0;) printf("%d",k--);
则for循环体执行的次数是
A:0次
B:1次
C:2次
D:无限次
答案:A
第17题 (1.0分) 题号:7171 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{ int k, j, s;
for( k=2; k<6; k++,k++ )
{ s=1;
for (j=k; j<6; j++ ) s+=j;
}
printf("%d\n" , s );
}
程序运行后的输出结果是
A:6
B:10
C:24
D:40
答案:B
第18题 (1.0分) 题号:6904 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{
int i,j;
for(i=1; i<4; i++)
{
for(j=i; j<4; j++) printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
程序运行后的输出结果是
A:1*1=1 1*2=2 1*3=3
2*2=4 2*3=6
3*3=9
B:1*1=1 1*2=2 1*3=3
2*1=2 2*2=4
3*1=3
C:1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
D:1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
答案:A
第19题 (1.0分) 题号:7267 难度:中 第6章
设有定义
char str[] = "Hello";
则语句
printf("%d %d", sizeof(str), strlen(str));
的输出结果是
A:5 5
B:6 6
C:6 5
D:5 6
答案:C
第20题 (1.0分) 题号:6054 难度:较易 第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分) 题号:7083 难度:较易 第6章
以下错误的定义语句是
A:int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
B:int x[4][]= {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C:int x[][3]={{0},{1},{1,2,3}};
D:int x[][3]={1,2,3,4};
答案:B
第22题 (1.0分) 题号:7026 难度:较易 第6章
有以下程序
#include <stdio.h>
main()
{
int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0; i<12; i++)
c[s[i]]++;
for(i=1; i<5; i++)
printf("%d ",c[i]);
printf("\n");
}
程序的运行结果是
A:2 3 4 4
B:4 3 3 2
C:1 2 3 4
D:1 1 2 3
答案:B
第23题 (1.0分) 题号:6660 难度:较易 第6章
以下选项中叙述正确的是
A:char c1, c2, *c3, c4[40]; 是合法的变量定义语句
B:数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
C:数组下标的下限可以是负值
D:若有数组定义 float array[4]; 则语句 printf("%f", array[3.12]);是合法的
答案:A
第24题 (1.0分) 题号:6662 难度:中 第6章
设有如下程序段
int a[8] = {0};
int b[] = {0};
char c[2] = {"A", "B"};
char d = "AB";
以下叙述正确的是
A:只有a,b,c的定义是合法的
B:a,b,c,d的定义都是合法的
C:只有a,b的定义是合法的
D:只有c的定义是合法的
答案:C
第25题 (1.0分) 题号:6004 难度:易 第7章
以下叙述错误的是
A:未经赋值的全局变量值不确定
B:未经赋值的auto变量值不确定
C:未经赋值的register变量值不确定
D:未经赋值的静态局部变量值为0
答案:A
第26题 (1.0分) 题号:6334 难度:中 第7章
以下有关函数的叙述错误的是().
A:C语言规定,不能在函数的内部定义函数
B:在C语言的函数体中可以有多个return语句
C:在C语言中函数的实参个数可以有多个,各实参之间用分号隔开
D:C语言程序总是从main()函数开始执行
答案:C
第27题 (1.0分) 题号:6583 难度:中 第7章
有以下程序
#include <stdio.h>
#define S(x) x*x
main()
{ int k=5, j=2;
printf("%d,%d\n", S(k+j+2),S(j+k+2));
}
程序的运行结果是
A:21,18
B:81,81
C:21,21
D:18,18
答案:A
第28题 (1.0分) 题号:5936 难度:易 第7章
有以下程序
#include <stdio.h>
double fun(double a)
{ double x;
x = a - (int)a;
return x;
}
main( )
{ double a = 3.1415;
printf("%f\n", fun(a));
}
程序的运行结果是
A:3.000000
B:3.141500
C:0.141500
D:0.000000
答案:C
第29题 (1.0分) 题号:6469 难度:较难 第7章
以下判断形参变量a是否为素数的函数正确的是( ).
A:int isprime(int a)
{ int i;
for(i=2; i<=a/2; i++)
if(a%i==0) return 0;
return 1;
}
B:int isprime(int a)
{ int i;
for(i=2; i<=a/2; i++)
if(a%i==1) return 1;
return 0;
}
C:int isprime(int a)
{ int i;
for(i=2; i<=a/2; i++)
if(a%i==0) return 0;
else return 1;
}
D:int isprime(int a)
{ int i;
for(i=2; i<=a/2; i++)
if(a%i==1) return 1;
else return 0;
}
答案:A
第30题 (1.0分) 题号:5912 难度:中 第7章
有以下程序
#include <stdio.h>
#define S(x) x/x*x
main( )
{ int k=6, j=3;
printf("%d,%d\n", S(k+j), S(j+k));
}
程序运行后的输出结果是
A:27,27
B:9,9
C:27,29
D:29,29
答案:C
第31题 (1.0分) 题号:6602 难度:中 第8章
若有定义语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下选项中错误引用a数组元素的是(其中 0≤i<10)
A:*(*(a+i))
B:a[ p-a ]
C:p[i]
D:*( &a[i] )
答案:A
第32题 (1.0分) 题号:7146 难度:中 第8章
若有以下程序
#include <stdio.h>
int *f(int *s, int *t)
{ int k;
if (*s < *t) { k = *s; *s=*t; *t=k; }
return s;
}
main()
{ int i=3, j=5, *p=&i, *q=&j, *r;
r=f(p,q);
printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, *r);
}
则程序的输出结果是
A:5,3,3,5,5
B:3,5,5,3,5
C:3,5,3,5,5
D:5,3,5,3,5
答案:D
第33题 (1.0分) 题号:5968 难度:较难 第8章
有以下程序
#include <stdio.h>
main()
{ int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ;
int (*p)[4] = x, k = 1, m, n = 0;
for(m=0; m<2; m++) n += *(*(p+m)+k);
printf("%d\n",n);
}
程序的运行结果是
A:10
B:20
C:14
D:16
答案:C
第34题 (1.0分) 题号:7150 难度:较难 第8章
若有以下程序
#include <stdio.h>
char *a="you", b[ ]="welcome#you#to#China!";
main()
{ int i,j=0; char *p;
for ( i=0; b[i]!='\0'; i++ )
{ if (*a == b[i])
{ p=&b[i];
for (j=0; a[j]!='\0'; j++)
{ if (a[j] != *p) break;
p++;
}
if (a[j]=='\0') break;
}
}
printf("%s\n", p);
}
则程序的输出结果是
A:#to#China!
B:#you#to#China!
C:me#you#to#China!
D:#China!
答案:A
第35题 (1.0分) 题号:7051 难度:较难 第8章
有以下程序
#include <stdio.h>
void fun( int *a,int *b)
{ int *c;
c=a;a=b;b=c;
}
main()
{ int x=3, y=5, *p=&x, *q=&y ;
fun(p,q); printf("%d,%d,",*p,*q);
fun(&x,&y); printf("%d,%d\n",*p,*q);
}
程序运行后的输出结果是
A:3,5,3,5
B:3,5,5,3
C:5,3,3,5
D:5,3,5,3
答案:A
第36题 (1.0分) 题号:6848 难度:较难 第8章
有以下程序:
#include <stdio.h>
int add( int a,int b){ return (a+b); }
main()
{ int k, (*f)(), a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是().
A:k=f(a,b);
B:k=add(a,b);
C:k=(*f)(a,b);
D:k= *f(a,b);
答案:D
第37题 (1.0分) 题号:5913 难度:较难 第9章
若有定义
typedef int *T;
T *a[20];
则以下与上述定义中a类型完全相同的是
A:int **a[20];
B:int (*a)[20];
C:int *(*a)[20];
D:int *a[20];
答案:A
第38题 (1.0分) 题号:7334 难度:较易 第9章
以下叙述中错误的是
A:用typedef可以说明一种新的类型名
B:typedef的作用是用一个新的标识符来代表已存在的类型名
C:可以用typedef说明的新类型名来定义变量
D:typedef说明的新类型名必须使用大写字母,否则会出编译错误
答案:D
第39题 (1.0分) 题号:6517 难度:中 第9章
设有定义
#include <stdio.h >
#include <stdlib.h >
typedef struct{ int x,y; } T;
typedef struct{ int x,y; } *USER;
USER fun( )
{ USER p;
p=(USER)malloc(sizeof(T));S
p- >x=1;
p- >y=2;
return p;
}
函数fun返回值的类型是().
A:T类型的结构体
B:指向结构体类型的指针
C:int类型的元素
D:int类型的指针
答案:B
第40题 (1.0分) 题号:6035 难度:中 第10章
有以下程序
#include <stdio.h>
main( )
{ FILE *fp;
int i, a[6] = {1,2,3,4,5,6}, k;
fp = fopen("data.dat", "w+");
fprintf(fp, "%d\n", a[0]);
for (i=1; i<6; i++)
{ rewind(fp);
fprintf(fp, "%d\n", a[i]);
}
rewind(fp);
fscanf(fp, "%d", &k);
fclose(fp);
printf("%d\n", k);
}
程序运行后的输出结果是
A:6
B:21
C:123456
D:654321
答案:A
二、程序填空 共1题 (共计18分)
第1题 (18.0分) 题号:223 难度:中 第1章
/*------------------------------------------------------------------------------
【程序填空】
--------------------------------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,
接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放
在a[2]中,把a所指数组元素中的次大值放在a[3],以此类推。
例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,
数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。
规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。
-----------------------------------------------------------------------------*/
# include <stdio.h>
#define N 9
void fun(int a[], int n)
{
int i,j, max, min, px, pn, t;
for (i=0; i<n-1; i+=2)
{
/***********SPACE***********/
max = min = 【?】;
px = pn = i;
for (j=i+1; j<n; j++)
{
/***********SPACE***********/
if (max<【?】)
{
max = a[j]; px = j;
}
/***********SPACE***********/
if (min>【?】)
{
min = a[j]; pn = j;
}
}
if (pn != i)
{
t = a[i]; a[i] = min; a[pn] = t;
if (px == i) px =pn;
}
if (px != i+1)
{
t = a[i+1]; a[i+1] = max; a[px] = t;
}
}
}
main()
{
int b[N]={9,1,4,2,3,6,5,8,7}, i;
printf("\nThe original data :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
fun(b, N);
printf("\nThe data after moving :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
}
答案:
=======(答案1)=======
a[i]
=========或=========
*(a+i)
=========或=========
*(i+a)
=======(答案2)=======
a[j]
=========或=========
*(a+j)
=========或=========
*(j+a)
=======(答案3)=======
a[j]
=========或=========
*(a+j)
=========或=========
*(j+a)
三、程序改错 共1题 (共计18分)
第1题 (18.0分) 题号:172 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:用下面的公式求π的近似值,直到最后一项
的绝对值小于指定的数(参数num)为止。如"图片1"。
例如:程序运行后,输入0.0001,则程序输出3.1414。
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
float fun ( float num )
{
int s ;
float n, t, pi ;
t = 1 ; pi = 0 ; n = 1 ; s = 1 ;
/***********FOUND***********/
while(t >= num)
{
pi = pi + t ;
n = n + 2 ;
s = -s ;
/***********FOUND***********/
t = s % n ;
}
pi = pi * 4 ;
return pi ;
}
main( )
{
float n1, n2 ;
printf("Enter a float number: ") ;
scanf("%f", &n1) ;
n2 = fun(n1) ;
printf("%6.4f\n", n2) ;
}
答案:
=======(答案1)=======
while(fabs(t)>=num)
=========或=========
while(num<=fabs(t))
=========或=========
while(fabs(t)>num)
=========或=========
while(num<fabs(t))
=======(答案2)=======
t=s/n;
四、程序设计 共1题 (共计24分)
第1题 (24.0分) 题号:310 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:计算并输出n(包括n)以内
所有素数的平方根之和。
例如:若主函数中从键盘给n输入20后,则输出为sum=23.432264。
注意:n的值要求不大于100。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的
花括号中填入你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
double fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int n;
double sum;
printf("Input N=");
scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
}
答案: int m,k,i;
double s=0.0;
for(m=2;m<=n;m++)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
s+=sqrt(m);
}
return s;