自测题1
一 、单项选择题(2*20=40分)
1.C语言中下列叙述正确的是____________。D
A、不能使用do-while语句构成的循环
B、do-while语句构成的循环,必须用break语句才能退出
C、do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D、do-while语句构成的循环,当while语句中的表达式值为零时结束循环 2.以下选项中,能定义s为合法的结构体变量的是____________。B
A、typedef struct abc {
double a;
char b[10];
} s;
B、struct abc{
double a;
char b[10];
}s;
C、struct ABC {
double a;
char b[10];
};
ABC s;
D、typedef ABC{
double a;
char b[10];
};
ABC s;
3.若x和y都是int型变量,x=3、y=200,则语句printf(\输出结果是__________。A A、B B、66 C、66.6 D、输出格式符不够,输出不确定的值 4.请选出可用作C语言用户标识符的一组标识符____________。B ① void ② a3_b3 ③ For ④ 2a define _123 _abc DO WORD IF case sizeof A、① B、② C、③ D、④
5.设ch是char型变量,其值为字母A,下面的表达式的值是____________。B ch=(ch>='A'&&ch<='Z')?(ch+32):ch A、A B、a C、Z D、z
6.已知a为int类型的一维数组,p为整型的指针变量,其定义如下: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则语句printf(\的输出结果是____________。C A、1 B、2 C、3 D、4
7.下面的程序中____________错误(每行程序前面的数字是行号)。C
1 #include
4 float a[3]={0.0f}; 5 int i;
6 for(i=0;i<3;i++) scanf(\7 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 8 printf(\9 }
A、第2行 B、第4行 C、第6行 D、第8行
8.下面程序段的运行结果是_________________。C
char a[ ]=\ p=a;
while(*p!='u') {
printf(\ p++; }
A、LANGUAGE B、language C、LAN D、langUAGE 9.若有如下定义: int x=0,*p=&x;
则语句printf(\的输出结果是______________。B
A、随机值 B、0 C、x的地址 D、p的地址
10.当执行下面的程序时,如果输入ABC,则输出结果是________________。A #include
char ss[100]; gets(ss);
strcat(ss,\ printf(\ return 0; }
A、ABC6789 B、ABC67 C、12345ABC6 D、ABC456789 11.当调用函数时,实参是一个数组名,则向函数传送的是______________。B
A、数组的长度 B、数组的首地址 C、数组每一个元素的地址 D、数组每个元素中的值 12.不能把字符串\赋给数组b的语句是_____________。B
A、char b[10]={'H','e','l','l','o','!','\\0'}; B、char b[10];b=\C、char b[10];strcpy(b,\ D、char b[10]=\
13.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是____________。B
A、s=a+b; B、s=a+c; C、s=s-c; D、s=b+c;
14.已知i是int类型的变量,则执行以下程序段后,输出结果是__________。A for(i=1;i<6;i++) {
if(i%2)
{
printf(\ continue; }
printf(\ }
A、#*#*# B、##### C、***** D、*#*#*
15.已知a、b、k是int类型的变量,执行下面的程序段时,从键盘上输入5和2,输出结果是______ 。D
scanf(\ k=a; if(a)
k=b/a; else
k=b%a;
printf(\
A、5 B、2 C、1 D、0
16.以下选项中,能作为常量的是____________。D
A、o115 B、0118 C、1.5e1.5 D、115
17.以下选项中,能正确定义数组的语句是_______________。D
A、int num[0..2008]; B、int num[ ]; C、int N=2008; D、#define N 2008 int num[N]; int num[N];
18.已知i、j、k为int型变量,若从键盘输入:1,2,3↙,为使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是______。C
A、scanf(\ B、scanf(\ %d %d\ C、scanf(\ D、scanf(\19.下面程序执行后,输出结果是______。B #include
FILE *fp;int i,k=0,n=0; fp=fopen(\ for(i=1;i<4;i++) fprintf(fp,\ fclose(fp);
fp=fopen(\ fscanf(fp,\ printf(\ fclose(fp); return 0; }
A、1 2 B、123 0 C、1 23 D、0 0
20.以下选项中,正确的定义变量语句是____________。C
A、double a,int b; B、double a
二 、程序填空题(18分,每空3分)
1.已知P的计算公式为:p=m!/(n!*(m-n)!),下面程序的功能计算P的值。例如:m=11,n=4时,运行结果为330.000000。请在程序的下划线处填入正确的内容,使程序得出正确结果。
#include
int s,i;
for(i=1,s=1;i<=m;i++)
s=___1_________ ; s=s*i; return s; }
float fun(int m,int n) {
float p;
p=1.0*jc(m)/jc(n)/jc(___2_________); p=1.0*jc(m)/jc(n)/jc(m-n); _________3___; return p; }
int main( ) {
printf(\ return 0; }
2.下面程序的功能是统计字符串中大写字母和小写字母个数。例如,输入:AaaaBBb123CCccccd,则输出结果应为:upper=5,lower=9。请在程序的下划线处填入正确的内容,使程序得出正确结果。
#include
void fun (char *s,int *a,int *b) {
while (*s) {
if (*s>='A'&&*s<='Z')
____________1___ ; (*a)++; else if (*s>='a'&&*s<='z')
____________2___; (*b)++; s++; } }
int main( ) {
char s[100];
int upper=0,lower=0;
printf(\
gets(s);
______________3_________________ fun(s,&upper,&lower); printf(\ return 0; }
三 、程序改错题(12分,每处3分)
注意:每题有两处错误;改错时,不得增行或删行,也不得更改程序的结构!
1.已知函数fun的功能是求两数平方根之和,作为函数值返回。例如,输入12和20,输出结果是:y=7.936238。请改正程序中的错误,使它能得出正确结果。
#include
double fun(double *a,*b) //double fun(double *a,double *b) {
double c;
c=sqrt(a)+sqrt(b); //c=sqrt(*a)+sqrt(*b); return c; }
int main( ) {
double a,b,y;
printf(\ :\ scanf(\ y=fun(&a,&b); printf(\ return 0; }
2.函数fun的功能是从字符串s中删除所有小写字母c。请改正程序中的错误,使它能得出正确结果。
#include
int i,j;
for(i=j=0;s[i]!='\\0';i++) if(s[i]!='c')
s[j]=s[i]; //s[j++]=s[i]; s[i]='\\0'; //s[j]='\\0'; }
int main( ) {
char s[80];
printf(\
gets(s);
printf(\puts(s);
fun(s);
printf(\puts(s); return 0; }
四、程序设计题(30分)
1.请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。其中参数a指向存放n门课程成绩的数组,参数n表示数组a中实际存放的成绩的个数。例如:若有5门课程的成绩是:90.5,72,80,61.5,55。则函数的值为:71.80。 (10分)
#include
int i; float s=0;
for(i=0;i int main( ) { float score[30]={90.5,72,80,61.5,55},aver; aver=fun(score,5); printf(\ is: %5.2f\\n\ return 0; } 2.请编写函数fun,它的功能是对参数s所表示的字符串,将每个字符根据其ASCII码值的大小,按照从大到小的顺序降序排列后输出。例如,字符串S所指的字符串为cabe2x1yz3,排序后输出为zyxecba321。 (20分) #include void fun(char *s) { int i=0,j,n; char t; while(s[i]!='\\0') i++; n=i; for(i=0;i int main( ) { char s[100]; printf(\输入一个字符串:\ gets(s); fun(s); printf(\ return 0; }