资源描述
第五章
单选
有以下程序,程序运行后的输出结果是( )
#include <stdio.h>
#include <string.h>
int main()
{
char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;
strcat(a,b); printf(“%s\n”,a);
return 0;
}
A.ABCDE\0FG\0IJK
B.ABCDIJK
C.EFGIJK
D.IJK
有以下程序,程序运行后的输出结果是 ( )
#include<stdio.h>
int main()
{ char s[]="012xy\08s34f4w2";
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;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]
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<stdio.h>
int main()
{ char a[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n %s\n",a,b);
return 0;
}
A.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 <stdio.h>
#include <string.h>
int main()
{
char x[]=”STRING”;
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<stdio.h>
#include<string.h>
int main()
{ char 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 fun(int lim, int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,
该函数返回所求出的素数的个数。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int fun(int lim, int aa[MAX])
{
/**********Begin**********/
/**********End**********/
}
int main()
{
FILE *wf;
int limit,i,sum;
int aa[MAX];
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0;i<sum;i++)
{
if(i%10==0&&i!=0) /*每行输出10个数*/
printf("\n ");
printf("%5d ",aa[i]);
}
/******************************/
wf=fopen("debug\\2.out","w");
sum=fun(15,aa);
for(i=0;i<sum;i++)
fprintf(wf,"%d\n",aa[i]);
fclose(wf);
/*****************************/
return 0;
}
【参考代码】
int i,j,k=0;
for(i=2;i<=lim;i++)
{
for(j=2;j<i;j++)
if(i%j==0) break;
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的花括号中填入所编写的若干语句。
试题程序:*/
#include<stdio.h>
#include<stdlib.h>
#define M 4
#define N 5
int fun( int a [M][N])
{
/***************Begin************/
/*************** End ************/
}
void main()
{
FILE *wf;
int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,10}};
int i, j, y;
printf ("The original data is :\n ");
for(i=0; i<M;i++)
{for (j=0; j<N;j++)
printf("%6d ",aa[i][j]);
printf("\n ");
}
y=fun(aa);
printf("\nThe sun: %d\n ",y);
printf("\n ");
/******************************/
wf=fopen("debug\\out10.dat","w");
fprintf (wf,"%d",y);
fclose(wf);
/*****************************/
}
【参考代码】
int i,j,sum=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(i==0||i==M-1||j==0||j==N-1)
sum=sum+a[i][j];
return sum;
/*编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(char a[][81], int num, char max[])
{
/***************Begin************/
/*************** End ************/
}
void main()
{
FILE *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);
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<num;i++)
if(strlen(max)<strlen(a[i]))
strcpy(max,a[i]);
/*请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */
#include<stdio.h>
#include<stdlib.h>
#define 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<n;k++)
if((k+1)%20==0) /*每行输出20个数*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
/******************************/
wf=fopen("debug\\out4.dat","w");
for(k=0;k<n;k++)
fprintf(wf,"%d\n",aa[k]);
fclose(wf);
/*****************************/
}
【参考代码】
int i,j=0;
for(i=1;i<=m;i++)
if(i%7==0||i%11==0)
a[j++]=i;
return j; /*返回这些数的个数*/
/*请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。
例如,若输入字符串"-1234",则函数把它转换为整数值-1234。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include <stdio.h>
#include <string.h>
long fun(char 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");
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';/*将字符串转成相应的整数*/
i++;
}
return n*flag;
/*请编写一个函数void fun(char ss[]),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4EFg,则应输出aBc4EFg。 注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include <stdio.h>
#include <string.h>
void fun ( char ss[])
{
/***************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);
/******************************/
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])
{
n++;
i++;
}
for(i=0;i<n;i++)
if((ss[i]>='a'&&ss[i]<='z')&&i%2!=0)
/*将下标为奇数位置的字母转换成大写*/
ss[i]=ss[i]-32;
ss[i]='\0';
/*编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString
SecondString
则程序输出:FirstStringSecondString
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include<stdio.h>
#include<stdlib.h>
void fun(char p1[],char p2[])
{
/***************Begin************/
/*************** End ************/
}
void main()
{
FILE *wf,*in;
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);
/******************************/
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++)
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<stdio.h>
#include<stdlib.h>
int fun(int m, int xx[])
{
/***************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<m;n++)
printf("\n %4d",zz[n]);
/******************************/
wf=fopen("debug\\out7.dat","w");
m=fun(30,zz);
for(n=0;n<m;n++)
fprintf(wf,"%d\n",zz[n]);
fclose(wf);
/*****************************/
}
【参考代码】
int i,j,n=0;
for(i=4;i<m;i++)
/*找出大于1小于整数m的非素数*/
{for(j=2;j<i;j++)
if(i%j==0) break;
if(j<i)xx[n++]=i;
}
return n; /*返回非素数的个数*/
/*请编写一个函数 void fun(char tt[],int pp[]),统计在tt字符串中"a"到"z"26个字母各自出现的次数,
并依次放在pp所指数组中。例如,当输入字符串abcdefghabcdeabc后,
程序的输出结果应该是:3 3 3 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:*/
#include <stdio.h>
#include <stdlib.h>
void fun(char tt[],int pp[] )
{
/***************Begin************/
/*************** End ************/
}
void main( )
{
FILE *wf;
char aa[1000];
int bb[26], k;
system("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[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符、回车符及换行符)。输入字符串时用"#"结束输入。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include <string.h>
#include <stdio.h>
#include <ctype.h>
fun(char *p)
{ int i, t; char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i))) c[t++]=p[i];
/**********ERROR**********/
c[t]="\0";
strcpy(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] 中的数对调。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include<stdio.h>
#define N 20
/**********ERROR**********/
void fun(int a[],int n);
{
int i, m, t, k;
for(i=0; i<n;i++)
{
/**********ERROR**********/
m=0;
for(k=i+1; k<n; k++)
if(a[k]>a[m])
m=k;
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<n; i++)
printf("%d ",b[i]);
printf("\n");
fun(b,n);
for(i=0; i<n; i++)
printf("%d ", b[i]);
printf("\n");
}
【参考答案】
void fun(int a[],int n)
【参考答案】
m=i;
/*下列给定程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:*/
#include <stdio.h>
void fun()
{
int a[3][3],sum;
int i,j;
/**********ERROR**********/
sum=1;
for (i=0;i<3;i++)
{ for (j=0;j<3;j++)
/**********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 <stdio.h>
double fun(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];
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]的平均值,并对所得结果进行四舍五入(保留两位小数)。
例如,当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 <stdlib.h>
#include <stdio.h>
double fun(double x[10])
{
int i;
long t;
double avg=0.0;
double sum=0.0;
for(i=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 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且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。
例如当x=20时,依次输出:20 10 4 2。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:*/
#include <stdio.h>
void fun(int k,int bb[])
{
int i;
int j=0;
/**********FILL**********/
for( [1] ;i<=k;i++)
{
/**********FILL**********/
if( [2] )
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
展开阅读全文