标签:结束 作业 英文 长度 不为 函数 停止工作 了解 知识点
PTA提交列表:
1.设计思路
(1)主要描述题目算法
第一步:将十二个月的名称分别赋值给一维数组指针,定义用于返回的数据类型。
第二步:遍历数组,满足若n在1-12范围则将month第n-1行的首元素的地址赋给一开始定义的数据。
第三步:返回变量的地址值。
2.实验代码
char *getmonth( int n ) {
char *month[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
char *pc = ‘\0‘;
if(n>0 && n<=12){
pc = *(month+n-1);
}
return pc;
}
3.本题调试过程碰到问题及解决办法
错误点1:* pc未等于‘ \0 ‘,导致当输入的月份不为1-12范围内时,则停止工作。
解决方法:在注意到题目中“返回空指针NULL”后,将返回的指针型pc赋初值为‘\0‘。
错误点2:pc写成等于month+n-1
解决方法:在单步调试时,查看了(month+n-1)的值,加上 * (month+n-1)后结果为正确,然而上课时并没有很注意老师说的这个知识点,所以有一点疑惑,在询问了二班的李伍壹同学后,并观看了老师的ppt并自己手动调试后,最终解决了问题: * (month+n-1)是第n-1行首元素的地址,** (month+n-1) 是第i行首元素的值。 李伍壹同学认真的程度真的很值得我去学习,同时自己也需要自我批评,课上一定要高度集中注意力。
PTA提交列表:
1.设计思路
(1)主要描述题目算法
第一步:将一个星期每天的英文分别赋值给一维数组指针,定义一个整型变量,赋初值为-1。
第二步:遍历一维数组,用strmcp函数比较数组中每行元素与输入的字符串是否相同,若相同,则令此时的行数等于一开始定义的整型变量,且跳出循环。
第三步:返回整型变量值。
2.实验代码
int getindex( char *s ) {
int k=-1,i=0;
int *day[7] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(i=0;i<7;i++) {
if(strcmp(*(day+i),s)==0) {
k = i;
break;
}
}
return k;
}
3.本题调试过程碰到问题及解决办法
错误点1:将strcmp((day+i),s)==0直接写成 (day+i) == s。
解决方法:在第一题了解了之后,明白 * (day+i) 指的是第i行元素的首元素的地址,而 * s则表示的是首字母的值;且想起数组比较是否相等的话,必须要一个一个字母进行比较,只能用for循环或者是比较strcmp((day+i),s)的值,若为0则相等。
strcmp函数:对两个字符串进行自左至右逐个字符相比,按ASCII值的大小比较,全部相等值则为0,出现不相等的字符,则以第一个不相同的字符比较为准,若前者大于后者,函数值为正整数,反之为负整数。
PTA提交列表:
1.设计思路
(1)主要描述题目算法
第一步:遍历s数组,运用strlen函计算出每行元素的长度。
第二步:在for循环中进行比较,定义int型max,赋初值为0,当行元素的长度大于max,则将长度的值赋给max。
第三步:返回max的值。
(2)流程图
2.实验代码
int max_len( char *s[], int n ) {
int max = 0,i=0,len;
for(i=0;i<n;i++) {
len = strlen(*(s+i));
if(len > max) {
max = len;
}
}
return max;
}
3.本题调试过程碰到问题及解决办法
无
PTA提交列表:
1.设计思路
(1)主要描述题目算法
第一步:先遍历s字符数组,找到与ch1相同时s的下标,并将下标值赋给一个整型变量,定义为j。
第二步:在确定下标后,定义一个指针字符temp,将&s[i]赋给temp,后跳出循环。
第三步:从上面的j开始,循环字符数组s,在循环中分情况,若s[i] != ch2,则输出s[i],反之则输出s[i]加换行,且返回temp。
第四步:循环结束后,输出换行及返回temp。
(2)流程图
2.实验代码
/*
char *match( char *s, char ch1, char ch2 ) {
int i,j=strlen(s),k = 0,m=0;
char temp1[j+1];
char temp2[j+1];
for(i=0;s[i] != ‘\0‘;i++) {
if(s[i] == ch1) {
j = i;
break;
}
}
for(i=0;s[i] != ‘\0‘;i++) {
if(s[i] == ch2) {
k = i;
break;
}
}
if(k==0) {
k = strlen(s);
}
for(i=j;i<=k;i++) {
temp1[m] = s[i];
m++;
}
printf("%s\n",temp1);
m=0;
for(i=j;s[i] != ‘\0‘;i++) {
temp2[m] = s[i];
m++;
}
return temp2;
}
*/
char *match( char *s, char ch1, char ch2 ) {
int i,j=strlen(s),k = 0,m=0;
char *temp;
for(i=0;s[i] != ‘\0‘;i++) {
if(s[i] == ch1) {
temp = &s[i];
j = i;
break;
}
}
for(i=j;s[i] != ‘\0‘;i++) {
if(s[i] != ch2) {
printf("%c",s[i]);
} else {
printf("%c\n",s[i]);
return temp;
}
}
printf("\n");
return temp;
}
3.本题调试过程碰到问题及解决办法
错误点1:在dev中运行正确,却在pta全部答案错误。
解决方法:将temp2字符数组改成指针变量后,则为部分正确,猜测为pta中此题不支持字符数组的形式,最后将temp1舍去,按照满足条件则输出对应单个字符的思路重新构思代码,最后正确。
1.设计思路
(1)主要描述题目算法
(2)流程图
2.实验代码
3.本题调试过程碰到问题及解决办法
1.设计思路
(1)主要描述题目算法
(2)流程图
2.实验代码
3.本题调试过程碰到问题及解决办法
标签:结束 作业 英文 长度 不为 函数 停止工作 了解 知识点
原文地址:https://www.cnblogs.com/exo123/p/8798720.html