实验五教案含答案.docx

上传人:b****8 文档编号:12272948 上传时间:2023-06-05 格式:DOCX 页数:26 大小:25.76KB
下载 相关 举报
实验五教案含答案.docx_第1页
第1页 / 共26页
实验五教案含答案.docx_第2页
第2页 / 共26页
实验五教案含答案.docx_第3页
第3页 / 共26页
实验五教案含答案.docx_第4页
第4页 / 共26页
实验五教案含答案.docx_第5页
第5页 / 共26页
实验五教案含答案.docx_第6页
第6页 / 共26页
实验五教案含答案.docx_第7页
第7页 / 共26页
实验五教案含答案.docx_第8页
第8页 / 共26页
实验五教案含答案.docx_第9页
第9页 / 共26页
实验五教案含答案.docx_第10页
第10页 / 共26页
实验五教案含答案.docx_第11页
第11页 / 共26页
实验五教案含答案.docx_第12页
第12页 / 共26页
实验五教案含答案.docx_第13页
第13页 / 共26页
实验五教案含答案.docx_第14页
第14页 / 共26页
实验五教案含答案.docx_第15页
第15页 / 共26页
实验五教案含答案.docx_第16页
第16页 / 共26页
实验五教案含答案.docx_第17页
第17页 / 共26页
实验五教案含答案.docx_第18页
第18页 / 共26页
实验五教案含答案.docx_第19页
第19页 / 共26页
实验五教案含答案.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验五教案含答案.docx

《实验五教案含答案.docx》由会员分享,可在线阅读,更多相关《实验五教案含答案.docx(26页珍藏版)》请在冰点文库上搜索。

实验五教案含答案.docx

实验五教案含答案

第五课

教学内容:

一维字符数组删除及统计类算法

教学目的:

掌握一维字符数组删除及统计类算法的考题

教学内容:

一、一维字符数组删除及统计类算法的考题特点

此类算法多以填空题和程序设计题为考试形式。

常见考点

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";//c[t]='\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)

{inti,j,k=0;

for(i=0;a[i]=='*';i++);

if(i>n)

{for(j=i-n;a[j]!

='\0';j++)

a[k++]=a[j];

a[k]='\0';

}

}

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[])

{inti,j=0;

for(i=0;s[i]!

='\0';i++)

if(!

(i%2==0&&s[i]%2==0))

t[j++]=s[i];

t[j]='\0';

}

main()

{chars[100],t[100];

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++

}

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;

printf("\nPleaseenterastring:

\n");

gets(str);

Vs(str);

/************found**********/

for(i=0;i<6;i++)//for(i=0;i<5;i++)

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)

{inti,j=0,t[80];

for(i=0;s[i]!

='\0';i++)

if(s[i]>='0'&&s[i]<='9')

{t[j++]='$';t[j++]=s[i];}

else

t[j++]=s[i];

t[j]='\0';

for(i=0;t[i]!

='\0';i++)

s[i]=t[i];

s[i]='\0';

}

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[])

{inti;

for(i=0;i<26;i++)

pp[i]=0;

for(i=0;tt[i]!

='\0';i++)

if(tt[i]>='a'&&tt[i]<='z')

pp[tt[i]-'a']++;

}

main()

{charaa[1000];

intbb[26],k,n;

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)

{inti,j=0,k=0;

for(i=0;str[i];i++)

if(str[i]!

=c)

{str[j]=str[i];___

(1)___;}//j++

else

k++;

str[j]=___

(2)___;//'\0'

return(___(3)___);//k

}

main()

{charstring[81],x;

printf("\nPleaseenterastring:

\n");

gets(string);

printf("\nPleaseenteracharacter:

");

scanf("%c",&x);

printf("\n\nAfterdeleting%d'%c'(s),thestring

becomes:

\n%s\n",MyDelete(string,x),x,string);

}

2、程序填空题

下列给定程序中,函数fun()的功能是:

删除字符串s中所有空白字符(包括Tab字符、回车符及换行符)。

输入字符串时用"#"结束输入。

#include

#include

#include

fun(char*p)

{inti,t;charc[80];

for(i=0,t=0;p[i];i++)

if(!

isspace(*(p+i)))___1___;//c[t++]=p[i]

c[t]='\0';

strcpy(p,c);

}

main()

{charc,s[80];

inti=0;

printf("Inputastring:

");

c=getchar();

while(__2___)//c!

='#'

{s[i]=c;i++;c=getchar();}

___3___;//s[i]='\0'

fun(s);

puts(s);

}

3、程序填空题

请补充main函数,该函数的功能是:

从一个字符串中截取前面若干个给定长度的子字符串。

其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。

例如:

当str1=“cdefghij”,然后输入4,则str2=“cdef”。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

#include

#include

#defineLEN80

main()

{charstr1[LEN],str2[LEN];

intn,i;

printf("Enterthestring:

\n");

gets(str1);

printf("Enterthepositionofthestringdeleted:

");

scanf(【1】);//"%d",&n

for(i=0;i

【2】//str2[i]=str1[i];

str2[i]='\0';

printf("Thenewstringis:

%s\n",【3】);//str2

}

4、程序填空题

给定程序的功能是判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

ch=’D’

ch=’K’

#include

#include

voidfun(char*str,charch)

{while(*str&&*str!

=ch)str++;

/**********found**********/

if(*str___1___ch)//!

=

{str[0]=ch;

/**********found**********/

___2___=0;//str[1]

}

}

main()

{chars[81],c;

printf("\nPleaseenterastring:

\n");

gets(s);

printf("\nPleaseenterthecharactertosearch:

");

c=getchar();

/**********found**********/

fun(___3___);//s,c调用函数填实参,需要参考对应的形参

printf("\nTheresultis%s\n",s);

}

5、程序填空题

给定程序的功能是将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。

例如:

当s="112345",t="2467"时,u中的字符串为"1135"。

#include

#include

voidfun(char*s,char*t,char*u)

{inti,j,sl,tl;

sl=strlen(s);tl=strlen(t);

for(i=0;i

{for(j=0;j

/************found************/

if(s[i]==t[j])___1___;//break;若s[i]字符在t中出现则退出内循环直接处理下一个字符

if(j>=tl)//找完t中所有字符都没有相同的,则存入u所指数组中

/************found************/

*u++=___2___;//s[i]

}

/************found************/

___3___='\0';//*u最后让结果数组正常结束,常规做法

}

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);

}

6、程序改错题

给定程序modi.c中函数fun的功能是:

求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。

例如,当字符串中的内容为:

"abcdabfabcdx",t中的内容为:

"ab"时,输出结果应是:

abcdx。

当字符串中的内容为:

"abcdabfabcdx",t中的内容为:

"abd"时,则程序输出未找到信息:

Notfound!

请改正程序中的错误,使它能得出正确的结果。

注意:

不要改动main函数。

#include

#include

#include

char*fun(char*s,char*t)

{char*p,*r,*a;

/************found************/

a=Null;//a=NULL;NULL为代表0的符号常量,必须大写

while(*s)

{p=s;r=t;

while(*r)

/************found************/

if(r==p){r++;p++;}//if(*r==*p)匹配元素值,而不是地址

elsebreak;

if(*r=='\0')a=s;

s++;

}

returna;

}

main()

{chars[100],t[100],*p;

printf("\nPleaseenterstringS:

");scanf("%s",s);

printf("\nPleaseentersubstringt:

");scanf("%s",t);

p=fun(s,t);

if(p)printf("\nTheresultis:

%s\n",p);

elseprintf("\nNotfound!

\n");

}

7、程序改错题

给定程序MODI1.C中函数fun的功能是:

将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。

在此处,要求t1和t2所指字符串的长度相同。

例如,当s所指字符串中的内容为:

"abcdabfabc",t1所指子串中的内容为:

"ab",t2所指子串中的内容为:

"99"时,结果,在w所指的数组中的内容应为:

"abcdabf99c"。

请改正程序中的错误,使它能得出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#include

intfun(char*s,char*t1,char*t2,char*w)

{

inti;char*p,*r,*a;

strcpy(w,s);

/************found************/

while(w)//while(*w)一般是用元素值或

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2