需要在Array中找到Max,Min,Avg数字 - 未声明大小

时间:2016-06-13 16:48:39

标签: c arrays undefined

所以我有这个数组,我需要找到Min,Max和Average。我已经想出如何获得Max,我的代码看起来是正确的,但它不起作用所以我必须遗漏一些东西。我还需要找到输入数字的平均值。我能找到的一切只有在你拥有数组的大小时才有效。我为数组设置了最大大小,但它没有被用户输入填充。我已经盯着测试这几天了,仍然无法弄明白。

我知道平均而言我需要的东西(在顶部添加了声明),但我无法弄清楚如何让它工作:

for (i = 0; i < numOfGrades; i++) {
    sum += grades[i];
    }
avg = (double) sum / numOfGrades;

以下是我的其余代码:

#include <stdio.h>

int main(){

int grades [100]; 
int i = 0;
int small, big, input;

printf("Enter a series of grades. When done, enter any number above 100.\n\n");

while (i <= 100) { //while loop to set maximum for array
    printf("Enter grade:");

    if (scanf("%d", &input) == 1) {
        if (input >= 0 && input <=100) {  
            grades[i] = input; //if good, add to array
            i++;
            }
        else {
            printf("\n\nExiting entry.\n");
            printf("\n\nGrades entered:\n\n");
            i = i - 1;
            break; //exiting loop
            }
        }
    }
int x, y;
    for (x = 0; x <= i; x++) {
        printf("Grade: %d\n", grades[x]);  //print array
        }
    big = small = grades[0];
    for (y = 0; y < i; y++) {
        if (grades[y] > big) {
            big = grades[y];
            }
        else if (grades[y] < small) {
            small = grades[y];
            }
        }
    printf("Highest number : %d\n", big);
    printf("Smallest number: %d\n", small);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

在这里你做对了:

x <= i

因为i会将您从0带到min/max的值。然后在 for (y = 0; y < i; y++) { 循环中执行此操作:

i-1

所以你要从0到y <= i。您有两个选择:

  1. 使用i使上述循环正确。
  2. 不要在while循环中递减i = i - 1;(不要这样做i)这样,x <= i代表输入的数字,而不是输入的数字 - 1(您需要将x < i修正为i)。
  3. 这是一个实例。 http://ideone.com/ZEaDue

    要计算平均值,你做的是正确的,你可以重复使用int sum = 0, avg = 0; for (y = 0; y < i; y++) { sum += grades[y]; } avg = (double) sum / i; printf("Avg: %d\n", avg);

    <?PHP
        $host = 'localhost';
        $user = 'root';
        $pass = '';
        $db = 'testdb';
    
        $mysqli = new mysqli($host, $user, $pass, $db);
    
        //show tables
        $result = $mysqli->query("SHOW TABLES from testdb");
        //print_r($result);
        while($tableName = mysqli_fetch_row($result))
        {
            $table = $tableName[0];
            echo '<h3>' ,$table, '</h3>';
            $result2 = $mysqli->query("SHOW COLUMNS from ".$table.""); //$result2 = mysqli_query($table, 'SHOW COLUMNS FROM') or die("cannot show columns");
            if(mysqli_num_rows($result2))
            {
                echo '<table cellpadding = "0" cellspacing = "0" class "db-table">';
                echo '<tr><th>Field</th><th>Type</th><th>Null</th><th>Key</th><th>Default</th><th>Extra</th></tr>';
                while($row2 = mysqli_fetch_row($result2))
                {
                    echo '<tr>';
                    foreach ($row2 as $key=>$value)
                    {
                        echo '<td>',$value, '</td>';
                    }
                    echo '</tr>';
                }
                echo '</table><br />';
            }
        }
    ?>
    

答案 1 :(得分:1)

实际上你确实有成绩数

   if (scanf("%d", &input) == 1) {
        if (input >= 0 && input <=100) {  
            grades[i] = input; //if good, add to array
            i++;
            }
        else {
            numOfGrades=i;
            printf("\n\nExiting entry.\n");
            printf("\n\nGrades entered:\n\n");
            i = i - 1;
            break; //exiting loop
            }

至于最低限度,你的逻辑应该是这样的:

for (y = 0; y < numOfEdges; y++) {
    if (grades[y] > big) {
        big = grades[y];
        }
    if (grades[y] < small) {
        small = grades[y];
        }
    }

我删除的 else 语句应该可以解决问题。我也会一直使用

任何循环结构中的

for(int var = 0; var < numOfEdges; var++)。以这种方式遵循逻辑更容易:你已经计算了边数(numOfEdges),但是你的循环只有numOfEdges-1,因为你从索引0开始。