对多维数组中的列进行分组和求和的 C 函数
C Function to Group and Sum Column in Multi-D Array
我是编码新手,C 一直给我带来一些麻烦。我有一个使用 scanf() 将值输入数组的函数。我需要按元素对列进行分组,然后对数据求和。这是我目前所拥有的:
#define NUMMONTHS 12
#define NUMYEARS 5
#include <stdio.h>
// function prototypes
void inputdata();
void printdata();
void sumdata();
// Global variables
// These are available to all functions
float Raindata[NUMYEARS][NUMMONTHS];
char years[NUMYEARS][5] = { "2011","2012","2013","2014","2015" };
char months[NUMMONTHS][12] = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
int main()
{
char enterData = 'y';
printf("Do you want to input Precipatation data? (y for yes)\n");
scanf("%c", &enterData);
if (enterData == 'y') {
// Call Function to Input data
inputdata();
// Call Function to display data
printdata();
// Call Function to sum data
sumdata();
}
else {
printf("No data was input at this time\n");
}
printf("Please try the Precipitation program again. \n");
return 0;
}
// function to inputdata
void inputdata() {
/* variable definition: */
float Rain = 1.0;
// Input Data
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month< NUMMONTHS; month++) {
printf("Enter rain for %d, %d:\n", year + 1, month + 1);
scanf("%f", &Rain);
Raindata[year][month] = Rain;
}
}
}
// Function to printdata
void printdata() {
// Print data
printf("year\t month\t rain\n");
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month< NUMMONTHS; month++) {
printf("%s\t %s\t %5.2f\n", years[year], months[month], Raindata[year][month]);
}
}
}
// Function to sumdata
void sumdata() {
// Sum data
float sum = 0;
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
}
}
请原谅缩进 -
我正在尝试让我的 sumdata() 函数打印年降雨量的总和(按年份对降雨数据进行分组)。相反,它对整个 Rain 列求和。有什么建议请赐教。
您在两个循环之前声明 sum = 0
,而不是在第一个循环之后声明 sum = 0
,并在添加所有月份后移动打印语句以打印,即
void sumdata() {
// Sum data
float sum;
for (int year = 0; year < NUMYEARS; year++) {
sum = 0.0;
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
}
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
之前,您最初将 sum 声明为零,每次计算降雨量时,都会保留 sum 的值,并立即打印以月为单位的每次迭代,现在每年重置为零并仅打印当遍历所有月份时,希望这会有所帮助:)
我是编码新手,C 一直给我带来一些麻烦。我有一个使用 scanf() 将值输入数组的函数。我需要按元素对列进行分组,然后对数据求和。这是我目前所拥有的:
#define NUMMONTHS 12
#define NUMYEARS 5
#include <stdio.h>
// function prototypes
void inputdata();
void printdata();
void sumdata();
// Global variables
// These are available to all functions
float Raindata[NUMYEARS][NUMMONTHS];
char years[NUMYEARS][5] = { "2011","2012","2013","2014","2015" };
char months[NUMMONTHS][12] = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
int main()
{
char enterData = 'y';
printf("Do you want to input Precipatation data? (y for yes)\n");
scanf("%c", &enterData);
if (enterData == 'y') {
// Call Function to Input data
inputdata();
// Call Function to display data
printdata();
// Call Function to sum data
sumdata();
}
else {
printf("No data was input at this time\n");
}
printf("Please try the Precipitation program again. \n");
return 0;
}
// function to inputdata
void inputdata() {
/* variable definition: */
float Rain = 1.0;
// Input Data
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month< NUMMONTHS; month++) {
printf("Enter rain for %d, %d:\n", year + 1, month + 1);
scanf("%f", &Rain);
Raindata[year][month] = Rain;
}
}
}
// Function to printdata
void printdata() {
// Print data
printf("year\t month\t rain\n");
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month< NUMMONTHS; month++) {
printf("%s\t %s\t %5.2f\n", years[year], months[month], Raindata[year][month]);
}
}
}
// Function to sumdata
void sumdata() {
// Sum data
float sum = 0;
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
}
}
请原谅缩进 - 我正在尝试让我的 sumdata() 函数打印年降雨量的总和(按年份对降雨数据进行分组)。相反,它对整个 Rain 列求和。有什么建议请赐教。
您在两个循环之前声明 sum = 0
,而不是在第一个循环之后声明 sum = 0
,并在添加所有月份后移动打印语句以打印,即
void sumdata() {
// Sum data
float sum;
for (int year = 0; year < NUMYEARS; year++) {
sum = 0.0;
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
}
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
之前,您最初将 sum 声明为零,每次计算降雨量时,都会保留 sum 的值,并立即打印以月为单位的每次迭代,现在每年重置为零并仅打印当遍历所有月份时,希望这会有所帮助:)