-1

質問は:

コースには次のような特徴があります。

Course Name: cName (string of 32 characters)
Course Number: cNumber (integer)
Number of Students enrolled: nStudents (integer)
Level: Level (character: ‘G’ for graduate, ‘U’ for undergraduate)
Grades: sGrades (array of 40 integers)

Define a structure, called CourseType, which includes the above properties.

In the main program: use the structure you defined to declare an array of 5 courses, and store in this array the information below about these courses (the information below specify the course name, number, number of students, and level:

“Introduction to Programming”, 230, 37, ‘U’
“Computer Networks”, 450, 44, ‘U’
“Data Structures & Algorithms”, 330, 38, ‘U’
“Distributed Databases”, 630, 18, ‘G’
“Mobile Ad hoc Networks”, 656, 34, ‘G’

成績に関しては、コースごとに、学生の数だけランダムな値を生成し、成績の配列 (sGrades) に格納します。これらの値は 50 から 100 の間である必要があります。

Write a function DisplayCourseStatistics that takes as input a course structure, and computes the average grade, minimum grade, and maximum grade in the course. After computing these three values, the function displays them.

In the main program: after defining the structure and the five courses in part c, and populating these courses with the data (including the grades), ask the user to specify the course number. Then call the function DisplayCourseStatistics and pass it the corresponding course structure in order for it to display the grade statistics (average, minimum, and maximum).

私が書いたコードにはまだエラーがあります= [

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct CourseType CourseType;
struct CourseType
{
char cName[32];
int cNumber;
int nStudents;
char Level;
int sGrades[44];
};
void DisplayCourseStatistics(CourseType course[],int n);
int main()
{
int i;
CourseType course[5];
strcpy(course[0].cName,"Introduction to Programming");
course[0].cNumber=230;
course[0].nStudents=37;
course[0].Level='U';
for(i=0;i<37;i++)
{
course[0].sGrades[i]=50+rand()%(50);
}
strcpy(course[1].cName,"Computer Networks");
course[1].cNumber=450;
course[1].nStudents=44;
course[1].Level='U';
for(i=0;i<44;i++)
{
course[1].sGrades[i]=50+rand()%(50);
}
strcpy(course[2].cName,"Data Structures & Algorithms");
course[2].cNumber=330;
course[2].nStudents=38;
course[2].Level='U';
for(i=0;i<38;i++)
{
course[2].sGrades[i]=50+rand()%(50);
}
strcpy(course[03].cName,"Distributed Databases");
course[3].cNumber=630;
course[3].nStudents=18;
course[3].Level='G';
for(i=0;i<18;i++)
{
course[3].sGrades[i]=50+rand()%(50);
}
strcpy(course[4].cName,"Mobile Ad hoc Networks");
course[4].cNumber=656;
course[4].nStudents=34;
course[4].Level='G';
for(i=0;i<34;i++)
{
course[4].sGrades[i]=50+rand()%(50);
}
int n;
printf("enter the course number that you'd like to display its stat");
scanf("%d",&n); 
DisplayCourseStatistics(CourseType course[n],n);
}
void DisplayCourseStatistics(CourseType course[n],int n)
{
int average_grade;
int minimum_grade;
int maximum_grade;
int sum=0;
int i;
for(i=0;i<course[n].nStudents;i++)   
{
sum+=course[n].sGrades[i];
if(course[n].sGrades[i]>course[n].sGrades[i+1])
{  
minimum_grade=course[n].sGrades[i+1];
maximum_grade=course[n].sGrades[i];
}
else if(course[n].sGrades[i]<course[n].sGrades[i+1])
{
minimum_grade=course[n].sGrades[i];
maximum_grade=course[n].sGrades[i+1];
}
}
printf("The Average Grade is %d\nThe Maximum Grade is %d\nThe Minimum Grade is %d\n",average_grade=(sum/course[n].nStudents),maximum_grade,minimum_grade);

}

どうすればいいですか?ありがとう!!!

コメントの場合は 40 であるはずですが、1 つのコースで 44 を使用しているため、学生数は 44 人で、40 人を超えています。エラーについては、実際には inf codepad を使用しているため、エラー: 関数 'DisplayCourseStatistics' への引数が少なすぎます

4

2 に答える 2

1

ここでは、配列の場合と同じように構造配列を渡す必要があります。次の行を検討してください。

DisplayCourseStatistics(CourseType course[n],n);

これは間違っています。構造体の名前を次のように渡すだけで、配列と同様に書くことができます。

DisplayCourseStatistics(course,n);

次に、関数の定義を設定する必要があります。

void DisplayCourseStatistics(CourseType course[n],int n)

これは次のようになります

void DisplayCourseStatistics(CourseType course[],int n)

結論、構造体またはその配列を渡す必要がある場合は、その構造体へのポインターまたは最初のメンバーへのポインターを、配列の場合は構造体の配列に渡す必要があります。これが、構造体変数を関数に渡す方法です。

于 2012-07-05T13:11:58.977 に答える
0

テキストに準拠

タスクは、コース番号を尋ねて、そのコースを表示することです。今のところ、配列インデックスを要求して表示しています。また、インデックスと配列の両方を送信することは想定されておらず、DisplayCourseStatistics()関数への特定のコースのみを送信する必要があります。

質問の見出しで言うように、「この構造配列を関数に渡す方法[…]」 ; -しかし、これはタスクを壊します、

あなたが持っているはずです:

                                           +--- Struct, not array of struct
                                           |
void DisplayCourseStatistics(CourseType course)
{
    ...

主に:

/* You can't specify type when calling */
DisplayCourseStatistics(CourseType course[n], n);
                        \__________________/
                                 |
                                 +--- Why do you do this?

/* Becomes: */
DisplayCourseStatistics(course);

DisplayCourseStatistics()次に、これに準拠するようにのプロトタイプと署名を変更する必要があります。上記のように。

これを行った後、配列を使用しないようにその関数を修正する必要があります。

これに加えて、 Display関数にもエラーがあります。あなたが言うように、配列の境界の外に出て.sGrades[i+1]、同時にiの項目数になります.sGrades[]


補足として、改行を使用しても問題ありません。

printf("The Average Grade is %d\n"
       "The Maximum Grade is %d\n"
       "The Minimum Grade is %d\n",
       average_grade=(sum/course[n].nStudents),
       maximum_grade,minimum_grade);

またscanf()、1 が返されることを確認して検証する必要があります (正常に解析された 1 つのアイテム、つまり "%d")。

誰かが非整数を入力すると、n初期化されていないため「アクセス」できません。

course数値が正常に読み取られたら、その数値を「変換」して配列のコース インデックスを修正し、それを「計算して出力」関数に渡す方法を見つける必要があります。

いえ

ユーザーが 330 を入力すると、現時点で正しいインデックスを見つけてcourse[2]渡す必要があります。

于 2012-04-15T13:16:51.020 に答える