即控制了条件。
{if(s[i]%2!
=0)不为偶数就放入s数组里。
s[j++]=s[i];}
【3】;s[j]='\0'。
给数组的最后一个字符赋值结束标志。
}
删除部分元素可以给s[j]重新赋值。
最后给s加上结束标志。
voidmain()
{inti=0,strlen=0;
charstr[N];定义一个数组。
system("CLS");
printf("\nInputastring:
\n");
gets(str);输入的字符串放入str中。
while(str[i]!
='\0')从第一个开始到最后。
{
strlen++;用来计算字符串长度。
i++;
}
fun(str,strlen);从调用结果可知,我们的fun函数是一个没有返回值类型的函数,第一个参数为地址,装str的地址,第二个为长度,定义一个int型的变量。
printf("\n***displaystring***\n");
puts(str);}
【考点分析】
本题考查:
函数定义,需要确定类型标识符、函数名和形式参数。
变量初始化,变量声明后,要进行初始化赋值,我们对变量进行初始化时,必须确定好变量的作用。
字符串结束标识'\0',用来结束字符串,是经常考查的知识点。
【解题思路】
填空1:
由main函数调用函数fun的格式可以知道,函数fun没有返回值,第一个参数是字符数组,第二个参数是整型变量。
填空2:
变量j声明时,没有初始化,所以在使用j之前要将它初始化为0。
填空3:
当把所有ASCII码为偶数的字符都存入字符串s中后,要在最后加上'\0',表示字符串的结束。
2.请补充main函数,该函数的功能是:
从键盘输入一个字符串及一个指定字符,然后把这个字符及其后面的所有字符全部删除。
结果仍然保存在原串中。
例如,输入"abcdef",指定字符为"e",则输出"abcd"。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#defineN80
voidmain()
{intI=0;控制循环。
charstr[N];
charch;
system("CLS");
printf("\nInputastring:
\n");
gets(str);输入字符串
printf("\nInputacharator;\n");
scanf("%c",&ch);给定删除字符.
while(str[I]!
='\0')从循环里开始查找.
{
if(str[I]==ch)如果不相等就继续循环什么不执行相等到赋值。
【1】跳出while循环以后直接在给该字符赋予结束标志。
【2】;使查找往下。
}
str[I]=【3】;给当前字符赋予字符串结束标志。
printf("\n***displaystring***\n");
puts(str);}
(1)break;
(2)i++或++i或i+=1或i=i+1(3)'\0'
删除某元素后面的元素可以直接在其后加上结束标志符。
【考点分析】
本题考查:
break语句,通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行以后的语句。
当break语句用于for、while、do-while循环语句时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句一起使用,即满足条件时便跳出循环;字符串结束标识'\0',上机考试时经常考查。
4.下列给定程序中,函数fun的功能是:
删除字符串s中所有空白字符(包括Tab符、回车符及换行符)。
输入字符串时用"#"结束输入。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include#include#include
fun(char*p)
{inti,t;charc[80];
for(i=0,t=0;p[i];i++)只要不为结束标志往下。
if(!
isspace(*(p+i)))c[t++]=p[i];当满足条件时因此给c赋值。
c[t]="\0";
strcpy(p,c);由于把字符c中的内容给p则说明字符给了c。
}采用isspace判断是否空格什么换行符。
然后如果不是就赋值给新串。
最后strcpy到原串。
voidmain()
{charc,s[80];
inti=0;
printf("Inputastring:
");
c=getchar();得到第一个字符。
while(c!
='#')只要不为结束符号。
{s[i]=c;i++;c=getchar();}这个字符给字符串往下直接得到字符。
s[i]='\0';最后给上结束标志。
fun(s);函数调用。
puts(s);}
(1)错误:
c[t]="\0";正确:
c[t]='\0';
字符串结束标识'\0','\0'属于一个字符,其ASCII码为0。
【解题思路】
该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否空格、跳格符(制表符)或换行符。
字符串常量占的内存字节数等于字符串中字节数加1。
增加的一个字节中存放字符'\0'(ASCII码为0),这是字符串结束的标志。
5.请编写函数fun,该函数的功能是:
删除一维数组中所有相同的数,使之只剩一个。
数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
2234456677899101010
删除后,数组中的内容应该是:
2345678910。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#defineN80
intfun(inta[],intn)
{inti,j=1;i=1.j=1.a[0]==a[1].不执行.i++=2.a[0]!
=a[2].a[1]=a[2]=3;i++=3.
for(i=1;iif(a[j-1]!
=a[i])
a[j++]=a[i];/*若该数与前一个数不相同,则要保留*/
returnj;/*返回不同数的个数j++是个数。
下标从0开始到j*/
}voidmain()
{FILE*wf;
inta[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("Theoriginaldata:
\n");
for(i=0;in=fun(a,n);
printf("\n\nThedataafterdeleted:
\n");
for(i=0;iprintf("\n\n");
wf=fopen("out.dat","w");
for(i=0;ifclose(wf);}
6.给定程序的功能是:
将未在字符串s中出现而在字符串t中出现的字符,形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,但去掉重复字符。
例如,当s="12345",t="24677"时,u中的字符为"67"。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
voidfun(char*s,char*t,char*u)
{intI,j,s1,t1,k,u1=0;
s1=strlen(s);s1记录s字符串的长度。
t1=strlen(t);t1记录t字符串的长度。
for(I=0;I{for(j=0;jif(t[I]==s[j])break;如果发现s中有字符和t当前字符相等结束。
if(j>=s1)就是t中出现s未出现的
{for(k=0;kif(t[I]==u[k])【1】;如果当前字符等于u重复了跳出循环。
if(k>=u1)u[u1++]=【2】;}把当前字符串赋值给u。
}填空2:
当判断没有重复字符时,填入u字符串。
【3】='\0';最后给u字符串赋值结束标志。
}
(1)break
(2)t[i](3)u[u1]
查找某个字符在某两个字符串中出现否可以固定一个素组元素然后对另外一个素组的元素逐个查找相等跳出不等赋值。
main()
{chars[100],t[100],u[100];
printf("\nPleaseenterstrings:
");
scanf("%s",s);
printf("\nPleaseenterstringt:
");
scanf("%s",t);
fun(s,t,u);
printf("Theresultis:
%s\n",u);}
【解题思路】填空1:
根据题意可知,新形成的字符串u中要去掉重复字符,所以当判断出有重复字符时,应立即结束循环。
填空3:
当全部判断完成后,给字符串u加入结束符'\0'。
3.假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
将字符串中的前导*号全部删除,中间和后面的*号不删除。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
voidfun(char*a)没有返回值因此需要通过地址和*访问数组。
{char*p=a;
while(*p=='*')
p++;使得指针p计算到前面*,并且指向第一个字符。
for(;*p!
='\0';p++,a++)只要没结束,当前所指字符赋与数组a。
*a=*p;
*a='\0';/*在字符串最后加上结束标记符*/
}如果要删除前部分*号可以用另外一个指针指向需要保留的首元素然后在接着赋值到原串即可。
#include
voidfun(char*a)
{char*p=a;
while(*p=='*')
p++;
strcpy(a,p);}
voidmain()
{FILE*wf;
chars[81],t[81]="****A*BC*DEF*G*******";
printf("Enterastring:
\n");
gets(s);
fun(s);
printf("Thestringafterdeleted:
\n");puts(s);
wf=fopen("out.dat","w");
fun(t);
fprintf(wf,"%s",t);
fclose(wf);}
7.假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
除了字符串前导的*号之外,将串中其他*号全部删除。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include#include#include
voidfun(char*a)接收到这个字符数组的首地址。
{如果前面一个为字符。
后面一个为星号就把星号后的字符内容放入前面元素。
inti=0;
char*p=a;p指向了a数组第一个元素。
while(*p&&*p=='*')*p是星号不是结束标志。
{a[i]=*p;i++;p++;a数组赋予原值。
i和p都向后移动。
}
while(*p)当*p不再是星号并且不是结束标志而是字母时
{if(*p!
='*')当所指元素内容不是星号。
{a[i]=*p;i++;}就为原值同时a数组元素继续增加但是p指向字母。
p++;当元素是星号时。
p往后移动指向了字母。
}
a[i]='\0';最后赋予结束标志符。
}
(1)定义一个临时指针p,初始指向原串首地址;
(2)利用循环把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结尾字符'ackslash0'。
voidmain()
{chars[81];
FILE*out;
printf("Enterastring:
\n");
gets(s);
fun(s);
printf("Thestringafterdeleted:
\n");
puts(s);
out=fopen("out.dat","w");
strcpy(s,"****A*BC*DEF*G*******");
fun(s);
fprintf(out,"%s",s);
fclose(out);}
8.请编写一个函数,用来删除字符串中的所有空格。
例如,输入asdafaaz67,则输出为asdafaaz67。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include#include#include
#include
voidfun(char*str)前面一个为空格后面一个为字符就把字符赋值给前面元素。
接收到字符串首地址。
{
inti=0;
char*p=str;p指向字符串
while(*p)只要不为结束标志。
{if(*p!
='')/*删除空格*/如果当前字符不为空格是字符。
{str[i]=*p;i++;}赋给原值。
I++往素组后面走一个元素到达空格的话。
p++;
}str[i]='\0';}/*加上结束符*/
main()
{charstr[81];
charMsg[]="Inputastring:
";
intn;
FILE*out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("***str:
%s\n",str);
out=fopen("out.dat","w");
fun(Msg);
fprintf(out,"%s",Msg);
fclose(out);}
9.请编写函数fun,该函数的功能是:
将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为ABCDEFG12345,其中字符B的ASCII码值为偶数、……、字符2的ASCII码值为偶数、……,都应当删除,其他依次类推。
最后t所指的数组中的内容应是ACEG135。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
删除偶数。
我们就赋值奇数。
试题程序:
#include#include#include
#include
voidfun(char*s,chart[])没有返回值的函数只能通过地址访问s和t。
{inti=0;i控制循环。
for(;*s!
='\0';s++)只要没有到达结束标志。
if(*s%2==1)满足ascll值为奇数。
t[i++]=*s;为奇数的字符依次存入数组t中*/
t[i]='\0';/*在字符串的末尾加上串结束符*/
}voidmain()
{FILE*wf;
chars[100],t[100];
system("CLS");
printf("\nPleaseenterstringS:
");
scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
wf=fopen("out.dat","w");
fun("ABCDEFG12345",t);
fprintf(wf,"%s",t);
fclose(wf);}
10.请编写一个函数voidfun(chara[],charb[],intn),其功能是:
删除一个字符串中指定下标的字符。
其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include#include
#include#defineLEN20
voidfun(chara[],charb[],intn)
{inti,k=0;找n我们就把不是n的内容放入b。
for(i=0;a[i]!
='\0';i++)
if(i!
=n)/*将不是指定下标的字符存入数组b中*/
b[k++]=a[i];
b[k]='\0';/*在字符串最后加上结束标记*/
}voidmain()
{FILE*wf;
charstrl[LEN],str2[LEN];
intn;
system("CLS");
printf("Enterthestring:
\n");
gets(strl);
printf("Enterthepositionofthestringdeleted:
");
scanf("%d",&n);
fun(strl,str2,n);
printf("Thenewstringis:
%s\n",str2);
wf=fopen("out.dat","w");
fun("world",str2,3);
fprintf(wf,"%s",str2);
fclose(wf);}
【考点分析】本题考查:
删除字符串中指定字符,对于此类题目,我们一般采用保留非指定字符的操作。
11.假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
除了字符串前导和尾部的*号之外,将串中其他*号全部删除。
形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是****ABCDEFG******。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
voidfun(char*a,char*h,char*p)字符串a的地址h指向头字母p指向尾字母
{inti=0;
char*q=a;
while(q{a[i]=*q;q++;i++;}
while(q
{if(*q!
='*')
{a[i]=*q;i++;}
q++;}
while(*q)
{a[i]=*q;i++;q++;}
a[i]='\0';
}main()
{chars[81],*t,*f;
FILE*out;
printf("Entreastring:
\n");
gets(s);
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun(s,f,t);
printf("Thestingafterdeleted:
\n");
puts(s);
out=fopen("out.dat","w");
strcpy(s,"****A*BC*DEF*G********");
fun(s,s+4,s+13);
fprintf(out,"%s",s);
f