一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6675 难度:易 第1章
以下选项中叙述正确的是
A:C程序中的语句要经过编译才能转换成二进制机器指令
B:算法需要包含所有三种基本结构
C:有些算法不能用三种基本结构来表达
D:简单算法的操作步骤不能超过20步
答案:A
第2题 (1.0分) 题号:7169 难度:中 第2章
表示关系式x≤y≤z的C语言表达式的是
A:(x<=y)&&(y<=z)
B:(x<=y)||(y<=x)
C:(x<=y<=z)
D:x<=y)!(y<=x)
答案:A
第3题 (1.0分) 题号:7193 难度:较易 第2章
若变量已正确定义,以下选项中非法的表达式是
A:a!=4||'b'
B:'a'=1/2*(x=y=20,x*3)
C:'a' % 4
D:'A' + 32
答案:B
第4题 (1.0分) 题号:6330 难度:中 第2章
以下正确的字符常量是().
A:"AB"
B:'\0AB'
C:'AB'
D:'\xAB'
答案:D
第5题 (1.0分) 题号:6384 难度:中 第2章
有以下程序:
#include <stdio.h>
main()
{ int s,t,A=10; double B=6;
s=sizeof(A); t=sizeof(B);
printf("%d,%d\n",s,t);
}
在VC6.0平台上编译运行,程序运行后的输出结果是().
A:10,6
B:4,4
C:2,4
D:4,8
答案:D
第6题 (1.0分) 题号:6769 难度:中 第3章
若有定义:
char s[30] = {0};
运行时输入:
This is a string.<回车>
则以下不能正确读入整个字符串:
This is a string.
到字符数组 s 中的语句组是
A:i = 0;while ((c=getchar())!='\n') s[i++] = c;
B:gets(s);
C:for (i=0; (c=getchar()) != '\n'; i++) s[i] = c;
D:scanf("%s", s);
答案:D
第7题 (1.0分) 题号:7369 难度:较易 第3章
若有定义:int a; float b; double c; ,程序运行时输入:a=1,b=2,c=3 <回车>,能把
值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是
A:scanf("a=%d,b=%f,c=%lf", &a,&b,&c);
B:scanf("%d%f%lf", &a,&b,&c);
C:scanf("a=%d,b=%lf,c=%lf", &a,&b,&c);
D:scanf("a=%d,b=%f,c=%f", &a,&b,&c);
答案:A
第8题 (1.0分) 题号:6900 难度:较易 第3章
以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)
A:printf ("%c \n", 'a'-32);
B:printf ("%d \n", 'A');
C:printf ("%c \n", 65);
D:printf ("%c \n", 'B'-1);
答案:B
第9题 (1.0分) 题号:6205 难度:中 第4章
有下列程序
#include <stdio.h>
main()
{
int a=0,b=0,c=0;
if (++a || ++b && ++c)
printf("%d,%d,%d\n", a, b, c);
}
程序执行后的输出结果是().
A:1,1,1
B:1,0,0
C:0,1,1
D:1,1,0
答案:B
第10题 (1.0分) 题号:6556 难度:易 第4章
以下说法正确的是().
A:复合语句中包含的语句种类没有限制
B:复合语句中不能有分支语句
C:复合语句中不能有循环语句
D:一条复合语句不能超过50行
答案:A
第11题 (1.0分) 题号:6048 难度:中 第4章
有以下程序
#include <stdio.h>
main( )
{ int t;
scanf("%d", &t );
if( t++ < 6 ) printf("%d\n", t);
else printf("%d\n", t--);
printf("\n");
}
执行时输入:6<回车>,则输出结果是
A:6
B:8
C:7
D:5
答案:C
第12题 (1.0分) 题号:6265 难度:中 第4章
以下各选项中的代码段执行后,变量y的值不为1的是().
A:int x=5,y=0; if(5) y=1;
B:int x=5,y=0; if(x) y=1;
C:int x=10,y=0; if(x=y) y=1;
D:int x=5,y=10; if(x=y) y=1;
答案:C
第13题 (1.0分) 题号:6775 难度:中 第5章
有如下程序段
for(i=0;i<10;i++)
if(i>5) break;
则循环结束后i的值为
A:10
B:5
C:9
D:6
答案:D
第14题 (1.0分) 题号:6988 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{ int a = 7;
while ( a-- ) ;
printf ("%d\n", a);
}
程序运行后的输出结果是
A:0
B:-1
C:1
D:7
答案:B
第15题 (1.0分) 题号:6713 难度:中 第5章
有如下程序
#include <stdio.h>
main()
{
char ch = 'M';
while (ch != 'K')
{
ch --;
putchar(ch);
}
printf("\n");
}
程序运行后的输出结果是
A:MN
B:LK
C:OP
D:MM
答案:B
第16题 (1.0分) 题号:6149 难度:较难 第5章
有下列程序
#include <stdio.h>
main( )
{ int a=123456, b;
while(a)
{ b = a%10;
a /= 10;
switch(b)
{ default: printf("%d", b++);
case 1: continue;
case 2: printf("%d", b++); continue;
case 3: printf("%d", b++);
case 4: printf("%d", b++); continue;
}
}
}
程序执行后的输出结果是().
A:654342
B:234456
C:1234456
D:6543421
答案:A
第17题 (1.0分) 题号:6036 难度:中 第5章
以下程序段中,与其他三个功能不同的程序段是
A:s=0;i=1;
for( ; ; ) {s+=i; i++; if(i<=10) break;}
B:s=0,i=1;
for( ; i<=10; ) {s+=i,i++;}
C:s=0;
for(i=1;i<=10;i++){s+=i;}
D:for(s=0,i=1; i<=10; s+=i,i++) ;
答案:A
第18题 (1.0分) 题号:6049 难度:中 第5章
有以下程序
#include <stdio.h>
main( )
{ char ch = 'D';
while (ch > 'A')
{ ch --;
putchar(ch);
if (ch == 'A') break;
putchar(ch+1);
}
}
程序运行后的输出结果是
A:CB
B:BCA
C:CCBB
D:CDBCA
答案:D
第19题 (1.0分) 题号:5971 难度:中 第6章
有以下程序
#include <stdio.h>
#include <string.h>
main( )
{ char a[20]="ab",b[20]="cdef";
int k=0;
strcat(a,b);
while(a[k]!='\0') { b[k]=a[k]; k++;}
puts(b);
}
程序的运行结果是
A:abcdef
B:cbcdef
C:cdef
D:ab
答案:A
第20题 (1.0分) 题号:6056 难度:中 第6章
有以下程序
#include <stdio.h>
main( )
{ int i, k=0, a[10];
for( i=0; i<10; i++ ) a[i]=i;
for( i=0; i<4; i++ ) k += a[i] + i;
printf("%d\n", k);
}
程序运行后的输出结果是
A:10
B:16
C:6
D:12
答案:D
第21题 (1.0分) 题号:7119 难度:中 第6章
若有以下程序
#include <stdio.h>
main()
{ char a[20], b[ ]="The sky is blue."; int i;
for (i=0; i<7; i++) scanf("%c", &b[i]);
gets(a); printf("%s%s\n", a,b);
}
执行时若输入: (其中<Enter>表示回车符)
Fig flower is red. <Enter>
则输出结果是
A:wer is red.Fig flo is blue.
B:wer is red.Fig flo
C:wer is red.The sky is blue.
D:Fig flower is red.The sky is blue.
答案:A
第22题 (1.0分) 题号:6850 难度:中 第6章
下列定义数组的语句中,正确的是().
A:#define N 10
int x[N];
B:int N=10;
int x[N];
C:int x[0..10];
D:int x[ ];
答案:A
第23题 (1.0分) 题号:7120 难度:中 第6章
若有以下程序
#include <stdio.h>
main()
{ char w[20], a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz"};
int p[6][2]={{0,1},{1,5},{0,0},{0,2},{1,4},{4,4}}, i;
for (i=0; i<6; i++) w[i]=a[ p[i][0] ][ p[i][1] ];
puts(w);
}
则程序的输出结果是
A:catis
B:ababj
C:ckbdl
D:black
答案:D
第24题 (1.0分) 题号:6455 难度:较难 第6章
有定义语句:int i; char s1[10], s2[10]= "Program"; 则能正确给s1数组赋字符串的语句是( ).
A:for(i=0; i<=7; i++) s1[i]=s2[i];
B:s1=s2;
C:while(s2) s1++ =s2++;
D:for(i=0; s2[i]; i++ ) s1[i]=s2[i];
答案:A
第25题 (1.0分) 题号:7299 难度:较难 第7章
有以下程序
#include <stdio.h>
int d=1;
void fun( int p )
{
int d=5;
d += p++;
printf("%d ", d );
}
main()
{
int a=3;
fun( a );
d += a++;
printf("%d\n",d);
}
程序的输出结果是
A:8 4
B:9 6
C:9 4
D:8 5
答案:A
第26题 (1.0分) 题号:6886 难度:中 第7章
设有如下函数定义:
#include <stdio.h>
int fun( int k )
{ if (k<1) return 0;
else if (k==1) return 1;
else return fun(k-1)+1;
}
若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是().
A:2
B:3
C:4
D:5
答案:B
第27题 (1.0分) 题号:7330 难度:较难 第7章
有以下程序
#include <stdio.h>
int a=1, b=2;
void fun1( int a, int b )
{ printf( "%d %d " ,a, b ); }
void fun2()
{ a=3; b=4; }
main()
{ fun1(5,6); fun2( );
printf( "%d %d\n",a, b );
}
程序运行后的输出结果是
A:5 6 1 2
B:3 4 5 6
C:1 2 5 6
D:5 6 3 4
答案:D
第28题 (1.0分) 题号:5944 难度:较易 第7章
有以下程序
#include <stdio.h>
#define D(x) 2*x+3
main( )
{
int i = 1, j = 2;
printf("%d\n", D(i+j));
}
程序运行后的输出结果是
A:7
B:6
C:9
D:2
答案:A
第29题 (1.0分) 题号:6064 难度:易 第7章
以下与存储类别有关的四组说明符中,全部属于静态类的一组是
A:extern和static
B:auto和static
C:register和static
D:register和extern
答案:A
第30题 (1.0分) 题号:7259 难度:较易 第7章
以下叙述中正确的是
A:函数名允许用数字开头
B:函数调用时,不必区分函数名称的大小写
C:调用函数时,函数名必须与被调用的函数名完全一致
D:在函数体中只能出现一次return语句
答案:C
第31题 (1.0分) 题号:6509 难度:中 第8章
对于函数声明 void fun(float array[], int *ptr); 以下叙述正确的是().
A:函数fun的参数 array, ptr 都是指针变量
B:函数fun的参数 array 是数组名,ptr 是指针变量,它们有本质区别
C:调用函数fun时,实参数组元素个数可以比形参array数组元素个数多
D:调用函数fun时,传送给形参array的应是数组的所有元素
答案:A
第32题 (1.0分) 题号:7328 难度:较难 第8章
有以下程序
#include <stdio.h>
main()
{
char *s="12134";
int k=0, a=0 ;
while( s[ k +1 ] )
{
k++;
if ( k % 2 ==0 )
{
a = a + ( s[ k ] - '0' +1 ) ;
continue;
}
a = a + ( s[ k ] - '0' );
}
printf (" k=%d a=%d\n", k, a );
}
程序运行后的输出结果是
A:k=5 a=15
B:k=4 a=12
C:k=6 a=11
D:k=3 a=14
答案:B
第33题 (1.0分) 题号:6716 难度:中 第8章
设有定义:int a,b[10],*c=NULL,*p;,则以下语句错误的是
A:p=a;
B:p=b;
C:p=c;
D:p=&b[0];
答案:A
第34题 (1.0分) 题号:6246 难度:中 第8章
有下列程序
#include <stdio.h>
void swap(int *a, int *b)
{ int *tp,t;
tp = a; a = b; b = tp;
t = *a; *a = *b; *b = t;
printf("%d,%d,", *a,*b);
}
main( )
{ int i=3, j=7, *p=&i, *q=&j;
swap(p, q);
printf("%d,%d", *p, *q);
}
程序执行后的输出结果是().
A:7,3,3,7
B:7,3,7,3
C:3,7,3,7
D:3,7,7,3
答案:D
第35题 (1.0分) 题号:6114 难度:中 第8章
设有定义:int x[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是
A:for(i=0;i<10;i++) scanf("%d",p+i);
B:for(i=0;i<10;i++) scanf("%d",*p+i);
C:for(i=0;i<10;i++) scanf("%d",*(p+i));
D:for(i=0;i<10;i++) scanf("%d",x[i]);
答案:A
第36题 (1.0分) 题号:7265 难度:中 第8章
以下叙述中正确的是
A:字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素
B:不能用字符串常量对字符数组名进行整体赋值操作
C:char str[7] = "string!"; 在语法上是合法的,运行也是安全的
D:char *str; str = "Hello";与char str[]; str = "Hello";效果是一样的
答案:B
第37题 (1.0分) 题号:6422 难度:易 第9章
下面结构体的定义语句中,错误的是( ).
A:struct ord {int x;int y;int z;} struct ord a;
B:struct ord {int x;int y;int z;}; struct ord a;
C:struct ord {int x;int y;int z;} a;
D:struct {int x;int y;int z;} a;
答案:A
第38题 (1.0分) 题号:6120 难度:较难 第9章
有以下程序
#include <stdio.h>
typedef struct stu {
char name[10];
char gender;
int score;
} STU;
void f( STU a, STU *b, STU c )
{ *b = c =a;
printf( "%s,%c,%d,", b->name, b->gender, b->score );
printf( "%s,%c,%d,", c.name, c.gender, c.score );
}
main( )
{ STU a={"Zhao", 'm', 290}, b={"Qian", 'f', 350}, c={"Sun", 'm', 370};
f( a, &b, c );
printf( "%s,%c,%d,", b.name, b.gender, b.score );
printf( "%s,%c,%d\n", c.name, c.gender, c.score );
}
程序运行后的输出结果是
A:Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370
B:Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290
C:Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370
D:Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290
答案:A
第39题 (1.0分) 题号:7360 难度:中 第9章
有以下程序
#include <stdio.h>
#define S(x) x/x
main()
{ int k=5, j=2;
printf("%d,%d\n", S(k+j), S(j+k));
}
程序的运行结果是
A:7,9
B:1,1
C:7,7
D:9,9
答案:A
第40题 (1.0分) 题号:6223 难度:易 第10章
以下关于C语言文件系统的叙述中正确的是().
A:fprintf()与fwrite()函数功能相同
B:文件以"r"方式打开后,可以存储文本类型的数据
C:fscanf()与fread()函数功能相同
D:以"w"或"wb"方式打开的文件,不可以从中读取数据
答案:D
二、程序填空 共1题 (共计18分)
第1题 (18.0分) 题号:317 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:函数fun的功能是:计算如“图片1”的前n项。
若x=2.5,函数值为12.182340。
-------------------------------------------------------*/
#include <stdio.h>
double fun(double x, int n)
{
double f, t;
int i;
f = 1.0;
/***********SPACE***********/
t=【?】;
/***********SPACE***********/
for(i=【?】;i<n;i++)
{
/***********SPACE***********/
t*=x/【?】;
f += t;
}
return f;
}
main()
{
double x, y;
x=2.5;
y = fun(x, 12);
printf("\nThe result is :\n");
printf("x=%-12.6f y=%-12.6f\n", x, y);
}
答案:
=======(答案1)=======
1.0
=======(答案2)=======
1
=======(答案3)=======
i
三、程序改错 共1题 (共计18分)
第1题 (18.0分) 题号:43 难度:中 第5章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun和funx的功能是:用二分法求方程 的一个根,并要求
绝对误差不超过0.001。
例如:若给m输入-100,n输入90,则函数求得的一个根为2.000。
-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
double funx(double x)
{
return(2*x*x*x-4*x*x+3*x-6);
}
double fun( double m, double n)
{
/***********FOUND***********/
int r;
r=(m+n)/2;
/***********FOUND***********/
while(fabs(n-m)<0.001)
{
if(funx(r)*funx(n)<0)
m=r;
else
n=r;
r=(m+n)/2;
}
return r;
}
main( )
{
double m,n, root;
printf("Enter m n : \n");
scanf("%lf%lf",&m,&n);
root=fun( m,n );
printf("root = %6.3f\n",root);
}
答案:
=======(答案1)=======
double r ;
=======(答案2)=======
while (fabs(n-m) >0.001)
=========或=========
while (fabs(n-m) >=0.001)
=========或=========
while (0.001<fabs(n-m))
=========或=========
while (0.001<=fabs(n-m))
四、程序设计 共1题 (共计24分)
第1题 (24.0分) 题号:152 难度:中 第7章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。
数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如:若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数
组中的内容应该是: 2 3 4 5 6 7 8 9 10。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 80
int fun(int a[], int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20;
printf("The original data :\n");
for(i=0; i<n; i++)
printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0; i<n; i++)
printf("%3d",a[i]);
printf("\n\n");
}
答案: int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])
a[j++]=a[i];
return j;