可以定义一个二维数组用于存储10年12个月份的径流量,然后从输入获取径流量数据,或使用随机数来产生数据,然后遍历二维数组,依次计算各小问所求即可。
代码如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int runoffs [10][12];
srand((unsigned )time(NULL));
int max=0,min=301;
int yearRunoffs[10]={0};
int maxYear,maxMonth;
int minYear,minMonth;
// 产生10年的径流量数据
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
// http://c.biancheng.net/view/2043.html
// 产生1到300之间的一个数值,以作为当前年份当前月份的径流量
//runoffs[i][j] = rand()%300+1;
// 如果需要手动输入,使用下面这行代码
scanf("%d",&runoffs[i][j]);
}
}
printf("\t");
for(int i=0;i<12;i++){
printf("%d月份\t",i+1);
}
printf("\n");
// 打印10年每月的径流量数据,并计算最大径流量,最小径流量及所在年份和月份
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
if(j==0){
printf("第%d年\t",i+1);
}
// 打印径流量数据
printf("%d\t", runoffs[i][j]);
// 计算最大径流量及其所在年份和月份
if(runoffs[i][j]>max){
max=runoffs[i][j];
maxYear=i+1;
maxMonth=j+1;
}
// 计算最小径流量及其所在年份和月份
if(runoffs[i][j]<min){
min=runoffs[i][j];
minYear=i+1;
minMonth=j+1;
}
// 计算每年的总径流量
yearRunoffs[i]+=runoffs[i][j];
}
printf("\n\n");
}
double avgRunoffs[12]={0};
// 计算10年每个月份的平均径流量
for(int i=0;i<12;i++){
for(int j=0;j<10;j++){
avgRunoffs[i]+=runoffs[j][i];
}
avgRunoffs[i]/=10.0;
}
// 打印结果
// 第一小问
printf("\n10年最大径流量的数值为:%d, 所在年份为第%d年,所在月份为%d月份。\n",max,maxYear,maxMonth);
printf("\n10年最小径流量的数值为:%d, 所在年份为第%d年,所在月份为%d月份。\n",min,minYear,minMonth);
// 第二小问
printf("\n近10年每月平均径流量为:\n");
for(int i=0;i<12;i++){
printf("%d月份\t",i+1);
}
printf("\n");
for(int i=0;i<12;i++){
printf("%.2f\t",avgRunoffs[i]);
}
// 第三小问
printf("\n\n每年总径流量为:\n");
for(int i=0;i<10;i++){
printf("第%d年\t",i+1);
}
printf("\n");
for(int i=0;i<10;i++){
printf("%d\t",yearRunoffs[i]);
}
printf("\n");
return 0;
}
AB#C##DE####
前序遍历:ABCDE
中序遍历:BCAED
后序遍历:CBEDA
深度:3
结点数:5
叶子数:2
度为1结点数:2
度为2结点数:1
#include<iostream>
#define MAXSIZE 100
#define OVERFLOW -2
#define ERROR -1
#define OK 0
using namespace std;
typedef struct bitnode{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
typedef struct queue{
bitree *base;
int front,rear;
}queue;
void createbitree(bitree &T){//创建二叉树 前序输入
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else{
T= new bitnode;
T->data=ch;
createbitree(T->lchild);
createbitree(T->rchild);
}
}
int initqueue(queue &q){//创建队
q.base=new bitree[MAXSIZE];
if(!q.base) exit(OVERFLOW);
q.front=q.rear=0;
}
int push(queue &q,bitree e){//入队
if((q.rear+1)%MAXSIZE==q.front) return ERROR;
q.base[q.rear]=e;
q.rear=(q.rear+1)%MAXSIZE;
return OK;
}
int pop(queue &q,bitree &e){//出队
if((q.front==q.rear)) return ERROR;
e=q.base[q.front];
q.front=(q.front+1)%MAXSIZE;
return OK;
}
int emptyqueue(queue q){//判空
if(q.front==q.rear) return OK;
}
void traverse(bitree T) {//层序遍历
queue Q;
initqueue(Q);//初始化队列
bitree p=T;
bitree q;
q= new bitnode;
if(p){ //存在根节点
push(Q,p); //入队
}
while(emptyqueue(Q)){ //队非空
pop(Q,q); //出队
cout<<q->data; //输出
p=q;
if(p->lchild) //左孩子入队
push(Q,p->lchild);
if(p->rchild) //右孩子入队
push(Q,p->rchild);
}
}
int main(){
bitree T;
cout<<"输入:";
createbitree(T);
cout<<"层序遍历:";
traverse(T);
return 0;
}
AB#C##DE####
#include <stdio.h>
int main() {
int data[10][12];
for (int i = 0; i < 10; i++) {
printf("输入第%d年的各个月份数据:\n", i + 1);
for (int j = 0; j < 12; j++) {
printf("%d年%d月:", i + 1, j + 1);
scanf("%d", &data[i][j]);
}
}
int max = data[0][0];
int min = data[0][0];
int maxYear = 1;
int maxMonth = 1;
int minYear = 1;
int minMonth = 1;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 12; j++) {
if (data[i][j] > max) {
max = data[i][j];
maxYear = i + 1;
maxMonth = j + 1;
}
if (data[i][j] < min) {
min = data[i][j];
minYear = i + 1;
minMonth = j + 1;
}
}
}
printf("十年来的最大值:%d,所在年月:%d年%d月\n", max, maxYear, maxMonth);
printf("十年来的最小值:%d,所在年月:%d年%d月\n", min, minYear, minMonth);
int sum[12] = {0};
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 12; j++) {
sum[j] += data[i][j];
}
}
printf("近十年各个月份的平均值:\n");
for (int j = 0; j < 12; j++) {
double average = (double)sum[j] / 10;
printf("第%d月的平均值为:%lf\n", j+1, average);
}
int sum1[10];
for (int i = 0; i < 10; i++) {
int yearSum = 0;
for (int j = 0; j < 12; j++) {
yearSum += data[i][j];
}
printf("第%d年的和为:%lf\n", i+1, yearSum);
sum1[i] = yearSum;
}
}
供参考:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define Y 10 // 年
#define M 12 // 月
int main()
{
int i, j, ymax, mmax, ymin, mmin;
int arr[Y][M]={0}, ytotal[Y] = {0}, mtotal[M] = {0};
srand((unsigned int)time(NULL));
for (i = 0,ymax = 0,mmax = 0,ymin = 0,mmin = 0; i < Y; i++){
for (j = 0; j < M; j++){
arr[i][j] = rand() % 300 + 1;
ytotal[i] += arr[i][j]; //总径流量/年,12个月之和
mtotal[j] += arr[i][j]; //每月/10年之和
if (arr[ymax][mmax] < arr[i][j]) ymax = i, mmax = j; //找到最大径流量的年月坐标
if (arr[ymin][mmin] > arr[i][j]) ymin = i, mmin = j; //找到最小径流量的年月坐标
}
}
// 以下输出
printf("\t\t");
for(i = 0; i < M; i++)
printf("%d月份\t",i + 1);
printf("总径流量/年\n");
for (i = 0; i < Y; i++){
for (j = 0; j < M; j++){
if(!j) printf("第%d年\t\t", i+1);
printf("%d\t", arr[i][j]);
}
printf("%d\n\n", ytotal[i]);
}
printf("月均/10年\t");
for (i = 0; i < M; i++)
printf("%.2f\t", mtotal[i] / 10.0);
printf("\n");
printf("\n10年里最大径流量为:%-2d,在:第%-2d年%-2d月份。\n", arr[ymax][mmax], ymax + 1, mmax + 1);
printf("\n10年里最小径流量为:%-2d,在:第%-2d年%-2d月份。\n", arr[ymin][mmin], ymin + 1, mmin + 1);
return 0;
}