C二级操作题7一维字符数组元素位置移动及二维字符数组处理.docx
《C二级操作题7一维字符数组元素位置移动及二维字符数组处理.docx》由会员分享,可在线阅读,更多相关《C二级操作题7一维字符数组元素位置移动及二维字符数组处理.docx(24页珍藏版)》请在冰豆网上搜索。
![C二级操作题7一维字符数组元素位置移动及二维字符数组处理.docx](https://file1.bdocx.com/fileroot1/2022-10/28/0879db1a-6f8e-4344-8823-2573686fbf39/0879db1a-6f8e-4344-8823-2573686fbf391.gif)
C二级操作题7一维字符数组元素位置移动及二维字符数组处理
二级C机试资料第七课
第七课
教学内容:
一维字符数组元素位置移动及二维字符数组处理类算法
教学目的:
掌握一维字符数组元素位置移动及二维字符数组处理类算法的考题
教学内容:
一、一维字符数组元素位置移动及二维字符数组处理类算法的考题特点
此类算法多以填空题和程序设计题为考试形式。
常见考点:
1、一维字符数组元素位置移动。
2、二维字符数组排序,比较大小,连接。
二、课堂练习
第一套
1、程序填空题(字符数组循环左移)
给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。
例如:
s串中
原有的字符串为:
Mn.123xyZ,则调用该函数后,s串中的内容为:
n.123xyZM。
#include
#defineN81
fun(char*s)
{charb[N];
fprintf(b,"%s%c",s+1,*s);//把从s+1开始的字符串和第一个字符存入数组b中
/**************found**************/
strcpy(___1___);//s,b
}
main()
{chara[N];
printf("Enterastring:
");gets(a);
printf("Theoriginalstringis:
");puts(a);
/**************found**************/
fun(___2___);//a
printf("Thestringaftermodified:
");
/**************found**************/
___3___(a);//puts
}
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
/************found************/
第1页共15页
二级C机试资料第七课
p=q+i;//q=p+i
}
i++;
}
/************found************/
while(q
p
{*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、程序设计题(向左平移m个字符)
请编写函数fun,函数的功能是:
移动字符串中的内容,移动的规则如下:
把第1到第m个字符平
移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后字符串中的内容应该是:
DEFGHIJKABC。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数
fun的花括号中填入你编写的若干语句。
#include
#include
#defineN80
voidfun(char*w,intm)
{inti,j,n;chart;n=strlen(w);for(i=0;i{
t=w[0];
for(j=1;jw[n-1]=t;
}
}
main()
{chara[N]="ABCDEFGHIJK";intm;
printf("Theoriginalstring:
\n");puts(a);printf("\n\nEnterm:
");scanf("%d",&m);fun(a,m);
第2页共15页
二级C机试资料第七课
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++)//M
{len=strlen(ss[i]);
if(i==0)*n=len;//*n记录最短行的长度
/**********found**********/
if(len___2___*n)//<
{*n=len;
k=i;
}
}
/**********found**********/
return(___3___);//k
}
main()
{charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};
intn,k,i;
printf("\nTheoriginalstringsare:
\n");
for(i=0;ik=fun(ss,&n);//k记最短行的下标
printf("\nThelengthofshorteststringis:
%d\n",n);
printf("\nTheshorteststringis:
%s\n",ss[k]);
}
2、程序改错题(找最长行)从N个字符串中找出最长的那个串
给定程序modi.c中,函数fun的功能是:
从N个字符串中找出最长的那个串,并将其地址作为函
数值返回。
各字符串在主函数中输入,并放入一个字符串数组中。
请改正程序中的错误,使它能得出正
确结果。
注意:
不要改动main函数。
#include
#include
#defineN5
#defineM81
/************found************/
第3页共15页
二级C机试资料第七课
fun(char(*sq)[M])//char*fun(char(*sq)[M])
{inti;char*sp;
sp=sq[0];//先假设第0行为最长的行,sq[0]*(sq+0)表示&str[0][0]
for(i=0;iif(strlen(sp)sp=sq[i];
/************found************/
returnsq;//sp
}
main()
{charstr[N][M],*longest;inti;
printf("Enter%dlines:
\n",N);for(i=0;i\n",N);
for(i=0;iprintf("\nThelongeststring:
\n");puts(longest);
}
3、程序设计题(比较两个字符串的长度)
请编写一个函数fun(),它的功能是:
比较两个字符串的长度,(不得调用C语言提供的求字符串长
度的函数),函数返回较短的字符串。
若两个字符串长度相等,则返回第1个字符串。
例如,输入nanjing
nanchang(为回车键),函数将返回nanjing。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
char*fun(char*s,char*t)
{inti,m=0,n=0;for(i=0;s[i]!
='\0';i++)
m++;//记s串的长度
for(i=0;t[i]!
='\0';i++)
n++;//记t串的长度
if(m<=n)
returns;
else
returnt;
}
main()
{chara[20],b[10],*p,*q;inti;
printf("Input1thstring:
");gets(a);
printf("Input2thstring:
");gets(b);
printf("%s",fun(a,b));
}
第三套
第4页共15页
二级C机试资料第七课
1、程序填空题(字符串排序)用冒泡法对6个字符串进行排序
给定程序功能是用冒泡法对6个字符串进行排序。
#include
#defineMAXLINE20
fun(char*pstr[6])//pstr是指针数组,实质为二级指针变量
{inti,j;
char*p;
for(i=0;i<5;i++)
{for(j=i+1;j<6;j++)
{
/**************found**************/
if(strcmp(*(pstr+i),___1___)>0)//*(pstr+j)
{p=*(pstr+i);
/**************found**************/
pstr[i]=___2___;//*(pstr+j)
/**************found**************/
*(pstr+j)=___3_