编写程序,输入若干由从小到大(可能有重复数)保存到数组中,利用循环删除所有重复的值,使相等的数只保留一个。
在Windows操作系统中,使用VC++6.0/Turbo C可视化程序语言完成命令语言交互界面设计!
充分考虑以 用户为中心 的设计理念!
进一步体会命令语句交互界面中的重要因素。
版本历程(1.0->2.0->3.0->3.1->3.11)
- 3.11 回归数字菜单,优化&加入自动返回菜单
- 输入随机数组的长度 -> 输入该数组
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
void menu(){
system("cls");
printf ("\t请输入功能数字使用 __By181203616-宋明桥\n");
printf ("===============================\n");
printf ("\t1.显示非重复数字个数\n\n\t2.显示重复数字个数\n\n\t3.所有输入数字之和\n\n\t4.所有去重后数字之和\n\n\t5.输出 小->大 重复数\n\n\t6.输出 大->小 重复数\n\n\t7.输出 小->大 去重后数组\n\n\t8.输出 大->小 去重后数组\n\n\t9.纯白模式\n\n\t0.退出\n");
printf ("===============================\n");}
int main(){
//获取个数
int n=0;
printf("输入要输入的整数个数(回车>确认):\n");scanf("%d",&n);
printf("\n输入 %d 个整数为:\n\n",n);
//初始化全部变量
int a[n],a2[n],a3[n],operation,aa,q,b=0,c=0,d=0,e=0,j=0,sum=0,sum2=0,temp=0;
//获取数组
for(aa=0;aa<n;aa++){
printf("输入 %3d 个整数(回车>确认):",aa+1);scanf("%d",&a[aa]);
a3[aa]=a[aa];}
//冒泡排序
for(aa=0;aa<n-1;aa++){
for(q=0; q<n-1-aa; q++){
if(a[q] > a[q+1]){
temp = a[q];
a[q] = a[q+1];
a[q+1] = temp;}}}
//计算总数和
for(aa=0;aa<n;aa++)sum=sum+a[aa];
//计算重复数字个数
for(aa=0;aa<n-1;aa++){
if(a[aa]!=a[aa+1]&&a[aa+1]!=a[aa+2])d++;
if(a[aa]!=a[aa+1])j++;}
if(j==n-1)d=d+1;
//删除重复项
for(aa=0;aa<n;aa++){
if(a[aa]==a[aa+1]){
a2[c]=a[aa+1];
c++;}
if(a[aa]!=a[aa+1]){
a[b]=a[aa];
b++;}}
for(aa=0;aa<n-b;aa++){
if(a2[aa]!=a2[aa+1]){
a2[e]=a2[aa];
e++;}}
//计算去重后总数和
for(aa=0;aa<b;aa++)sum2=sum2+a[aa];
system("cls");
while(1){
menu();
printf("所有输入的数字集:\n\n");for(aa=0;aa<n;aa++)printf("%4d.",a3[aa]);
printf ("\n===============================\n");
scanf("%d", &operation);
if(operation==1){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n非重复数字个数:%4d 个",b);Sleep(3000);}//输出非重复项总个数
if(operation==2){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n全部输入数共有:%4d 个重复数",e);Sleep(3000);}//重复项项数
if(operation==3){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n全部输入数字和:%4d",sum);Sleep(3000);}//所有数字之和
if(operation==4){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n删除重复后总和:%4d 个重复数",sum2);Sleep(3000);}//删除重复后总和
if(operation==5){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n重复的数字(由小到大):\n\n");for(aa=0;aa<e;aa++)printf("%4d.",a2[aa]);Sleep(3000);}//输出由小到大重复数
if(operation==6){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n重复的数字(由大到小):\n\n");for(aa=e-1;aa>=0;aa--)printf("%4d.",a2[aa]);Sleep(3000);}//输出由小到大重复数
if(operation==7){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n去重后的数字(由小到大):\n\n");for(aa=0;aa<b;aa++)printf("%4d.",a[aa]);Sleep(3000);}//输出由小到大去重后数组
if(operation==8){
system("cls");printf("\n\n3秒自动>返回主菜单\n\n去重后的数字(由大到小):\n\n");for(aa=b-1;aa>=0;aa--)printf("%4d.",a[aa]);Sleep(3000);}//输出由大到小去重后数组
if(operation==9){
system("cls");printf("\n\n2秒自动>返回主菜单\n\n纯白模式已开启");system("color f0");Sleep(2000);}//纯白模式
if(operation==0){
system("cls");printf("\n\nbye!");Sleep(1250);exit(0);}//退出
else printf ("输入错误\n");}
return 0;}
- 3.1 加入纯白模式,优化提醒机制
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
typedef struct Menu{
char things[40];//菜单项目内容
int flag;//判断光标的特殊值
}SMQ;
SMQ moving[12] = {
{
"显示所输入所有的数字",101},
{
"显示非重复数字个数",2},
{
"显示重复数字个数",3},
{
"所有输入数字总和",4},
{
"所有删除重复后数字总和",5},
{
"输出 小->大 重复数",6},
{
"输出 大->小 重复数",7},
{
"输出 小->大 去重后数组",8},
{
"输出 大->小 去重后数组",9},
{
"制作人信息",10},
{
"纯白模式",11},
{
"退出",12} };
//动态菜单实现
void looking(){
int i;
system("cls");
printf("\n\n\n");
printf("\t\t请按小键盘 ↓↑键来移动 '■' 光标\n\t\t按回车键 '确认' & '返回主菜单' !\n\n");
for(i=0;i<12;i++){
if(moving[i].flag>100)printf("\t\t■");
else printf("\t\t ");
printf("%s\n",moving[i].things);}}
//光标朝上
void think1(int x){
int i;
if(x>0&&x<=11){
for(i=0;i<12;i++){
if(moving[i].flag>100){
moving[i].flag -=100;
moving[i-1].flag +=100;
return;}}}}
//光标朝下
void think2(int x){
int i;
if(x>=0&&x<11){
for(i=0;i<12;i++){
if(moving[i].flag>100){
moving[i].flag -=100;
moving[i+1].flag +=100;
return;}}}}
int main(){
//获取个数
int n=0;
printf("输入要输入的整数个数:\n");scanf("%d",&n);
printf("\n输入 %3d 个整数为:\n\n",n);
//初始化全部变量
char str;
int a[n],a2[n],a3[n],aa,i,q,k,b=0,c=0,d=0,e=0,j=0,sum=0,sum2=0,temp=0;
//获取数组
for(aa=0;aa<n;aa++){
printf("输入 %3d 个整数:",aa+1);scanf("%d",&a[aa]);
a3[aa]=a[aa];}
//冒泡排序
for(aa=0;aa<n-1;aa++){
for(q=0; q<n-1-aa; q++){
if(a[q] > a[q+1]){
temp = a[q];
a[q] = a[q+1];
a[q+1] = temp;}}}
//计算总数和
for(aa=0;aa<n;aa++)sum=sum+a[aa];
//计算重复数字个数
for(aa=0;aa<n-1;aa++){
if(a[aa]!=a[aa+1]&a[aa+1]!=a[aa+2])d++;
if(a[aa]!=a[aa+1])j++;}
if(j==n-1)d=d+1;
//删除重复项
for(aa=0;aa<n;aa++){
if(a[aa]==a[aa+1]){
a2[c]=a[aa+1];
c++;}
if(a[aa]!=a[aa+1]){
a[b]=a[aa];
b++;}}
for(aa=0;aa<n-b;aa++){
if(a2[aa]!=a2[aa+1]){
a2[e]=a2[aa];
e++;}}
//计算去重后总数和
for(aa=0;aa<b;aa++)sum2=sum2+a[aa];
looking();
for(;;)
if(_kbhit()){
str=_getch();
for (i=0;i<12;i++)if(moving[i].flag>100)k=i;
switch(str){
case 80:think2(k);looking();break;
case 72:think1(k);looking();break;
case 13:
if(k==0){
system("cls");printf("\n\n回车键>返回主菜单\n\n所有输入的数字集:\n\n");for(aa=0;aa<n;aa++)printf("%4d.",a3[aa]);}//输出所有输入项
if(k==1){
system("cls");printf("\n\n回车键>返回主菜单\n\n非重复数字个数:%4d 个",b);}//输出非重复项总个数
if(k==2){
system("cls");printf("\n\n回车键>返回主菜单\n\n全部输入数共有:%4d 个重复数",e);}//重复项项数
if(k==3){
system("cls");printf("\n\n回车键>返回主菜单\n\n全部输入数字和:%4d",sum);}//所有数字之和
if(k==4){
system("cls");printf("\n\n回车键>返回主菜单\n\n删除重复后总和:%4d",sum2);}//删除重复后总和
if(k==5){
system("cls");printf("\n\n回车键>返回主菜单\n\n重复的数字(由小到大):\n\n");for(aa=0;aa<e;aa++)printf("%4d.",a2[aa]);}//输出由小到大重复数
if(k==6){
system("cls");printf("\n\n回车键>返回主菜单\n\n重复的数字(由大到小):\n\n");for(aa=e-1;aa>=0;aa--)printf("%4d.",a2[aa]);}//输出由小到大重复数
if(k==7){
system("cls");printf("\n\n回车键>返回主菜单\n\n去重后的数字(由小到大):\n\n");for(aa=0;aa<b;aa++)printf("%4d.",a[aa]);}//输出由小到大去重后数组
if(k==8){
system("cls");printf("\n\n回车键>返回主菜单\n\n去重后的数字(由大到小):\n\n");for(aa=b-1;aa>=0;aa--)printf("%4d.",a[aa]);}//输出由大到小去重后数组
if(k==9){
system("cls");printf("\n\n回车键>返回主菜单\n\n181203616-宋明桥");}//输出作者信息
if(k==10){
system("cls");printf("\n\n回车键>返回主菜单");system("color f0");}//纯白模式
if(k==11){
system("cls");printf("\n\nBye!");Sleep(1250);exit(0);}//输出非重复项总个数
_getch();looking();break;}}}
- 3.0 上下小键盘控制菜单
C语言,实现动态菜单,光标会随小键盘上下移动!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
typedef struct Menu{
char things[40];//菜单项目内容
int flag;//判断光标的特殊值
}SMQ;
SMQ moving[11] = {
{
"显示所输入所有的数字",101},
{
"显示非重复数字个数",2},
{
"显示重复数字个数",3},
{
"所有输入数字总和",4},
{
"所有删除重复后数字总和",5},
{
"输出 小->大 重复数",6},
{
"输出 大->小 重复数",7},
{
"输出 小->大 去重后数组",8},
{
"输出 大->小 去重后数组",9},
{
"制作人信息",10},
{
"退出",11} };
//动态菜单实现
void looking(){
int i;
system("cls");
printf("\n\n\n");
printf("\t\t请按小键盘 ↓↑键来移动 '■' 光标\n\t\t按回车键 '确认' & '返回主菜单' !\n\n");
for(i=0;i<11;i++){
if(moving[i].flag>100)printf("\t\t■");
else printf("\t\t ");
printf("%s\n",moving[i].things);}}
//光标朝上
void think1(int x){
int i;
if(x>0&&x<=10){
for(i=0;i<11;i++){
if(moving[i].flag>100){
moving[i].flag -=100;
moving[i-1].flag +=100;
return;}}}}
//光标朝下
void think2(int x){
int i;
if(x>=0&&x<10){
for(i=0;i<11;i++){
if(moving[i].flag>100){
moving[i].flag -=100;
moving[i+1].flag +=100;
return;}}}}
int main(){
//获取个数
int n=0;
printf("输入要输入的整数个数:\n");scanf("%d",&n);
printf("\n输入 %3d 个整数为:\n\n",n);
//初始化全部变量
char str;
int a[n],a2[n],a3[n],aa,i,q,k,b=0,c=0,d=0,e=0,j=0,sum=0,sum2=0,temp=0;
//获取数组
for(aa=0;aa<n;aa++){
printf("输入 %3d 个整数:",aa+1);scanf("%d",&a[aa]);
a3[aa]=a[aa];}
//冒泡排序
for(aa=0;aa<n-1;aa++){
for(q=0; q<n-1-aa; q++){
if(a[q] > a[q+1]){
temp = a[q];
a[q] = a[q+1];
a[q+1] = temp;}}}
//计算总数和
for(aa=0;aa<n;aa++)sum=sum+a[aa];
//计算重复数字个数
for(aa=0;aa<n-1;aa++){
if(a[aa]!=a[aa+1]&a[aa+1]!=a[aa+2])d++;
if(a[aa]!=a[aa+1])j++;}
if(j==n-1)d=d+1;
//删除重复项
for(aa=0;aa<n;aa++){
if(a[aa]==a[aa+1]){
a2[c]=a[aa+1];
c++;}
if(a[aa]!=a[aa+1]){
a[b]=a[aa];
b++;}}
for(aa=0;aa<n-b;aa++){
if(a2[aa]!=a2[aa+1]){
a2[e]=a2[aa];
e++;}}
//计算去重后总数和
for(aa=0;aa<b;aa++)sum2=sum2+a[aa];
looking();
for(;;)
if(_kbhit()){
str=_getch();
for (i=0;i<11;i++)if(moving[i].flag>100)k=i;
switch(str){
case 80:think2(k);looking();break;
case 72:think1(k);looking();break;
case 13:
if(k==0){
system("cls");printf("\n\n所有输入的数字集:\n\n");for(aa=0;aa<n;aa++)printf("%4d.",a3[aa]);}//输出所有输入项
if(k==1){
system("cls");printf("\n\n非重复数字个数:%4d 个",b);}//输出非重复项总个数
if(k==2){
system("cls");printf("\n\n全部输入数共有:%4d 个重复数",e);}//重复项项数
if(k==3){
system("cls");printf("\n\n全部输入数字和:%4d",sum);}//所有数字之和
if(k==4){
system("cls");printf("\n\n删除重复后总和:%4d",sum2);}//删除重复后总和
if(k==5){
system("cls");printf("\n\n重复的数字(由小到大):\n\n");for(aa=0;aa<e;aa++)printf("%4d.",a2[aa]);}//输出由小到大重复数
if(k==6){
system("cls");printf("\n\n重复的数字(由大到小):\n\n");for(aa=e-1;aa>=0;aa--)printf("%4d.",a2[aa]);}//输出由小到大重复数
if(k==7){
system("cls");printf("\n\n去重后的数字(由小到大):\n\n");for(aa=0;aa<b;aa++)printf("%4d.",a[aa]);}//输出由小到大去重后数组
if(k==8){
system("cls");printf("\n\n去重后的数字(由大到小):\n\n");for(aa=b-1;aa>=0;aa--)printf("%4d.",a[aa]);}//输出由大到小去重后数组
if(k==9){
system("cls");printf("181203616-宋明桥");}//输出作者信息
if(k==10){
system("cls");printf("\n\nbye!");Sleep(1250);exit(0);}//输出非重复项总个数
_getch();looking();break;}}}
- 2.0 加入数字菜单
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
void menu(){
system("cls");
printf ("\t主菜单-宋明桥-181203616\n");
printf ("===============================\n");
printf ("\t1.显示非重复数字个数\n\n\t2.显示重复数字个数\n\n\t3.所有输入数字之和\n\n\t4.删除重复后各项总和\n\n\t5.输出 小->大 重复数\n\n\t6.输出 大->小 重复数\n\n\t7.输出 小->大 去重后数组\n\n\t8.输出 大->小 去重后数组\n\n\t0.退出\n");
printf ("===============================\n");}
int main(){
//获取个数
int n=0;
printf("输入要输入的整数个数:\n");scanf("%d",&n);
printf("\n输入 %d 个整数为:\n\n",n);
//初始化全部变量
int a[n],a2[n],a3[n],operation,aa,q,b=0,c=0,d=0,e=0,j=0,sum=0,sum2=0,temp=0;
//获取数组
for(aa=0;aa<n;aa++){
printf("输入 %3d 个整数:",aa+1);scanf("%d",&a[aa]);
a3[aa]=a[aa];}
//冒泡排序
for(aa=0;aa<n-1;aa++){
for(q=0; q<n-1-aa; q++){
if(a[q] > a[q+1]){
temp = a[q];
a[q] = a[q+1];
a[q+1] = temp;}}}
//计算总数和
for(aa=0;aa<n;aa++)sum=sum+a[aa];
//计算重复数字个数
for(aa=0;aa<n-1;aa++){
if(a[aa]!=a[aa+1]&&a[aa+1]!=a[aa+2])d++;
if(a[aa]!=a[aa+1])j++;}
if(j==n-1)d=d+1;
//删除重复项
for(aa=0;aa<n;aa++){
if(a[aa]==a[aa+1]){
a2[c]=a[aa+1];
c++;}
if(a[aa]!=a[aa+1]){
a[b]=a[aa];
b++;}}
for(aa=0;aa<n-b;aa++){
if(a2[aa]!=a2[aa+1]){
a2[e]=a2[aa];
e++;}}
//计算去重后总数和
for(aa=0;aa<b;aa++)sum2=sum2+a[aa];
system("cls");
while(1){
menu();
printf("所有输入的数字集:\n\n");for(aa=0;aa<n;aa++)printf("%4d.",a3[aa]);
printf ("\n===============================\n");
scanf("%d", &operation);
if(operation==1){
system("cls");printf("\n\n非重复数字个数:%4d 个",b);Sleep(3000);}//输出非重复项总个数
if(operation==2){
system("cls");printf("\n\n全部输入数共有:%4d 个重复数",e);Sleep(3000);}//重复项项数
if(operation==3){
system("cls");printf("\n\n全部输入数字和:%4d",sum);Sleep(3000);}//所有数字之和
if(operation==4){
system("cls");printf("\n\n删除重复后总和:%4d 个重复数",sum2);Sleep(3000);}//删除重复后总和
if(operation==5){
system("cls");printf("\n\n重复的数字(由小到大):\n\n");for(aa=0;aa<e;aa++)printf("%4d.",a2[aa]);Sleep(3000);}//输出由小到大重复数
if(operation==6){
system("cls");printf("\n\n重复的数字(由大到小):\n\n");for(aa=e-1;aa>=0;aa--)printf("%4d.",a2[aa]);Sleep(3000);}//输出由小到大重复数
if(operation==7){
system("cls");printf("\n\n去重后的数字(由小到大):\n\n");for(aa=0;aa<b;aa++)printf("%4d.",a[aa]);Sleep(3000);}//输出由小到大去重后数组
if(operation==8){
system("cls");printf("\n\n去重后的数字(由大到小):\n\n");for(aa=b-1;aa>=0;aa--)printf("%4d.",a[aa]);Sleep(3000);}//输出由大到小去重后数组
if(operation==0){
system("cls");printf("\n\nbye!");Sleep(1250);exit(0);}//输出非重复项总个数
else printf ("输入错误\n");}
return 0;}
- 1.0 无菜单,直接全部输出
#include<stdio.h>
#include<stdlib.h>
int main(){
//获取个数
int n=0;
printf("输入要输入的整数个数:\n");scanf("%d",&n);
printf("\n输入 %d 个整数为:\n\n",n);
//初始化全部变量
int a[n],a2[n],a3[n],aa,q,b=0,c=0,d=0,e=0,j=0,sum=0,sum2=0,temp=0;
//获取数组
for(aa=0;aa<n;aa++){
printf("输入 %3d 个整数:",aa+1);scanf("%d",&a[aa]);
a3[aa]=a[aa];}
//冒泡排序
for(aa=0;aa<n-1;aa++){
for(q=0; q<n-1-aa; q++){
if(a[q] > a[q+1]){
temp = a[q];
a[q] = a[q+1];
a[q+1] = temp;}}}
//计算总数和
for(aa=0;aa<n;aa++)sum=sum+a[aa];
//计算重复数字个数
for(aa=0;aa<n-1;aa++){
if(a[aa]!=a[aa+1]&a[aa+1]!=a[aa+2])d++;
if(a[aa]!=a[aa+1])j++;}
if(j==n-1)d=d+1;
//删除重复项
for(aa=0;aa<n;aa++){
if(a[aa]==a[aa+1]){
a2[c]=a[aa+1];
c++;}
if(a[aa]!=a[aa+1]){
a[b]=a[aa];
b++;}}
for(aa=0;aa<n-b;aa++){
if(a2[aa]!=a2[aa+1]){
a2[e]=a2[aa];
e++;}}
//计算去重后总数和
for(aa=0;aa<b;aa++)sum2=sum2+a[aa];
//输出所有输入数
system("cls");
printf("所有输入的数字集:\n\n");
for(aa=0;aa<n;aa++)printf("%4d.",a3[aa]);
//输出非重复项总个数 & 所有数字之和 & 重复项项数
printf("\n\n非重复数字个数:%4d 个\n全部输入数字和:%4d\n删除重复后总和:%4d\n全部输入数共有:%4d 个重复数\n",b,sum,sum2,b-d);
//输出由小到大重复数
printf("\n\n重复的数字(由小到大):\n\n");
for(aa=0;aa<e;aa++)printf("%4d.",a2[aa]);
//输出由大到小重复数
printf("\n\n重复的数字(由大到小):\n\n");
for(aa=e-1;aa>=0;aa--)printf("%4d.",a2[aa]);
//输出由小到大去重后数组
printf("\n\n去重后的数字(由小到大):\n\n");
for(aa=0;aa<b;aa++)printf("%4d.",a[aa]);
//输出由大到小去重后数组
printf("\n\n去重后的数字(由大到小):\n\n");
for(aa=b-1;aa>=0;aa--)printf("%4d.",a[aa]);
return 0;}
继续探索未知!