码迷,mamicode.com
首页 > 编程语言 > 详细

2018上C语言程序设计(高级)作业- 第3次作业

时间:2018-04-15 14:49:44      阅读:614      评论:0      收藏:0      [点我收藏+]

标签:amp   image   出现   学习   地址   英文   style   apr   名称   

作业要求一 :

PTA作业的提交列表:

 技术分享图片

 

作业要求二:

6-1 输出月份英文名

1.设计思路

主要描述算法:

第一步:本题要求通过字符串指针实现函数,可以返回一个给定月份的英文名称。

第二步:定义整形变量n,通过switch语句,判断每一条语句,如果是就按数字输出月份,否则执行default,输出NULL

第三步:按要求返回主函数并输出。

2.实验代码:

char *getmonth( int n )
{
    switch(n)
    {
        case 1:return "January";
        case 2:return "February";
        case 3:return "March";
        case 4:return "April";
        case 5:return "May";
        case 6:return "June";
        case 7:return "July";
        case 8:return "August";
        case 9:return "September";
        case 10:return "October";
        case 11:return "November";
        case 12:return "December";
        default:return NULL;
     } 
} 

3.本题调试过程碰到问题及解决办法

技术分享图片

技术分享图片

遇到的问题1:应该返回的是指针,而不是字符串。

改正方法:将printf改成return

 遇到的问题2:case后面的数字用单引号括了起来。

改正方法:case后面可以是数字,因为switch后面是整形,所以不用单引号。(通过查找课本105页得到答案)

6-2 查找星期

1.设计思路

主要描述算法:

第一步:本题要求用指针数组实现函数,可以根据下表查找到星期,返回对应的序号。

第二步:首先定义一个指针数组,将星期都存到数组里,通过for循环语句和if条件判断(strcmp)比较星期是否相同,break回到上一级,否则返回m。

第三步:按要求输出序号和星期或-1

2.实验代码:

int getindex( char *s )
{
    int i,m=-1;
    char *week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    for(i=0;i<7;i++)
    {
        if (strcmp (s, week[i]) == 0) 
        {
          m=i;
            break;
          }  
    }  
    return m;
} 

3.本题调试过程碰到问题及解决办法

技术分享图片

遇到的问题:本题要求传递的应该是字符串,所以不能用switch语句

改正方法:用上课讲的指针数组的方式。

遇到的问题2:在循环中没有先定义m=-1所以总是出现部分正确。

改正方法:先把m=-1定义在前面,再将其赋给i,就不会出现部分正确了。

 

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

1.设计思路

主要描述算法:

第一步:本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度

第二步:首先定义整形变量和字符指针数组m,通过两个for循环判断,*(*(s+i)+j)!=‘\0‘,继续执行;在第二个for循环中判断如果m[i]>count,输出最长的长度,否则继续循环

第三步:输出指针数组中最长字符串的长度。

2.实验代码:

int max_len( char *s[], int n )
{
    int i,j,m[20]={0};
    int count=0;
    for(i=0;i<n;i++)
    {
        for(j=0;*(*(s+i)+j)!=\0;j++)
        {
        }
        m[i]=j;
    }
    for(i=0;i<n;i++)
    {
        if(m[i]>count)
        {
            count=m[i];
        }
    }
    return count;
} 

3.本题调试过程碰到问题及解决办法

技术分享图片

遇到的问题:指针*(*(s+i)+j)!=‘\0‘弄错了

改正方法:应该是用指针的指针来判断。

 

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

1.设计思路

主要描述算法:

第一步:本题要求编写实现函数实现对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符

第二步:首先定义整形变量,通过一个for循环先将ch1的值赋给*(s+i);定义指针,判断(*(s+j)!=ch2)&&(*(s+j)!=‘\0‘),如果*(s+j)!=‘\0‘,输出,否则返回a

第三步:在大的for循环后输出,再返回s+i的值。

2.实验代码:

char *match( char *s, char ch1, char ch2 ){
    int i,j;
    for(i=0;*(s+i)!=\0;i++)
    {
        if(*(s+i)==ch1)
        {
          char *a=  &s[i];
            for(j=i;(*(s+j)!=ch2)&&(*(s+j)!=\0);j++)
            {
                printf("%c",*(s+j));
            }
            if(*(s+j)!=\0)
            printf("%c",*(s+j));
            printf("\n");
            return a;
        }
    }
    printf("\n");
    return s+i;
}

3.本题调试过程碰到问题及解决办法

技术分享图片

遇到的问题:%c输出的应该是指针*(s+i),而不是s+i

改正方法:将s+i改成*(s+i),程序运行成功。

 

 

要求三、学习总结和进度:

学习总结:

git的地址:

点评同学:

进度表:

 

2018上C语言程序设计(高级)作业- 第3次作业

标签:amp   image   出现   学习   地址   英文   style   apr   名称   

原文地址:https://www.cnblogs.com/phsudie/p/8759331.html

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