c语言程序 高矮个比较
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
谁是矮个中的高个?
~~~~~~~~~~~~~~~~~\n");
printf("1.手动录入 2.随机生成 0:退出\n");
printf("请选择 0/1/2:>>");
scanf("%d",&m);
while(m!=0&&m!=1&&m!=2)
{
printf("请选择 0/1/2:>>");
fflush(stdin);
scanf("%d",&m);
} return m; }
/****输入****/ int input() {
int m; int flag,i; char t[100]; //先采用字符串输入 限定输入的每一位都在 0~9 之间,保证 输入的是数字、避免输入的是字母或者其他字符 do{
flag=0; fflush(stdin); re: gets(t);//(全部输完 n 再作判断) for(i=0;(size_t)i<strlen(t);i++) {
printf("请按照格式和要求输入!\n"); goto re3; } p[x1-1][x2-1]=k;//考虑到实际人眼看到的行列数与数组的关系相差 1,以 人为本 show(p); printf("是否继续修改?y/n >>"); goto re2; } if(c!='y'&&c!='n') { printf("输入有误,请输入 y 或 n >>"); goto re2; } } } } 4、随机生成数据:在100到200之间 srand((unsigned)time(NULL));
if(t[i]<'0' ||t[i]>'9') flag=1;
} if(flag) {
printf("输入有误, 请您重新输入(100~200):"); flag=0; //(这一步要重置 flag 为 0,当做无误的再作判断) goto re; } }while(flag); m=atoi(t);//C 语言库函数名 atoi 功 能: 把字符串转换成整型数 得到 全局 n 的值 if(m==0) return m;//考虑到选错模式的情况 故设置返回指令 else if(m<100||m>=200) { printf("输入有误, 请您重新输入(100~200):"); goto re; } return m; }
printf("对录入结果是否需要修改?y/n >>"); re2:
fflush(stdin); scanf("%c",&c); if(c=='y') { re3:
printf("请按以下格式输入需要修改的参数(行,列,身高):\n>>"); fflush(stdin); scanf("%d,%d,%d",&x1,&x2,&k); while(x1<=0||x1>M||x2<=0||x2>N||k<100||k>=200) {
流程图:
随机生成数 据
开始
1.手动输入 2.随 机生成 0.退出
录入数据 显示数据 修改数据 显示数据
是否继续 修改
找出 maxmin minmax 并比较
结束 输出
2、编程实现。
1、/******菜单******/ int menu()//考虑到手动输入的真实性和随机输入的便捷性 提供 2 种模式 {
{ min[j]=a[0][j];//min[j]存放每一列的最矮的人
for(i=0;i<M;i++)
{
if(a[i][j]<min[j])
min[j]=a[i][jห้องสมุดไป่ตู้;
}
}
maxmin=min[0]; //maxmin 存放 min[j]中的最 max 的
for(j=0;j<N;j++)
{ if(maxmin<min[j]) maxmin=min[j]; } printf("矮个中的高个身高为:%d\n",maxmin); for(i=0;i<M;i++) //在每一行中选出一个最高者(如这样人有几个,可任选其 中一个)。然后在所选的 10 高人中挑出最矮者一人 { max[i]=a[i][0]; //max[i]中存储每一行的最高的人 for(j=0;j<N;j++) { if(a[i][j]>max[i]) max[i]=a[i][j]; } } minmax=max[0]; for(i=0;i<M;i++) { if(minmax>max[i]) minmax=max[i]; } printf("高个中的矮个身高为:%d\n",minmax);
int x1,x2,k; char c;
printf("对录入结果是否需要修改?y/n >>"); re2:
fflush(stdin); scanf("%c",&c); if(c=='y') { re3:
printf("请按以下格式输入需要修改的参数(行,列,身高):\n>>"); fflush(stdin); scanf("%d,%d,%d",&x1,&x2,&k); while(x1<=0||x1>M||x2<=0||x2>N||k<100||k>=200) {
1、 问题分析与设计。
1、输入问题。200 个学生不按身高任意排成 10 行﹑20 列的长方形队列,所以定 义了二维数组 a[10][20],通过两重循环录入数据。但是由于 200 个数据手动录 入会比较繁琐,所以本程序提供电脑自动随机生成数据的模式。所以用户可以根 据需要选择手动输入或者随机生成模式。另外考虑到时身高数据,所以以厘米为 单位把数据限定在 100 到 200 之间(因为群体是学生,但不知道是小学生还是中 学生,排除特别高的和特别矮的,折中选择把数据限定在[100,200),同时因为数 据都是三位数,便于显示效果的整齐性)。输入时防止输入为不符合要求的数据, 同样定义了 input()函数。 2、由于 200 个数据的手动输入太慢,不利于功能演示,所以定义了宏指令#define M 10 #define N 20 定义数组为 a[M][N].为了显示方便可以随时修改 MN 的 值。 3、由于手动输入大量数据,很可能会出错,所以本程序在当输入的数据不符合 要求时会提醒用户重新输入,此外还提供修改功能,对指定的某行某列的身高进 行修改,并且可以重复修改,值到满意为止。 4、录入结束和修改之后,将数据按照 10 行 20 列的格式全部显示出来,以便于 查看 5、矮个中的高个和高个中的矮个,采用数组的两重循环,不停地进行比对。max[i] 中存储每一行的最高的人,min[j]存放每一列的最矮的人。再对 max[i]求最小 值 minmax,对 min[j]求最大值,maxmin
printf("输入有误,请输入 y 或 n goto re2; } }
>>");
void main() {
int i,j,maxmin,minmax; int a[M][N]; int min[M],max[N]; re4: switch(menu()) {
case 1:
printf("请输入学生身高 cm(100~200)共 200 个<输入 0 返回菜 单>:\n");
for(i=0;i<M;i++) for(j=0;j<N;j++) {
a[i][j]=rand()%100+100; }
5、//遍历并比较 maxmin 和 minmax
for(j=0;j<N;j++) //在每一列中选出一个最矮者(如这样人有几个,可任选其
中一个)。然后在所选的 20 个矮人中挑出最高者一人
源代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
#define M 10//考虑到便于演示性 定义宏指令
#define N 20
/******菜单******/
int menu()//考虑到手动输入的真实性和随机输入的便捷性 提供 2 种模式
题目 :
200 个学生不按身高任意排成 10 行﹑20 列的长方形队列。在每一列中选出一个 最矮者(如这样人有几个,可任选其中一个)。然后在所选的 20 个矮人中挑出最 高者一人,叫做“矮人中的高个子”。然后,令这 20 个矮人各回原位。再在每一 行中选出一个最高者,又从这 10 个高人中挑出最矮者一人,叫“高个子中的矮 子”。请问“矮人中的高个子”和“高个子中的矮子”这二人中哪个高?
/**显示所录入的数据**/ void show(int (*p)[N]) {
int i,j; printf("所有数据如下:\n"); for(i=0;i<M;i++) {
for(j=0;j<N;j++) {printf("%d ",p[i][j]);} printf("\n"); } }
/***rectify*****///考虑到录入发生错误的情况,本程序提供修改 void rectify(int (*p)[N]) {
for(i=0;i<M;i++) {
for(j=0;j<N;j++) {
printf("当前录入%d 行%d 列同学身高 cm(100~200)<输入 0 返回菜单>:",i+1,j+1);
a[i][j]=input(); if(a[i][j]==0) {goto re4;} } }
show(a); rectify(a); break; case 2: srand((unsigned)time(NULL)); for(i=0;i<M;i++) for(j=0;j<N;j++) {
printf("请按照格式和要求输入!\n"); goto re3; } p[x1-1][x2-1]=k;//考虑到实际人眼看到的行列数与数组的关系相差 1,以
人为本 show(p); printf("是否继续修改?y/n >>"); goto re2;
} if(c!='y'&&c!='n') {
{
int m;
printf("**********************
欢迎使用本软件
*****************\n");
printf("~~~~~~~~~~~~~~~~~~~~~~
谁是高个中的矮个?
~~~~~~~~~~~~~~~~~\n");
printf("~~~~~~~~~~~~~~~~~~~~~~
3、测试数据、测试结果、结果分析。
测试 1:随机生成模式 测试结果:
结果分析:输入 2 选择随机生成模式,可以看出,所输入的数据都是在 100 测试 2:手动录入 测试数据:见截图 测试结果:
结果分析:
1、如果菜单中输入的不是012。则重新输入 2、选择1手动输入数据,为了演示方便,将宏定义中MN都改为了 3,所以 要输入 3*3=9 个数据,输入过程如上图。如果输入的身高为字母或者不在 100~200 则会提示有误重输。输入过程中输入 0 可以随时返回主菜单,重新选 择模式。 3、全显示数据。输入完成之后会按行列的格式全显示数据,直观方便。 4、修改数据。程序提示是否需要修改?输入y/n(如果输入不是y或者n 则提示输入有误请重输),输入y之后,程序会要求用户按照(行,列,身高) 的格式输入,如果格式不对或者输入的数据不符合要求,则提示“请按照要求 重输!”。如图输入 2,2,180 之后,则将第二行第二列原本为 166 的数据修改为 180,并全显示,提示是否继续修改,输入n则不修改,并进入比对身高的部分。
printf("1.手动录入 2.随机生成 0:退出\n"); printf("请选择 0/1/2:>>"); scanf("%d",&m); while(m!=0&&m!=1&&m!=2) {
printf("请选择 0/1/2:>>"); fflush(stdin); scanf("%d",&m); } return m; 2、/**显示所录入的数据**/ void show(int (*p)[N]) { int i,j; printf("所有数据如下:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) {printf("%d ",p[i][j]);} printf("\n"); } 3、 /***rectify*****///考虑到录入发生错误的情况,本程序提供修改 void rectify(int (*p)[N]) { int x1,x2,k; char c;