構造体へのポインタについて(初心者です)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たくや

構造体へのポインタについて(初心者です)

#1

投稿記事 by たくや » 16年前

度々お世話になります。

また課題につまずいているのでお力お貸しください。


以下のプログラムを構造体へのポインタを用いるように書き換えよ. その際, それぞれの学生の成績の合計点と各科目の平均点は, それぞれ関数を 用いて計算するようにせよ.
#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などをどのようにポインタで表現すればよいかわかりません。
何かヒントがあればご指摘いただけるとありがたく思います。

たくや

Re:構造体へのポインタについて(初心者です)

#2

投稿記事 by たくや » 16年前

すみません、自分で作ったプログラムを訂正させていただきます。
#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},
{"morio",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);

}

int main(void){
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);
}

non

Re:構造体へのポインタについて(初心者です)

#3

投稿記事 by non » 16年前

>以下のプログラムを構造体へのポインタを用いるように書き換えよ.
この、以下のプログラムというのは、先生から与えられたプログラムなのでしょうか?
2つの構造体、grade_tとgrade_sの2つがあるのはどういう意味ですか?
たくやさんの後のプログラムでmainが2つあるのはなぜ?

たくや

Re:構造体へのポインタについて(初心者です)

#4

投稿記事 by たくや » 16年前

>nonさん

ご回答ありがとうございました。それは先生が作ったのではなく過去の課題で私が作った(と言うより友達が作った)プログラムです;;

先生は今回の課題に対して以下のようなサンプルを付けたのでちょっと自分なりに真似してみたつもりなのですが…
実は何度勉強してもmain関数の使い方もよくわからないんです。その辺りのことも助言して頂けるとありがたいです。
#include<stdio.h>

typedef struct phys_tag{
  char name[20];
  int height;
  double vision;
} phys_t;

void print_phys( phys_t* p, int n );

int main ( void ) {
  int i;
  phys_t x[8] = {
    {"AKANE Kouichi  ", 170, 2.0},
    {"TOKUTOMI Shyuji", 173, 1.5},
    {"NISHIDA Taro   ", 170, 0.5},
    {"TSUJINO Jiro   ", 175, 0.4},
    {"MATSUO Keiji   ", 167, 0.6},
    {"OHYAMA Kazuhiro", 168, 0.2},
    {"KITAYAMA Takuya", 179, 0.6},
    {"TANAKA Rina    ", 158, 0.9},
  };

  phys_t* p = x;
  print_phys(p,8);

  return 0;
}

void print_phys( phys_t* p, int n ){
  int i;
  for ( i = 0; i < 8; i++ ) {
    printf("%s \t %d \t %g\n", (p+i)->name, (p+i)->height, (p+i)->vision);
  }
}

<pre/>

non

Re:構造体へのポインタについて(初心者です)

#5

投稿記事 by non » 16年前

どうりで、最初のプログラムは訳がわからないと思いました。

すると、課題はこのプログラムに、それぞれの学生の成績の合計点と各科目の平均点を,
それぞれ関数を 用いて計算するようにせよ.ということですね。

それなら、最初に、この2つの関数のプロトタイプを考えて、書いてみてください。

閉鎖

“C言語何でも質問掲示板” へ戻る