zoukankan      html  css  js  c++  java
  • 题目---改大写及自动售货机及删除指定元素

    2019春第七周作业

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935
    我在这个课程的目标是 熟练运用指针
    这个作业在那个具体方面帮助我实现目标 更加熟练使用结构体
    参考文献 挑战程序设计

    第一题

    6-2 每个单词的最后一个字母改成大写 (10 分)
     

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

    函数接口定义:

    void fun( char *p );

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

    裁判测试程序样例:

     1 #include <stdio.h>
     2 void fun( char *p );
     3 int main()
     4 {
     5  char chrstr[64];  int d ;
     6   gets(chrstr);
     7   d=strlen(chrstr) ;
     8   chrstr[d] = ' ' ;
     9   chrstr[d+1] = 0 ;
    10   fun(chrstr);
    11   printf("
    After changing:   %s
    ", chrstr);
    12 return 0;
    13 }
    14 
    15 /* 请在这里填写答案 */

    输入样例:

    my friend is happy

    输出样例:

    After changing:   mY frienD iS happY


    实验代码(自定义函数)

     1 void fun(char * p)
     2 {
     3     int len = strlen(p);
     4     for (int i = 0; i < len; i++)
     5     {
     6         if (p[i + 1] == ' ')
     7             p[i] =p[i]- 32;
     8      }
     9     return;
    10 }

    设计思路

    调试过程中遇到的问题及解决方法

    运行结果截图

     

    第二题

    7-2 自动售货机 (30 分)

     

    实验代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define MAXN 10000
     4 int balance;
     5 
     6 struct shop {
     7     int num = 0;
     8     int price[10] = { 1,1,1,2,2,3,3,3,4,4 };
     9     char str[10][100] = { "Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea", "Green-Tea" };
    10 };
    11 
    12 
    13 int main(int argc, const char * argv[])
    14 {
    15     struct shop name[11];
    16     int sum = 0, change, money, i = 0, number[MAXN];
    17 
    18     while (1) { scanf("%d", &money); if (money == -1)break; sum += money; }
    19     balance = sum;
    20     while (1) { scanf("%d", &number[i++]); if (number[i - 1] < 0)break; }
    21 
    22 
    23     for (int j = 0; j < i; j++) {
    24         if ((balance - name[number[j] - 1].price[number[j] - 1] >= 0) && number[j] != -1) {
    25             balance -= name[number[j] - 1].price[number[j] - 1];
    26             name[number[j] - 1].num++;
    27         }
    28         if (balance - name[number[j] - 1].price[number[j] - 1] < 0) { cout << "Insufficient money" << endl; return 0; }
    29         if (number[j] == -1) { break; }
    30     }
    31 
    32 
    33     cout << "Total:" << sum << "yuan,change:" << balance << "yuan" << endl;
    34     for (int j = 0; j < 10; j++)
    35     {
    36         if (name[j].num != 0)cout << name[j].str[j] << ":" << name[j].num << ";";
    37     }
    38 
    39 
    40     return 0;
    41 }

    设计思路

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

    这道题我被坑惨了,先是题意,上面说每当判断一个商品就会看余额够不够,不够就输出“Insufficient money”,我一开始一为是假如第一个商品钱够,第二个不够,就会输出 XXX(商品):1;然后换行输出“Insufficient money”,结果是只要其中有一个钱不够,就输出“Insufficient money”,太坑了!然后是第二点是我自己坑自己,商品名称,我把“-”号打成“_”然后一直错误错误,发现结果是错了名字之后想拍死自己,各位一定要认真看变量名啊啊啊啊啊啊!!!

    运行结果截图

    第三题

     7-1 使用函数删除字符串中的字符 (10 分)

    实验代码

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 
     6 void delchar(char * arr, char zf) {
     7     int len = strlen(arr);
     8     int count=0;
     9     vector<char> str;
    10     str.clear();
    11     for (int i = 0; i < len; i++)
    12     {
    13         str.push_back(arr[i]);
    14         if (arr[i] == zf)
    15         {
    16             str.erase(str.begin()+(i-count));
    17             count++;
    18         }
    19     }
    20     int x = len - count;
    21     cout<<"result: ";
    22     for(int i = 0 ; i < x ;i++)
    23     cout << str[i];
    24     cout<<endl;
    25 }
    26 
    27 int main(int argc, const char * argv[])
    28 {
    29     int T;
    30     cin >> T;
    31     while (T--) {
    32         char str[1000]={''},zf;
    33         string s;
    34         getchar();
    35         getline(cin,s);
    36         int len = s.length();
    37         for(int i = 0 ; i < len ; i++){str[i] = s[i];}
    38         scanf("%c",&zf);
    39         delchar(&str[0],zf);
    40     }
    41 
    42     return 0;
    43 }

    设计思路

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

     

    一开始元素删除是删除了,但是从第二个字符串开始,就会保留上一次的字符串内容,后来发现忘记将字符串数组初始化了

    运行结果截图

     -------------------------------------------------------------------------------------------------------------------------

    挑战作业(持续完善中)……

    讲一下挑战作业关于我自己不成熟的思路吧,就是用深度搜索去找出每一个正数块,然后找出每个正数块的最小权值路径,连接起来,并且判断连接后的块是否比单独最大块大,如果没有,则输出单独块。但是关于找最小权值路径的复杂度似乎有点小大...而且块边缘处理不是很成熟,有点难搞,不过可以去尝试着挑战一下第二种情况,感觉还行..如果要全部情况同时完成..(对不起,打扰了)。

    结对编程感想:

      此次结对编程对问题的解析更为深刻,在不断讨论的过程中和搭档一起研究出了几种解决问题的方法,发现了新思路,由于此次题目比较新颖有趣,所以解题过程还是很快乐滴,对指针和数据结构的了解和利用更加熟练了,并且与搭档合作更加默契了,对于解题很有帮助!

     

    学习总结:

    存在的问题 心得 完成作业消耗时间 本周学习内容
    第一周 对文件读取数据的运用不是很熟练 多去看关于刷题的书籍,有助于提高自己写题能力,实在不会的可以参考大佬的代码,加以自己理解之后去默写几遍 半个小时左右 文件输入,BFS,DFS,PARTITION算法及简单的贪心算法
    第二周 对单纯用数组完成双向链表的操作还是太生疏了,说明对双向链表的运作原理不熟 推荐两本比较好的书《挑战程序设计》《算法竞赛》 半个小时左右 vector数组及list双向链表操作
    第三周 指针的概念太久没记有点生疏了 对vector数组使用愈加熟练 一小时左右 数据结构
    第四周 对联通二维数组的最大子数和自闭了 多看些算法,不然写题目用什么方法去解决都弄不清 基础题目10分钟,挑战作业现在都在自闭中 迭代器
    第五周 最小权值路径最优解该用什么解法 多思考一下如何优化自己的代码,会有新的收获 一个小时 递归和分治法

  • 相关阅读:
    只有APE文件的情况下自己制作CUE文件的方法转,经过本人验证真实可靠good!20101128终极解决版
    无法加载登录用户界面DLL MyGina.dll 解决
    sql2000_简单入门,以前的笔记
    dell_又一例:raid的变化(断电后,可能没有电池造成)
    MSSQL使用帮助租赁空间后的数据库链接
    PS创建动作并利用批处理命令自动处理多图片转
    office2003修复安装,缺少SKU011.CAB文件_解决
    使用双wan口的企业/校园网解决方案初探
    我机也中病毒MS Driver Management Service(原创)
    win2003开机有问题:Windows 无法查询 {7B849a69220F451EB3FE2CB811AF94AE} 的 DllName 注册表项,它将不会被加载。最有可能的原因是注册错误。
  • 原文地址:https://www.cnblogs.com/xiangqi/p/10680559.html
Copyright © 2011-2022 走看看