[英]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
您必須在循環中更新maxmarks
和minmarks
。 像這樣:
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.