1、第五章
单选
有以下程序,程序运行后的输出结果是( )
#include
2、2"; int i, n=0; for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9') n++; printf("%d\n",n); return 0; } A.7 B.0 C.8 D.3 下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( ) A.if(strcmp(s2,s1)==0)ST; B.if(s1-s2==0)ST; C.if(strcpy(s1,s2)==1)ST; D.if(s1==s2)ST; 以下选项中正确的语句组是( ) A.char s
3、s={"BOOK!"}; B.char s[];s="BOOK!"; C.char s[10];s="BOOK!"; D.char s[]="BOOK!"; 以下数组定义中错误的是( ) A.int x[2][3]={{1,2},{3,4},{5,6}}; B.int x[2][3]={1,2,3,4,5,6}; C.int x[][3]={0}; D.int x[][3]={{1,2,3},{4,5,6}}; 若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是 () A.m[m[0]] B.m[2*2] C.m[--i]
4、
D.m[m[i]]
下列选项中,能正确定义数组的语句是( )
A.int num[];
B.int N=2008;
int num[N];
C.int num[0…2008];
D.#define N 2008
int num[N];
有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( )
#include
5、how are you?
I am fine
B.how are you? I am fine
C.how
are you?I am fine
D.how are you?
下面是有关C语言字符数组的描述,其中错误的是( )
A.不可以用赋值语句给字符数组名赋字符串
B.可以用输入语句把字符串整体输入给字符数组
C.字符数组中的内容不一定是字符串
D.字符数组只能存放字符串
有以下程序,程序运行后的输出结果是( )
#include
6、
x[0]=0;x[1]='\0';x[2]='0';
printf(“%d %d\n”,sizeof(x),strlen(x));
return 0;
}
A.7 0
B.6 1
C.7 1
D.6 3
若要定义一个具有5个元素的整型数组,以下错误的定义语句是( )
A.int a[5]={0};
B.int b[]={0,0,0,0,0};
C.int i=5,d[i];
D.int c[2+3];
有以下程序,程序运行后的输出结果是 ( )
#include
7、a[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”}; int i,j; char t[10]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(a[i],a[j])>0) { strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[i],t);} puts(a[3]); return 0; } A.china B.beijing C.welcome D.tiananmen 程序设计 /*编写函数int f
8、un(int lim, int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,
该函数返回所求出的素数的个数。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */
#include
9、}
int main()
{
FILE *wf;
int limit,i,sum;
int aa[MAX];
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0;i 10、/
wf=fopen("debug\\2.out","w");
sum=fun(15,aa);
for(i=0;i 11、
if(j>=i)
aa[k++]=i;
}
return k;
/*请编写函数fun,函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如,若二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
12、
试题程序:*/
#include 13、t i, j, y;
printf ("The original data is :\n ");
for(i=0; i 14、
fprintf (wf,"%d",y);
fclose(wf);
/*****************************/
}
【参考代码】
int i,j,sum=0;
for(i=0;i 15、回该串地址(用****作为结束输入的标志)。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include 16、wf;
char ss[10][81],ps[81];
char s[3][81]={"abcd","deg","diegns"},p[81];
int i=0,n;
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i], "****")==0) /*用4个星号作为结束输入的标志*/
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
fun(ss,n,ps);
17、
printf("\nmax=%s\n",ps);
/******************************/
wf=fopen("debug\\out15.dat","w");
fun(s,3,p);
fprintf(wf,"%s",p);
fclose(wf);
/*****************************/
}
【参考代码】
int i=0;
strcpy(max,a[0]);
/*找出最长的一个字符串*/
for(i=0;i 18、) 19、e M 100
int fun(int m, int a[])
{
/***************Begin************/
/*************** End ************/
}
void main()
{
FILE *wf;
int aa[M],n,k;
n=fun(50,aa);
for(k=0;k 20、
}
else
printf("%4d",aa[k]);
printf("\n");
/******************************/
wf=fopen("debug\\out4.dat","w");
for(k=0;k 21、 if(i%7==0||i%11==0)
a[j++]=i;
return j; /*返回这些数的个数*/
/*请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。
例如,若输入字符串"-1234",则函数把它转换为整数值-1234。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include 22、 p[])
{
/***************Begin************/
/*************** End ************/
}
void main()
{
FILE *wf;
char s[6];
long n;
printf("Enter a string:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
/******************************/
wf=fopen("debug\\out13.dat","w");
23、 fprintf (wf,"%ld",fun("-1234"));
fclose(wf);
/*****************************/
}
【参考代码】
long n=0,i=0;
int flag=1;
if(p[i]=='-') /*负数时置flag为-1*/
{i++;flag= -1;}
else if(p[i]=='+') /*正数时置flag为1*/
i++;
while(p[i]!='\0')
{ n=n*10+p[i]-'0';/*将字符串转成 24、相应的整数*/
i++;
}
return n*flag;
/*请编写一个函数void fun(char ss[]),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4EFg,则应输出aBc4EFg。 注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include 25、/***************Begin************/
/*************** End ************/
}
void main()
{
char tt[100];
FILE *out,*in;
printf("Please enter an character string within 50 characters:\n");
gets(tt);
printf("\n\nAfter changing,the string\n%s",tt);
fun(tt);
printf("\nbecomes\n %s",tt); 26、
/******************************/
in=fopen("in.dat","r");
out=fopen("debug\\out14.dat","w");
fgets(tt,16,in);
strcat(tt,"After changing the string");
fun(tt);
fprintf(out,"%s",tt);
fclose(in);
fclose(out);
/******************************/
}
【参考代码】
int i,n=0;
while(ss[i])
27、 {
n++;
i++;
}
for(i=0;i 28、则程序输出:FirstStringSecondString
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include 29、char s1[80],s2[40];
char p1[80]="FirstString",p2[40]="SecondString";
printf("Enter s1 and s2:\n") ;
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
printf("Invoke fun(s1,s2):\n");
fun(s1,s2);
printf("After invoking:\n");
printf("%s\n",s1);
/************* 30、/
in=fopen("in.dat","r");
wf=fopen("debug\\out16.dat","w");
fscanf(in,"%s %s",p1,p2);
fun(p1,p2);
fprintf(wf,"%s",p1);
fclose(in);
fclose(wf);
/*****************************/
}
【参考代码】
int i,j;
for(i=0;p1[i]!='\0';i++);
for(j=0;p2[j]!= '\0';j++ 31、)
p1[i++]=p2[j];
p1[i]= '\0';
/*请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,输入17,则应输出4 6 8 9 10 12 14 15 16。
注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */
#include 32、Begin************/
/*************** End ************/
}
void main()
{
FILE *wf;
int m, n, zz[100];
printf("\nPlease enter an integer number between 10 and 100: ");
scanf("%d",&n);
m=fun(n,zz);
printf("\n\nThere are %d non-prime numbers less than %d: ",m,n);
for(n=0;n 33、 34、for(j=2;j 35、给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include 36、m("CLS");
printf("\nPlease enter a char string : ") ;
scanf("%s",aa);
fun(aa,bb);
for (k=0 ;k<26 ; k++)
printf("%d\n",bb[k]) ;
/******************************/
wf=fopen("debug\\out2.dat","w");
fun ("abcdefgabcdeabc",bb) ;
for (k=0 ;k<26 ; k++)
fprintf(wf,"%d\n",bb[ 37、k]) ;
fclose(wf);
/*****************************/
}
【参考代码】
int i;
for(i=0;i<26;i++)
pp[i]=0;
i=0;
for(;tt[i]!='\0';i++)
if(tt[i]>='a'&&tt[i]<='z')
pp[tt[i]-'a']++;
程序改错
/*下列给定程序中,函数fun的功能是:删除字符串s中所有空白字符(包括Tab符、回车符及换行符)。输入字符串时用"#"结 38、束输入。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include 39、p,c);
}
void main()
{char c,s[80];
int i=0;
printf("Input a string: ");
c=getchar();
while(c!='#')
{ s[i]=c;i++;c=getchar();}
s[i]='\0';
fun(s);
puts(s);
}
【参考答案】
c[t]=0;
c[t]='\0';
/*下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。
请改正程序中的错误,使它能得出正 40、确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include 41、 t=a[i];
a[i]=a[m];
a[m]=t;
}
}
void main()
{
int b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;
for(i=0; i 42、
m=i;
/*下列给定程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include 43、ERROR**********/
scanf("%d",a[i][j]);
}
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("Sum=%d\n",sum);
}
void main()
{
fun();
}
【参考答案】
sum=0;
【参考答案】
scanf("%d",&a[i][j]);
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序: */
#include 44、int x[])
{
/**********ERROR**********/
int sum=0.0;
int c=0, I=0;
while(x[I]!=0)
{
if(x[I]>0)
{
sum+=x[I];
c++;
}
I++;
}
/**********ERROR**********/
sum=sum\c;
return sum;
}
void main()
{
int x[1000];
45、int i=0;
printf("\nPlease enter some data(end with 0) :");
do
{
scanf("%d",&x[i]);
}while(x[i++]!=0);
printf("%f\n",fun(x));
}
【参考答案】
double sum=0;
double sum=0.0;
float sum=0;
float sum=0.0;
【参考答案】
sum=sum/c;
sum/=c;
程序填空
/*请补充函数fun,该函数的功能是:求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两 46、位小数)。
例如,当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},结果为:avg=15.030000。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序: */
#include 47、0;i<10;i++)
/**********FILL**********/
[1] ;
avg=sum/10;
/**********FILL**********/
avg= [2] ;
/**********FILL**********/
t= [3] ;
avg=(double)t/100;
return avg;
}
void main()
{
double avg,x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0};
int 48、 i;
printf("\nThe original data is :\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
avg=fun(x);
printf("average=%f\n\n",avg);
}
【参考答案】
sum+=x[i];
sum=sum+x[i];
【参考答案】
avg*1000;
1000*avg;
【参考答案】
(avg+5)/10 ;
(5+avg)/10;
/*请补充函数fun,该函数的功能是:整除x且是偶数的数,把这些数保存在 49、数组bb中,并按从大到小的顺序输出。
例如当x=20时,依次输出:20 10 4 2。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:*/
#include 50、 )
bb[j++]=i;
}
printf("\n\n");
/**********FILL**********/
for(i= [3] ;i>=0;i--)
printf("%d ",bb[i]);
}
int main()
{
int k=1;
int bb[100];
printf("\nPlease input X=");
scanf("%d",&k);
fun(k,bb);
return 0;
}
【参考答案】
k%i==0&&i%2==0
i%2==0&&k%i==0
(k%i






