全國計算機(jī)等級考試二級C語言練習(xí)題(四)
1.程序填空題
給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,將所有串長超過k的字符串中右邊的字符刪除,只保留左邊的k個字符。Ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#define N 5
#define M 10
/**********found**********/
void fun(char (*ss)___1___int k)
{
int i=0 ;
/**********found**********/
while(i<___2___){
/**********found**********/
ss[i][k]=___3___; i++; }
}
main()
{
char x[N][M]={"Create","Modify","Sort","skip","Delete"};
int I;
printf("The original string\n");
for(i=0;i<N;i++) puts(x[i]);
printf("\n");
fun(x,4);
printf("The string after deleted :\n");
for(i=0;i<N;i++) puts(x[i]);
printf("\n");
}
【答案】
(1)[M],或[10], (2)N或=N-1 (3)'\0'
2.程序修改題
給定程序中,函數(shù)fun的功能是:先從鍵盤上輸入一個3行3列矩陣的各個元素的值,然后輸出主對角線元素之和。
請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun()
{
int a[3][3],sum;
int I,j;
/*********found**********/
1 ;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
/*********found**********/
scanf("%d",a[i][j]);
}
for(i=0;i<3;i++) sum=sum+a[i][i];
printf("sum=%d\n",sum);
}
main()
{
fun();
}
【答案】
(1)填sum=0;
(2)將scanf("%d",a[i][j]); 改為:
scanf("%d",&a[i][j]);
3.程序設(shè)計題
編寫函數(shù)fun,其功能是實(shí)現(xiàn)矩陣(3行3列)的轉(zhuǎn)置(即行列互換)。
例如,輸入下面的矩陣:
100 200 300
400 500 600
700 800 900
程序輸出:
100 400 700
200 500 800
300 600 900
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
int fun(int array[3][3])
{
?
}
main()
{
int I,j;
int array[3][3]={{100,200,300},
{400,500,600},{700,800,900}};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
}
【答案】
int fun(int array[3][3])
{
int j,k,t;
for(j=0;j<3;j++)
for(k=0;k<j;k++)
{
t=s[j][k];
s[j][k]=s[k][j];
s[k][j]=t;
}
}
1.程序填空題
請補(bǔ)充fun函數(shù),該函數(shù)的功能是求能整除k且是偶數(shù)的數(shù),把這些數(shù)保存在數(shù)組a,并按從大到小輸出。
例如,當(dāng)k=20時,依次輸出20 10 8 4 2。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <conio.h>
#include <stdio.h>
void fun(int k,int a[])
{
int I;
int j=0;
for(___1___;i<=k;i++)
if(k%i==0___2___i%2==0)
a[j++]=I;
printf("\n\n ");
for(i=___3___;i>=0;i--)
printf("%d ",a[i]);
}
main()
{
int k=1;
int a[100];
printf("\nPlease input k\n");
scanf("%d",&k);
fun(k,a);
}
【答案】
(1)i=1 (2)&& (3)--j
2.程序修改題
給定程序中,fun函數(shù)的功能是:求出以下分?jǐn)?shù)序列的前n項之和。
2/1、3/2、5/3、8/5、13/8、21/13、……和值通過函數(shù)值返回main函數(shù)。
例如,若n=5,則應(yīng)輸出:8.391667。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
/**********found**********/
fun(int n)
{
int a=2,b=1,c,k;
double s=0.0;
for(k=1;k<=n;k++)
{
s=s+1.0*a/b;
/**********found**********/
c=a;a+=b;b+=c;
}
return(s);
}
main()
{
int n=5;
printf("The value of function is:%lf\n",
fun(n));
}
【答案】
(1)將fun(int n) 改為:double fun(int n)
(2)將c = a;a += b;b += c; 改為:
c = a;a += b;b = c;?
3.程序設(shè)計題
請編寫函數(shù)fun,函數(shù)的功能是:將大于形參m且緊靠m的k個素數(shù)存入xx所指的數(shù)組中。例如,若輸入17、5,則應(yīng)輸出:19、23、29、31、37。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
void fun(int m,int k,int xx[])
{
?
}
main()
{
int m,n,zz[1000] ;
printf( "Please enter two integers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++) printf("%d ",zz[m]);
printf("\n");
}
【答案】
void fun(int m,int k,int xx[])
{
int j,n=0;
while(n<k)
{
m++;
for(j=2; j<m; j++)
if(m%j==0) break;
if(j>=m) xx[n++]=m;
}
}
1.程序填空題
給定程序中,函數(shù)fun的功能是將帶頭結(jié)點(diǎn)的單向鏈表逆置。即若原鏈表中從頭至尾結(jié)點(diǎn)數(shù)據(jù)域依次為:2、4、6、8、10,逆置后從頭至尾結(jié)點(diǎn)數(shù)據(jù)域依次為:10、8、6、4、2。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct node
{int data;
struct node *next;
}NODE;
void fun(NODE *h)
{
NODE *p,*q,*r;
/**********found**********/
p=___1___;
/**********found**********/
if(___2___)return;
q=p->next;
p->next=NULL;
while(q)
{
r=q->next;q->next=p;
/**********found**********/
p=q;q=___3___;
}
h->next=p;
}
NODE*creatlist(int a[])
{
NODE *h,*p,*q; int I;
h=(NODE*)malloc(sizeof(NODE));
h->next=NULL;
for(i=0;i<N;i++)
{
q=(NODE*)malloc(sizeof(NODE));
q->data=a[i];
q->next=NULL;
if(h->next==NULL) h->next=p=q;
else { p->next=q; p=q; }
}
return h;
}
void outlist(NODE *h)
{
NODE *p;
p=h->next;
if(p==NULL)
printf("The list isNULL!\n");
else
{
printf("Head ");
do
{
printf("->%d",p->data);
p=p->next;
}while(p!=NULL);
printf("->End\n");
}
}
main()
{
NODE *head;
int a[N]={2,4,6,8,10};
head=creatlist(a);
printf("The original list:\n");
outlist(head);
fun(head);
printf("The list after inverting :\n");
outlist(head);
}
【答案】
(1)h->next
(2)p==NULL 或p==0 或h->next==NULL
(3)r
2.程序修改題
假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。給定程序中,函數(shù)fun的功能是:刪除數(shù)列中值為x的元素變量,變量n存放的是數(shù)列中元素的個數(shù)。
請改正程序中的錯誤,使其能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define N 20
fun(int *a,int n,int x)
{
int p=0,I;
a[n]=x;
while(x!=a[p])
p=p+1;
/**********found**********/
if(P==n) return-1;
else
{
for(i=p;i<n;i++)
/**********found**********/
a[i+1]=a[i];
return n-1;
}
}
main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90},
x,n,I;
n=10;
printf("The original data :\n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("Input x(to delete): ");
scanf("%d",&x);
printf("Delete : %d\n",x);
n=fun(w,n,x);
if(n==-1)
printf("***Not be found!***\n");
else
{
printf("The data after deleted:\n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("\n");
}
}
【答案】
(1)將if(P==n) return -1; 改為:
if(p==n) return -1;
(2)將a[i+1]=a[i]; 改為:a[i]=a[i+1];?
3.程序設(shè)計題
學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最低的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中。注意,分?jǐn)?shù)最低的學(xué)生可能不止一個,函數(shù)返回分?jǐn)?shù)最低的學(xué)生的人數(shù)。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define N 16
typedef struct
{charnum[10];
int s;
}STREC;
intfun(STREC *a,STREC *b)
{
}
main()
{
STREC s[N]={{"GA05",85},{"GA03",76},
{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},
{"GA08",64},{"GA06",87},
{"GA015",85},{"GA013",91},
{"GA012",64},{"GA014",91},
{"GA011",91},{"GA017",64},
{"GA018",64},{"GA016",72}};
STREC h[N];
int I,n;
FILE *out ;
n=fun(s,h);
printf("The %d lowest Score :\n",n);
for(i=0;i<n; i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out24.dat","w");
fprintf(out,"%d\n",n);
for(i=0;i<n;i++)
fprintf(out,"%4d\n",h[i].s);
fclose(out);
}
【答案】
int fun(STREC *a,STREC *b)
{
int j,n=0; double min=100.0;
for(j=0;j<N;j++)
if(min>a[j].s)
min=a[j].s;
for(j=0;j<N;j++)
if(a[j].s==min)
b[n++]=a[j];
return n;
}
1.程序填空題
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是重寫形參filena me所指文件中最后一個學(xué)生的數(shù)據(jù),即用新的學(xué)生數(shù)據(jù)覆蓋該學(xué)生原來的數(shù)據(jù),其他學(xué)生的數(shù)據(jù)不變。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#define N 5
typedef struct student
{
long sno;
char name[10];
float Score[3];
}STU;
void fun(char*filename,STU n)
{ FILE *fp;
/**********found**********/
fp=fopen(___1___,""rb+"");
/**********found**********/
fseek(fp,-1L*sizeof(STU),___2___);
/**********found**********/
fwrite(___3___,sizeof(STU),1,fp); fclose(fp);
}
main()
{
STU t[N]={{10001,""MaChao"",91,92,77}, {10002,""CaoKai"",75,60,88}, {10003,""LiSi"",85,70,78},{10004,""FangFang"",90,82,87},{10005,""ZhangSan"",95,80,88}};
STU n={10006,""ZhaoSi"",55,70,68},ss[N];
int I,j;FILE *fp;
fp=fopen(""student.dat"",""wb"");
fwrite(t,sizeof(STU),N,fp);
fclose(fp);
fp=fopen(""student.dat"",""rb"");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf(""\nThe original data :\n\n"");
for(j=0;j<N;j++)
{
printf(""No:%ld Name:%-8s Scores: "",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)
printf(""%6.2f"",ss[j].Scor
Chapter_3
e[i]);
printf(""\n"");
}
fun(""student.dat"", n);
printf(""The data after modifing :\n"");
fp=fopen(""student.dat"",""rb"");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
for(j=0;j<N;j++)
{
printf(""No:%ld Name:%-8s Scores: "", ss[j].sno,ss[j].name);
for(i=0;i<3;i++)
printf(""%6.2f"",ss[j].Score[i]);
printf(""\n"");
}
}
【答案】
(1)filename (2)SEEK_END或2 (3)&n
2.程序修改題
給定程序中,函數(shù)fun的功能是:在字符串的最前端加入n個*號形成新串,并且覆蓋原串。注意:字符串的長度最長允許為79。
請改正函數(shù)fun中指定位置的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
void fun(char s[],int n)
{
char a[80],*p;
int I;
/**********found***********/
s=p;
for(i=0;i<n;i++) a[i]='*';
do
{
a[i]=*p; i++;
}
/**********found***********/
while(*p);
a[i]=0;
strcpy(s,a);
}
main()
{
int n;char s[80];
printf("\nEnter a string : ");
gets(s);
printf("The string %s\n",s);
printf("Enter n ( number of * ) : ");
scanf("%d",&n);
fun(s,n);
printf("The string after inster:%s",s);
}
【答案】
(1)將s=p; 改為:p=s;
(2)將while(*p); 改為:while(*p++);?
3.程序設(shè)計題
N名學(xué)生的成績已在主函數(shù)中放入一個帶頭節(jié)點(diǎn)的鏈表結(jié)構(gòu)中,h指向鏈表的頭節(jié)點(diǎn)。請編寫函數(shù)fun,其功能是:找出學(xué)生的最低分,由函數(shù)值返回。
注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun(STREC *h)
{
?
}
STREC * creat (double *s)
{
STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i<N)
{
q=(STREC*)malloc(sizeof(STREC));
p->s=s[i]; i++; p->next=q; p=q;
}
p->next=NULL;
return h; /*返回鏈表的首地址*/
}
outlist(STREC *h)
{
STREC *p;
p=h;
printf("head");
do
{printf("->%2.0f ",p->s);p=p->next;}
while(p!=NULL);
printf("\n\n");
}
main()
{
double s[N]={56,89,76,95,91,68,75,85},
min;
STREC *h;
h=creat(s);
outlist(h);
min=fun(h);
printf("min=%6.1f\n",min);
}
【答案】
double fun(STREC *h)
{
double min=h->s;
while(h!=NULL)
{
if(min>h->s) min=h->s;
h=h->next;
}
return min;
}
1.程序填空題
給定程序中,函數(shù)fun的功能是將a和b所指的兩個字符串轉(zhuǎn)換成面值相同的整數(shù),并進(jìn)行相加作為函數(shù)值返回,規(guī)定字符串中只含9個以下數(shù)字字符。
例如,主函數(shù)中輸入字符串:32486和12345,在主函數(shù)中輸出的函數(shù)值為:44831。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 9
long ctod(char *s )
{
long d=0;
while(*s)
if(isdigit(*s)) {
/**********found**********/
d=d*10+*s-___1___;
/**********found**********/
___2___; }
return d;
}
long fun(char *a,char *b)
{
/**********found**********/
return___3___;
}
main()
{
char s1[N],s2[N];
do
{
printf("Input string s1 : ");
gets(s1);
}while(strlen(s1)>N);
do
{
printf("Input string s2 : ");
gets(s2);
}while(strlen(s2)>N);
printf("The result is: %ld\n",fun(s1,s2));
}
【答案】
(1)'0'或48
(2)s++
(3)ctod(a)+ctod(b)?
2.程序修改題
給定程序中,函數(shù)fun的功能是:計算函數(shù)F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。
例如,當(dāng)x的值為9、y的值為11、z的值為15時,函數(shù)值為-3.50。
請改正程序中的錯誤,使其能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/**********found**********/
#define FU(m,n) (m/n)
float fun(float a,float b,float c)
{
float value;
value=FU(a+b,a-b)+FU(c+b,c-b);
/**********found**********/
Return(Value);
}
main()
{
float x,y,z,sum;
printf("Input x y z: ");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y||y==z)
{printf("Data error!\n");exit(0);}
sum=fun(x,y,z);
printf("The result is : %5.2f\n",sum);
}
【答案】
(1)將FU(m,n)(m/n) 改為:FU(m,n)((m)/(n))
(2)將Return(Value); 改為:return(value);
3.程序設(shè)計題
規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:將字符串中的前導(dǎo)*號全部刪除,中間和尾部的*號不刪除。
例如,字符串中的內(nèi)容為:*******A*BC*DEF *G****,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:A*BC*D EF*G****。在編寫函數(shù)時,不得使用C語言提供的字符串。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
voidfun(char *a)
{
?
}
main()
{
char s[81];
printf("Enter a string:\n");
gets(s);
fun(s);
printf("The string after deleted:\n");
puts(s);
}
【答案】
fun(char *s)
{
int k=0,j=0,n=strlen(s);
while(s[k]=='*')
k++;
for( ; k<n+1; k++)
s[j++]=s[k];
}
1.程序填空題
給定程序中函數(shù)fun的功能是:將a所指4×3矩陣中第k行的元素與第0行元素交換。
例如,有下列矩陣:
1 2 3
4 5 6
7 8 9
10 11 12
若k為2,程序執(zhí)行結(jié)果為:
7 8 9
4 5 6
1 2 3
10 11 12
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#define N 3
#define M 4
/**********found**********/
void fun(int(*a)[N],int___1___)
{
int I,j,temp;
/**********found**********/
for(I=0;I<___2___;I++)
{
temp=a[0][I];
/**********found**********/
a[0][I]=___3___;
a[k][I]=temp;
}
}
main()
{
int x[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}},I,j;
printf("The array before moving:\n");
for(I=0;I<M;I++)
for(j=0;j<N;j++)
printf("%3d",x[I][j]);
printf("\n\n");
fun(x,2);
printf("The array after moving:\n\n");
for(I=0;I<M;I++)
{
for(j=0;j<N;j++)
printf("%3d",x[I][j]);
printf("\n\n");
}
}
【答案】
(1)k (2)N 或 =N-1 (3)a[k][i]?
2.程序修改題
給定程序中,函數(shù)fun的功能是:給一維數(shù)組a輸入任意4個整數(shù),并按下例的規(guī)律輸出。例如,輸入1、2、3、4程序運(yùn)行后將輸出以下方陣:
4 1 2 3
3 4 1 2
2 3 4 1
1 2 3 4
請改正函數(shù)fun中指定部位的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#define M 4
/**********found**********/
void fun(int a)
{
int I,j,k,m;
printf("Enter 4 number : ");
for(i=0;i<M;i++) scanf("%d",&a[i]);
printf("The result :\n");
for(i=M;i>0;i--)
{
k=a[M-1];
for(j=M-1;j>0;j--)
/**********found**********/
aa[j]=a[j-1];
a[0]=k;
for(m=0;m<M;m++) printf("%d ",a[m]);
printf("\n");
}
}
main()
{
int a[M];
fun(a);
printf("\n\n");
}
【答案】
(1)將void fun(int a) 改為:
void fun(int a[])
(2)將aa[j]=a[j-1]; 改為:a[j]=a[j-1];
3.程序設(shè)計題
請編寫函數(shù)fun,其功能是計算并輸出下列多項式的值:
Fn=1+1/1!+1/2!+1/3!+1/4!+…+1/m!
例如,若主函數(shù)從鍵盤給m輸入5,則輸出為F=2.716667。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。
#include <stdio.h>
double fun(int m)
{
?
}
main()
{
int m;
double f;
printf("Input m: ");
scanf("%d",&m);
f=fun(m);
printf("F=%f\n",f);
}
【答案】
double t,s=1.0;
int i,j;
for(i=1;i<=m;i++)
{
t=1.0;
for(j=1;j<=i;j++)
t*=j;
s+=1.0/t;
}
return s;
1.程序填空題
給定程序中,函數(shù)fun的功能是:把形參s所指字符串中最右邊的n個字符復(fù)制到形參t所指字符數(shù)組中,形成一個新串。若s所指字符串的長度小于n,則將整個字符串復(fù)制到形參t所指字符數(shù)組中。
例如,形參s所指的字符串為:abcdefgh,n的值為5,程序執(zhí)行后t所指字符數(shù)組中的字符串應(yīng)為:defgh。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s,int n,char *t)
{
int len,I,j=0;
len=strlen(s);
/**********found**********/
if(n>=len) strcpy(___1___);
else
{
for(i=len-n;i<=len-1;i++)
/**********found**********/
t[j++]=___2___;
/**********found**********/
t[j]=___3___;
}
}
main()
{
char s[N],t[N];
int n;
printf("Enter a string: "); gets(s);
printf("Enter n:"); scanf("%d",&n);
fun(s,n,t);
printf("The string t : ");
puts(t);
}
【答案】
(1)t, s (2)s[i] (3)'\0'
2.程序修改題
給定程序中,函數(shù)fun的功能是:統(tǒng)計一個無符號整數(shù)中各位數(shù)字值為零的個數(shù),通過形參傳回主函數(shù);并把該整數(shù)中各位上最大的數(shù)字值作為函數(shù)值返回。例如,若輸入無符號整數(shù)30800,則數(shù)字值為零的個數(shù)為3,各位上數(shù)字值最大的是8。
請改正函數(shù)fun中指定部位的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun(unsigned n,int *zero)
{
int count=0,max=0,t;
do
{
t=n%10;
/**********found**********/
if(t=0)
count++;
if(max<t) max=t;
n=n/10;
}while(n);
/**********found**********/
zero=count;
return max;
}
main()
{
unsigned n; int zero,max;
printf("Input n(unsigned): ");
scanf("%d",&n);
max=fun(n,&zero);
printf("The result:max=%d zero=%d\n",
max,zero);
}
【答案】
(1)將 if(t=0) 改為:if(t==0)
(2)將 zero=count; 改為:*zero=count;
3.程序設(shè)計題
請編寫函數(shù)fun,其功能是:計算并輸出:
例如,若主函數(shù)從鍵盤給m輸入10后,則輸出為F=104.478749。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。
#include <math.h>
#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\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 f=1.0,p=1.0;
for(i=2;i<=m;i++)
{
p+=pow(i,0.5);
f+=p;
}
return f;