在 C 中搜索二维数组时出现严重错误
Searching through a 2D array in C goes horible wrong
所以我有一个作业,其中有一个问题,要求你构建一个 5 行 4 列的二维数组,每个数组都包含成绩。该问题要求您确定有多少成绩低于 60,60 和 70 之间等等(直到 100)。问题是,当我尝试搜索它时,应该只有 20 个总成绩,但我的解决方案给出了一些牵强附会的数字,例如 60,000 或其他。我不知道我的代码有什么问题。我使用了两个 for 循环来搜索数组。附件是我试过的。非常感谢您的帮助
#include <stdio.h>
int main(){
double grades[5][4] = {
{69, 58, 95, 78},
{84, 75, 86, 32},
{75, 68, 65, 73},
{99, 54, 24, 88},
{65, 78, 84, 65}
};
int lessthan60, sixtyseventy, seventyeighty, eightyninety, greaterthan90;
for (int r = 0; r < 5; r++){
for (int c=0; c < 4; c++){
if (grades[r][c] < 60){
lessthan60++;
}
else if (grades[r][c] >=60 && grades[r][c] < 70){
sixtyseventy++;
}
else if (grades[r][c] >=70 && grades[r][c] < 80){
seventyeighty++;
}
else if (grades[r][c] >=80 && grades[r][c] < 90){
eightyninety++;
}
else{
greaterthan90++;
}
}
}
printf("Grades less than 60: %d\n", lessthan60);
printf("Grades between 60 and 70: %d\n", sixtyseventy);
printf("Grades between 70 and 80: %d\n", seventyeighty);
printf("Grades between 80 and 90: %d\n", eightyninety);
printf("Grades between 90 and 100: %d\n", greaterthan90);
return 0;
}
这些变量有自动存储期限
int lessthan60, sixtyseventy, seventyeighty, eightyninety, greaterthan90;
未初始化且具有不确定的值。您必须明确地将它们初始化为零
int lessthan60 = 0, sixtyseventy = 0, seventyeighty = 0, eightyninety = 0, greaterthan90 = 0;
另外if语句可以写得更简单像
if (grades[r][c] < 60){
lessthan60++;
}
else if ( grades[r][c] < 70){
sixtyseventy++;
}
else if ( grades[r][c] < 80){
seventyeighty++;
}
else if ( grades[r][c] < 90){
eightyninety++;
}
else{
greaterthan90++;
}
此外,最好使用命名常量代替幻数 4 和 5,例如
enum { ROWS = 5, COLS = 4 };
double grades[ROWS][COLS] = {
{69, 58, 95, 78},
{84, 75, 86, 32},
{75, 68, 65, 73},
{99, 54, 24, 88},
{65, 78, 84, 65}
};
//...
for (int r = 0; r < ROWS; r++){
for (int c=0; c < COLS; c++){
//...
这样,您将从垃圾值开始。
您需要将小于 60、sixtyseventy、seventyeighty、eightyninety、greaterthan90 的计数器初始化为零。
所以我有一个作业,其中有一个问题,要求你构建一个 5 行 4 列的二维数组,每个数组都包含成绩。该问题要求您确定有多少成绩低于 60,60 和 70 之间等等(直到 100)。问题是,当我尝试搜索它时,应该只有 20 个总成绩,但我的解决方案给出了一些牵强附会的数字,例如 60,000 或其他。我不知道我的代码有什么问题。我使用了两个 for 循环来搜索数组。附件是我试过的。非常感谢您的帮助
#include <stdio.h>
int main(){
double grades[5][4] = {
{69, 58, 95, 78},
{84, 75, 86, 32},
{75, 68, 65, 73},
{99, 54, 24, 88},
{65, 78, 84, 65}
};
int lessthan60, sixtyseventy, seventyeighty, eightyninety, greaterthan90;
for (int r = 0; r < 5; r++){
for (int c=0; c < 4; c++){
if (grades[r][c] < 60){
lessthan60++;
}
else if (grades[r][c] >=60 && grades[r][c] < 70){
sixtyseventy++;
}
else if (grades[r][c] >=70 && grades[r][c] < 80){
seventyeighty++;
}
else if (grades[r][c] >=80 && grades[r][c] < 90){
eightyninety++;
}
else{
greaterthan90++;
}
}
}
printf("Grades less than 60: %d\n", lessthan60);
printf("Grades between 60 and 70: %d\n", sixtyseventy);
printf("Grades between 70 and 80: %d\n", seventyeighty);
printf("Grades between 80 and 90: %d\n", eightyninety);
printf("Grades between 90 and 100: %d\n", greaterthan90);
return 0;
}
这些变量有自动存储期限
int lessthan60, sixtyseventy, seventyeighty, eightyninety, greaterthan90;
未初始化且具有不确定的值。您必须明确地将它们初始化为零
int lessthan60 = 0, sixtyseventy = 0, seventyeighty = 0, eightyninety = 0, greaterthan90 = 0;
另外if语句可以写得更简单像
if (grades[r][c] < 60){
lessthan60++;
}
else if ( grades[r][c] < 70){
sixtyseventy++;
}
else if ( grades[r][c] < 80){
seventyeighty++;
}
else if ( grades[r][c] < 90){
eightyninety++;
}
else{
greaterthan90++;
}
此外,最好使用命名常量代替幻数 4 和 5,例如
enum { ROWS = 5, COLS = 4 };
double grades[ROWS][COLS] = {
{69, 58, 95, 78},
{84, 75, 86, 32},
{75, 68, 65, 73},
{99, 54, 24, 88},
{65, 78, 84, 65}
};
//...
for (int r = 0; r < ROWS; r++){
for (int c=0; c < COLS; c++){
//...
这样,您将从垃圾值开始。
您需要将小于 60、sixtyseventy、seventyeighty、eightyninety、greaterthan90 的计数器初始化为零。