全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言練習(xí)題(十)
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把數(shù)組aa中元素下標(biāo)為奇數(shù)的元素按從大到小的順序重新保存在原數(shù)組中,其他元素位置不變。
例如,輸入“33、67、42、58、25、76、85、16、41、56”,則輸出“33、76、42、67、25、58、85、56、41、16”。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>‘’
#include <windows.h>
#define N 10
void fun(int aa[])
{
int I,j,t;
/**********found**********/
for(___1___; i<N; i=i+2)
{
for(j=I;j<N;j=j+2)
if(aa[i]<aa[j])
{
/**********found**********/
___2___;
aa[j]=aa[i];
/**********found**********/
___3___;
}
}
}
main()
{
int I;
int aa[N]={33,67,42,58,25,76,85,
16,41,56};
system("cls");
printf("\n***original list***\n");
for(i=0;i<N;i++) printf("%4d",aa[i]);
fun(aa);
printf("\n***new list***\n");
for(i=0;i<N;i++)
printf("%4d",aa[i]);
}
【答案】
(1)i=1 (2)t=aa[j] (3)aa[i]=t?
2.程序修改題
在給定程序中建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun()的作用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
typedef struct aa
{ int data;
struct aa*next;
}NODE;
/**********found**********/
fun(NODE *h)
{
int max=-1;
NODE *p;
p=h->next;
while(p)
{
if(p->data>max)
max=p->data;
/**********found**********/
p=h->next;
}
return max;
}
outresult(int s,FILE *pf)
{ fprintf(pf,"The max in link :%d\n ",s); }
NODE *creatlink(int n, int m)
{
NODE *h,*p,*s,*q;
int I,x;
h=p=(NODE *)malloc(sizeof(NODE));
h->data=9999;
for(i=1;i<=n;i++)
{
s=(NODE*)malloc(sizeof(NODE));
s->data=rand()%m;
s->next=p->next;
p->next=s; p=p->next;
}
p->next=NULL;
return h;
}
outlink(NODE *h,FILE *pf)
{
NODE *p;
p=h->next;
fprintf(pf,"\n The LIST :\n HEAD");
while(p)
{
fprintf(pf,"->%d",p->data);
p=p->next;
}
fprintf(pf,"\n");
}
main()
{
NODE *head; int m;
system("cls");
head=creatlink(12,100);
outlink(head,stdout);
m=fun(head);
printf("\nThe RESULT :\n");
outresult(m,stdout);
}
【答案】
(1)將 fun(NODE *h) 改為:int fun(NODE *h)
(2)將 p=h->next; 改為:p=p->next
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),它的功能是計(jì)算s=(ln(1)+ln(2)+ ln(3)+…+ln(m))0.5的值。在C語(yǔ)言中可調(diào)用log(n)函數(shù)求ln(n)。
例如,若m的值為20,則fun()函數(shù)值為6.506583。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <windows.h>
double fun(int m)
{
?
}
main()
{
system("cls");
printf("%f\n",fun(20));
}
【答案】
double fun(int m)
{
int i;
double s=0.0;
for(i=1;i<=m;i++)
s=s+log((double)i);
return sqrt(s);
}
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:求100(不包括100)以內(nèi)能被2或5整除,但不能同時(shí)被2和5整除的自然數(shù)。結(jié)果保存在數(shù)組bb中,函數(shù)fun()返回?cái)?shù)組bb元素的個(gè)數(shù)。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 100
int fun(int bb[])
{
int I,j;
/**********found**********/
for(___1___;i<100;i++)
if((i%2!=0&&i%5==0)||(i%2==0&&i%5!=0))
/**********found**********/
___2___;
/**********found**********/
___3___;
}
main()
{
int I,n;
int bb[N];
system("cls");
n=fun(bb);
for(i=0;i<n;i++)
{
if(i%10==0) printf("\n");
printf("%4d",bb[i]);
}
}
【答案】
(1)i=1,j=0 (2)bb[j++]=i (3)return j?
2.程序修改題
下列給定程序中,函數(shù)fun()的作用是:將字符串tt中的小寫(xiě)字母都改為對(duì)應(yīng)的大寫(xiě)字母,其他字符不變。例如,若輸入“edS,dAd”,則輸出“EDS,DAD”。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
/**********found**********/
char fun(char tt[])
{
int I;
for(i=0;tt[i];i++)
{
/**********found**********/
if((tt[i]>='A')&&(tt[i]<= 'Z'))
tt[i]-=32;
}
return(tt);
}
main()
{
int I;
char tt[81];
system("cls");
printf("Please enter a string: ");
gets(tt);
printf("The result string is: \n%s",
fun(tt));
}
【答案】
(1)將char fun(char tt[]) 改為:
char*fun(char tt[])
(2)將 if((tt[i]>='A')&&(tt[i]<= 'Z')) 改為:if((tt[i]>='a')&&(tt[i]<= 'z'))?
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),其功能是,計(jì)算并輸出下列多項(xiàng)式值:
S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)
例如,若主函數(shù)從鍵盤(pán)給n輸入8后,則輸出為S=0.662872。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
double fun(int n)
{
?
}
main()
{
int n;
double s;
printf("Input n: ");
scanf("%d",&n);
s=fun(n);
printf("s=%f\n ",s);
}
【答案】
double fun(int n)
{
int i;
double s=0.0;
for(i=1; i<=n; i++)
s=s+(1.0/(2*i-1)-1.0/(2*i));
return s;
}
1.程序填空題
請(qǐng)補(bǔ)充fun函數(shù),該函數(shù)的功能是求一維數(shù)組a[N]的平均值,并對(duì)所得結(jié)果進(jìn)行四舍五入保留兩位小數(shù)。例如,當(dāng)a[10]={ 22.1,13.3,5.3,56.4,11.0,12.7,24.5,42,1.2,9.9}時(shí),輸出結(jié)果為:average=19.840000。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
double fun(double a[10])
{
int I;
long temp;
double average=0.0;
double sum=0.0;
for(i=0;i<10;i++)
___1___;
average=sum/10;
average=___2___;
temp=___3___;
average=(double)temp/100;
return average;
}
main()
{
double average,a[10]={22.1,13.3,5.3, 56.4,11.0,12.7,24.5,42,1.2,9.9};
int I;
printf("\nThe data :\n");
for(i=0;i<10;i++)
printf("%6.1f",a[i]);
printf("\n\n");
average=fun(a);
printf("The average=%f\n\n",average);
}
【答案】
(1)sum+=a[i]
(2)average*1000
(3)(average+5)/10
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是,根據(jù)以下公式求π的值,并作為函數(shù)值返回。
π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9?????
例如,給指定精度的變量eps輸入0.0005時(shí),應(yīng)當(dāng)輸出Pi=3.140578。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <math.h>
double fun(double eps)
{
double s,t; int n=1;
s=0.0;
/**********found**********/
t=1;
/**********found**********/
while(t>eps)
{
s+=t;
t=t*n/(2*n+1);
n++;
}
/**********found**********/
return(s);
}
main()
{
double x;
printf("Please enter a precision: ");
scanf("%lf",&x);
printf("Pi=%1f\n",fun(x));
}
【答案】
(1)將 t=1; 改為:t=1.0;
(2)將 while(t>eps) 改為:while(t>=eps)
(3)將 return(s); 改為:return(2*s);或return(s*2);
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),其功能是:計(jì)算并輸出給定10個(gè)數(shù)的方差。
例如,給定的10個(gè)數(shù)為95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,則輸出為S=11.730729。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <math.h>
#include <stdio.h>
double fun(double x[10])
{
?
}
main()
{
double s,x[10]={95.0,89.0,76.0,65.0,
88.0,72.0,85.0,81.0,90.0,56.0};
int I;
printf("\nThe original data is:\n");
for(i=0;i<10;i++)
printf("%6.1f ",x[i]);
printf("\n\n ");
s=fun(x);
printf("s=%f\n\n ",s);
}
【答案】
double fun(double x[10])
{
double x1=0.0,s=0.0;
int i;
for(i=0;i<10;i++)
x1=x1+x[i];
x1=x1/10;
for(i=0;i<10;i++)
s=s+(x[i]-x1)*(x[i]-x1);
return sqrt(s/10);
}
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:交換數(shù)組aa中最大和最小兩個(gè)元素的位置,結(jié)果依然保存在原數(shù)組中,其他元素位置不變。注意數(shù)組aa中沒(méi)有相同元素。
例如,輸入“33、67、42、58、25、76、85、16、41、56”,則輸出“33、67、42、58、25、76、16、85、41、56”。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 10
void fun(int aa[])
{
int I,j,t;
int max=0,min=0;
for(i=0;i<N;i++)
{
/**********found**********/
if(___1___)
max=I;
/**********found**********/
if(___2___)
min=I;
}
t=aa[max];
/**********found**********/
___3___;
aa[min]=t;
}
main()
{
int I;
int aa[N]={33,67,42,58,25,76,85,16,41,56};
system("cls");
printf("\n***original list***\n");
for(i=0;i<N;i++)
printf("%4d",aa[i]);
fun(aa);
printf("\n***new list***\n");
for(i=0;i<N;i++) printf("%4d",aa[i]);
}
【答案】
(1)aa[max]<aa[i]
(2)aa[min]>aa[i]
(3)aa[max]=aa[min]?
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:求出兩個(gè)數(shù)的最大公約數(shù),并作為函數(shù)值返回。
例如,若給num1和num2輸入49和21,則輸出的最大公約數(shù)為7;若給num1和num2分別輸入27和81,則輸出最大公約數(shù)為27。
請(qǐng)改正函數(shù)fun()中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
int fun(int a, int b)
{
int r,t;
if(a<b)
/**********found**********/
{ t=a; b=a; a=t; }
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b; }
/**********found**********/
return(a);
}
main()
{
int num1,num2,a;
printf("Input num1 num2: ");
scanf("%d%d",&num1,&num2);
printf("num1=%d num2=%d\n\n",
num1,num2);
a=fun(num1,num2);
printf("The maximun common divisor is
%d\n",a);
}
【答案】
(1)將 { t=a;b=a;a=t;} 改為:
{ t=a;a=b;b=t;}
(2)將 return(a); 改為:return (b);
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun。它的功能是求出費(fèi)波那其數(shù)列的第n項(xiàng)的值。
費(fèi)波那其數(shù)列,1,1,2,3,5,8,13……
題目:
#include<stdio.h>
int fun(int n)
{
?
}
void main()
{
int I;
for(i=1;i<=10;i++)
printf("%d ",fun(i));
printf("\n");
}
【答案】
int fun(int n)
{
if(n==1||n==2)
return 1;
else return fun(n-1)+fun(n-2);
}
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把字符下標(biāo)為非素?cái)?shù)的字符從字符串str中刪除,把字符下標(biāo)為素?cái)?shù)的字符重新保存在字符串str中。字符串str從鍵盤(pán)輸入,其長(zhǎng)度作為參數(shù)傳入函數(shù)fun()。
例如,輸入“abcdefghijkl”,輸出“cdfhl”。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 80
void fun(char s[],int n)
{
int I, j, k, flag;
/**********found**********/
___1___;
for(i=0;i<n;i++)
{
if(i>1)
s[k++]=s[i];
flag=1;
/**********found**********/
for(___2___;j<i&&flag;j++)
if(i%j==0)
{
flag=0;
/**********found**********/
___3___;
}
}
s[k]='\0';
}
main()
{
int i=0,strlen=0;
char str[N];
system("cls");
printf("Input a string:\n");
gets(str);
while(str[i]!='\0')
{ strlen++; i++; }
fun(str, strlen);
printf("\n*** display string ***\n");
puts(str);
}
【答案】
(1)k=0 (2)j=2 (3)k—
2.程序修改題
下列給定程序中,函數(shù)fun的功能是:計(jì)算n的5次方的值(規(guī)定2<n<8),通過(guò)形參指針傳回主函數(shù),并計(jì)算該值的個(gè)位、十位、百位上數(shù)字之和作為函數(shù)值返回。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <math.h>
int fun(int n,int *q)
{
int b,c,I;
/********found********/
b=0;
/*******found********/
c=1;
for(i=1;i<=5;i++)
b=b*n;
*q=b;
for(i=1;i<=3;i++)
{
c=c+b%10;
/*******found*********/
c=c/10;
}
return c;
}
main()
{
int n,sum,a;
do
{
printf("\nEnter n(2<n<8):");
scanf("%d",&n);
}while(n<=2 || n>=8);
sum=fun(n,&a);
printf("\n\nThe result:\n value=%d sum=%d\n\n",a,sum);
}
【答案】
(1)將b=0;改為:b=1; (2)將c=1;改為:c=0; (3)將c=c/10;改為:b=b/10;?
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)一個(gè)函數(shù)fun(),它的功能是:找出一維數(shù)組元素中最大的值和它所在的下標(biāo),最大值和它所在的下標(biāo)通過(guò)形參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。
主函數(shù)中x是數(shù)組名,n是x中的數(shù)據(jù)個(gè)數(shù),max存放最大值,index存放最大值所在元素的下標(biāo)。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdlib.h>
#include <stdio.h>
void fun(int a[],int n,int *max,int *d)
{
?
}
main()
{
int I,x[20],max,index,n=10;
randomize();
for(i=0;i<=n;i++)
{
x[i]=rand()%50;
printf("%4d",x[i]); /*輸出一個(gè)隨機(jī)數(shù)組*/
}
printf("\n");
fun(x,n,&max,&index);
printf("Max=%5d,Index=%4d\n",
max,index);
}
【答案】
void fun(int a[],int n,int *max,int *d)
{
int i;
*max=a[0];
*d=0;
for(i=0;i<n;i++)
if(*max<a[i])
{ *max=a[i];*d=i; }
}
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:從鍵盤(pán)輸入一個(gè)下標(biāo)n,把數(shù)組aa中比元素aa[n]小的元素放在它的左邊,比它大的元素放在它的右邊,排列成的新數(shù)組仍然保存在原數(shù)組中。
例如,數(shù)組aa={33,67,42,58,25,76,85,16,41,56},輸入3。
結(jié)果輸出“33,42,25,16,41,56,58,67,76,85”。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 10
void fun(int aa[],int n)
{
int I,j=0,k=0,t;
int bb[N];
t=aa[n];
for(i=0;i<N;i++)
{
if(aa[i]>t) bb[j++]=aa[i];
if(aa[i]<t) aa[k++]=aa[i];
}
/**********found**********/
___1___;
/**********found**********/
for(i=0;___2___;i++,k++)
aa[k]=bb[i];
}
main()
{
int I,n;
int aa[N]={33,67,42,58,25,76,85,16,41,56};
system("cls");
printf("\n*** original list ***\n");
for(i=0; i<N; i++)
printf("%4d",aa[i]);
printf("\n suffix n\n");
scanf("%d",&n);
fun(aa,n);
printf("\n*** new list ***\n");
for(i=0; i<N; i++)
printf("%4d",aa[i]);
}
【答案】
(1)aa[k++]=t (2)i<j
2.程序修改題
下列給定程序中函數(shù)fun()的功能是:從n個(gè)學(xué)生的成績(jī)中統(tǒng)計(jì)出高于平均分的學(xué)生人數(shù),人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲(chǔ)單元中。
例如輸入8名學(xué)生的成績(jī):85、65.5、69、95.5、87、55、62.5、75。則高于平均分的學(xué)生人數(shù)為4(平均分為74.312500)。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define N 20
int fun(float *s,int n,float *aver)
{
/**********found**********/
int ave,t=0;
int count=0,k,I;
for(k=0;k<n;k++) t+=s[k];
ave=t/n;
for(i=0;i<n;i++)
/**********found**********/
if(s[i]<ave)
count++;
/**********found**********/
aver=ave;
return count;
}
main()
{
float s[30],aver;
int m,I;
system("cls");
printf("Please enter m: ");
scanf("%d",&m);
printf("Please enter %d mark :\n",m);
for(i=0;i<m;i++)
scanf("%f",s+i);
printf("\nThe number of students :%d\n",
fun(s,m,&aver));
printf("Ave=%f\n",aver);
}
【答案】
(1)將 int ave,t=0; 改為:
float ave, t=0.0;
(2)將 if(s[i]<ave) 改為:if(s[i]>ave)
(3)將 aver=ave; 改為:*aver=ave;
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:計(jì)算并輸出m(包括m)以內(nèi)能被3或7整除的所有自然數(shù)的倒數(shù)之和。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
double fun(int m)
{
?
}
main()
{
int m;
double f;
FILE *out;
printf("\nInput m: ");
scanf("%d",&m);
f=fun(m);
printf("\n\nf=%f\n",f);
out=fopen("outfile.dat","w");
for(m=0;m<10;m++)
fprintf(out,"%f\n",fun(m+20));
fclose(out);
}
【答案】
int i;
double sum=0.0;
for(i=1;i<=m;i++)
if(i%3==0||i%7==0)
sum+=1.0/i;
return sum;
1.程序填空題
給定程序中,函數(shù)fun的功能是:找出100至x(x≤999)之間各位上的數(shù)字之和為15的所有整數(shù),然后輸出;符合條件的整數(shù)個(gè)數(shù)作為函數(shù)值返回。
例如,當(dāng)n值為500時(shí),符合條件的整數(shù)共有26個(gè)。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
fun(int x)
{
int n,s1,s2,s3,t;
/**********found**********/
n=___1___;
t=100;
/**********found**********/
while(t<=___2___)
{
s1=t%10; s2=(t/10)%10; s3=t/100;
if(s1+s2+s3==15)
{ printf("%d ",t); n++; }
/**********found**********/
___3___;
}
return n;
}
main()
{
int x=-1;
while(x>999||x<0)
{
printf("Please input(0<x<=999): ");
scanf("%d",&x);
}
printf("The result is: %d\n",fun(x));
}
【答案】
(1)0 (2)x (3)t++
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從低到高的順序找出前m(m≤10)名學(xué)生來(lái),并將這些學(xué)生數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)區(qū)的首地址作為函數(shù)值返回。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <alloc.h>
#include <windows.h>
#define N 10
typedef struct ss
{char num[10];
int s;
}STU;
STU *fun(STU a[], int m)
{
STU b[N],*t;
int I,j,k;
/**********found**********/
*t=calloc(m,sizeof(STU));
for(i=0;i<N;i++) b[i]=a[i];
for(k=0;k<m;k++)
{
/**********found**********/
for(i=j=0;i<N;j++)
if(b[i].s<b[j].s) j=I;
/**********found**********/
t[k].s=b[j].s;
b[j].s=100;
}
return t;
}
outresult(STU a[],FILE *pf)
{
int I;
for(i=0;i<N;i++)
fprintf(pf,"No=%sMark=%d\n",a[i].num,
a[i].s);
fprintf(pf,"\n\n");
}
main()
{
STU a[N]={{"A01",77},{"A02",85},
{"A03",96},{"A04",65},{"A05",75},
{"A06",96},{"A07",76},{"A08",63},
{"A09",69},{"A10",78}};
STU*pOrder;
int I,m;
system("cls");
printf("***THE RESULT***\n");
outresult(a,stdout);
printf("Give the number of the students
who have lower score: ");
scanf("%d",&m);
while(m>10)
{
printf("Give the number of the students
who have lower score: ");
scanf("%d",&m);
}
pOrder=fun(a,m);
printf("***THE RESULT***\n");
printf("The low :\n");
for(i=0;i<m;i++)
printf("%s %d\n",pOrder[i].num,
pOrder[i].s);
free(pOrder);
}
【答案】
(1)將*t=calloc(m,sizeof(STU));改為:
t=calloc(m,sizeof(STU));
(2)將for (i=j=0;i<N;j++)改為:
for (i=j=0;i<N;i++)
(3)將t[k].s=b[j]. s;改為:t[k]=b[j];?
3.程序設(shè)計(jì)題
下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動(dòng)賦值。請(qǐng)編寫(xiě)函數(shù)fun(int a[ ][N]),該函數(shù)的功能是:使數(shù)組左下半三角元素中的值全部置成0。例如a數(shù)組中的值為:
1 9 8
2 6 7
3 4 5
則返回主程序后a數(shù)組中的值應(yīng)為:
0 9 8
0 0 7
0 0 0
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define N 5
int fun(int a[][N])
{
?
}
main()
{
int a[N][N],I,j;
system("cls");
printf("*****The array*****\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%10;
printf("%4d",a[i][j]);
}
printf("\n");
}
fun(a);
printf("THE RESULT\n");
for(i=0; i<N; i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
【答案】
int fun(int a[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++) a[i][j]=0;
}