C语言之点菜单
1.c语言怎么编写菜单:欢迎光临,点餐,浏览菜单,菜品名称,菜品价格,菜品份数,备注,点餐信息,修改点餐信息,删除点餐订单,查询点餐订单,结算价格。这些功能如何实现?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DISHES 100 // 菜品数量上限
#define MAX_NAME_LEN 20 // 菜品名称最大长度
// 菜品结构体
typedef struct {
char name[MAX_NAME_LEN]; // 菜品名称
float price; // 菜品价格
int count; // 菜品份数
char note[100]; // 备注
} Dish;
// 菜单结构体
typedef struct {
Dish dishes[MAX_DISHES]; // 菜品列表
int count; // 菜品数量
} Menu;
// 显示欢迎信息
void welcome() {
printf("欢迎光临!\n");
}
// 显示菜单
void show_menu(Menu *menu) {
printf("菜单如下:\n");
for (int i = 0; i < menu->count; i++) {
printf("%d. %s\t%.2f元/份\n", i + 1, menu->dishes[i].name, menu->dishes[i].price);
}
}
// 添加菜品
void add_dish(Menu *menu) {
if (menu->count >= MAX_DISHES) {
printf("菜品数量已达上限,无法添加!\n");
return;
}
Dish dish;
printf("请输入菜品名称:");
scanf("%s", dish.name);
printf("请输入菜品价格:");
scanf("%f", &dish.price);
printf("请输入菜品份数:");
scanf("%d", &dish.count);
printf("请输入备注:");
scanf("%s", dish.note);
menu->dishes[menu->count++] = dish;
printf("添加成功!\n");
}
// 修改菜品
void modify_dish(Menu *menu) {
int index;
printf("请输入要修改的菜品序号:");
scanf("%d", &index);
if (index < 1 || index > menu->count) {
printf("无效的菜品序号!\n");
return;
}
Dish *dish = &menu->dishes[index - 1];
printf("请输入新的菜品名称(回车不修改):");
char name[MAX_NAME_LEN];
scanf("%s", name);
if (strlen(name) > 0) {
strcpy(dish->name, name);
}
printf("请输入新的菜品价格(回车不修改):");
char price_str[10];
scanf("%s", price_str);
if (strlen(price_str) > 0) {
dish->price = atof(price_str);
}
printf("请输入新的菜品份数(回车不修改):");
char count_str[10];
scanf("%s", count_str);
if (strlen(count_str) > 0) {
dish->count = atoi(count_str);
}
printf("请输入新的备注(回车不修改):");
char note[100];
scanf("%s", note);
if (strlen(note) > 0) {
strcpy(dish->note, note);
}
printf("修改成功!\n");
}
// 删除菜品
void delete_dish(Menu *menu) {
int index;
printf("请输入要删除的菜品序号:");
scanf("%d", &index);
if (index < 1 || index > menu->count) {
printf("无效的菜品序号!\n");
return;
}
for (int i = index - 1; i < menu->count - 1; i++) {
menu->dishes[i] = menu->dishes[i + 1];
}
menu->count--;
printf("删除成功!\n");
}
// 查询菜品
void query_dish(Menu *menu) {
int index;
printf("请输入要查询的菜品序号:");
scanf("%d", &index);
if (index < 1 || index > menu->count) {
printf("无效的菜品序号!\n");
return;
}
Dish *dish = &menu->dishes[index - 1];
printf("菜品名称:%s\n", dish->name);
printf("菜品价格:%.2f元/份\n", dish->price);
printf("菜品份数:%d\n", dish->count);
printf("备注:%s\n", dish->note);
}
// 显示点餐信息
void show_order(Menu *menu, int *order) {
printf("点餐信息如下:\n");
float total_price = 0;
for (int i = 0; i < menu->count; i++) {
if (order[i] > 0) {
Dish *dish = &menu->dishes[i];
printf("%s\t%.2f元/份\t%d份\t%s\n", dish->name, dish->price, order[i], dish->note);
total_price += dish->price * order[i];
}
}
printf("总价:%.2f元\n", total_price);
}
// 修改点餐信息
void modify_order(Menu *menu, int *order) {
int index, count;
printf("请输入要修改的菜品序号:");
scanf("%d", &index);
if (index < 1 || index > menu->count) {
printf("无效的菜品序号!\n");
return;
}
Dish *dish = &menu->dishes[index - 1];
printf("请输入新的份数:");
scanf("%d", &count);
order[index - 1] = count;
printf("修改成功!\n");
}
// 删除点餐订单
void delete_order(Menu *menu, int *order) {
int index;
printf("请输入要删除的菜品序号:");
scanf("%d", &index);
if (index < 1 || index > menu->count) {
printf("无效的菜品序号!\n");
return;
}
order[index - 1] = 0;
printf("删除成功!\n");
}
// 查询点餐订单
void query_order(Menu *menu, int *order) {
show_order(menu, order);
}
// 结算价格
void checkout(Menu *menu, int *order) {
show_order(menu, order);
}
int main() {
Menu menu = {0};
int order[MAX_DISHES] = {0};
welcome();
while (1) {
printf("请选择操作:\n");
printf("1. 浏览菜单\n");
printf("2. 点餐\n");
printf("3. 修改点餐信息\n");
printf("4. 删除点餐订单\n");
printf("5. 查询点餐订单\n");
printf("6. 结算价格\n");
printf("7. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
show_menu(&menu);
break;
case 2:
show_menu(&menu);
add_dish(&menu);
break;
case 3:
show_order(&menu, order);
modify_order(&menu, order);
break;
case 4:
show_order(&menu, order);
delete_order(&menu, order);
break;
case 5:
query_order(&menu, order);
break;
case 6:
checkout(&menu, order);
return 0;
case 7:
return 0;
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
C语言之班级成绩
2.假设这学期班级30个同学,每个同学6科成绩,设计简单的学生成绩统计系统要求:
- 记录每个人每科的平均成绩
- 记录每科成绩的最高分及其位序
- 统计每科成绩的平均分
- 输出以上相关数据内容
#include <stdio.h>
#include <stdlib.h>
#define N 30 // 学生人数
#define M 6 // 科目数
struct student {
char name[20]; // 姓名
float score[M]; // 成绩
float avg; // 平均成绩
};
void input(struct student stu[]);
void output(struct student stu[]);
void fail(struct student stu[]);
void sort(struct student stu[]);
void insert(struct student stu[]);void modify(struct student stu[]);
int main() {
struct student stu[N];
int choice;
while (1) {
printf("请选择功能:\n");
printf("1. 输入成绩\n");
printf("2. 输出成绩\n");
printf("3. 输出不及格学生名单\n");
printf("4. 成绩排序\n");
printf("5. 删除记录\n");
printf("6. 插入记录\n");
printf("7. 修改记录\n");
printf("0. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 0:
exit(0);
case 1:
input(stu);
break;
case 2:
output(stu);
break;
case 3:
fail(stu);
break;
case 4:
sort(stu);
break;
case 5:
// TODO: 删除记录
break;
case 6:
insert(stu);
break;
case 7:
modify(stu);
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
void input(struct student stu[]) {
int i, j;
for (i = 0; i < N; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
for (j = 0; j < M; j++) {
printf("请输入%s的%s成绩:", stu[i].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
scanf("%f", &stu[i].score[j]);
}
float sum = 0;
for (j = 0; j < M; j++) {
sum += stu[i].score[j];
}
stu[i].avg = sum / M;
}
printf("输入完成!\n");
}
void output(struct student stu[]) {
int i, j;
printf("姓名\t语文\t数学\t英语\t物理\t化学\t生物\t平均分\n");
for (i = 0; i < N; i++) {
printf("%s\t", stu[i].name);
for (j = 0; j < M; j++) {
printf("%.1f\t", stu[i].score[j]);
}
printf("%.1f\n", stu[i].avg);
}
}
void fail(struct student stu[]) {
int i, j, count = 0;
printf("不及格学生名单:\n");
printf("姓名\t语文\t数学\t英语\t物理\t化学\t生物\t平均分\n");
for (i = 0; i < N; i++) {
int flag = 0;
for (j = 0; j < M; j++) {
if (stu[i].score[j] < 60) {
flag = 1;
break;
}
}
if (flag) {
printf("%s\t", stu[i].name);
for (j = 0; j < M; j++) {
printf("%.1f\t", stu[i].score[j]);
}
printf("%.1f\n", stu[i].avg);
count++;
}
}
if (count == 0) {
printf("没有不及格学生!\n");
}
}
void sort(struct student stu[]) {
int i, j, k;
float max;
for (i = 0; i < N; i++) {
for (j = i; j < N; j++) {
if (stu[j].avg > stu[i].avg) {
struct student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("按平均分从高到低排序:\n");
printf("姓名\t平均分\n");
for (i = 0; i < N; i++) {
printf("%s\t%.1f\n", stu[i].name, stu[i].avg);
}
printf("每科成绩的最高分及其位序:\n");
printf("科目\t最高分\t位序\n");
for (i = 0; i < M; i++) {
max = 0;
k = 0;
for (j = 0; j < N; j++) {
if (stu[j].score[i] > max) {
max = stu[j].score[i];
k = j;
}
}
printf("%s\t%.1f\t%d\n", i + 1 == 1 ? "语文" : i + 1 == 2 ? "数学" : i + 1 == 3 ? "英语" : i + 1 == 4 ? "物理" : i + 1 == 5 ? "化学" : "生物", max, k + 1);
}
}
void insert(struct student stu[]) {
int i, j, pos;
printf("请输入要插入的位置(1-%d):", N);
scanf("%d", &pos);
if (pos < 1 || pos > N) {
printf("位置错误!\n");
return;
}
pos--;
for (i = N - 1; i > pos; i--) {
stu[i] = stu[i - 1];
}
printf("请输入要插入的学生的姓名:");
scanf("%s", stu[pos].name);
for (j = 0; j < M; j++) {
printf("请输入%s的%s成绩:", stu[pos].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
scanf("%f", &stu[pos].score[j]);
}
float sum = 0;
for (j = 0; j < M; j++) {
sum += stu[pos].score[j];
}
stu[pos].avg = sum / M;
printf("插入完成!\n");
}
void modify(struct student stu[]) {
int i, j, pos;
printf("请输入要修改的位置(1-%d):", N);
scanf("%d", &pos);
if (pos < 1 || pos > N) {
printf("位置错误!\n");
return;
}
pos--;
printf("请输入%s的新姓名:", stu[pos].name);
scanf("%s", stu[pos].name);
for (j = 0; j < M; j++) {
printf("请输入%s的%s成绩:", stu[pos].name, j + 1 == 1 ? "语文" : j + 1 == 2 ? "数学" : j + 1 == 3 ? "英语" : j + 1 == 4 ? "物理" : j + 1 == 5 ? "化学" : "生物");
scanf("%f", &stu[pos].score[j]);
}
float sum = 0;
for (j = 0; j < M; j++) {
sum += stu[pos].score[j];
}
stu[pos].avg = sum / M;
printf("修改完成!\n");
}
【Tips:C语言中非法字符的返回值均为1。】
C语言之比较
3.c语言软件版本比较
输入的第一行有一个整数T,代表有T组测试。
接下来有T组测试。
每组测试分两行,
第一行有三个整数代表第一个软件版本的主版本号,子版本号和修订号。
第二行也有三个整数代表第二个软件版本的主版本号,子版本号和修订号。
数据中出现的整数都在[0,1000]范围之内。
对于每组测试,如果第一个软件的版本新点,请输出First,如果第二个软件的版本新点,请输出Second,否则输出Same。
样例输入:
3
1 1 0
1 1 1
1 1 1
1 1 0
1 1 1
1 1 1
样例输出:
Second
First
Same
代码怎么编写?
#include <stdio.h>
#include<string.h>
char a[100005][7];
int main()
{
int t;
scanf("%d", &t); // 输入测试组数
int i=0;
while(t--) // 循环处理每组测试
{
int v1[3], v2[3]; // 存放两个软件版本号的数组
scanf("%d %d %d", &v1[0], &v1[1], &v1[2]); // 输入第一个软件版本号
scanf("%d %d %d", &v2[0], &v2[1], &v2[2]); // 输入第二个软件版本号
// 逐个比较版本号的主版本号、子版本号、修订号
if(v1[0] > v2[0])
strcpy(a[++i],"First");
else if(v1[0] < v2[0])
strcpy(a[++i],"Second");
else if(v1[1] > v2[1])
strcpy(a[++i],"First");
else if(v1[1] < v2[1])
strcpy(a[++i],"Second");
else if(v1[2] > v2[2])
strcpy(a[++i],"First");
else if(v1[2] < v2[2])
strcpy(a[++i],"Second");
else
strcpy(a[++i],"Same");
}
for(int j=1; j<=i; j++){
printf("%s\n",a[j]);
}
return 0;
}