1.可供用户输入若干个整数(可能有重复数); 2.设计文本菜单可供用户进行功能选择; 3.实现数字排序、删除重复数等功能; 4.并可以求出输入数字的最大和最小值。 要求: 以用户为中心,完成输入、文本菜单、输出的界面设计,实现相关功能。 .注意代码的模块化。 使用c语言编写
时间: 2024-10-15 11:10:21 浏览: 33
为了满足这个需求,你可以按照以下步骤构建一个简单的C程序,采用模块化的设计,分别处理输入、菜单选择、排序和计算最大最小值的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
// 定义结构体存储数字及其信息
typedef struct {
int num;
bool is_duplicate; // 标记是否已存在
} Number;
// 输入函数
void input_numbers(Number* arr, int* count) {
*count = 0;
while (true) {
int num;
printf("请输入一个整数(输入-1结束):");
scanf("%d", &num);
if (num == -1)
break;
// 检查是否重复
bool found = false;
for (int i = 0; i < *count; ++i) {
if (arr[i].num == num) {
arr[i].is_duplicate = true;
found = true;
break;
}
}
if (!found)
arr[*count++] = (Number){num, false};
}
}
// 排序并删除重复数
void sort_and_remove_duplicates(Number* arr, int count) {
qsort(arr, count, sizeof(Number), compare_numbers);
int new_count = 0;
for (int i = 0; i < count; ++i) {
if (!arr[i].is_duplicate) {
arr[new_count++] = arr[i];
}
}
count = new_count;
}
// 比较两个Number结构的大小
int compare_numbers(const void* a, const void* b) {
const Number* na = (const Number*)a;
const Number* nb = (const Number*)b;
return na->num - nb->num;
}
// 输出结果
void print_numbers(const Number* arr, int count) {
printf("排序后的数字(去重):\n");
for (int i = 0; i < count; ++i) {
printf("%d (%s)\n", arr[i].num, arr[i].is_duplicate ? "(重复)" : "");
}
printf("最大值:%d\n", arr[count-1].num);
printf("最小值:%d\n", arr[0].num);
}
// 主菜单
void main_menu() {
int count;
Number numbers[] = {0};
input_numbers(numbers, &count);
sort_and_remove_duplicates(numbers, count);
print_numbers(numbers, count);
printf("\n选择其他操作或退出:\n");
// 这里可以根据需要添加更多的选项和对应的函数调用
}
int main() {
main_menu();
return 0;
}
```
在这个示例中,我们首先定义了一个`Number`结构来存储数字及其是否重复的信息。然后实现了输入数字、排序和去除重复的函数。最后,我们在主菜单中提供了一些基本的选择,例如输入、排序和显示结果。
阅读全文