2019春季第七周作业

这个作业属于哪个课程 C语言程序设计ll
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935
我在这个课程的目标是 掌握指针变量的基本运算,了解指针数组
这个作业在哪个具体方面帮助我实现目标 这个作业让我又认识了新的指针——指针数组
参考文献 http://c.biancheng.net/cpp/html/476.html

一、基础题

1、 每个单词的最后一个字母改成大写

函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

函数接口定义:

void fun( char *p );

其中 p 是用户传入的参数。函数将 p所指字符串中每个单词的最后一个字母改成大写。

裁判测试程序样例:

#include <stdio.h>
void fun( char *p );
int main()
{
 char chrstr[64];  int d ;
  gets(chrstr);
  d=strlen(chrstr) ;
  chrstr[d] = ' ' ;
  chrstr[d+1] = 0 ;
  fun(chrstr);
  printf("\nAfter changing:   %s\n", chrstr);
return 0;
}

/* 请在这里填写答案 */

输入样例:

my friend is happy

输出样例:

After changing:   mY frienD iS happY

(1)实验代码

#include <stdio.h>
void fun( char *p );
int main()
{
       char chrstr[64]; 
       int d ;

       gets(chrstr);
       d=strlen(chrstr) ;
       chrstr[d] = ' ' ;
       chrstr[d+1] = 0 ;
       fun(chrstr);

       printf("\nAfter changing:   %s\n", chrstr);

      return 0;
}
void fun (char *p )
{
        int i;
        for(i=0;p[i]!='\0';i++)
        {
            if(p[i+1]==' ')
            p[i]=p[i]-'a'+'A';
        }
}

(2)设计思路

2019 第七周作业 随笔 第1张

(3)本题调试过程中碰到问题及解决方法

问题:·进制转换的时候不懂怎样将小写改成大
解决方法:·查看了ASCII码表并看了十进制的值,然后对比小写和大写的差值

(4)运行结果截图

2019 第七周作业 随笔 第2张

2019 第七周作业 随笔 第3张

2、自动售货机

如图所示的简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1-10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使用。如果物架上的商品被用户买走,储物柜中会自动取出商品送到物架上,保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,售货机可以一次性将商品输出并找零钱。

1.jpg

用户购买商品的操作方法是:

(1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),放入钱币时,控制器会先对钱币进行检验识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户确认钱币放入完毕;

(2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的编号按钮即可。每选中一样商品,售货机控制器会判断钱币是否足够购买,如果钱币足够,自动根据编号将物品进行计数和计算所需钱币值,并提示余额。如果钱币不足,控制器则提示“Insufficient money”。用户可以取消购买,将会把所有放入钱币退回给用户。

输入格式:

先输入钱币值序列,以-1作为结束,再依次输入多个购买商品编号,以-1结束。

输出格式:

输出钱币总额与找回零钱,以及所购买商品名称及数量。

输入样例:

1 1 2 2 5 5 10 10 -1
1 2 3 5 1 6 9 10 -1

输出样例:

Total:36yuan,change:19yuan
Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;

(1)实验代码

#include<stdio.h>
#include<string.h>
int main (void)
{
       int total = 0, change = 0, i = 0;
       int m, sum[11] = {0}, price[11]={0,1,1,1,2,2,3,3,3,4,4};
       char a[11][20]={"","Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Oolong-Juice","Sprite","Oolong-Tea","Green-Tea"};
 
       while(1)
       {
           scanf("%d", &m);
        
           if(m == -1)
           break;
            
           total = total + m;    //放入的钱的总数 
    
       }   

        while(1)
       {
           scanf("%d", &m);
        
           if(m == -1)
           break;
        
           sum[m]++;         //统计所买的各个商品的数量
       }
    
       for(i = 1;i < 11;i++)
       {
           change = change + price[i] * sum[i];    //计算所买商品的价格 
       }
    
       if(change > total)       //判断钱是否足够
       {
           printf("Insufficient money");
        
           return 0;
       }
    
       printf("Total:%dyuan,change:%dyuan\n", total, total - change);      //输出价格
    
       for(i = 1;i < 11;i++)       //输出商品购买的数量
       {
           if(sum[i] != 0)
           {
               printf("%s:%d;", a[i], sum[i]);
           }
       }
    
       return 0;
}

(2)设计思路

2019 第七周作业 随笔 第4张

(3)本题调试过程中碰到问题及解决方法

问题:·感觉本题比较难,思路不清晰,看了其他博主的代码,但是还是有很多问题,比如不清楚数组的第一个数为什么要改为空格,还有一开始没有考虑到放入的钱不够的情况。
解决方法:·参看其他博主的代码,自己慢慢改写,还会继续钻研的!

(4)运行结果截图

2019 第七周作业 随笔 第5张

2019 第七周作业 随笔 第6张

二、预习题

1、使用函数删除字符串中的字符

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。

要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。

输入输出示例:括号内为说明,无需输入输出

输入样例:

3               (repeat=3)
happy new year  (字符串"happy new year")
a               (待删除的字符'a')
bee             (字符串"bee")
e               (待删除的字符'e')
111211          (字符串"111211")
1               (待删除的字符'1')

输出样例:

result: hppy new yer    (字符串"happy new year"中的字符'a'都被删除)
result: b               (字符串"bee"中的字符'e'都被删除)
result: 2               (字符串"111211"中的字符'1'都被删除)

(1)实验代码

#include<stdio.h>
void delchar(char str[],char c);
int main()
{
    int repeat;                // repeat (0<repeat<10)
    char str[100],c;

    scanf("%d\n",&repeat);  
    while(repeat--)
    {
        gets(str);             //输入字符串 
            scanf("%c",&c);
          printf("result: "); 
        
        delchar(str,c);        //调用函数,它的功能是将字符串 str 中出现的所有 c 字符删除
    }

    return 0;
}

void delchar(char str[],char c)    //str[]相当于*p
{
    while(*str!='\0')              //不为空字符 
    {
        if(*str!=c)  
        {
            putchar(*str);         //输出字符 
        }
        str++; 
    }
}

(2)设计思路

2019 第七周作业 随笔 第7张

(3)本题调试过程中遇到的问题及解决方法

问题:·粗心没写printf("result: ");
解决方法:·运行格式错误之后返回代码仔细检查

问题:·不太清楚 '\0' 的意思
解决方法:·查了资料知道了它是空字符的意思

(4)运行结果截图

2019 第七周作业 随笔 第8张

2019 第七周作业 随笔 第9张

三、预习的主要内容

预习了指针数组和数组指针的区别:

在C语言和C++语言中,数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名*数组标识符[数组长度]”。指针数组中的每一个元素均为指针。指针数组可以作为函数的参量使用,使用方式与普通数组类似。指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。。

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动); 指针数组是数组元素为指针的数组,其本质为数组。例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针,每个数组元素相当于一个指针变量。。

相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。 但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。。

四、学习感悟

本周学习了指针数组,指针数组可以说成是”指针的数组”,首先这个变量是一个数组。其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型。在 32 位系统中,指针占四个字节。在C语言和C++语言中,数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名*数组标识符[数组长度]”。指针数组中的每一个元素均为指针。指针数组可以作为函数的参量使用,使用方式与普通数组类似。指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。。

感悟:虽然比较难,但是还是会继续努力的!

五、结对编程感想

每周三晚自习是我们结对编程的时间,我和搭档很默契,我们会在双方互相写完代码后再进行讨论,然后看一下双方的代码有什么区别,然后再互相讲一下思路。我觉得结对编程的优点就是可以了解一个代码不同的思路,不同的写法,也可以增进同学之间的关系;缺点就是讨论时会扰乱双方的思路。。

六、学习进度条

周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑的问题
2/25-3/3 三天 45 数组的认识及用法 数组长度的理解
3/4-3/10 两天 37 编写程序时处理文件 fscanf与fprintf的具体用法
3/11-3/17 三天 53 二维数组的使用及文件插入 二维数组的用法、上三角的判断及文件的处理
3/18-3/24 两天 113 选择排序法、二分查找法、二维数组的引用与矩阵 不清楚选择排序法和冒泡排序法的区别
3/25-3/31 两天 78 判断回文、一维字符数组的用法、使用字符串编程 使用字符串编程
4/1-4/7 两天 88 指针变量的基本运算,内存单元和地址之间的关系 不太了解指针数组
4/8-4/14 两天 96 指针、数组和地址之间的关系 对于指针数组和数组指针的区别不是特别清楚

七、表格和折线图

时间 代码行数 博客字数
第一周 45 870
第二周 37 1055
第三周 112 1158
第四周 113 1696
第五周 78 1854
第六周 114 2977
第七周 96 3019

2019 第七周作业 随笔 第10张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄