/*循环比较字符*/
if(str[i]==str[n-1-i]);
/*相同,什么都不作*/
else
/*不同,直接跳出循环*/
{
fg=0;
break;
}
returnfg;
}
/*请编写函数fun,该函数的功能是:
统计一行字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。
试题程序:
*/
#include
#include
#defineN80
intfun(char*s)
{
/************Begin*************/
/*************End*************/
}
voidmain()
{
FILE*wf;
charline[N];
intnum=0;
printf("Enterastring:
\n");
gets(line);
num=fun(line);
printf("Thenumberofwordis:
%d\n\n",num);
/******************************/
wf=fopen("d:
\\out19.dat","w");
fprintf(wf,"%d",fun("Thisisabigcar"));
fclose(wf);
/*****************************/
}
【参考代码】
inti,j=0;
for(i=0;s[i]!
='\0';i++)
if(s[i]!
=''&&(s[i+1]==''||s[i+1]=='\0'))
/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/
j++;
returnj;/*返回单词个数*/
/*假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
除了字符串前导的*号之外,将串中其他*号全部删除。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。
试题程序:
*/
#include
#include
voidfun(char*a)
{
/************Begin*************/
/************End**************/
}
voidmain()
{
chars[81];
FILE*in,*out;
inti;
printf("Enterastring:
\n");
gets(s);
fun(s);
printf("Thestringafterdeleted:
\n");
puts(s);
/******************************/
in=fopen("in21.dat","r");
out=fopen("debug\\out21.dat","w");
for(i=0;i<8;i++)
{
fscanf(in,"%s",s);
fun(s);
fprintf(out,"%s\n",s);
}
fclose(in);
fclose(out);
/******************************/
}
【参考代码】
inti=0;
char*p=a;
while(*p&&*p=='*')
{
a[i]=*p;i++;p++;
}
while(*p)
{
if(*p!
='*')
{
a[i]=*p;i++;
}
p++;
}
a[i]='\0';
/*假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
将字符串中的前导*号全部删除,中间和后面的*号不删除。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
voidfun(char*a)
{
/************Begin**************/
/************End*************/
}
voidmain()
{
FILE*wf,*in;
inti;
chars[81],t[81]="****A*BC*DEF*G*******";
printf("Enterastring:
\n");
gets(s);
fun(s);
printf("Thestringafterdeleted:
\n");puts(s);
/******************************/
in=fopen("in18.dat","r");
wf=fopen("debug\\out18.dat","w");
for(i=0;i<8;i++)
{
fscanf(in,"%s",t);
fun(t);
fprintf(wf,"%s\n",t);
}
fclose(in);
fclose(wf);
/*****************************/
}
【参考代码】
char*p=a;
while(*p=='*')
p++;
/*指针p指向字符串第一个字母*/
for(;*p!
='\0';p++,a++)
*a=*p;
*a='\0';
/*请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。
例如,字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#defineN81
voidfun(char*s)
{
/************Begin*************/
/************End**************/
}
voidmain()
{
chara[N];
FILE*out;
printf("Enterastring:
");
gets(a);
printf("Theoriginalstringis:
");
puts(a);
fun(a);
printf("\n");
printf("Thestringaftermodified:
");
puts(a);
strcpy(a,"HelloWorld!
ThisisafirstCprogram!
");
fun(a);
/******************************/
out=fopen("d:
\\out17.dat","w");
fprintf(out,"%s",a);
fclose(out);
/******************************/
}
【参考代码】
charch;
inti,m,n;
i=0;
m=n=strlen(s)-1;
while(i<(n+1)/2)
{
ch=s[i];
s[i]=s[m];
s[m]=ch;
i++;
m--;
}
/*请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位依次放在c数的百位和个位上。
例如,当a=45,b=12,调用该项函数后,c=4152。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
voidfun(inta,intb,long*c)
{
/************Begin************/
/************End***************/
}
voidmain()
{
inta,b;
longc;
FILE*out;
printf("Inputa,b:
");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%ld\n",c);
/******************************/
out=fopen("debug\\out20.dat","w");
for(a=10;a<20;a++)
{
fun(a,109-a,&c);
fprintf(out,"%d\n",c);
}
fclose(out);
/******************************/
}
【参考代码】
*c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10;
程序改错
/*下列给定程序中函数fun的功能是:
先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如,当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
#include
voidfun(char*s,char*t)
{
inti,s1;
s1=strlen(s);
for(i=0;i/**********ERROR**********/
t[i]=s[s1-1];
for(i=0;it[s1+i]=s[i];
/**********ERROR**********/
t[2*s1]="\0";
}
voidmain()
{chars[100],t[100];
printf("\nPleaseenterstrings:
");
scanf("%s",s);
fun(s,t);
printf("Theresultis:
%s\n",t);
}
【参考答案】
t[i]=s[s1-1-i];
t[i]=s[s1-i-1i];
【参考答案】
t[2*s1]='\0';
t[2*s1]=0;
/*下列给定程序中,函数fun的功能是:
在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上,
并将该字符前的原字符向后顺序移动。
例如,调用fun函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为eABCDFGH。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
/**********ERROR**********/
fun(char*p)
{charmax,*q;inti=0;
max=p[i];
while(p[i]!
=0)
{if(max
{
/**********ERROR**********/
p=q+i;max=p[i];
}
i++;
}
/**********ERROR**********/
while(q
{*q=*(q-1);
q--;
}
p[0]=max;
}
voidmain()
{charstr[80];
printf("Enterastring:
");gets(str);
printf("\nTheoriginalstring:
");
puts(str);
fun(str);
printf("\nThestringaftermoving:
");
puts(str);printf("\n\n");
}
【参考答案】
voidfun(char*p)
【参考答案】
q=p+i;
q=i+p;
【参考答案】
while(q>p)
while(p/*下列给定程序中,函数fun的功能是:
计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
#include
#include
#defineN80
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
p=&s[0];
/**********ERROR**********/
*r=t;
while(*p)
{
if(*r==*p)
{
r++;
if(*r=='\0')
{
n++;
/**********ERROR**********/
【1】;
}
}
p++;
}
returnn;
}
voidmain()
{chara[N],b[N];intm;
system("CLS");
printf("\nPleaseenterstringa:
");
gets(a);
printf("\nPleaseentersubstringb:
");
gets(b);
m=fun(a,b);
m=printf("\nTheresultis:
m=%d\n",m);
}
【参考答案】
r=t;
【参考答案】
r=t;
r=&t[0];
/*下列给定程序中,函数fun的功能是:
从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,
平均分存放在形参aver所指的存储单元中。
例如输入8名学生的成绩:
80.5607290.59851.58864
则低于平均分的学生人数为4(平均分为75.5625)。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
#defineN20
intfun(float*s,intn,float*aver)
{floatave,t=0.0;
intcount=0,k,i;
for(k=0;k/**********ERROR**********/
t=s[k];
ave=t/n;
for(i=0;iif(s[i]/**********ERROR**********/
*aver=&ave;
returncount;
}
voidmain()
{floats[30],aver;
intm,i;
printf("\nPleaseenterm:
");
scanf("%d",&m);
printf("\nPleaseenter%dmark:
\n",m);
for(i=0;iprintf("\nThenumberofstudents:
%d\n",fun(s,m,&aver));
printf("Ave=%f\n",aver);
}
【参考答案】
t+=s[k];
t=t+s[k];
【参考答案】
*aver=ave;
/*下列给定程序中,函数fun的功能是:
实现两个整数的交换。
例如,给a和b分别输入60和65,输出为:
a=65b=60
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
/**********ERROR**********/
voidfun(inta,b)
{intt;
/**********ERROR**********/
t=b;b=a;a=t;
}
voidmain()
{inta,b;
printf("Entera,b:
");
scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%db=%d\n",a,b);
}
【参考答案】
voidfun(int*a,int*b)
【参考答案】
t=*b;*b=*a;*a=t;
t=*b,*b=*a,*a=t;
t=*a;*a=*b;*b=t;
t=*a,*a=*b,*b=t;
/*给定程序中函数fun的功能是:
把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。
例如,输入的数为:
551234,
输出结果应当是:
a=55.0,b=34.0,c=12.0。
请改正程序中的错误,使它能得出正确结果。
给定源程序:
*/
#include
voidfun(float*a,float*b,float*c)
{
/**********ERROR**********/
float*k;
if(*a<*b)
{k=*a;*a=*b;*b=k;}
/**********ERROR**********/
if(*a>*c)
{k=*c;*c=*a;*a=k;}
if(*b<*c)
{k=*b;*b=*c;*c=k;}
}
intmain()
{floata,b,c;
printf("Inputabc:
");scanf("%f%f%f",&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
return0;
}
【参考答案】
floatk;
【参考答案】
*a<*c
*c>*a
/*给定程序中函数fun的功能是:
把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。
例如,输入的数为:
551234,
输出结果应当是:
a=55.0,b=34.0,c=12.0。
请改正程序中的错误,使它能得出正确结果。
给定源程序:
*/
#include
voidfun(float*a,float*b,float*c)
{
/**********ERROR**********/
float*k;
if(*a<*b)
{k=*a;*a=*b;*b=k;}
/**********ERROR**********/
if(*a>*c)
{k=*c;*c=*a;*a=k;}
if(*b<*c)
{k=*b;*b=*c;*c=k;}
}
intmain()
{floata,b,c;
printf("Inputabc:
");scanf("%f%f%f",&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
return0;
}
【参考答案】
p=j;
【参考答案】
p=i;
程序填空
/*给定程