全國計(jì)算機(jī)等級(jí)考試二級(jí)C語言練習(xí)題(六)
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:尋找兩個(gè)整數(shù)之間的的所有素?cái)?shù)(包括這兩個(gè)整數(shù)),把結(jié)果保存在數(shù)組bb中,函數(shù)返回素?cái)?shù)的個(gè)數(shù)。
例如,輸入6和21,則輸出為:7、11、13、17、19
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#define N 1000
int fun(int n,int m,int bb[N])
{
int I,j,k=0,flag;
for(j=n;j<=m;j++)
{
/**********found**********/
___1___;
for(i=2;i<j;i++)
/**********found**********/
if(___2___)
{flag=0; break;}
/**********found**********/
if(___3___) bb[k++]=j;
}
return k;
}
main()
{
int n=0,m=0,I,k;
int bb[N];
system("cls");
printf("Input n\n");
scanf("%d",&n);
printf("Input m\n");
scanf("%d",&m);
for(i=0;i<m-n;i++) bb[i]=0;
k=fun(n,m,bb);
for(i=0;i<k;i++)
printf("%4d",bb[i]);
}
【答案】
(1)flag=1 (2)j%i==0 (3)flag==1?
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:通過某種方式實(shí)現(xiàn)兩個(gè)變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如變量a中的值原為8,b中的值原為3;程序運(yùn)行后a中的值為3,b中的值為8。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int fun(int *x,int y)
{
int t;
/**********found**********/
t=x;x=y;
/**********found**********/
return(y);
}
main()
{
int a=3,b=8;
system("cls");
printf("%d %d\n",a,b);
b=fun(&a,b);
printf("%d %d\n",a,b);
}
【答案】
(1)將t=x;x=y; 改為:t=*x;*x=y;
(2)將return (y); 改為:return (t);?
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是:統(tǒng)計(jì)一行字符串中單詞的個(gè)數(shù),作為函數(shù)值返回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間有若干個(gè)空格隔開,一行的開始沒有空格。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <string.h>
#include <stdio.h>
#define N 80
int fun(char *s)
{
?
}
main()
{
char line[N];
int num=0;
printf("Enter a string:\n ");
gets(line);
num=fun(line);
printf("The number of word is:%d\n ",
num);
}
【答案】
int fun(char *s)
{
int i,j=0;
for(i=0;s[i]!='\0';i++)
if(s[i]!=' '&&(s[i+1]==''||
s[i+1]=='\0'))
j++;
return j;
}
1.程序填空題
函數(shù)的功能是:把文本文件B中的內(nèi)容追加到文本文件A的內(nèi)容之后。
例如,文件B的內(nèi)容為“I’m ten.”,文件A的內(nèi)容為“I’m a student!”,追加之后文件A的內(nèi)容為“I’m a student ! I’m ten.”
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define N 80
main()
{
FILE *fp,*fp1,*fp2;
int I;
char c[N],t,ch;
system("cls");
if((fp=fopen("A.dat","r"))==NULL)
{
printf("file A cannot be opened\n");
exit(0);
}
printf("A contents are : \n");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{ c[i]=ch; putchar(c[i]); }
fclose(fp);
if((fp=fopen("B.dat","r"))==NULL)
{
printf("file B cannot be opened\n");
exit(0);
}
printf(&qu
Chapter_4
ot;B contents are : \n");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{ c[i]=ch; putchar(c[i]); }
fclose(fp);
/**********found**********/
if((fp1=fopen("A.dat","a"))___1___
(fp2=fopen("B.dat","r")))
{
while((ch=fgetc(fp2))!=EOF)
/**********found**********/
___2___;
}
else printf("Can not open A B !\n");
fclose(fp2);
fclose(fp1);
printf("\n***new A contents***\n\n");
if((fp=fopen("A.dat","r"))==NULL)
{
printf("file A cannot be opened\n");
exit(0);
}
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{ c[i]=ch; putchar(c[i]); }
/**********found**********/
___3___;
}
【答案】
(1)&& (2)fputc(ch,fp1) (3)fclose(fp)
2.程序修改題
N個(gè)有序整數(shù)數(shù)列已放在一維數(shù)組中,給定下列程序中,函數(shù)fun()的功能是:利用折半查找算法查找整數(shù)m在數(shù)組中的位置。若找到,則返回其下標(biāo)值;反之,則返回-1。
折半查找的基本算法是:每次查找前先確定數(shù)組中待查的范圍:low和high(low<high),然后把m與中間位置(mid)中元素的值進(jìn)行比較。如果m的值大于中間位置元素中的值,則下一次的查找范圍放在中間位置之后的元素中;反之,下次查找范圍落在中間位置之前的元素中。直到low>high,查找結(jié)束。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define N 10
/**********found**********/
void fun(int a[],int m)
{
int low=0,high=N-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(m<a[mid]) high=mid-1;
/**********found**********/
else if(m>=a[mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main()
{
int I,a[N]={-3,4,7,9,13,24,67,89,
100,180},k,m;
printf("a數(shù)組中的數(shù)據(jù)如下:");
for(i=0;i<N;i++) printf("%d",a[i]);
printf("Enter m: "); scanf("%d",&m);
k=fun(a,m);
if(k>=0) printf("m=%d,index=%d\n",m,k);
else printf("Not be found!\n");
}
【答案】
(1)將void fun(int a[],int m) 改為:
int fun(int a[],int m)
(2)將else if(m>=a[mid])改為:
else if(m>a[mid])?
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過調(diào)用隨機(jī)函數(shù)獲得,并放在主函數(shù)的age數(shù)組中。要求函數(shù)把0~9歲年齡段的人數(shù)在d[0]中,把10~19歲年齡段的人數(shù)放在d[1]中,把20~29歲年齡段的人數(shù)放在d[2]中,依次類推,把100歲(含100)以上年齡的人數(shù)都放在d[10]中。結(jié)果在主函數(shù)中輸出。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#define N 50
#define M 11
void fun(int *a,int *b)
{
?
}
double rnd()
{
static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m;
return((double)r/m);
}
main()
{
int age[N],I,d[M];
for(i=0;i<N;i++)
age[i]=(int)(115*rnd());
/*產(chǎn)生一個(gè)隨機(jī)的年齡數(shù)組*/
printf("The original data :\n");
for(i=0;i<N;i++)
printf((i+1)%10==0?"%4d\n":"%4d",
age[i]);
printf("\n\n");
fun(age,d);
for(i=0;i<10;i++)
printf("%4d--%4d:%4d\n",i*10,
i*10+9,d[i]);
printf("Over 100 : %4d\n",d[10]);
}
【答案】
void fun(int *a,int *b)
{
int i,j;
for(j=0;j<M;j++)
b[j]=0;
for(i=0;i<N;i++)
if(a[i]>=100) b[10]++;
else b[a[i]/10]++;
}
1.程序填空題
數(shù)組xx[N]保存著一組4位無符號(hào)整數(shù),其元素的個(gè)數(shù)通過變量num傳入函數(shù)fun()。請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:從數(shù)組xx中找出個(gè)位和百位的數(shù)字相等的所有無符號(hào)整數(shù),結(jié)果保存在數(shù)組yy中,其個(gè)數(shù)由函數(shù)fun()返回。
例如:xx[8]={1111,2413,2321,2222,4245,3333,1414,5335}時(shí),
bb[6]={1111,2321,2222,4245,3333,1414}。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define N 1000
int fun(int xx[],int bb[],int num)
{
int I,n=0;
int g,b;
for(i=0;i<num;i++)
{
/**********found**********/
g=___1___;
b=xx[i]/100%10;
if(g==b)
/**********found**********/
___2___;
}
/**********found**********/
return___3___;
}
main()
{
int xx[8]={1111,2413,2321,2222,4245,3333,1414,5335};
int yy[N];
int num=0,n=0,i=0;
num=8;
system("cls");
printf("***original data ***\n ");
for(i=0;i<num;i++)
printf("%u ",xx[i]);
printf("\n\n");
n=fun(xx,yy,num);
printf("yy= ");
for(i=0;i<n;i++)
printf("%u ",yy[i]);
}
【答案】
(1)xx[i]%10 (2)bb[n++]=xx[i] (3)n
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
例如,若輸入2,則輸出
1 2
2 4
輸入4,則輸出
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#define M 10
int a[M][M]={0};
/**********found**********/
fun(int **a,int m)
{
int j,k;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
/**********found**********/
a[j][k]=k*j;
}
main()
{
int I,j,n;
system("cls");
printf("Enter n\n"); scanf("%d",&n);
fun(a,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d ",a[i][j]);
printf("\n");
}
}
【答案】
(1)將fun( int **a, int m) 改為:
void fun( int (*a)[M], int m)
(2)將a[j][k]=k*j; 改為:
a[j][k]=(k+1)*(j+1);
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。
例如,若一維數(shù)組中的數(shù)據(jù)是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 10
刪除后,數(shù)組中的內(nèi)容應(yīng)該是:
2 3 4 5 6 7 8 9 10。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <windows.h>
#define N 80
int fun(int a[], int n)
{
?
}
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("The data after deleted :\n");
for(I=0;I<n;I++)
printf("%3d",a[I]);
printf("\n\n");
}
【答案】
int fun(int a[],int n)
{
int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])
a[j++]=a[i];
return j;
}
1.程序填空題
請(qǐng)補(bǔ)充main()函數(shù),該函數(shù)的功能是求n的階乘。例如:6!=720。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
main()
{
int I,n;
long f=1;
system("cls");
printf("Input n: ");
/**********found**********/
scanf("%d",___1___);
/**********found**********/
for(___2___;i<=n;i++)
/**********found**********/
___3___;
printf("%d!=%ld\n",n,f);
}
【答案】
(1)&n (2)i=1 (3)f*=i
2.程序修改題
已知一個(gè)數(shù)列從0項(xiàng)開始的前3項(xiàng):0、0、1,以后的各項(xiàng)都是其相鄰的前3項(xiàng)之和。下列給定的程序中,函數(shù)fun()的功能是:計(jì)算并輸出該數(shù)列前n項(xiàng)的平方根之和sum。N的值通過形參傳入。例如,當(dāng)n=10時(shí),程序的輸出結(jié)果應(yīng)為23.197745。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>
/**********found**********/
fun(int n)
{
double sum,s0,s1,s2,s;int k;
sum=1.0;
if(n<=2) sum=0.0;
s0=0.0;s1=0.0;s2=1.0;
for(k=4;k<=n;k++)
{
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
/**********found**********/
return sum
}
main()
{
int n;
system("cls");
printf("Input N=");
scanf("%d",&n);
printf("%f\n",fun(n));
}
【答案】
(1)將fun(int n) 改為:double fun(int n)
(2)將return sum 改為:return sum ;
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)void fun(int y,int b[],int*m),它的功能是:求出能整除y且是奇數(shù)的各整數(shù),并按從小到大的順序放在b所指的數(shù)組中,這些除數(shù)的個(gè)數(shù)通過形參m返回。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫的若干語句。
#include <conio.h>
#include <stdio.h>
void fun(int y,int b[],int *m)
{
?
}
main()
{
int y,a[500],m,j;
FILE *out;
printf("\nPlease input an integer number:\n");
scanf("%d",&y);
fun(y,a,&m);
for(j=0;j<m;j++)
printf("%d ",a[j]);
printf("\n");
fun(730,a,&m);
out=fopen("outfile.dat","w");
for(j=0;j<m;j++)
fprintf(out,"%d\n",a[j]);
fclose(out);
}
【答案】
int j=1,i=0,k=0,*s=b;
for(j=0;j<=y;j++)
if(j%2!=0)
{
s[i]=j;
i++;
}
for(j=0;j<i;j++)
if(y%s[j]==0)
{
b[k]=s[j];
k++;
}
*m=k;
1.程序填空題
請(qǐng)補(bǔ)充main()函數(shù),該函數(shù)的功能是:計(jì)算兩個(gè)自然數(shù)n和m(m<10000)之間所有數(shù)的和(n和m從鍵盤輸入)。
例如:當(dāng)n=1、m=100時(shí),sum=5050;
當(dāng)n=100、m=1000時(shí),sum=495550。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意;不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
#include <windows.h>
main()
{
int n,m;
long sum;
/**********found**********/
___1___;
system("cls");
printf("Input n,m\n");
scanf("%d,%d",&n,&m);
while(n<=m)
{
/**********found**********/
___2___;
n++;
}
/**********found**********/
printf("sum=%___3___\n",sum);
}
【答案】
(1)sum=0 (2)sum+=n (3)ld?
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:從N個(gè)字符串中找出最長的那個(gè)串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <string.h>
#include <stdio.h>
#define N 5
#define M 81
/**********found**********/
fun(char (*sq)[N])
{
int I; char *sp;
sp=sq[0];
for(i=0;i<N;i++)
if(strlen(sp)<strlen(sq[i]))sp=sq[i];
/**********found**********/
return sq;
}
main()
{
char str[N][M],*longest; int I;
printf("Enter %d lines:\n ",N);
for(i=0;i<N;i++) gets(str[i]);
printf("The %d string :\n ",N);
for(i=0;i<N;i++) puts(str[i]);
longest=fun(str);
printf("The longest string :\n ");
puts(longest);
}
【答案】
(1)將fun(char (*sq)[N]) 改為:
char *fun(char (*sq)[M])
(2)將return sq; 改為:return sp;?
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun,它的功能是計(jì)算并輸出給定整數(shù)n的所有因子(不包括1與自身)的平方和(規(guī)定n的值不大于100)。
例如:主函數(shù)從鍵盤給輸入n的值為56,則輸出為sum=1113。
注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
long fun(int n)
{
?
}
main()
{
int n;
long sum;
printf("Input n:");
scanf("%d",&n);
sum=fun(n);
printf("sum=%ld\n",sum);
}
【答案】
long fun(int n)
{
int i;
long s=0;
for(i=2;i<n;i++)
if(n%i==0) s+=i*i;
return s;
}
1.程序填空題
函數(shù)fun()的功能是把數(shù)組bb中的數(shù)按從小到大排列(數(shù)組的值及元素個(gè)數(shù)從主函數(shù)中輸入)。
例如,輸入 2 3 5 4 1,結(jié)果為1 2 3 4 5。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 100
void fun(int bb[],int n)
{
int I,j,t;
/**********found**********/
for(i=0;___1___;i++)
/**********found**********/
for(j=0;___2___;j++)
if(bb[j]>bb[j+1])
{ t=bb[j];bb[j]=bb[j+1];bb[j+1]=t; }
}
main()
{
int i=0,n=0;
int bb[N];
system("cls");
printf("Input n: \n");
scanf("%d",&n);
printf("Input data: \n");
while(i<n)
{
printf("bb[%d]=",i);
scanf("%d",&bb[i]);
i++;
}
fun(bb,n);
printf("\n*** the result ***\n");
for(i=0;i<n;i++) printf("%4d",bb[i]);
}
【答案】
(1)i<n或i<=n-1
(2)j<n-1或j<=n-2?
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:用遞歸算法計(jì)算斐波拉契級(jí)數(shù)列中第n項(xiàng)的值。從第一項(xiàng)起,斐波拉契級(jí)數(shù)序列為1、1、2、3、5、8、13、21、……例如,若給n輸入7,該項(xiàng)的斐波拉契級(jí)數(shù)值為13。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
long fun(int g)
{
/**********found**********/
switch(g);
{
case 0:return 0;
switch(g)
/**********found**********/
case 1; case 2:return 1;
}
return (fun(g-1)+fun(g-2));
}
main()
{
long fib; int n;
printf("Input n:");
scanf("%d",&n);
printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n",fib);
}
【答案】
(1)將switch(g); 改為:switch(g)
(2)將case 1;case 2: return 1;改為:
case 1:case2:return 1;
3.程序設(shè)計(jì)題
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun(),它的功能是:除了尾部的*號(hào)之外,將字符串中其他*號(hào)全部刪除。形參p已指向字符串中最后一個(gè)字母。在編寫函數(shù)時(shí),不得使用C語言的字符串函數(shù)。
例如,若字符串中的內(nèi)容為****A*BC*DEF*G* *****,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是ABCDEFG* *****。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <conio.h>
#include <stdio.h>
void fun(char *a,char *p)
{
?
}
main()
{
char s[81],*t;
printf("Enter a string:\n ");
gets(s);
t=s;
while(*t) t++;
t--; /*指針t指向字符串尾部*/
while(*t=='*')
t--; /*指針t指向最后一個(gè)字母*/
fun(s,t);
printf("The string afterdeleted:\n");
puts(s);
}
【答案】
void fun(char *a,char *p)
{
char *t=a;
for(;t<=p;t++)
if(*t!='*') *(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;
*a='\0'; /*在字符串尾加上結(jié)束標(biāo)記符*/
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:從鍵盤輸入一組字符串,以“*”結(jié)束輸入,并顯示出這個(gè)字符串。
例如,輸入abcdefghi*,結(jié)果顯示adcdefghi。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 80
main()
{
int i=-1,j=0;
char str[N];
system("cls");
printf("\n Input a string \n");
do
{
i++;
/**********found**********/
scanf(___1___);
/**********found**********/
}while(___2___);
printf("\n**display the string** \n");
while(j<i)
{
/**********found**********/
printf(___3___);
j++;
}
}
【答案】
(1)"%c",&str[i] (2)str[i]!='*'
(3)"%c", str[j]
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:用冒泡法對(duì)6個(gè)字符串按由小到大的順序進(jìn)行排序。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#define MAXLINE 20
/**********found**********/
fun(char *pstr[6])
{
int I, j;
char *p;
for(i=0;i<5;i++)
{
for(j=i+1;j<6;j++)
/**********found**********/
{if(strcmp(*(pstr+i),pstr+j)>0)
{
p=*(pstr+i);
/**********found**********/
*(pstr+i)=pstr+j;
*(pstr+j)=p;
}
}
}
}
main()
{
int I;
char *pstr[6],str[6][MAXLINE];
system("cls");
for(i=0;i<6;i++) pstr[i]=str[i];
printf("Enter 6 string(1 string at each
line):\n ");
for(i=0;i<6;i++) scanf("%s",pstr[i]);
fun(pstr);
printf("The strings after sorting:\n ");
for(i=0;i<6;i++)
printf("%s\n",pstr[i]);
}
【答案】
(1)將fun(char *pstr[6]) 改為:
void fun(char *pstr[6])
(2)將if(strcmp(*(pstr+i),pstr+j)>0) 改為:if(strcmp(*(pstr+i),*(pstr+j))>0)
(3)將*(pstr+i)=pstr+j; 改為:
*(pstr+i)= *(pstr+j);
3.程序設(shè)計(jì)題
學(xué)生的記錄由學(xué)號(hào)和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),它的功能是:把低于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,低于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#define N 8
typedef struct
{char num[10];
double s;
}STREC;
double fun(STREC *a,STREC *b,int *n)
{
?
}
main()
{
STREC s[N]={{"GA05",85},{"GA03",76},
{"GA02",69},{"GA04",85},{"GA01",91},
{"GA07",72},{"GA08",64},{"GA06",87}};
STREC h[N],t;
FILE *out;
int I,j,n;
double ave;
ave=fun(s,h,&n);
printf("The %d student data which is
lower than %7.3f:\n ", n,ave);
for(i=0;i<n;i++)
/*輸出成績低于平均值的學(xué)生記錄*/
printf("%s %4.1f\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out.dat","w");
fprintf(out,"%d\n%7.3f\n",n,ave);
/*輸出平均值*/
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(h[i].s>h[j].s)
{ t=h[i]; h[i]=h[j]; h[j]=t; }
/*將成績由低至高排列*/
for(i=0;i<n;i++)
fprintf(out,"%4.1f\n",h[i].s);
fclose(out);
}
【答案】
double fun(STREC *a,STREC *b,int *n)
{
int i,j=0;
double av=0.0;
for(i=0;i<N;i++)
av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(a[i].s<av) b[j++]=a[i];
*n=j;
return av;
}