实验七教案.docx
- 文档编号:9662949
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:28
- 大小:23.57KB
实验七教案.docx
《实验七教案.docx》由会员分享,可在线阅读,更多相关《实验七教案.docx(28页珍藏版)》请在冰豆网上搜索。
实验七教案
第七课
教学内容:
一维字符数组元素位置移动及二维字符数组处理类算法
教学目的:
掌握一维字符数组元素位置移动及二维字符数组处理类算法的考题
教学内容:
一、一维字符数组元素位置移动及二维字符数组处理类算法的考题特点
此类算法多以填空题和程序设计题为考试形式。
常见考点:
1、一维字符数组元素位置移动。
2、二维字符数组排序,比较大小,连接。
二、课堂练习
第一套
1、程序填空题
给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。
例如:
s串中原有的字符串为:
Mn.123xyZ,则调用该函数后,s串中的内容为:
n.123xyZM。
#include
#defineN81
fun(char*s)
{charb[N];
fprintf(b,"%s%c",s+1,*s);
/**************found**************/
strcpy(___1___);
}
main()
{chara[N];
printf("Enterastring:
");gets(a);
printf("Theoriginalstringis:
");puts(a);
/**************found**************/
fun(___2___);
printf("Thestringaftermodified:
");
/**************found**************/
___3___(a);
}
2、程序改错题
给定程序modi.c中,函数fun的功能是:
在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。
例如,调用fun函数之前给字符串输入:
ABCDeFGH,调用后字符中的内容为:
eABCDFGH。
请改正程序中的错误,使它能得出正确结果。
注意:
不要改动main函数。
#include
fun(char*p)
{charmax,*q;inti=0;
max=p[i];
while(p[i]!
=0)
{if(max
{max=p[i];
/************found************/
p=q+i;
}
i++;
}
/************found************/
while(q
{*q=*(q-1);
q--;
}
p[0]=max;
}
main()
{charstr[80];
printf("Enterastring:
");gets(str);
printf("\nTheoriginalstring:
");puts(str);
fun(str);
printf("\nThestringaftermoving:
");puts(str);
printf("\n\n");
}
3、程序设计题
请编写函数fun,函数的功能是:
移动字符串中的内容,移动的规则如下:
把第1到第m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后字符串中的内容应该是:
DEFGHIJKABC。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#defineN80
voidfun(char*w,intm)
{}
main()
{chara[N]="ABCDEFGHIJK";
intm;
printf("Theoriginalstring:
\n");puts(a);
printf("\n\nEnterm:
");scanf("%d",&m);
fun(a,m);
printf("\nThestringaftermoving:
\n");puts(a);
printf("\n\n");
}
第二套
1、程序填空题
给定程序中,函数fun的功能是:
求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。
ss所指字符串数组中共有M个字符串,且串长 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 #include #include #defineM5 #defineN20 intfun(char(*ss)[N],int*n) {inti,k=0,len=N; /**********found**********/ for(i=0;i<___1___;i++) {len=strlen(ss[i]); if(i==0)*n=len; /**********found**********/ if(len___2___*n) {*n=len; k=i; } } /**********found**********/ return(___3___); } main() {charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"}; intn,k,i; printf("\nTheoriginalstringsare: \n"); for(i=0;i k=fun(ss,&n); printf("\nThelengthofshorteststringis: %d\n",n); printf("\nTheshorteststringis: %s\n",ss[k]); } 2、程序改错题 给定程序modi.c中,函数fun的功能是: 从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 各字符串在主函数中输入,并放入一个字符串数组中。 请改正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数。 #include #include #defineN5 #defineM81 /************found************/ fun(char(*sq)[M]) {inti;char*sp; sp=sq[0]; for(i=0;i if(strlen(sp) sp=sq[i]; /************found************/ returnsq; } main() {charstr[N][M],*longest;inti; printf("Enter%dlines: \n",N); for(i=0;i printf("\nTheNstring: \n",N); for(i=0;i longest=fun(str); printf("\nThelongeststring: \n");puts(longest); } 3、程序设计题 请编写一个函数fun(),它的功能是: 比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。 若两个字符串长度相等,则返回第1个字符串。 例如,输入nanjing 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include char*fun(char*s,char*t) {} main() { chara[20],b[10],*p,*q; inti; printf("Input1thstring: "); gets(a); printf("Input2thstring: "); gets(b); printf("%s",fun(a,b)); } 第三套 1、程序填空题 给定程序功能是用冒泡法对6个字符串进行排序。 #include #defineMAXLINE20 fun(char*pstr[6]) {inti,j; char*p; for(i=0;i<5;i++) {for(j=i+1;j<6;j++) { /**************found**************/ if(strcmp(*(pstr+i),___1___)>0) {p=*(pstr+i); /**************found**************/ pstr[i]=___2___; /**************found**************/ *(pstr+j)=___3___; } } } } main() {inti;char*pstr[6],str[6][MAXLINE]; for(i=0;i<6;i++)pstr[i]=str[i]; printf("\nEnter6string(1stringateachline): \n"); for(i=0;i<6;i++)scanf("%s",pstr[i]); fun(pstr); printf("Thestringsaftersorting: \n"); for(i=0;i<6;i++)printf("%s\n",pstr[i]); } 2、程序改错题 给定程序modi.c中,函数fun的功能是: 利用插入排序法对字符串中的字符按从小到大的顺序进行排序。 插入法的基本算法是: 先对字符串中的头两个元素进行排序。 然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。 待排序的字符串已在主函数中赋予。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数。 #defineN80 #include"stdio.h" #include"string.h" voidinsert(char*aa) {inti,j,n;charch; /************found************/ n=stlen(aa); for(i=1;i /************found************/ {c=aa[i]; j=i-1; while((j>=0)&&(ch {aa[j+1]=aa[j]; j--; } aa[j+1]=ch; } } main() {chara[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; inti; printf("Theoriginalstring: %s\n",a); insert(a); printf("Thestringaftersorting: %s\n\n",a); } 3、程序设计题 请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。 例如,原来的字符串为CEAedca,排序输出为CedcEAa。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include intfun(char*s,intnum) {} main() {chars[10]; printf("输入7个字符的字符串: "); gets(s); fun(s,7); printf("\n%s",s); } 第四套 1、程序填空题 下列给定程序中函数fun()的功能是: 先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如: 当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。 #include #include #include voidfun(char*s,char*t) {inti,s1; s1=__1__; for(i=0;i t[i]=s[__2__]; for(i=0;i t[s1+i]=s[i]; t[__3___]='\0'; } main() {chars[100],t[100]; printf("\nPleaseenterstrings: ");scanf("%s",s); fun(s,t); printf("Theresultis: %s\n",t); } 2、程序改错题 给定程序modi.c中函数fun的功能是: 把m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt中。 例如: 把3个串: "abc","CD","EF"串连起来,结果是"abcCDEF"。 请改正函数fun中的语法错误,使它能统计出正确结果。 注意: 不要改动main函数。 #include #include #include intfun(charstr[][10],intm,char*pt) {/************found************/ Intk,q,i; for(k=0;k {q=strlen(str[k]); for(i=0;i /************found************/ pt[i]=str[k,i]; pt+=q; pt[0]=0; } } main() {intm,h; chars[10][10],p[120]; printf("\nPleaseenterm: "); scanf("%d",&m);gets(s[0]); printf("\nPleaseenter%dstring: \n",m); for(h=0;h fun(s,m,p); printf("\nTheresultis: %s\n",p); } 3、程序设计题 请编写函数fun,函数的功能是: 将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。 例如,字符串数组中的M个字符串为: AAAABBBBBBBCC则合并后的字符串的内容应是: AAAABBBBBBBCC。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #defineM3 #defineN80 voidfun(chara[M][N],char*b) {} main() {chars[M][N]={"AAAA","BBBBBBB","CC"},p[100]; fun(s,p); printf("%s",p); } 三、课后练习 1、程序填空题 给定程序中,函数fun的功能是: 求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。 字符串数组中共有M个字符串,且串长 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 不得增行或删行,也不得更改程序的结构! #include #include #defineM5 #defineN20 voidfun(char(*ss)[N]) {inti,j,k=0,n,m,len; for(i=0;i {len=strlen(ss[i]); if(i==0)n=len; if(len>n) { /**********found**********/ n=len;___1___=i; } } for(i=0;i if(i! =k) {m=n; len=strlen(ss[i]); /**********found**********/ for(j=___2___;j>=0;j--) ss[i][m--]=ss[i][j]; for(j=0;j /**********found**********/ ___3___='*'; } } main() {charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; inti; printf("\nTheoriginalstringsare: \n"); for(i=0;i printf("\n"); fun(ss); printf("\nTheresult: \n"); for(i=0;i } 2、程序填空题 下列给定程序中,函数fun()的功能是: 从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 各字符串在主函数中输入,并放入一个字符串数组中。 #include #include #defineN5 #defineM81 __1__fun(char(*sq)[M]) {inti;char*sp; ___2___; for(i=0;i if(strlen(sp) sp=sq[i]; returnsp; } main() {charstr[N][M],*longest;inti; printf("Enter%dlines: \n",N); for(i=0;i printf("\nThe%dstring: \n",N); for(i=0;i longest=fun(str); printf("\nThelongeststring: \n");puts(longest); } 3、程序填空题 下列给定程序中,函数fun()的功能是: 将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。 例如,在调用fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABCDEFGHIJK。 #include voidfun(char*p,char*b) {inti,k=0; while(__1__) {i=0; while(__2__&&*p) {b[k]=*p; k++;p++;i++; } if(*p) {b[__3__]='';} } b[k]='\0'; } main() {chara[80],b[80]; printf("Enterastring: ");gets(a); printf("Theoriginalstring: ");puts(a); fun(a,b); printf("\nThestringafterinsertspace: "); puts(b); printf("\n\n"); } 4、程序填空题 请补充函数fun,该函数的功能是比较字符串str1和str2的大小,并返回比较的结果。 例如: 当str1=“cdef”,str2=“cde”时,函数fun()返回“>”。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 #include #include #defineN80 char*fun(char*str1,char*str2) {char*p1=str1,*p2=str2; while(*p1&&*p2) {if(【1】) return"<"; if(【2】) return">"; p1++; p2++; } if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 教案