博客
关于我
2019春第七周作业
阅读量:798 次
发布时间:2023-04-02

本文共 4651 字,大约阅读时间需要 15 分钟。

本周作业内容较为丰富,涵盖了多个编程任务,包括字符串处理、自动售货机模拟以及指针相关的练习。以下是本周作业的详细内容和解答:

本周作业

1. 作业内容

  • 课程名称:C语言程序设计II

2. 作业要求

  • 通过完成本次作业,掌握C语言中字符串操作的相关知识,能够实现字符串中字符删除功能。
  • 该作业将帮助我们理解指针在字符串操作中的应用,以及如何通过函数实现自定义的字符串处理功能。

3. 作业帮助实现的目标

  • 理解并掌握如何使用函数删除字符串中的指定字符。
  • 掌握指针在字符串操作中的使用方法。

4. 参考文献

  • 《C语言程序设计II》

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

3. 输入样例

  • 测试用例1
    • repeat=3
    • 输入字符串:"happy new year"
    • 循环次数=3
    • 循环内输入的字符:"a"

4. 输出样例

  • 预期输出结果:"result: hppy new yer"

5. 实验代码

#include 
void delchar(char *str, char c) { int i, j; for (i = j = 0; str[i] != '\0'; i++) { if (str[i] != c) { str[j++] = str[i]; } } str[j] = '\0';}int main() { char c; char str[100]; int repeat, ri; void delchar(char *str, char c); scanf("%d", &repeat); getchar(); for (ri = 1; ri <= repeat; ri++) { gets(str); scanf("%c", &c); delchar(str, c); printf("result: "); puts(str); } return 0;}

6. 设计思路

  • 函数设计void delchar(char *str, char c)的功能是删除字符串str中所有与c相同的字符。
  • 实现思路:通过遍历字符串,使用两个指针iji遍历字符串,j记录新字符串的位置。当发现字符不等于c时,将其复制到新位置,最后将新字符串的终止符添加到j位置。

7. 调试过程

  • 问题:运行时出现段错误。
  • 解决方法:检查函数定义,发现delchar函数的参数类型和函数定义不匹配,及时修正后问题得到解决。

8. 运行结果

  • 测试结果表明,函数能够正确删除指定字符,输出结果符合预期。

7-2 自动售货机

1. 功能描述

  • 模拟一个简单的自动售货机,用户可通过插入硬币选择商品,售货机根据预设规则计算找零并输出商品。

2. 输入格式

  • 输入钱币值序列,以-1结束。
  • 输入购买商品编号,以-1结束。

3. 输入样例

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

4. 输出样例

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

5. 实验代码

#include 
int main(void) { char a[10][20] = {"Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea","Green-Tea"}; int b[11] = {0,0,0,0,0,0,0,0,0,0,0}; int c[100]; int i=1, k, sum = 0, money, SUM = 0, change, flag=0; scanf("%d",&money); while((money!=-1) && (money <= 10)) { sum += money; scanf("%d",&money); } scanf("%d",&c[i]); while(c[i]!=-1) { switch(c[i]) { case 1: case 2: case 3: SUM += 1; break; case 4: case 5: SUM += 2; break; case 6: case 7: case 8: SUM += 3; break; case 9: case 10: SUM +=4; break; default: break; } if(SUM > sum) { printf("Insufficient money"); flag = 1; break; } i++; scanf("%d",&c[i]); } change = sum - SUM; i = 1; while(c[i]!=-1) { switch(c[i]) { case 1: b[1]++; break; case 2: b[2]++; break; case 3: b[3]++; break; case 4: b[4]++; break; case 5: b[5]++; break; case 6: b[6]++; break; case 7: b[7]++; break; case 8: b[8]++; break; case 9: b[9]++; break; case 10: b[10]++; break; default: break; } i++; } if(flag==0) { printf("Total:%dyuan,change:%dyuan\n",sum, change); for(i=1; i<=10; i++) { if(b[i]==0) continue; else { printf("%s:%d;",a[i-1],b[i]); } } } return 0;}

6. 设计思路

  • 系统架构:通过硬币识别和钱币总额计算,实现用户选择商品的功能,并根据预设规则计算找零。
  • 功能模块
    • 钱币识别:根据硬币的类型和面值进行识别和统计。
    • 商品选择:用户选择商品后,系统判断钱币是否足够购买,若不足则提示“Insufficient money”。
    • 找零计算:根据购买金额和实际找零,计算用户应收的零钱。
    • 商品输出:根据购买记录,输出选购商品及其数量。

7. 调试过程

  • 问题:出现段错误。
  • 解决方法:检查数组c的大小,发现定义为c[100],修改后问题解决。

8. 运行结果

  • 输出结果:如输出样例所示,系统能够正确计算找零并输出所选商品。

预习作业

1. 作业内容

  • 课程名称:C语言程序设计II

2. 作业要求

  • 通过完成本次预习作业,掌握C语言中字符串操作的相关知识,能够实现字符串中字符删除功能。

3. 实验代码

#include 
void delchar(char *str, char c) { int i, j; for (i = j = 0; str[i] != '\0'; i++) { if (str[i] != c) { str[j++] = str[i]; } } str[j] = '\0';}int main() { char c; char str[100]; int repeat, ri; void delchar(char *str, char c); scanf("%d", &repeat); getchar(); for (ri = 1; ri <= repeat; ri++) { gets(str); scanf("%c", &c); delchar(str, c); printf("result: "); puts(str); } return 0;}

4. 设计思路

  • 函数设计void delchar(char *str, char c)的功能是删除字符串str中所有与c相同的字符。
  • 实现思路:通过遍历字符串,使用两个指针iji遍历字符串,j记录新字符串的位置。当发现字符不等于c时,将其复制到新位置,最后将新字符串的终止符添加到j位置。

5. 调试过程

  • 问题:运行时出现段错误。
  • 解决方法:检查函数定义,发现delchar函数的参数类型和函数定义不匹配,及时修正后问题得到解决。

6. 运行结果

  • 测试结果表明,函数能够正确删除指定字符,输出结果符合预期。

学习进度统计

周/日期 这周所花的时间 代码行 学到的知识点简介 过程中的困惑点
3/1-3/8 30h 142 定义文件,文件读写及导入(出) 流程图不会画
3/9-3/15 25h 152 自学 暂无
3/16-3/22 14h 63 一、二维数组数据的处理和输出 不能读懂复杂代码
3/23-3/29 34h 188 头文件string.h、字符串 不懂string.h的含义
3/30-4/5 21h 143 指针及其定义,指针实现函数调用返回多个值 指针的内存与什么有关
4/6-4/13 26h 164 指针、数组、地址之间的关系,以及改变主调函数的值 改变主调函数的值如何实现

学习感悟

C语言这门课程越来越难了,有些时候我甚至都读不懂题目了。我一定要更加努力学习这门课程。挑战作业难度太大,我完全看不懂。

结对编程

结对编程比自己一个人编程拥有更多动力与乐趣,我们可以相互督促对方,开拓自己的视野,并且取长补短。但是我和队友都比较菜,这样有些难受。

本周作业耗时:20h

版权所有 © 2019 yuyuetech All Rights Reserved。转载于: https://www.cnblogs.com/ITSkystudio/p/10698754.html

你可能感兴趣的文章
Outlook邮箱怎么方便地发送超大附件?
查看>>
outputStream转inputStream
查看>>
overflow:hidden不生效问题
查看>>
overlay(VLAN,VxLAN)、underlay网络、大二层概述
查看>>
Overload和Override的区别?
查看>>
Ovirt添加ISO存储域
查看>>
OWASP 2025 年 10 大漏洞 – 被利用/发现的最关键弱点,从零基础到精通,收藏这篇就够了!
查看>>
OWASP漏洞原理启航(第一课)
查看>>
OWASP漏洞原理<最基础的数据库 第二课>
查看>>
OWL本体语言
查看>>
P with Spacy:自定义文本分类管道
查看>>
Spring自动装配Bean
查看>>
P-DQN:离散-连续混合动作空间的独特算法
查看>>
P1035 I need help
查看>>
P1073 最优贸易
查看>>
P1207 双重回文数
查看>>
p1229
查看>>
P1273 有线电视网(树形dp)
查看>>
spring编程常见错误二 (学习笔记)
查看>>
P1364 医院设置
查看>>