实验五教案.docx
《实验五教案.docx》由会员分享,可在线阅读,更多相关《实验五教案.docx(19页珍藏版)》请在冰豆网上搜索。
实验五教案
第五课
教学内容:
一维字符数组删除及统计类算法
教学目的:
掌握一维字符数组删除及统计类算法的考题
教学内容:
一、一维字符数组删除及统计类算法的考题特点
此类算法多以填空题和程序设计题为考试形式。
常见考点
1、在一维字符数组中删除指定的单个字符,删除符合某条件的多个字符。
2、统计一维字符数组中某个字符出现的次数,子串出现的次数。
二、课堂练习
第一套
1、程序填空题
下列给定程序中,函数fun()的功能是:
从字符串s中,删除所有小写字母’c’。
试题程序:
__1__//#include
voidfun(char*s)
{inti,j;
for(i=j=0;__2__;i++)//s[i]!
=’\0’
if(s[i]!
='c')
__3__;//s[j++]=s[i]
s[j]='\0';
}
main()
{chars[80];
printf("\nEnterastring:
");gets(s);
printf("Theoriginalstring:
");puts(s);
fun(s);
printf("Thestringafterdeleted:
");
puts(s);
printf("\n\n");
}
2、程序改错题
给定程序modi.c中函数fun的功能是:
删除字符串s中的所有空白字符(包括Tab字符、回车符及换行符)。
输入字符串时用'#'结束输入。
请改正程序中的错误,使它能输出正确的结果。
注意:
不要改动main函数,
#include
#include
#include
fun(char*p)
{inti,t;charc[80];
/************found************/
For(i=0,t=0;p[i];i++)//改:
for
if(!
isspace(*(p+i)))c[t++]=p[i];
/************found************/
c[t]="\0";//改:
’\0’
strcpy(p,c);
}
main()
{charc,s[80];
inti=0;
printf("Inputastring:
");
c=getchar();
while(c!
='#')
{s[i]=c;i++;c=getchar();}
s[i]='\0';
fun(s);
puts(s);
}
3、程序设计题
1)规定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
使字符串最前面连续的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
例如,字符串中的内容为:
*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:
****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为:
*******A*BC*DEF*G****。
n的值在主函数中输入。
在编写函数时,不得使用C语言提供的字符串函数。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
voidfun(char*a,intn)
{}
main()
{chars[81];intn;
printf("Enterastring:
\n");gets(s);
printf("Entern:
");scanf("%d",&n);
fun(s,n);
printf("Thestringafterdeleted:
\n");puts(s);
}
2)函数fun的功能是:
将s所指字符串中下标为偶数同时ASCII值也为偶数的字符删除,s中剩余的字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符B的ASCII码值虽为偶数,但在数组中的下标为奇数,因此不能删除;而字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此应当删除,其它依此类推。
最后t所指的数组中的内容应是"ABCDEFG135"。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,在函数fun的花括号中填入你编写的若干语句。
#include
#include
#include
voidfun(char*s,chart[])
{}
main()
{chars[100],t[100];
clrscr();
printf("\nPleaseenterstringS:
");scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
第二套
1、程序填空题(找子串)
下列给定程序中,函数fun()的功能是:
计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
#include
#include
#include
#defineN80
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
while(*s)
{p=s;
r=t;
while(*r)
if(*r==*p){r++;____1____;}//p++
elsebreak;
if(*r==____2____)//’\0’
n++;
__3__;//s++,表示从s指向的下一个字符开始匹配
}
returnn;
}
main()
{chara[N],b[N];intm;
printf("\nPleaseenterstringa:
");gets(a);
printf("\nPleaseentersubstringb:
");gets(b);
m=fun(a,b);
printf("\nTheresultis:
m=%d\n",m);
}
2、程序改错题
文件MODI.C中程序的功能是:
统计一个英文句子中各小写的元音字母出现的次数。
例如,若输入字符串:
"Iamgladwhenplayinggames",则应输出:
a4e2i1o0u0。
注意:
请改正程序中的错误,使它能计算出正确的结果。
#include
#include
intvv[26];
voidVs(char*s)
{for(;*s;s++)
/************found**********/
switch(s);//改:
switch(*s)
{case('a'):
case('e'):
case('i'):
case('o'):
case('u'):
vv[*s-'a']++;
}
}
main()
{charstr[81],ww[6]={"aeiou"};
inti;
clrscr();
printf("\nPleaseenterastring:
\n");
gets(str);
Vs(str);
/************found**********/
for(i=0;i<6;i++)//改:
i<5
printf("\n%c==>%2d",ww[i],vv[ww[i]-ww[0]]);
getch();
}
3、程序设计题
1)请编写函数fun,函数的功能是:
在字符串中的所有数字字符前加一个$字符。
例如,输入A1B23CD45,则输出为:
A$1B$2$3CD$4$5。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
voidfun(char*s)
{}
main()
{chars[80];
printf("Enterastring:
");scanf("%s",s);
fun(s);
printf("Theresult:
%s\n",s);
}
2)请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中'a'到'z'26个字母各自出现的次数,并由pp数组传回main函数。
运行时输入字符串:
abcdefgabcdeabc后,并且输出的结果应该是:
33322110000000000000000000
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,在函数fun的花括号中填入你编写的若干语句。
#include
#include
voidfun(char*tt,intpp[])
{}
main()
{charaa[1000];
intbb[26],k,n;
clrscr();
printf("\nPleaseenteracharstring:
");scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26;k++)printf("%d",bb[k]);
printf("\n");
}
三、课后练习
1、程序填空题
函数char*MyDelete(char*str,charc)的功能是:
在字符串str中删除变量c中的字符,有几个删几个,并返回所删字符的个数。
例如,若输入字符串"ababcbcdef"和字符'b',则应输出字符串"aaccdef"和3(表示删了3个字符'b')。
注意:
此程序存在prog.c中。
请勿改动主程序main、函数WriteData和函数compute中的任何内容,仅在函数MyDelete中的横线处填入适当内容并删除横线。
#include
#include
intMyDelete(char*str,charc)