簡體   English   中英

最低值未顯示

[英]Lowest value not been displayed

我無法顯示學生對每個科目的最低分數進行比較,最高分數表現良好。 循環實現中是否有錯誤,否則我沒有設置正確的參數來搜索具有最低值的元素,這可能是什么原因?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct student
{
    int roll_no;
    int semester_no;
    char name[20];
    int marks[6];

}semester[100];

int main ()
{
    int i=0,n,j=0;
    int highest=0,lowest=0;

    printf("HOW MANY STUDENTS MARKS TO ENTER?\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("ENTER DETAILS OF STUDENT %d",i+1);
        printf("\nROLL NO\n");
        scanf("%d",&semester[i].roll_no);
        printf("NAME\n");
        getchar();
        gets(semester[i].name);
        printf("SEMESTER\n");
        scanf("%d",&semester[i].semester_no);

    int maxmarks=semester[0].marks[0];

    for (i=0;i<n;i++)
    {
        for(j=0;j<6;j++)
        {
            if(semester[i].marks[j]>maxmarks)
            {
                 highest=i;

            }
        }

    }

    minmarks=semester[0].marks[0];
    for(i=0;i<n;i++)
    {
        for(j=0;j<6;j++)
        {
            if(semester[i].marks[j]<minmarks)
            {
                lowest=i;
            }
        }
    }
   // printf("\n%d\n",cl);
   // printf("%d\n",ch);

    printf("\nNAME OF STUDENT WITH HIGHEST MARKS\n");
    printf("%s",semester[highest].name);
    printf("\nNAME OF THE STUDENT WITH LOWEST MARKS\n");
    printf("%s",semester[lowest].name);

    return 0;

}

我嘗試使用其他輸入,但是輸出錯誤

HOW MANY STUDENTS MARKS TO ENTER?
2
ENTER DETAILS OF STUDENT 1
ROLL NO
1
NAME
abc
SEMESTER
1
SUBJECT 1 MARKS
10
SUBJECT 2 MARKS
20
SUBJECT 3 MARKS
30
SUBJECT 4 MARKS
40
SUBJECT 5 MARKS
50
ENTER DETAILS OF STUDENT 2
ROLL NO
2
NAME
xyz
SEMESTER
1
SUBJECT 1 MARKS
50
SUBJECT 2 MARKS
60
SUBJECT 3 MARKS
70
SUBJECT 4 MARKS
80
SUBJECT 5 MARKS
90

NAME OF STUDENT WITH HIGHEST MARKS
xyz
NAME OF THE STUDENT WITH LOWEST MARKS
xyz

您必須在循環中更新maxmarksminmarks 像這樣:

maxmarks=semester[0].marks[0];
minmarks=semester[0].marks[0];

for (i = 0; i < n; i++) {
    for (j = 0; j < 6; j++) {
        if (semester[i].marks[j] > maxmarks) {
           highest = i;
           maxmarks = semester[i].marks[j];
        }
        if (semester[i].marks[j] < minmarks) {
           lowest = i;
           minmarks = semester[i].marks[j];
        }
    }
}

我看不到設置了'n'甚至沒有從用戶那里獲取任何輸入,但是我認為您出於某些莫名其妙的原因刪除了該部分。

現在要解決的問題:'m'是6個元素組成的數組,但是您只是從1到5進行迭代。這意味着,據我從代碼中所猜測的那樣,您將忽略每個學生的第一門學科的分數。

這是一個獨立程序,可用於確定如何修復程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct student {
    int roll_no;
    int semester_no;
    char name[20];
    int marks[6];
} semester[100];

int main () {
    int i = 0, n, j = 0;
    int highest = 0, lowest = 0;

    printf("marks?\n");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("roll?\n");
        scanf("%d", &semester[i].roll_no);
        printf("name?\n");
        scanf("%s", semester[i].name);
        printf("semester?\n");
        scanf("%d", &semester[i].semester_no);
        for (j = 0; j < 6; j++) {
            printf("%d marks\n", j + 1);
            scanf("%d", &semester[i].marks[j]);
        }
    }

    int maxmarks = semester[0].marks[0];
    for (i = 0; i < n; i++) {
        for (j = 1; j < 6; j++) {
            if (semester[i].marks[j] > maxmarks) {
                highest = i;
                maxmarks = semester[i].marks[j];
            }
        }
    }

    int minmarks = semester[0].marks[0];
    for (i = 0; i < n; i++) {
        for (j = 0; j < 6; j++) {
            if (semester[i].marks[j] < minmarks) {
                lowest = i;
                minmarks = semester[i].marks[j];
            }
        }
    }

    printf("\n");
    printf("NAME OF STUDENT WITH HIGHEST MARKS\n");
    printf("%s\n", semester[highest].name);
    printf("NAME OF THE STUDENT WITH LOWEST MARKS\n");
    printf("%s\n", semester[lowest].name);

    return 0;
}

我使用以下腳本對其進行了測試:

#!/bin/bash
./scratch << EOF
2
1
abc
1
10
20
30
40
50
60
2
xyz
1
50
60
70
80
90
100
EOF

輸出量

marks?
roll?
name?
semester?
1 marks
2 marks
3 marks
4 marks
5 marks
6 marks
roll?
name?
semester?
1 marks
2 marks
3 marks
4 marks
5 marks
6 marks

NAME OF STUDENT WITH HIGHEST MARKS
xyz
NAME OF THE STUDENT WITH LOWEST MARKS
abc

第23行: for (i=0;i<n;i++) ,如果n具有預定義的值,則將具有更多的確定性行為。 如第16行所示: int i=0,n,j=0; n的值未定義。

問題是您選擇了錯誤的方法。

在外循環中,您必須為給定的學生設置當前的最大值或最小值。 在內部循環中,您必須計算學生的最大值或最小值。 然后,您必須將此最大值或最小值與循環外設置的值進行比較。

例如

int maxmarks=semester[0].marks[0];

for ( i = 0; i < n; i++ )
{
    int current_max = semester[i].marks[0];

    for ( j = 1; j < 6; j++ )
    {
        if( current_max < semester[i].marks[j] )
        {
             current_max = semester[i].marks[j];
        }
    }

    if ( maxmarks < current_max ) highest = i; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM