版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五课教学内容:一维字符数组删除及统计类算法教学目的:掌握一维字符数组删除及统计类算法的考题教学内容:一、一维字符数组删除及统计类算法的考题特点此类算法多以填空题和程序设计题为考试形式。常见考点1、在一维字符数组中删除指定的单个字符,删除符合某条件的多个字符。2、统计一维字符数组中某个字符出现的次数,子串出现的次数。二、课堂练习第一套1、程序填空题下列给定程序中,函数 fun()的功能是:从字符串 s 中,删除所有小写字母c。 试题程序: _1_<stdio.h> /# include void fun(char *s) int i, j; for(i=j=0;_2_;i+) /s
2、i!= '0'if(si!= 'c') _3_; /sj+=si;sj='0' main() char s80; printf("nEnter a string: "); gets(s); printf("The original string: "); puts(s); fun(s); printf("The string after deleted: "); puts(s); printf("nn "); 2、程序改错题给定程序 modi.c 中函数 fun 的功
3、能是:删除字符串 s 中的所有空白字符(包括 Tab 字符、回车符及换行符)。 输入字符串时用'#'结束输入。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main 函数, #include < string.h >#include < stdio.h >#include < ctype.h >fun ( char *p) int i,t; char c80; /*found*/ For (i = 0,t = 0; pi ; i+) /forif(!isspace(*(p+i) ct+=pi; /*found*/ ct=&qu
4、ot;0" / ct= '0' strcpy(p,c); main( ) char c,s80; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') si=c;i+;c=getchar(); si='0' fun(s);puts(s); 3、程序设计题1)规定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:使字符串最前面连续的*号不得多于 n 个;若多于 n 个,则删除多余的*号;若少于或等于 n 个,则什么也不做,字符串中间和
5、尾部的*号不删除。例如,字符串中的内容为:*A*BC*DEF*G*,若 n 的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n 的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用C 语言提供的字符串函数。 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include < stdio.h > #include < conio.h > void fun(char *a, int n) int
6、i,j,k=0;for(i=0;ai='*'i+);if(i>n)for(j=i-n;aj!='0'j+)ak+=aj;ak='0' main() char s81;int n; printf("Enter a string:n"); gets(s); printf("Enter n:"); scanf("%d",&n); fun(s,n); printf("The string after deleted:n"); puts(s); 2)函数 fun
7、的功能是:将 s 所指字符串中下标为偶数同时 ASCII 值也为偶数的字符删除, s 中剩余的字符形成一个新串放在 t 所指的数组中。 例如,若 s 所指字符串中的内容为"ABCDEFG12345",其中字符 B 的 ASCII 码值虽为偶数,但在数组中的下标为奇数,因此不能删除;而字符 2 的 ASCII 码值为偶数, 在数组中的下标也为偶数,因此应当删除,其它依此类推。 最后 t 所指的数组中的内容应是"ABCDEFG135"。 注意: 部分源程序存在文件 prog.c 中。请勿改动主函数 main 和其它函数中的任何内容,在函数 fun 的花括号中
8、填入你编写的若干语句。 #include < conio.h >#include < stdio.h >#include < string.h >void fun(char *s, char t) int i,j=0;for(i=0;si!='0'i+)if( ! (i%2=0 && si%2=0) )tj+=si;tj='0' main() char s100, t100; printf("nPlease enter string S:"); scanf("%s", s
9、); fun(s, t); printf("nThe result is: %sn", t); 第二套1、程序填空题(找子串)下列给定程序中,函数 fun()的功能是:计算 s 所指字符串中含有 t 所指字符串的数目,并作为函数值返回。 #include < conio.h >#include < string.h >#include < stdio.h >#define N 80 int fun(char *s,char *t) int n; char *p, *r; n=0; while(*s) p=s; r=t; while(*r)
10、 if(*r=*p) r+; _1_; /p+ else break; if(*r=_2_) /'0'n+; _3_; / s+ return n; main() char aN,bN; int m; printf("nPlease enter string a: ");gets(a); printf("nPlease enter substring b: "); gets(b); m=fun(a,b); printf("nThe result is :m=%dn",m); 2、程序改错题文件 MODI.C 中程序的功
11、能是:统计一个英文句子中各小写的元音字母出现的次数。 例如,若输入字符串: "I am glad when playing games",则应输出: a 4 e 2 i 1 o 0 u 0 。注意:请改正程序中的错误,使它能计算出正确的结果。 #include < conio.h >#include < stdio.h >int vv26; void Vs( char* s ) for( ; *s; s+ ) /*found*/ switch( s );/ switch( *s ) case( 'a' ): case( 'e&
12、#39; ): case( 'i' ): case( 'o' ): case( 'u' ): vv *s - 'a' +; main() char str81, ww6 = "aeiou" ; int i; printf( "nPlease enter a string:n" ); gets( str ); Vs( str ); /*found*/ for( i = 0; i < 6; i+ ) / for( i = 0; i <5; i+ ) printf( "n%c
13、 = > %2d", wwi, vv wwi - ww0 ); getch(); 3、程序设计题1)请编写函数 fun,函数的功能是:在字符串中的所有数字字符前加一个$字符。例如,输入A1B23CD45,则输出为:A$1B$2$3CD$4$5。 注意:部分源程序存在文件 prog.c 中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include < stdio.h > void fun(char *s) int i,j=0,t80;for(i=0;si!='0'i+)if(si>='
14、0'&&si<='9')tj+='$' tj+=si; elsetj+=si;tj='0'for(i=0;ti!='0'i+)si=ti;si='0' main() char s80; printf("Enter a string:"); scanf("%s", s); fun(s); printf("The result:%sn", s); 2)请编写一个函数 void fun(char *tt, int pp),统计在 t
15、t 字符串中 'a' 到 'z' 26 个字母各自出现的次数,并由 pp 数组传回 main 函数。 运行时输入字符串:abcdefgabcdeabc 后,并且输出的结果应该是: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 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其它函数中的任何内容,在函数 fun 的花括号中填入你编写的若干语句。 #include < conio.h >#include < stdio.h >void fun(char *tt,
16、 int pp) int i;for(i=0;i<26;i+)ppi=0;for(i=0;tti!='0'i+)if(tti>='a'&&tti<='z')pp tti-'a' +; main( ) char aa1000 ; int bb26, k, n ; printf( "nPlease enter a char string:" ) ; scanf("%s", aa) ; fun(aa, bb ) ; for ( k = 0 ; k < 26
17、; k+ ) printf ("%d ", bbk) ; printf( "n" ) ; 三、课后练习1、程序填空题函数 char * MyDelete( char * str, char c )的功能是:在字符串 str中删除变量 c 中的字符,有几个删几个,并返回所删字符的个数。 例如,若输入字符串"ab abc bcdef "和 字符'b',则应输出字符串"a ac cdef "和 3(表示删了 3 个字符' b')。 注意:此程序存在 prog.c 中。 请勿改动主程序 ma
18、in、函数 WriteData 和函数 compute 中的任何内容,仅在函数MyDelete 中的横线处填入适当内容并删除横线。 #include < conio.h >#include < stdio.h >int MyDelete( char* str, char c ) int i, j=0, k=0; for( i = 0; stri; i+ ) if( stri != c ) str j = stri; _(1)_; / j+ else k+; strj=_(2)_ ; /'0' return( _(3)_ ); /k main() char
19、 string81, x; printf("nPlease enter a string:n"); gets(string); printf("nPlease enter a character: "); scanf("%c", &x ); printf( "nnAfter deleting %d '%c'(s), the string becomes:n%sn",MyDelete(string, x), x, string); 2、程序填空题下列给定程序中,函数 fun()的功能是:删除字
20、符串 s 中所有空白字符(包括 Tab 字符、回车符及换行符)。输入字符串时用"#"结束输入。 #include < string.h >#include < stdio.h >#include < ctype.h >fun(char *p) int i, t; char c80; for(i=0,t=0;pi;i+) if(!isspace(*(p+i) _1_; /ct+=pi ct='0' strcpy(p,c); main() char c,s80; int i=0; printf("Input a st
21、ring: "); c=getchar(); while(_2_) /c!='#' si=c;i+;c=getchar(); _3_; /si='0'fun(s); puts(s); 3、程序填空题请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()
22、的横线上填入所编写的若干表达式或语句。 #include < stdio.h > #include< conio.h > #define LEN 80 main() char str1LEN,str2LEN; int n,i; printf("Enter the string:n"); gets(str1); printf("Enter the position of the string deleted:"); scanf(【1】);/ "%d",&n for(i=0;i< n;i+) 【2】
23、/ str2i=str1i ; str2i='0' printf("The new string is:%sn",【3】); / str2 4、程序填空题给定程序的功能是判断字符 ch 是否与串 str 中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。 0123456789ABCDEch=Dch=K#include < stdio.h > #include < string.h > void fun(char *str, char ch ) while ( *str && *str != ch ) str
24、+; /*found*/ if ( *str _1_ ch ) / != str 0 = ch; /*found*/ _2_ = 0; / str1 main( ) char s81, c ; printf( "nPlease enter a string:n" ); gets ( s ); printf ("n Please enter the character to search :" ); c = getchar(); /*found*/ fun(_3_) ; / s,c 调用函数填实参,需要参考对应的形参printf( "nThe r
25、esult is %sn", s); 5、程序填空题给定程序的功能是将在字符串 s 中出现、而未在字符串 t 中出现的字符形成一个新的字符串放在 u 中,u 中字符按原字符串中字符顺序排列,不去掉重复字符。 例如:当 s="112345",t="2467"时,u 中的字符串为"1135"。 #include < stdio.h > #include < string.h > void fun (char *s,char *t, char *u) int i, j, sl, tl; sl = strle
26、n(s); tl = strlen(t); for (i=0; i< sl; i+) for (j=0; j< tl; j+) /*found*/ if (si = tj) _1_ ; /break;若si字符在t中出现则退出内循环直接处理下一个字符if (j >=tl) /找完t中所有字符都没有相同的,则存入u所指数组中/*found*/ *u+ = _2_;/ si /*found*/ _3_ = '0' /*u 最后让结果数组正常结束,常规做法 main() char s100, t100, u100; printf("nPlease ente
27、r string s:"); scanf("%s", s); printf("nPlease enter string t:"); scanf("%s", t); fun(s, t, u); printf("the result is: %sn", u); 6、程序改错题给定程序 modi.c 中函数 fun 的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为 NULL。 例如,当字符串中的内容为:"abcdabfabc
28、dx",t 中的内容为:"ab"时,输出结果应是:abcdx。 当字符串中的内容为:"abcdabfabcdx",t 中的内容为:"abd"时,则程序输出未找到信息:Not found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数。#include < conio.h > #include < stdio.h > #include < string.h > char *fun(char *s,char *t) char *p,*r,*a; /*found*
29、/ a=Null; / a=NULL ; NULL为代表0的符号常量,必须大写while (*s) p=s;r=t; while (*r) /*found*/ if(r=p) r+;p+; / if(*r=*p) 匹配元素值,而不是地址else break; if (*r='0') a=s; s+; return a; main() char s100,t100,*p; printf("nPlease enter string S:");scanf("%s",s); printf("nPlease enter substring
30、 t:");scanf("%s",t); p=fun(s,t); if(p) printf("nThe result is: %sn",p); else printf("nNot found !n"); 7、程序改错题给定程序MODI1.C中函数 fun 的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为: &q
31、uot;ab",t2所指子串中的内容为:"99"时, 结果,在w所指的数组中的内容应为: "abcdabf99c"。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序: #include <stdio.h> #include <string.h> int fun (char *s, char *t1, char *t2 , char *w) int i; char *p , *r, *a; strcpy( w, s ); /*found*/ whil
32、e ( w ) / while ( *w )一般是用元素值或指针所指的目标对象作循环条件,而不是地址 p = w; r = t1; while ( *r ) /*found*/ IF ( *r = *p ) r+; p+; /if ( *r = *p ) 关键字错误,送分题else break; if ( *r = '0' ) a = w; w+; r = t2; while ( *r ) *a = *r; a+; r+; main() char s100, t1100, t2100, w100; printf("nPlease enter string S:&quo
33、t;); scanf("%s", s); printf("nPlease enter substring t1:"); scanf("%s", t1); printf("nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)=strlen(t2) ) fun( s, t1, t2, w); printf("nThe result is : %sn", w); else printf("nErro
34、r : strlen(t1) != strlen(t2)n"); 8、程序改错题下列给定程序中函数 fun()的功能是:在字符串的最前端加入 n 个*号,形成新串,并且覆盖原串。 注意:字符串的长度最长允许 79。 请改正函数 fun()中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 s0123456789ABCDEFa0123456789*ABCDEF#include < stdio.h >#include < string.h >#include < conio.h >/*found*/
35、 void fun(char s,int n) / void fun(char *s,int n) 死记这种改法,其实可以不改char a80,*p; int i; /*found*/ s=p; / p=s+n;参考答案是p=s,感觉和题意不符for(i=0;i< n;i+) ai= '*' ; do ai=*p; /*found*/ i+; / i+;p+;while(*p); ai=0; strcpy(s,a); main() int n;char s80; printf("nEnter a string: ");gets(s); printf(&
36、quot;nThe string%sn",s); printf("nEnter n (number of*):"); scanf("%d",&n); fun(s,n); printf("nThe string after inster:%sn",s); 9、程序设计题规定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了字符串前后连续的*号之外,将串中其它*号全部删除。形参 h 已指向字符串中的第一个字母,形参 p 已指向字符串中最后一个字母。在编写函数时,不得使用 C语言提供的字符串函数。 例如,
37、字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:*ABCDEFG*。在编写函数时,不得使用 C 语言提供的字符串函数。 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 0123456789*a*BD*aBD*ahpjik#include < stdio.h > #include < conio.h > void fun(char *a,char *h,char *p) int i,j,k;i=h-a; /前面找第一个非*字符的下标j=p-a; /
38、后面第一个非*字符的下标for(k=i; k<j;k+)if(ak!='*')ai+=ak;for(k=j;ak!='0'k+)ai+=ak;ai='0' main() char s81,*t,*f; printf("Enter a string:n");gets(s); t=f=s; while(*t) t+; /找字符串的空字符位置,由t记录其位置t-; /退回到最后一个字符位置while (*t='*') t-; /从后往前找第一个非*字符while (*f='*') f+; /从前
39、往后找第一个非*字符fun(s,f,t); printf("The string after deleted:n");puts(s); 10、程序设计题规定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了前面连续的*号之外,将串中其它*号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:*ABCDEFG。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #includ
40、e < stdio.h > #include < conio.h > void fun(char *a) int i=0,j;while(ai='*') i+; /找第一个非*字符的位置for(j=i;ai!='0'i+)if(ai!='*')aj+=ai;aj='0' main() char s81; printf("Enter a string:n"); gets(s); fun(s); printf("The string after deleted:n");
41、puts(s); 11、程序设计题请编写函数 fun(),该函数的功能是按条件删除一个字符串指定字符一半的数目,具体要求如下:如果该字符串所包含的指定字符的个数是奇数,则不予删除,如果其数目是偶数,则删除原串后半部分的指定字符。其中,a 指向原字符串,删除后的字符串存放在 b 所指的数组中,c 中存放指定的字符。例如:当 a 输入 “abababa”,c=a时,b 的输出为“ababb”;如果 a 的输入为“ababa”,则 b 的输出为“ababa”。 注意:部分源程序给出如下。#include< stdio.h > #include< conio.h > #defi
42、ne LEN 80 void fun(char a,char b,char c) int i,j=0,m=0,n=0;for(i=0;ai!='0'i+)if(ai=c) n+;if(n%2=1)for(i=0;ai!='0'i+)bi=ai;bi='0'elsefor(i=0;ai!='0'i+)if(ai=c) m+; if( !(m>n/2&&ai=c) )bj+=ai; bj='0' main() char aLEN,bLEN; char c; clrscr(); printf(&qu
43、ot;Enter the string:n"); gets(a); printf("Enter the character of the string deleted:"); scanf("%c",&c); fun(a,b,c); printf("The new string is : %sn",b); 12、程序设计题请编写一个函数,用来删除字符串中的所有空格。 例如,输入"asd af aa z67", 则输出为 "asdafaaz67"。 注意:部分源程序存在文件 pro
44、g.c 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 #include< stdio.h >int fun(char *str) int i,j=0;for(i=0;stri!='0'i+)if(stri!=' ')strj+=stri;strj='0' main() char s80; printf("input a string:n"); gets(s); fun(s); printf("The result is:"); pu
45、ts(s); 13、程序设计题编写函数 fun,函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。若程序执行时,输入字符串为:turbo c and borland c+,从键盘上输入字符:n,则输出后变为:turbo c ad borlad c+,如果输入的字符字符串中不存在,则字符串照原样输出。 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include < stdio.h >#include < conio.h >int fun(cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江安县事业单位2025年下半年公开考核招聘高层次和急需紧缺专业人才考试笔试备考试题及答案解析
- 南充文化旅游职业学院2025年引进博士等高层次人才公开考核招聘(9人)笔试考试参考题库及答案解析
- 2025年河北保定市公安局招聘警务辅助人员48名笔试考试参考试题及答案解析
- 四川省公安厅所属事业单位2025年公开考核招聘工作人员考试笔试备考试题及答案解析
- 执法考试题库及答案
- 2025年喀什地区岳普湖县辅警招聘考试题库附答案解析
- 大学计算机一级考试操作题及答案
- 心理干预提高患者主动饮水依从性
- 家庭卧位安全护理:从姿势到环境的全方位指南
- 抖音电商考试题及答案
- 就业心理教学课件
- DBJ51-T 048-2021 四川省建设工程造价电子数据标准
- 《高分子溶液 》课件
- DL/T 5622-2021 太阳能热发电厂储热系统设计规范
- 《虚拟现实(VR)制作与应用》考试复习题库(汇总)
- 动力学中的临界问题课件
- 山东金岭矿业股份有限公司侯家庄矿区矿山地质环境保护与土地复垦方案
- 高考3500词无中文无音标清晰版自测
- GB/T 2423.1-2008电工电子产品环境试验第2部分:试验方法试验A:低温
- GB/T 18788-2008平板式扫描仪通用规范
- GB 16668-2010干粉灭火系统及部件通用技术条件
评论
0/150
提交评论