码迷,mamicode.com
首页 > 其他好文 > 详细

C程序第三次作业

时间:2018-04-12 22:17:34      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:结束   作业   英文   长度   不为   函数   停止工作   了解   知识点   

6-1 输出月份英文名

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行首元素的值。 李伍壹同学认真的程度真的很值得我去学习,同时自己也需要自我批评,课上一定要高度集中注意力。
技术分享图片

6-2 查找星期

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,出现不相等的字符,则以第一个不相同的字符比较为准,若前者大于后者,函数值为正整数,反之为负整数。

6-3 计算最长的字符串长度

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.本题调试过程碰到问题及解决办法

6-4 指定位置输出字符串

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.本题调试过程碰到问题及解决办法

C程序第三次作业

标签:结束   作业   英文   长度   不为   函数   停止工作   了解   知识点   

原文地址:https://www.cnblogs.com/exo123/p/8798720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!