一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6951 难度:较易 第1章
以下叙述中错误的是
A:算法正确的程序可以有零个输入
B:算法正确的程序最终一定会结束
C:算法正确的程序可以有零个输出
D:算法正确的程序对于相同的输入一定有相同的结果
答案:C
第2题 (1.0分) 题号:6759 难度:易 第2章
设有定义:int a=64,b=8;,则表达式(a&b)||(a&&b)和(a|b)&&(a||b)的值分别为
A:1和1
B:1和0
C:0和1
D:0和0
答案:A
第3题 (1.0分) 题号:6977 难度:较易 第2章
有以下程序
#include <stdio.h>
main()
{ int a=2, b;
b = a<<2;
printf ("%d\n", b );
}
程序运行后的输出结果是
A:2
B:4
C:6
D:8
答案:D
第4题 (1.0分) 题号:6321 难度:中 第2章
以下不能作为合法常量的是().
A:1.234e0
B:1.234e04
C:1.234e+4
D:1.234e0.4
答案:D
第5题 (1.0分) 题号:6706 难度:较易 第2章
设有定义:int a=0,b=1,c=1;
以下选项中,表达式值与其它三个不同的是
A:b=a==c
B:a=b=c
C:a=c==b
D:c=a!=c
答案:A
第6题 (1.0分) 题号:6812 难度:中 第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
34
B:12
C:1234
D:12
3
答案:D
第7题 (1.0分) 题号:7280 难度:中 第3章
有以下程序
#include <stdio.h>
main()
{
int sum, pad, pAd;
sum = pad = 5;
pAd = ++sum, pAd++, ++pad;
printf("%d\n", pad );
}
程序的输出结果是
A:5
B:6
C:7
D:8
答案:B
第8题 (1.0分) 题号:7341 难度:易 第3章
有以下程序
#include <stdio.h>
main()
{ int k=33;
printf("%d,%o,%x\n", k, k, k);
}
程序的运行结果是
A:33,41,21
B:33,33,33
C:41,33,21
D:33,21,41
答案:A
第9题 (1.0分) 题号:7222 难度:较易 第4章
以下叙述中正确的是
A:在C语言中,逻辑真值和假值分别对应1和0
B:关系运算符两边的运算对象可以是C语言中任意合法的表达式
C:对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误
D:分支结构是根据算术表达式的结果来判断流程走向的
答案:B
第10题 (1.0分) 题号:6987 难度:较易 第4章
有以下程序
#include <stdio.h>
main()
{ int x;
scanf("%d", &x);
if(x<=3) ; else
if(x!=10) printf("%d\n", x);
}
程序运行时,输入的值在哪个范围才会有输出结果
A:小于3的整数
B:不等于10的整数
C:大于3或等于10的整数
D:大于3且不等10的整数
答案:D
第11题 (1.0分) 题号:6326 难度:易 第4章
以下关于switch语句的叙述中正确的是().
A:所有case的标号都应当是连续的
B:每个case语句标号后面可以没有break语句
C:char型常量不能做case的标号使用
D:default必须放在全部case的最后
答案:B
第12题 (1.0分) 题号:6656 难度:中 第4章
有如下程序
#include <stdio.h>
main()
{
int x = 0x13;
if (x = 0x18) printf("T");
printf("F");
printf("\n");
}
程序运行后的输出结果是
A:TF
B:T
C:F
D:TFT
答案:A
第13题 (1.0分) 题号:6557 难度:中 第5章
有以下程序段
int s, n;
s=1;
for( n=10; n>0; n-- ) s+=n;
该程序段拟实现整数1~10的累加求和,但程序中有错误.以下4种修改方案中仍然错误的一个是().
A:将s=1; 改为 s=0;
B:将for循环改为for(n=10;n>1;n--)
C:将for循环改为for(n=10;n>=2;n--)
D:将for循环改为for(n=2;n<10;n++)
答案:D
第14题 (1.0分) 题号:6079 难度:中 第5章
以下程序拟实现计算 sum=1+1/2+1/3+ … +1/50 .
#include <stdio.h>
main( )
{ int i; double sum;
sum=1.0;
i=1;
do
{ i++; sum += 1/i; }
while( i<50 );
printf("sum=%lf\n",sum);
}
程序运行后,不能得到正确结果,出现问题的语句是
A:sum += 1/i;
B:while(i<50);
C:sum = 1.0;
D:i++;
答案:A
第15题 (1.0分) 题号:7019 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{ int i,j, m=55;
for(i=1;i<=3;i++)
for(j=3; j<=i; j++) m=m%j;
printf("%d\n ", m);
}
程序的运行结果是
A:0
B:1
C:2
D:3
答案:B
第16题 (1.0分) 题号:7107 难度:中 第5章
若有以下程序
#include <stdio.h>
main()
{ int s=0, n;
for (n=0; n<4; n++)
{ switch(n)
{ default: s+=4;
case 1: s+=1;
case 2: s+=2;
case 3: s+=3;
}
}
printf("%d\n", s);
}
则程序的输出结果是
A:6
B:18
C:10
D:24
答案:D
第17题 (1.0分) 题号:6263 难度:中 第5章
有以下程序
#include<stdio.h>
#include<math.h>
main()
{
int s; float n,t,pai;
t=1,pai=0,n=1.0,s=1;
while(fabs(t)>1.0e-6) {
pai+=t;
n+=2; s=-s;t=s/n;
}
printf("total=%f\n",pai);
}
程序所计算的是().
A:1-1/2!+1/3!-1/5!+1/7!-…
B:1+1/3+1/5+1/7+1/9-…
C:1+1/2+1/3+1/4+1/5-…
D:1-1/3+1/5-1/7+1/9-…
答案:D
第18题 (1.0分) 题号:6989 难度:中 第5章
有以下程序
#include <stdio.h>
main()
{
char b,c;
int i;
b= 'a';
c = 'A';
for (i=0; i<6; i++)
{
if (i%2) putchar(i+b);
else putchar(i+c);
}
printf("\n");
}
程序运行后的输出结果是
A:abcdef
B:ABCDEF
C:aBcDeF
D:AbCdEf
答案:D
第19题 (1.0分) 题号:7149 难度:中 第6章
若有以下程序
#include <stdio.h>
main()
{ int i, j=0;
char a[]="How are you!", b[10];
for ( i=0; a[i]; i++ )
if (a[i] == ' ') b[j++]=a[i+1];
b[j]='\0';
printf("%s\n",b);
}
则程序的输出结果是
A:Howareyou!
B:Howareyou
C:Hay!
D:ay
答案:D
第20题 (1.0分) 题号:6032 难度:中 第6章
有以下程序
#include <stdio.h>
main( )
{
int i, array[6] = {1, 5, 0, 4};
for (i=0; i<5; i++)
printf("%d,", array[i] & 4);
printf("\n");
}
程序运行后的输出结果是
A:1,2,1,2,0
B:1,5,0,4,0,
C:1,5,5,4,0,
D:0,4,0,4,0
答案:D
第21题 (1.0分) 题号:6377 难度:中 第6章
有以下程序
#include <stdio.h>
main( )
{ char b[4][10]; int i;
for ( i=0; i<4; i++ )
scanf( "%s", b[i] );
for( i=3; i>=0; i-- )
printf( "%s ", b[i] );
printf( "\n" );
}
执行时若输入: Peach flower is pink.<回车> ,则输出结果是
A:Peachflower is pink.
B:pink. is flower Peach
C:Peachflowerispink.
D:Pink is flower peach.
答案:B
第22题 (1.0分) 题号:6967 难度:中 第6章
有以下程序
#include <stdio.h>
main()
{
int a[4][4]={{1,4,3,2},
{8,6,5,7},
{3,7,2,5},
{4,8,6,1}};
int i, j, k, t;
for (i=0; i<4; i++)
for (j=0; j<3; j++)
for (k=j+1; k<4; k++)
if (a[j][i] > a[k][i])
{
t=a[j][i];
a[j][i] = a[k][i];
a[k][i] = t;
} /* 按列排序 */
for (i=0; i<4; i++)
printf("%d, ",a[i][i]);
}
程序运行后的输出结果是
A:1, 6, 2, 1,
B:8, 7, 3, 1,
C:4, 7, 5, 2,
D:1, 6, 5, 7,
答案:D
第23题 (1.0分) 题号:7327 难度:中 第6章
以下选项中,没有编译错误的是
A:char str3[] = {'d', 'e', 'b', 'u', 'g', '\0'};
B:char str1[5] = "pass", str2[6]; str2 = str1;
C:char name[10]; name = "china";
D:char str4[]; str4 = "hello world";
答案:A
第24题 (1.0分) 题号:6968 难度:中 第6章
有以下程序(strcat函数用以连接两个字符串)
#include <stdio.h>
#include <string.h>
main()
{
char a[20]="ABCD\0EFG\0",b[]="IJK";
strcat(a,b);
printf("%s\n",a);
}
程序运行后的输出结果是
A:IJK
B:ABCDE\0FG\0IJK
C:ABCDIJK
D:EFGIJK
答案:C
第25题 (1.0分) 题号:6574 难度:中 第7章
以下叙述中正确的是().
A:用static说明的变量是全局变量
B:register变量不能进行求地址运算
C:系统默认auto变量的初值为0
D:用register说明的变量被强制保留在CPU的寄存器中
答案:B
第26题 (1.0分) 题号:7359 难度:中 第7章
有以下程序
#include <stdio.h>
int a=2;
int f()
{ static int n=0;
int m=0;
n++; a++; m++;
return n+m+a;
}
main()
{ int k;
for (k=0; k<3; k++)
printf("%d,", f( ));
printf("\n");
}
程序的运行结果是
A:5,7,9,
B:5,6,7,
C:5,8,11,
D:5,5,5,
答案:A
第27题 (1.0分) 题号:6476 难度:难 第7章
有以下程序
#include <stdio.h>
int fun(int a[],int k)
{ if(k==0) return (a[0]);
return a[0]+fun(a+1,k-1);
}
main()
{ int a[ ]={1,2,3,4,5};
printf("%d\n", fun(a,3));
}
执行后的输出结果是( ).
A:4
B:3
C:10
D:9
答案:C
第28题 (1.0分) 题号:6466 难度:中 第7章
有以下程序
#include <stdio.h>
void fun( int a, int b )
{ int t;
t=a; a=b; b=t;
}
main()
{ int c[10]={1,2,3,4,5,6,7,8,9,0}, i;
for (i=0; i<10; i+=2) fun(c[i], c[i+1]);
for (i=0;i<10; i++) printf("%d,", c[i]);
printf("\n");
}
程序的运行结果是( ).
A:1,2,3,4,5,6,7,8,9,0,
B:2,1,4,3,6,5,8,7,0,9,
C:0,9,8,7,6,5,4,3,2,1,
D:0,1,2,3,4,5,6,7,8,9,
答案:A
第29题 (1.0分) 题号:7298 难度:较难 第7章
有以下程序
#include <stdio.h>
int fun( int n )
{ int a;
if( n==1 ) return 1;
a = n + fun( n-1 );
return ( a );
}
main()
{ printf( "%d\n", fun( 5 ) ); }
程序的输出结果是
A:9
B:14
C:10
D:15
答案:D
第30题 (1.0分) 题号:6778 难度:中 第7章
有以下程序
#include <stdio.h>
#define N 4
void fun(int a[][N])
{
int i;
for(i=0; i<N; i++)
a[0][i] += a[N-1][N-1-i];
}
main( )
{ int x[N][N]={ {1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12},
{13,14,15,16}}, i;
fun(x);
for (i=0;i<N; i++) printf("%d,", x[i][i]);
printf("\n");
}
程序运行后的输出结果是
A:4,7,10,13,
B:1,6,11,16,
C:17,6,11,16,
D:5,13,21,29,
答案:C
第31题 (1.0分) 题号:7261 难度:中 第8章
以下叙述中正确的是
A:基类型不同的指针变量可以相互混用
B:函数的类型不能是指针类型
C:函数的形参类型不能是指针类型
D:设有指针变量为 double *p,则 p+1 将指针p移动8个字节
答案:D
第32题 (1.0分) 题号:6854 难度:中 第8章
以下不能将s所指字符串正确复制到t所指存储空间的是()
A:do{*t++=*s++;}while(*s );
B:for(i=0;t[i]=s[i];i++);
C:while(*t=*s){t++;s++}
D:for(i=0,j=0;t[i++]=s[j++]; );
答案:A
第33题 (1.0分) 题号:6996 难度:中 第8章
以下选项中正确的语句组是
A:char *s; s={"BOOK!"};
B:char *s; s="BOOK!";
C:char s[10]; s="BOOK!";
D:char s[]; s="BOOK!";
答案:B
第34题 (1.0分) 题号:6244 难度:中 第8章
设有定义语句:double *p,m=2.6;,要使指针p指向变量m,则以下正确的赋值语句是().
A:p=&m;
B:p=m;
C:*p=&m;
D:*p=m;
答案:A
第35题 (1.0分) 题号:6998 难度:较难 第8章
有以下程序
#include <stdio.h>
void fun1(char *p)
{
char *q;
q=p;
while(*q!='\0')
{
(*q)++;
q++;
}
}
main()
{
char a[]={"Program"}, *p;
p=&a[3];
fun1(p);
printf("%s\n",a);
}
程序执行后的输出结果是
A:Prphsbn
B:Prohsbn
C:Progsbn
D:Program
答案:B
第36题 (1.0分) 题号:7294 难度:中 第8章
设有某函数的说明为
int* func(int a[10], int n);
则下列叙述中,正确的是
A:形参a对应的实参只能是数组名
B:说明中的a[10]写成a[]或*a效果完全一样
C:func的函数体中不能对a进行移动指针(如a++)的操作
D:只有指向10个整数内存单元的指针,才能作为实参传给a
答案:B
第37题 (1.0分) 题号:7124 难度:中 第9章
若有以下程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu {
char *name, gender;
int score;
};
main()
{
struct stu a={NULL, 'm', 290}, b;
a.name=(char *)malloc(10);
strcpy(a.name, "Zhao");
b = a; b.gender = 'f'; b.score = 350;
strcpy(b.name, "Qian");
printf( "%s,%c,%d,", a.name, a.gender, a.score );
printf( "%s,%c,%d\n", b.name, b.gender, b.score );
}
则程序的输出结果是
A:Zhao,m,290,Zhao,f,350
B:Zhao,m,290,Qian,f,350
C:Qian,f,350,Qian,f,350
D:Qian,m,290,Qian,f,350
答案:D
第38题 (1.0分) 题号:6124 难度:较易 第9章
设有以下程序段
struct book
{
float price;
char language;
char title[20];
} rec, *ptr;
ptr = &rec;
要求输入字符串给结构体变量rec的title成员,错误的输入语句是
A:scanf("%s", ptr.title);
B:scanf("%s", rec.title);
C:scanf("%s", (*ptr).title);
D:scanf("%s", ptr->title);
答案:A
第39题 (1.0分) 题号:6034 难度:较易 第9章
有如下定义:
struct
{ int num;
char name[10];
struct
{ int y; int m; int d;} birth;
} s,*ps=&s;
以下对内嵌结构体成员的引用形式错误的是
A:ps->birth.y
B:s.birth.y
C:ps.birth.y
D:(*ps).birth.y
答案:C
第40题 (1.0分) 题号:6732 难度:中 第10章
有以下程序段
FILE *fp;
if( (fp=fopen("test.txt","w")) == NULL)
{ printf("不能打开文件!");
exit(0);}
else
printf("成功打开文件!");
若指定文件test.txt不存在,且无其他异常,则以下叙述错误的是
A:输出"不能打开文件!"
B:输出"成功打开文件!"
C:系统将按指定文件名新建文件
D:系统将为写操作建立文本文件
答案:A
二、程序填空 共1题 (共计18分)
第1题 (18.0分) 题号:654 难度:中 第2章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:编程求解"百钱百鸡问题":公鸡一只值5元钱,母鸡一只值3元
钱,小鸡3只值一元钱,求解100元钱买100只鸡。输出结果如样张。
---------------------------------------------------------*/
#include <stdio.h>
/***********SPACE***********/
【?】()
{
int a,b,c;
/***********SPACE***********/
for(a=1;【?】;a++)
/***********SPACE***********/
for(b=1;【?】;b++)
for(c=1;c<=100;c++)
/***********SPACE***********/
if((a+b+c==100)&&(15*a+9*b+1*c==【?】))
/***********SPACE***********/
printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n",【?】);
}
答案:
=======(答案1)=======
main
=========或=========
void main
=========或=========
int main
=======(答案2)=======
a<=20
=========或=========
a<21
=========或=========
20>=a
=========或=========
21>a
=========或=========
a<=100
=========或=========
a<100
=========或=========
100>i
=========或=========
100>=i
=======(答案3)=======
b<=33
=========或=========
33>=b
=========或=========
b<34
=========或=========
34>b
=========或=========
b<=100
=========或=========
b<100
=========或=========
100>=b
=========或=========
100>b
=======(答案4)=======
300
=======(答案5)=======
a,b,c
三、程序改错 共1题 (共计18分)
第1题 (18.0分) 题号:200 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。
t=1+1/2+1/3+1/4+…+1/m
例如:若输入5,则应输出2.283333。
-------------------------------------------------------*/
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
double t=1.0;
int i;
for(i=2;i<=m;i++)
/***********FOUND***********/
t+=1.0/k; /*只修改错误的地方其他不要改写否则不得分*/
/***********FOUND***********/
return i;
}
void main()
{
int m;
system("CLS");
printf("\nPlease enter 1integer number: ");
scanf("%d",&m);
printf("\nThe result is %1f\n", fun(m));
}
答案:
=======(答案1)=======
t+=1.0/i;
=========或=========
t= t + 1.0/i ;
=======(答案2)=======
return t;
=========或=========
return (t);
四、程序设计 共1题 (共计24分)
第1题 (24.0分) 题号:300 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不
超过N),按顺序合并组成一个新的字符串。
例如:若字符串数组中的M个字符串为{"AAAA","BBBBBBB","CC"}则合并后的字符串内容应
该是"AAAABBBBBBBCC"
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#define M 3
#define N 20
void fun(char a[M][N],char *b)
{
/**********Program**********/
/********** End **********/
}
void main()
{
char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;
char a[100]={"##############################"};
printf("The string:\n ");
for(i=0;i<M;i++)
puts(w[i]);
printf("\n ");
fun(w,a);
printf("The A string:\n ");
printf("%s ",a);
printf("\n\n ");
}
答案: int i,j,k=0;
for(i=0;i<M;i++)
for(j=0;a[i][j]!='\0';j++)
b[k++]=a[i][j];
b[k]='\0';