全國計(jì)算機(jī)等級(jí)考試二級(jí)C語言練習(xí)題(三)
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表并輸出到文件file.dat和屏幕上,各結(jié)點(diǎn)的值為對(duì)應(yīng)的下標(biāo),鏈表的結(jié)點(diǎn)數(shù)及輸出的文件名作為參數(shù)傳入。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include<stdio.h>
#include<stdlib.h>
typedef struct s
{
int data;
struct s *next;
}NODE;
void fun(int n,char *filename)
{
NODE *h,*p,*s ;
FILE *f;
int I;
h=p=(NODE *)malloc(sizeof(NODE));
h->data=0;
for(i=1;i<n;i++)
{
s=(NODE *)malloc(sizeof(NODE));
s->___1___;
___2___;
p=___3___;
}
p->next=NULL;
if((f=fopen(filename,"w"))==NULL)
{
printf("Can not open file.dat!");
exit(0);
}
p=h;
fprintf(f,"THE LIST\n");
printf("THE LIST\n");
while(p)
{
fprintf(f,"%3d",p->data);
printf("%3d",p->data);
if(p->next!=NULL)
{
fprintf(f,"->");
printf("->");
}
p=p->next;
}
fprintf(f,"\n");
printf("\n");
fclose(f);
p=h;
while(p)
{
s=p;
p=p->next;
free(s);
}
}
main()
{
char *filename="file.dat";
int n;
printf("\nPlease input n:");
scanf("%d",&n);
fun(n,filename);
}
【答案】
void fun(int a,int b,long *c)
{
*c=a/10*1000+a%10*10+b/10*100+b%10;
}?
2.程序修改題
下面程序中函數(shù)fun的功能是:將長整數(shù)s中每個(gè)十進(jìn)制位上為奇數(shù)的數(shù)取出,形成一個(gè)新數(shù)在t中,t中數(shù)字順序按原整數(shù)中數(shù)字的逆序排列。
例如,當(dāng)s=87653142時(shí),t=1357。
請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <conio.h>
#include <stdio.h>
#include <windows.h>
/**********found**********/
void fun(long s,long t)
{
int d;
*t=0;
while(s>0)
{
/**********found**********/
d=s/10;
if(d%2==1)
*t=*t*10+d;
s/=10;
}
}
main() /* 主函數(shù) */
{
long s, t;
system("cls");
printf("\nPlease enter s:");
scanf(“%ld”,&s);
fun(s,&t);
printf("the result is: %ld\n",t);
}
【答案】
(1)將void fun(long s, long t) 改為:
void fun(long s, long *t)
(2)將d = s/10; 改為:d = s%10;?
3.程序設(shè)計(jì)題
給定程序中,函數(shù)fun的功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的千位和十位上,b數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=4152。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
void fun(int a,int b,long *c)
{
?
}
main()
{
int a,b; long c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is: %d\n", c);
}
【答案】
void fun(int a,int b,long *c)
{
*c=a/10*1000+a%10*10+b/10*100+b%10;
}
1.程序填空題
給定程序中,函數(shù)fun的功能是計(jì)算下式:
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
double fun(double e)
{
int I; double s,x;
/**********found**********/
s=0; i=___1___;
x=1.0;
while(x>e)
{
/**********found**********/
___2___;
/**********found**********/
x=(2*i-1)*(2*i+1)/(___3___*(2*i));
s=s+x;
}
return s;
}
main()
{
double e=1e-6;
printf("The result is: %f\n",fun(e));
}?
【答案】
(1)0
(2)i++
(3)(2.0*i)或(float)(2*i)或?(double)(2*i)
2.程序修改題
給定程序中,函數(shù)fun的功能是:判斷ch中的字符是否與str所指串中的某個(gè)字符相同;若相同,什么也不做,若不同,則將其插在串的最后。
請(qǐng)改正程序中的錯(cuò)誤,使其能進(jìn)行正確的操作。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
/**********found**********/
void fun(char str,char ch)
{
while(*str&&*str!=ch) str++;
/**********found**********/
if(*str==ch)
{
str[0]=ch;
/**********found**********/
str[1]='0';
}
}
main()
{
char s[81],c ;
printf("Please enter a string:\n");
gets(s);
printf("Please enter the character to
search: ");
c=getchar();
fun(s,c);
printf("The result is %s\n", s);
}
【答案】
(1)將void fun(char str,char ch) 改為:
void fun(char *str,char ch )
(2)將if(*str==ch) 改為:if(*str!=ch)
(3)將str[1]='0'; 改為:str[1]='\0';?
3.程序設(shè)計(jì)題
下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給主函數(shù)中的變量r。
例如,若c數(shù)組中的值為:
則返回主程序后r的值應(yīng)為4.625000。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 3
double fun(int b[][N])
{
?
}
main()
{
int c[N][N]={1,8,4,7,5,3,3,9,2};
int I,j;
FILE *out;
double r;
printf("**********\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",c[i][j]);
}
printf("\n");
}
r=fun?;
printf("THE RESULT\n");
printf("The r is %lf\n",r);
out=fopen("outfile.dat","w");
fprintf(out,"%lf",r);
fclose(out);
}
【答案】
int i,j,k=0;
double r=0.0;
for(j=0;j<N;j++)
{
r+=b[0][j];
k++;
}
for(j=0;j<N;j++)
{
r+=b[N-1][j];
k++;
}
for(i=1;i<=N-2;i++)
{
r+=b[i][0];
k++;
}
for(i=1;i<=N-2;i++)
{
r+=b[i][N-1];
k++;
}
return r/=k;
1.程序填空題
給定程序中,函數(shù)fun的功能是:計(jì)算x所指數(shù)組中N個(gè)數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),平均值通過形參返回主函數(shù),將小于平均值且最接近平均值的數(shù)作為函數(shù)值返回,在主函數(shù)中輸出。
例如,有10個(gè)正數(shù):46、30、32、40、6、17、45、15、48、26,平均值為:30.500000
主函數(shù)中輸出:m=30.0
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdlib.h>
#define N 10
double fun(double x[],double *av)
{
int I,j;
double d,s=0;
for(i=0;i<N;i++) s=s+x[i];
/**********found**********/
___1___=s/N;
d=32767;
for(i=0;i<N; i++)
if(x[i]<*av && *av-x[i]<=d){
/**********found**********/
d=*av-x[i]; j=___2___;}
/**********found**********/
return___3___;
}
main()
{
int I;
double x[N],av,m;
for(i=0; i<N; i++)
{ x[i]=rand()%50;
printf("%4.0f ",x[i]);}
printf("\n");
m=fun(x,&av);
printf("\nThe average is: %f\n",av);
printf("m=%5.1f ",m);
printf("\n");
}
【答案】
(1)*av (2)i (3)x[j] 或(x[j])
2.程序修改題
給定程序中,fun函數(shù)的功能是:求s = aa…aa - … - aaa - aa – a(此處aa…aa表示n個(gè)a,a和n的值在1至9之間)。
例如a=3,n=6,則以上表達(dá)式為:
s=333333 - 33333 - 3333 - 333 - 33 – 3
其值是:296298
a和n是fun函數(shù)的形參,表達(dá)式的值作為函數(shù)值傳回main函數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使其能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
long fun(int a,int n)
{
int j;
/**********found**********/
long s=0,t=1;
for(j=0;j<n;j++)
t=t*10+a;
s=t;
for(j=1;j<n;j++)
{
/**********found**********/
t=t%10;
s=s-t;
}
return(s);
}
main()
{
int a,n;
printf("\nPlease enter a and n:");
scanf("%d%d", &a, &n);
printf("The value of function is:%ld\n",
fun(a,n));
}
【答案】
(1)將long s=0,t=1; 改為:long s=0,t=0;
(2)將t=t%10; 改為:t=t/10;
3.程序設(shè)計(jì)題
請(qǐng)編寫一個(gè)函數(shù)void fun(char *tt, int pp[]),統(tǒng)計(jì)在tt所指字符串中'a'到'z' 26個(gè)小寫字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。
例如,當(dāng)輸入字符串:abcdefgabcdeabc 后,程序的輸出結(jié)果應(yīng)該是:
3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <string.h>
void fun(char *tt,int pp[])
{
?
}
main()
{
char aa[1000];
int bb[26],k,n;
printf("Please enter a char string:");
scanf("%s", aa);
fun(aa,bb);
for(k=0;k<26;k++) printf("%d",bb[k]);
printf("\n");
}
【答案】
void fun(char *tt,int pp[])
{
int n;
for(n=0; n<26; n++)
pp[n]=0;
while(*tt!='\0')
{
if(*tt>='a' && *tt <='z')
pp[*tt-'a']++;
tt++;
}
}
1.程序填空題
給定程序中,函數(shù)fun的功能是:調(diào)用隨機(jī)函數(shù)產(chǎn)生20個(gè)互不相同的整數(shù)放在形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置0)。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdlib.h>
#define N 20
void fun(int *a)
{
int I,x,n=0;
x=rand()%20;
/**********found**********/
while (n<___1___)
{
for(i=0; i<n; i++)
/**********found**********/
if(x==a[i])___2___;
/**********found**********/
if(i==___3___){a[n]=x; n++;}
x=rand()%20;
}
}
main()
{
int x[N]={0},I;
fun(x);
printf("The result : :\n");
for(i=0;i<N;i++ )
{
printf("%4d",x[i]);
if((i+1)%5==0) printf("\n");
}
printf("\n\n");
}
【答案】
(1)20 或 N (2)break (3)n
2.程序修改題
用二分法求方程2x3-4x2+3x-6 =0在區(qū)間[m,n]上的根。例如,若給m輸入-100,給n輸入90,則函數(shù)求得的一個(gè)根值為2.000。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#include <math.h>
double funx(double x)
{return(2*x*x*x-4*x*x+3*x-6);}
double fun(double m,double n)
{
/**********found**********/
int r;
r=(m+n)/2;
/**********found**********/
while(fabs(n-m)<0.001)
{
if(funx?*funx(n)<0) m=r;
else n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf("Enter m n : \n");
scanf("%lf%lf",&m,&n);
root=fun(m,n);
printf("root=%6.3f\n",root);
}
【答案】
(1)把int r; 改為:double r;
(2)將while(fabs(n-m)<0.001) 改為:
while(fabs(n-m)>0.001)
3.程序設(shè)計(jì)題
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:除了字符串前導(dǎo)和尾部的*號(hào)之外,將串中其他*號(hào)全部刪除。形參h已指向字符串中第一個(gè)字母,形參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 <stdio.h>
void fun(char *a,char *h,char *p)
{
?
}
main()
{
char s[81],*t,*f;
printf("Enter a string:\n");
gets(s);
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun(s,f,t);
printf("The string after deleted:\n");
puts(s);
}
【答案】
void fun( char *a,char *h,char *p )
{
char *q=h;
int n=0;
while(q<=p)
{ if(*q!='*') h[n++]=*q; q++; }
while(*q)
{ h[n++]=*q; q++; }
h[n]='\0';
}
1.程序填空題
給定程序中,函數(shù)fun的功能是:將a所指3×5矩陣中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原來左邊的各列依次繞到右邊。
例如,有下列矩陣:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
若k為2,程序執(zhí)行結(jié)果為
3 4 5 1 2
3 4 5 1 2
3 4 5 1 2
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#define M 3
#define N 5
void fun(int (*a)[N],int k)
{
int I,j,p,temp;
/**********found**********/
for(p=1;p<=___1___;p++)
for(i=0;i<M;i++)
{
temp=a[i][0];
/**********found**********/
for(j=0;j<___2___;j++)
a[i][j]=a[i][j+1];
/**********found**********/
a[i][N-1]=___3___;
}
}
main()
{
int x[M][N]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},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");
}
fun(x,2);
printf("The array after moving:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%3d",x[i][j]);
printf("\n");
}
}
【答案】
(1)k (2)N-1 (3)temp
2.程序修改題
給定程序中,函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。
例如,整數(shù)5的6次方為15625,此值的低3位值為625。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
long fun(int x,int y,long *p)
{
int I;
long t=1;
/**********found**********/
for(i=1;i<y;i++)
t=t*x;
*p=t;
/**********found**********/
t=t/1000;
return t;
}
main()
{
long t,r;
int x,y;
printf("\nInput x and y: ");
scanf("%ld%ld",&x,&y);
t=fun(x,y,&r);
printf("x=%d,y=%d,r=%ld,last=%ld\n",
x,y,r,t);
}?
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出當(dāng)x<0.97時(shí)如下多項(xiàng)式的值,直到|Sn - Sn-1|<0.000001為止:
例如,在主函數(shù)中從鍵盤給x輸入0.21后,輸出為:s= 1.100000。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <math.h>
double fun(double x)
{
?
}
main()
{
double x,s;
printf("Input x: ");
scanf("%lf",&x);
s=fun(x);
printf("s=%f\n",s);
}
【答案】
double fun(double x)
{
int n=1;
double s0,s1=1.0,t=1.0;
do
{
s0=s1;
t=t*(0.5-n+1)*x/n;
s1=s0+t;
n++;
}while(fabs(s1-s0)>=0.000001);
return s1;
}
1.程序填空題
給定程序中,函數(shù)fun的功能是:將形參s所指字符串中的數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值,計(jì)算出這些數(shù)值的累加和作為函數(shù)值返回。
例如,形參s所指的字符串為:abs5def126jkm8,程序執(zhí)行后的輸出結(jié)果為:22。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int fun(char *s)
{
int sum=0;
while(*s) {
/**********found**********/
if(isdigit(*s)) sum+=*s-___1___;
/**********found**********/
___2___;
}
/**********found**********/
return___3___;
}
main()
{
char s[81]; int n;
printf("\nEnter a string:\n\n");
gets(s);
n=fun(s);
printf("\nThe result is: %d\n\n",n);
}
【答案】
(1)'0' 或 48 (2)s++ (3)sum 或(sum)
2.程序修改題
下列給定程序中,計(jì)算如下公式的值:
函數(shù)fun的功能是:根據(jù)整型形參m的值,計(jì)算上面公式。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
double c=1.0;
int k;
/*******found*********/
for(k=2;k<m;k++)
/*******found*********/
c-=1/(k*k);
return?;
}
main()
{
int para=10;
printf("\nThe result is %1f\n",fun(para));
}
【答案】
(1)將for(k=2;k<m;k++)改為:
for(k=2;k<=m;k++)或for(k=2;k<m+1;k++)
(2)將c-=1/(k*k);改為:c-=1.0/(k*k);?
3.程序設(shè)計(jì)題
請(qǐng)編寫函數(shù)fun,它的功能是:將一個(gè)數(shù)字字符串轉(zhuǎn)換為一個(gè)整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。
例如,若輸入字符串"-1234",則函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <string.h>
long fun(char *p)
{
?
}
main()
{
char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
n=fun(s);
printf("%ld\n",n);
}
【答案】
long fun(char *p)
{
long t=0;
int flag=1;
if(*p=='-')
{ flag=-1; p++; }
while(*p)
{ t=t*10+(*p-'0'); p++; }
return flag*t;
}
1.程序填空題
人員的記錄由編號(hào)和出生年、月、日組成,N名人員的數(shù)據(jù)已在主函數(shù)中存入結(jié)構(gòu)體數(shù)組student中,且編號(hào)唯一。函數(shù)fun的功能是:找出指定編號(hào)人員的數(shù)據(jù),作為函數(shù)值返回,由主函數(shù)輸出,若指定編號(hào)不存在,返回?cái)?shù)據(jù)中的編號(hào)為空串。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#define N 8
typedef struct
{
char num[10];
int year,month,day;
}STUDENT;
___1___fun(STUDENT *student,char *num)
{
int I;
STUDENT a={"000003",1979,9,1};
for(i=0;i<N;i++)
if(strcmp(___2___,num)==0)
return (___3___);
return a;
}
main()
{
STUDENT student[N]=
{
{"000001",1978,2,15},{"000002",1981,9,21},{"000003",1979,9,1},{"000004",1982,7,15},{"000005",1980,9,28},{"000006",1983,11,15},{"000007",1983,6,22},{"000008",1984,8,19}
};
STUDENT s;
char n[10]="666666";
s=fun(student,n);
if(s.num[0]==0)
{
printf("\nNot found!\n");
}
else
{
printf("\nSucceed!\n ");
printf("%s %d-%d-%d\n",s.num,s.year,s.month,s.day);
}
}
【答案】
(1)STUDENT (2)student[i].num (3)student[i]
2.程序修改題
下列給定程序中,函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的s1所指子串替換成s2所指子串,所形成的新串放在str所指的數(shù)據(jù)中。在此處,要求s1和s2所指字符串的長度相同。
例如,當(dāng)s所指字符串中的內(nèi)容為abcdabfabc,s1所指子串中的內(nèi)容為ab,s2所指子串中的內(nèi)容為99時(shí),則在str所指的數(shù)組中的內(nèi)容為abcdabf99c。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <string.h>
/********found*********/
void fun(char*s,s1,s2,str)
{
char *p,*r,*a;
strcpy(str,s);
/********found*********/
while(str)
{
p=str;
r=s1;
while(*r)
if(*r==*p)
{
r++;
p++;
}
else
{
break;
}
if(*r=='\0')
a=str;
str++;
}
r=s2;
while(*r)
{
*a=*r;
a++;
r++;
}
}
main()
{
char s[100],s1[100],s2[100],str[100];
printf("\nPlease enter string S:");
scanf("%s",s);
printf("\nPlease enter substring s1:");
scanf("%s",s1);
printf("\nPlease enter substring s2:");
scanf("%s",s2);
if(strlen(s1)==strlen(s2))
{
fun(s,s1,s2,str);
printf("\nThe result is : %s\n",str);
}
else
{
printf("\nError : strlen(s1)!=strlen(s2)\n");
}
}
【答案】
(1)將void fun(char*s,s1,s2,str)改為:void fun(char *s,char *s1,char *s2,char *str)
(2)將while(str)改為:while(*str)
3.程序設(shè)計(jì)題
函數(shù)fun的功能是:將s所指字符串中下標(biāo)為偶數(shù)同時(shí)ASCII值為奇數(shù)的字符刪除,s所指串中剩余的字符形成的新串放在t所指的數(shù)組中。
例如,若s所指字符串中的內(nèi)容為“ABCDEFG 12345”,其中字符C的ASCII碼值為奇數(shù),在數(shù)組中的下標(biāo)為偶數(shù),因此必須刪除;而字符1的ASCII碼值為奇數(shù),在數(shù)組中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是“BDF12345”。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
#include <stdio.h>
#include <string.h>
void fun(char *s,char t[])
{
?
}
main()
{
char s[100],t[100];
printf("\nPlease enter string S:");
scanf("%s",s);
fun(s,t);
printf("\nThe result is: %s\n",t);
}
【答案】
void fun(char *s,char t[])
{
int k,n=0;
for(k=0; k<strlen(s); k++)
if(k%2!=0||s[k]%2!=1)
t[n++]=s[k];
t[n]='\0';
}