随机产生1000个数,并分屏显示(每行显示10个数字,每页显示10行),而且在每一屏的下方显示本屏中数据的最大值、最小值和平均值。
提示:循环显示,在分屏点上输出press any key to continue…,通过getchar()函数让用户以按回车键的方式进入下一屏。
附加要求:能够前后循环翻页,且输入页码可以回显该页码数据,如果页码错误默认回到第一页。
1.处理分屏
首先定义二维数组用来划分每一屏,并且是每一屏都生成随机数(参考),记录入数组中。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[10][100];
int i,j,k,m=0;
srand((unsigned)time(NULL));
for(i=0;i<10;i++){
for(j=1;j<=100;j++){
a[i][j]=rand()%200;
}
}
return 0;
}
2.处理最大值,最小值,平均值,页码数
遍历二维数组比较最大最小等,根据题目要求在每一屏显示后停顿等待用户下一步命令,所以加入停顿的处理(system("pause"))。
void show(int a[10][100],int i)
{
int j;
for(j=1;j<=100;j++){
printf("%5d",a[i][j]);
if(j%10==0)
printf("\n");
}
}
void zong(int a[10][100],int i)
{
int j;
int max,min,sum=0;
float ave;
max=a[i][1];
min=a[i][1];
for(j=1;j<=100;j++){
if(a[i][j]>max)
max=a[i][j];
if(a[i][j]<min)
min=a[i][j];
sum+=a[i][j];
}
ave=sum/100;
printf("最大值为:%d\n",max);
printf("最小值为:%d\n",min);
printf("平均值为:%.2f\n",ave);
printf("当前页面为:%d\n",i);
printf("press any key to continue…");
system("pause");
}
3.每一屏处理(下一页,查询页数)。
运用switch语句进行处理,定义一个ch,getchar()进行读入处理(由于使用char,所以需要加入' '),使用k,m来保证独立性,确保下一页和查询不起冲突。
while(1){
char ch;
ch=getchar();
system("cls");
switch(ch){
case '1':
k=1;
show(a,k);
zong(a,k);
break;
case '2':
k=2;
show(a,k);
zong(a,k);
break;
case '3':
k=3;
show(a,k);
zong(a,k);
break;
case '4':
k=4;
show(a,k);
zong(a,k);
break;
case '5':
k=5;
show(a,k);
zong(a,k);
break;
case '6':
k=6;
show(a,k);
zong(a,k);
break;
case '7':
k=7;
show(a,k);
zong(a,k);
break;
case '8':
k=8;
show(a,k);
zong(a,k);
break;
case '9':
k=9;
show(a,k);
zong(a,k);
break;
case '0':
k=0;
show(a,k);
zong(a,k);
break;
case 'w':
if(m>0){
m--;
}else{
m=0;
}
show(a,m);
zong(a,m);
break;
case 's':
if(m<9){
m++;
}else{
m=0;
}
show(a,m);
zong(a,m);
break;
default:
m++;
if(m==10)
return 0;
show(a,m);
zong(a,m);
break;
}
system("cls");
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void show(int a[10][100],int i)
{
int j;
for(j=1;j<=100;j++){
printf("%5d",a[i][j]);
if(j%10==0)
printf("\n");
}
}
void zong(int a[10][100],int i)
{
int j;
int max,min,sum=0;
float ave;
max=a[i][1];
min=a[i][1];
for(j=1;j<=100;j++){
if(a[i][j]>max)
max=a[i][j];
if(a[i][j]<min)
min=a[i][j];
sum+=a[i][j];
}
ave=sum/100;
printf("最大值为:%d\n",max);
printf("最小值为:%d\n",min);
printf("平均值为:%.2f\n",ave);
printf("当前页面为:%d\n",i);
printf("press any key to continue…");
system("pause");
}
int main()
{
int a[10][100];
int i,j,k,m=-1;
srand((unsigned)time(NULL));
for(i=0;i<10;i++){
for(j=1;j<=100;j++){
a[i][j]=rand()%200;
}
}
while(1){
char ch;
ch=getchar();
system("cls");
switch(ch){
case '1':
k=1;
show(a,k);
zong(a,k);
break;
case '2':
k=2;
show(a,k);
zong(a,k);
break;
case '3':
k=3;
show(a,k);
zong(a,k);
break;
case '4':
k=4;
show(a,k);
zong(a,k);
break;
case '5':
k=5;
show(a,k);
zong(a,k);
break;
case '6':
k=6;
show(a,k);
zong(a,k);
break;
case '7':
k=7;
show(a,k);
zong(a,k);
break;
case '8':
k=8;
show(a,k);
zong(a,k);
break;
case '9':
k=9;
show(a,k);
zong(a,k);
break;
case '0':
k=0;
show(a,k);
zong(a,k);
break;
case 'w':
if(m>0){
m--;
}else{
m=0;
}
show(a,m);
zong(a,m);
break;
case 's':
if(m<9){
m++;
}else{
m=0;
}
show(a,m);
zong(a,m);
break;
default:
m++;
if(m==10)
return 0;
show(a,m);
zong(a,m);
break;
}
system("cls");
}
return 0;
}
可能不是最优解,等后续优化.