前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「云顶书院」适应期第二阶段学习总结与思考

「云顶书院」适应期第二阶段学习总结与思考

作者头像
MoyiTech
发布2023-02-27 14:52:25
2560
发布2023-02-27 14:52:25
举报
文章被收录于专栏:科技日常科技日常

作业任务

超市老板

题目

你是一个超市的老板,超市里面有很多的商品,包括 {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"}, 对应的价格是:{3,2,5,1,1.5,5,10,1,0.5,1} 要求: 试编写一个程序,要求输入对应的商品名称可以查询该商品的单价

拓展要求1: 自行输入购买的商品种类和数量(不可以预先设定) 可以自动实现对商品的总价进行清算

拓展要求2: 并列出购物的小票(购买的商品名称 单价 购买个数 总价) 要求对于小票中的商品进行同种商品的合并,比如多次输入“面包”的时候,可以在小票中只显示一次合并的数量

拓展要求3: 增加 添加商品 的功能 添加新商品后,输入对应的商品名称可以查询该商品的单价,并满足以上拓展要求 示例 小票如下: 商品名 单价 数量 面包 2 2 牛奶 3 6 总价 22 而不是 小票如下: 商品名 单价 数量 面包 2 2 牛奶 3 6 面包 2 1

分析
整体分析

 本题的基本要求是求商品单价,可以定义两个数组为全局变量分别存储商品名和价格,其中商品名为字符串,应使用char类型的二维数组存储;价格为存在小数,应使用float类型的一维数组存储。再看拓展要求中的1、2项的要求可以用局部变量解决,第3项涉及到了数据的增加,那么就需要再定义一个全局变量count用于记录数组长度。  不难发现,无论是在基本要求还是在拓展要求中,程序都要进行一个相同的过程:在已有商品中查找,那么我们就可以定义一个函数check_name用于查找指定商品名并返回相应结果:在找到商品时,返回对应索引;在找不到商品时就返回-1(为什么不返回0,这样不是更方便使用if对0和非0进行判断了吗?因为查找到第一个时会返回索引0,而负数不是任何商品的索引!)  本程序功能较多,故可以在一个主菜单的死循环while(1)中添加各个功能,而开始菜单就写在主菜单循环的开头:1.单价查询 2.商品结算 3.添加商品 0.退出程序

需要的知识

标准输入/输入函数scanf和printf(stdio.h)

DOS指令函数system(stdlib.h) cls用于清屏、pause可用于程序退出时

字符串操作函数strcmp、strcpy(string.h)

if-else判断、for while循环语句

函数的定义

解题

首先是库的导入

代码语言:javascript
复制
#include
#include
#include

定义全局变量

代码语言:javascript
复制
char goods_names[256][256] = {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"};
float goods_price[256] = {3,2,5,1,1.5,5,10,1,0.5,1};
int count=10;

定义查找函数

代码语言:javascript
复制
//查找商品:找到返回索引,否则返回 -1 
int check_name(char name[]){
 int i;
 for(i=0;i

由于程序需要进行多次字符串的输入,就定义一个函数内变量

代码语言:javascript
复制
char input_str[256];

在循环开始时输出主菜单,并读取用户输入的数据

{collapse-item label="思考:为什么不使用int类型的输入?"} 由于用户输入的数据具有不确定性——可能是一个数字、好几个数字、字母、汉字等,故使用字符串进行判别更加安全 {/collapse-item}

代码语言:javascript
复制
printf("菜单:\n1.单价查询\n2.商品结算并列出小票\n3.添加商品\n0.退出程序\n\n请输入指令(1/2/3/0):");
scanf("%s", &input_str);

在查询完商品后使用进行清屏

代码语言:javascript
复制
system("cls");

判断进入购物车指令

代码语言:javascript
复制
else if(!(strcmp(input_str, "2")))

定义局部变量

代码语言:javascript
复制
//定义购物车 {索引:数量} x 256
int cart[256][2]; 
int cart_count=0;

搜索商品

代码语言:javascript
复制
system("cls");
printf("请输入要购买的商品名称:");
scanf("%s", &input_str);
int resp = check_name(input_str);
while(resp == -1){
 printf("查询无此商品,请重新输入:");
 scanf("%s", &input_str);
 resp = check_name(input_str);
}

输入数量

代码语言:javascript
复制
printf("请输入要购买的%s数量:", input_str);

int item_count;
scanf("%d", &item_count);
while(item_count <= 0 ){
 printf("数量需大于0,请重新输入要购买的%s数量:", input_str);
 scanf("%d", &item_count);
}

遍历购物车是否有重复商品 ,如果有则添加,并改变flag的值

代码语言:javascript
复制
int i;
int flag=1;
for(i=0;i

如果找不到重复商品则向购物车内添加项目

代码语言:javascript
复制
if(flag){
 cart[cart_count][0] = resp;
 cart[cart_count][1] = item_count;
 cart_count++;
}

一个二级菜单

代码语言:javascript
复制
printf("添加成功!\n输入1继续添加商品输入其他内容退出(1/Others):");
scanf("%s", &input_str);
if(strcmp(input_str, "1")){
 break;
}

清屏并输出购物明细

代码语言:javascript
复制
system("cls");
printf("您的购物详单如下:");
int i;
float total_cost=0;
for(i=0;i

新增商品

代码语言:javascript
复制
else if(!(strcmp(input_str, "3")))

清屏并输入商品名,存在则直接进入下一次循环输入商品名

{collapse-item label="思考:为什么不用break"} 待更新··· {/collapse-item}

代码语言:javascript
复制
system("cls");
printf("请输入要添加商品的名称:");
scanf("%s", &input_str);
int resp=check_name(input_str);
if(resp!=-1){
    printf("\n该商品已存在,添加失败!\n\n");
    continue; 
}

读入价格,并保留两位 然后count自增 使用%.2f可以保留两位小数输出

代码语言:javascript
复制
printf("请输入商品价格(最小位数为:分,即小数点后两位):");
float input_price;
scanf("%f", &input_price);
input_price = ((int)(input_price*100))/100.0;
strcpy(goods_names[count], input_str);
goods_price[count] = input_price;
count++;
printf("添加成功!商品名:%s,价格:%.2f\n\n", input_str, input_price);
完整代码
代码语言:javascript
复制
//Shop program written by moyi
//Date: 2020/10/21

#include
#include
#include

char goods_names[256][256] = {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"};
float goods_price[256] = {3,2,5,1,1.5,5,10,1,0.5,1};
int count=10;

//查找商品:找到返回索引,否则返回 -1 
int check_name(char name[]){
    int i;
    for(i=0;i

未完待续...

字典

题目

题目解释 1、预先设定50组英语词汇(附件txt文件),和与其对应的50组词、50组中文解释。 2、通过查询英语词汇,可得到其【中文翻译】。

拓展要求: 1、程序能进行循环。 2、增加 添加词汇 的功能 添加新词汇后可以查到该词汇的中文翻译和解释。

分析
解题

排序

题目

题目解释 用户需输入10个整数,程序对其进行排序。 要求: 奇数全在前面,偶数全在后面,并且按照从小到大的顺序输出。

拓展要求: 1、 增加循环; 2、 输出后,可以添加新数字,仍要求奇数全在前面,偶数全在后面,并且按照从小到大的顺序输出。 示例: 输入:9 96 23 21 6 200 2 28 92 10 输出:9 21 23 2 6 10 28 92 96 200

分析
解题

写在最后

祝各位未来的程序员节日快乐!

l9msighn.png
l9msighn.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业任务
    • 超市老板
      • 字典
        • 排序
        • 写在最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档