第三次作业
6-1 输出月份英文名
1.设计思路
第一步:先定义每个月份的字符串数组
第二步:判断输入的n是否是小于13大于0的
第三步:如果是则返回n的前一位,因为数组从0开始,如果不是则返回NULL
流程图
2.实验代码
char *getmonth( int n )
{
char *month[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
if(n>0&&n<13)
{
return month[n-1];
}else{
return NULL;
}
}
错误信息:答案错误
错误原因:再返回时没仔细看主函数如果s=NULL才输出wrong input
改正方法:将否则返回wrong input,改成NULL
6-2 查找星期
1.设计思路
第一步:定义一个n为-1;并定义字符串
第二步:利用for循环里的if判断输入值和定义的是否相等
第三步:如果相等则把下标赋值给n
第四步:for循环后返回n
流程图
2.实验代码
int getindex( char *s )
{
int i,n=-1;
char *week[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
for(i=0;i<7;i++)
{
if(strcmp (s,week[i]) == 0)
{
n=i;
break;
}
}
return n;
}
暂无错误
6-3 计算最长的字符串长度
1.设计思路
第一步:先定义一个max=0的最小值
第二步:利用一个for循环,里头定义一个t让他等于每次输入的最高长度
第三步:判断t是max的大小,如果t大于max,则把max的值赋值给t
第四步;返回最大值
2.实验代码
int max_len( char *s[], int n )
{
int i=0, t;
int max=0;
for(i=0; i<n; i++)
{
t = strlen(s[i]);
if(max < t)
max = t;
}
return max;
}
错误信息:无
错误原因:没思路
改正方法:在向同学询问之后,明白了strlen的意思
6-4 指定位置输出字符串
1.设计思路
第一步:定义一个数组长度len,指针P等于NULL,
第二步:利用for循环判断i是否小于数组长度,如果不是则直接输出换行,返回数组+i
第三步:如果i小于数组长度则判断第i个数是否和ch1相等,如果不等则直接输出换行,返回数组+i
第四步:如果相等则令s[i]的地址等于p,并再次利用for循环判断j是否小于len,如果不是则直接输出换行,返回p
第五步:如果j小于数组长度判断s[j]是否等于ch2,如果不等则输出中间数,如果相等则输出中间数并返回p
流程图
char *match( char *s, char ch1, char ch2 ){
int i=0,j=0,len=0;
char*p=NULL;
len = strlen(s);
for(i=0;i<len;i++){
if(s[i]==ch1){
p=&s[i];
for(j=i;j<len;j++){
if(s[j]!=ch2){
printf("%c", s[j]);
}
if(s[j]==ch2){
printf("%c\n", s[j]);
return p;
}
}
printf("\n");
return p;
}
}
printf("\n");
return s+i;
}
错误信息:答案错误
错误原因:在开始判断s[i]是否等于ch1后,未将p=&s[i];在最后的返回值时依然返回了P,搞混了第一个for和第二个for的意义
改正方法:将最后返回值改为s+i,在开始的for里加入p=&s[i]