• 2019春第7周作业


    这个作业属于哪个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass1-2018/homework/2939
    我在这个课程的目标是 学会C语言
    这个作业在哪个具体方面帮助我实现目标 指针改变主调函数的值,指针与数组的操作
    参考文献 https://www.baidu.com/link?url=jRshziVLCsEtkikgZJyXysNPM4yNONODBYaa29IeF82Muq7kRCOMFQzBLyRYs6VW&wd=&eqid=cc7b605b00068d97000000065caf07a7

    题目6-2 每个单词最后一个字母改成大写

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

    函数接口定义

    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("
    After changing:   %s
    ", chrstr);
    return 0;
    }
    
    /* 请在这里填写答案 */
    

    输入样例:

    my friend is happy
    

    输出样例

    After changing:   mY frienD iS happY
    

    1.实验代码

    void fun(char *p)
    {
      int i;                       
      for(i = 0; *(p + i) != ''; i++)
      {
        if(*(p + i + 1 ) == ' ')
        *(p + i) = *(p + i) - 32;
      }
    }
    

    2.设计思路

    3.本题遇到的问题及解决办法


    运行代码发现答案错误,仔细看了之后发现应该是后面的一个元素是空格,那么它前面改为大写,我写的是如果此元素为空格,则此元素改为大写

    4.运行结果截图

    题目7-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 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>
    struct goods
    {
       int num;
       char name[20];
       int price;
       int count;
    };
    int main()
    {
       struct goods good[10]=
       {
       {1,"Table-water",1,0},
       {2,"Table-water",1,0},
       {3,"Table-water",1,0},
       {4,"Coca-Cola”",2,0},
       {5,"Milk",2,0},
       {6,"Beer",3,0},
       {7,"Orange-Juice",3,0},
       {8,"Sprite",3,0},
       {9,"Oolong-Tea",4,0},
       {10,"Green-Tea",4,0}
    };
    
    int sum = 0, num, change, total = 0, money = 0, i = 0;
    while(1)
    {
           scanf("%d", &money);
           if(money == -1)
             {
                break;
             }
           total = total + money;
    }
    while(1)
    {
           scanf("%d", &num);
           if(num == -1)
           {
               break;
           }
    switch(num)
    {
        case 1:
            {
                sum = sum + good[0].price;
                good[0].count=good[0].count+1;
                break;
            }
        case 2:
            {
                sum = sum + good[1].price;
    
                good[1].count=good[1].count+1;
                break;
    
            }
        case 3:
            {
                sum = sum + good[2].price;
    
                good[2].count=good[2].count+1;
                break;
            }
             case 4:
            {
                sum = sum + good[3].price;
    
                good[3].count = good[3].count+1;
                break;
            }
             case 5:
            {
                sum = sum + good[4].price;
    
                good[4].count = good[4].count+1;
                break;
            }
             case 6:
            {
                sum = sum + good[5].price;
    
                good[5].count = good[5].count+1;
                break;
            }
             case 7:
            {
                sum = sum + good[6].price;
    
                good[6].count = good[6].count+1;
                break;
            }
             case 8:
            {
                sum = sum + good[7].price;
    
                good[7].count = good[7].count+1;
                break;
            }
             case 9:
            {
                sum = sum + good[8].price;
     
                good[8].count = good[8].count+1;
                break;
            }
             case 10:
            {
                sum = sum + good[9].price;
    
                good[9].count = good[9].count+1;
                break;
            }
        }
    
      }
      if(sum > total)
      {
          printf("Insufficient money");
      }
      else
      {
         change = total - sum;
         printf("Total:%dyuan,change:%dyuan
    ",total, change);
         for(i=0;i<10;i++)
         {
             if(good[i].count!=0)
             {
                 printf("%s:%d;",good[i].name, good[i].count);
             }
         }
      }
    }
    

    代码源自:https://me.csdn.net/weixin_43858517

    2.设计思路

    在程序首部定义结构类型struct goods,其中成员代表商品的序号,名称,价格和个数。在主函数中用此结构类型定义一个结构数组good[10],结构结构成员操作符“.“对其某个成员进行引用。及good[i].price,good[i].count。C语言规定,结构类型变量的储存布局按其类型定义成员的先后顺序排列。定义结构数组时,其初始化格式与二维数组的初始化类似。struct goods good[10] = {{序号,名称,价格,个数}。

    good[0] 1 Table-water 1 0
    good[1] 2 Table-water 1 0
    ............. .... ..................... ... ...
    good[9] 10 "Green-Tea 4 0

    3.遇到的问题及解决办法


    问题:答案错误,运行代码发现10个东西都有输出,没有点的商品显示了你点了0个. 在输出的地方改为if(good[i].count!=0) { printf("%s:%d;",good[i].name,good[i].count);}

    4.运行结果截图

    挑战作业

    如果 “子数组” 并不要求是一个矩形, 而是联通的元素即可 (上下或左右相邻即视为联通), 那解法会是怎么样呢?
    思路:数组中把所有联通情况写出,记录联通元素和,比较它们的大小,输出最大的。

    题目7-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(void)
    {
        int repeat,i;
        char str[100],c;
        scanf("%d
    ",&repeat);
        for(i=0;i<repeat;i++)
        {
            gets(str);
            scanf("%c",&c);
            delchar(str,c);
            printf("result: %s
    ",str);
        }
        return 0;
    }
    void delchar(char *str, char c)
    {
        int i,j=0;
        for(i = 0; str[i] != ''; i++)
        {
            if(str[i] != c)
            {
                str[j] = str[i];
                j++;
            }
        }
        str[j]='';
    }
    

    3.遇到的问题及解决办法


    运行代码后,输出第一个结果之后,第二个输出没有输进要删除的字符就输出了。问主查助教,给我调试了一手.

    4.运行结果截图

    学习进度条

    周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑的问题
    3-2-3/8 10h 200行 数组,指针,文件入门 数组串的使用
    3/9-3-15 15h 230行 二维数组,文件的使用 不知道怎么画流程图
    3/16-3/22 14h 230行 排序算法:选择,冒泡。找鞍点 迷迷糊糊朦朦胧胧
    3/23-3/29 12h 300行 字符数组,指针 指针的使用方法
    3/30-4/5 15h 300行 通过函数调用来改变主调函数中某个变量的值 指针的使用方法
    4/6-4/12 13h 330行 指针,结构 结构
    时间 博客字数 代码行数
    第二周 327 200
    第三周 1105 230
    第四周 1299 230
    第五周 564 300
    第六周 1564 300
    第七周 1000 330

    学习感悟

    心得:

    (1).学习内容:
    1.指针,数组地址之间的关系
    2.指针变量运算符
    收获:对指针和地址有了更深的理解
    (2).难点:挑战作业

    结对编程

    1.结对编程过程
    晚自习和队友一起写
    2.结对编程的优缺点
    优点:可以互相交流,开拓思路
    缺点:两个人都很菜,就很难受了

    完成作业的消耗时间:10h

  • 相关阅读:
    【云速建站】购买前的指导
    【云速建站】域名配置指导
    Python爬虫批量下载糗事百科段子,怀念的天王盖地虎,小鸡炖蘑菇...
    舌尖上的安全
    【云速建站】视频播放专题
    Python装饰器总结,带你几步跨越此坑!
    让你提前认识软件开发(15):程序调试的利器—日志
    Win8下IIS的安装和站点的公布
    [2011山东ACM省赛] Mathman Bank(模拟题)
    Android UI开发神兵利器之Android Action Bar Style Generator
  • 原文地址:https://www.cnblogs.com/20188382llz/p/10691138.html
Copyright © 2020-2023  润新知