また課題につまずいているのでお力お貸しください。
以下のプログラムを構造体へのポインタを用いるように書き換えよ. その際, それぞれの学生の成績の合計点と各科目の平均点は, それぞれ関数を 用いて計算するようにせよ.
#include<stdio.h> #include<math.h> typedef struct { char name[20]; int logi; int math; int ecom; } grade_t; int main (void){ grade_t x[4] = { {"miki",90,80,90}, {"masami",70,85,85}, {"haruna",90,70,80}, {"rio",80,90,70}, }; int a[4]; int i; for (i=0;i<4;i++) { a = x.logi + x.math + x.ecom; printf("%sの合計点は%dです。\n", x.name,a); } typedef struct { int logi; int math; int ecom; } grade_s; grade_s A = {90,80,90}; grade_s B = {70,85,85}; grade_s C = {90,70,80}; grade_s D = {80,90,70}; double ave; ave = A.logi + B.logi + C.logi + D.logi; ave = ave /4; printf("logiの平均は%lfです。\n",ave); ave = A.math + B.math + C.math + D.math; ave = ave /4; printf("mathの平均は%lfです。\n",ave); ave = A.ecom + B.ecom + C.ecom + D.ecom; ave = ave /4; printf("ecomの平均は%lfです。\n",ave); }
という課題に対して以下のようにプログラムを作りましたが、
#include<stdio.h> #include<math.h> typedef struct { char name[20]; int logi; int math; int ecom; } grade_t; void print_tensu(grade_t* p,int n); int main (void){ grade_t x[4] = { {"miki",90,80,90}, {"masami",70,85,85}, {"haruna",90,70,80}, {"rio",80,90,70}, }; grade_t* p = x; print_tensu(p,4); return 0; } void print_tensu(grade_t* p,int n){ int i; int sum; for (i=0;i<4;i++) { sum = ((p+i)->logi) + ((p+i)->math) + ((p+i)->ecom); printf("%sの合計点は%dです。\n", (p+i)->name,sum); } typedef struct { int logi; int math; int ecom; } grade_s; grade_s miki = {90,80,90}; grade_s masami = {70,85,85}; grade_s haruna = {90,70,80}; grade_s rio = {80,90,70}; double ave; /*ここから下がわかりません*/ ave = A.logi + B.logi + C.logi + D.logi; ave = ave /4; printf("logiの平均は%lfです。\n",ave); ave = A.math + B.math + C.math + D.math; ave = ave /4; printf("mathの平均は%lfです。\n",ave); ave = A.ecom + B.ecom + C.ecom + D.ecom; ave = ave /4; printf("ecomの平均は%lfです。\n",ave); }
A.logiやB.logiなどをどのようにポインタで表現すればよいかわかりません。
何かヒントがあればご指摘いただけるとありがたく思います。