C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 構造体へのポインタについて


(過去ログ 64 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■37303 / inTopicNo.1)  構造体へのポインタについて
  
□投稿者/ たくや (1回)-(2009/06/16(Tue) 20:40:37)

分類:[C/C++] 

初めてお世話になります。Cのプログラミング課題でつまずいているのでお力お貸し頂けるとありがたいです。

以下のプログラムを構造体へのポインタを用いるように書き換えよ. その際, それぞれの学生の成績の合計点と各科目の平均点は, それぞれ関数を 用いて計算するようにせよ.

#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[i] = x[i].logi + x[i].math + x[i].ecom;

printf("%sの合計点は%dです。\n", x[i].name,a[i]);

}
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},
{"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);
}

A.logiなどをどのようにポインタで表示させるのかが全く分からず悩んでおります。なにかヒントがあればご指摘いただけないでしょうか。
引用返信 編集キー/
■37306 / inTopicNo.2)  Re[1]: 構造体へのポインタについて
□投稿者/ επιστημη (1982回)-(2009/06/16(Tue) 21:41:22)
επιστημη さんの Web サイト
> 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);
>   }
> }

引数 n が死んでます。使われていません。

> /*ここからの処理がわかりません*/

void print_heikin(grade_t* p, int n) {
  int i;
  int sum_logi = 0;
  int sum_math = 0;
  int sum_ecom = 0;
  for ( i = 0; i < n; ++i ) {
    sum_logi に 各人のlogi を積算
    sum_math に 各人のmath を積算
    sum_ecom に 各人のecom を積算
  }  
  printf("logiの平均は%lfです。\n", (double)sum_logi/n);
  printf("mathの平均は%lfです。\n", (double)sum_math/n);
  printf("ecomの平均は%lfです。\n", (double)sum_ecom/n);
}

引用返信 編集キー/
■37315 / inTopicNo.3)  Re[2]: 構造体へのポインタについて
□投稿者/ Jitta on the way (330回)-(2009/06/17(Wed) 07:11:30)
No37306 (επιστημη さん) に追加

>>/*ここからの処理がわかりません*/
>
> void print_heikin(grade_t* p, int n) {
> int i;
> int sum_logi = 0;
> int sum_math = 0;
> int sum_ecom = 0;
> for ( i = 0; i < n; ++i ) {
> sum_logi に 各人のlogi を積算
> sum_math に 各人のmath を積算
> sum_ecom に 各人のecom を積算
> }
> printf("logiの平均は%lfです。\n", (double)sum_logi/n);
> printf("mathの平均は%lfです。\n", (double)sum_math/n);
> printf("ecomの平均は%lfです。\n", (double)sum_ecom/n);
> }
>

grade_s *p[] = { &A, &B, &C, &D };

おそらく、A,B,C,D が平たくなっているのが問題じゃないかと。それを、ループで指せるようにしてやらないといけないんじゃないかなぁ?
引用返信 編集キー/
■37317 / inTopicNo.4)  Re[1]: 構造体へのポインタについて
□投稿者/ .SHO (887回)-(2009/06/17(Wed) 08:42:48)
No37303 (たくや さん) に返信

Cのお勉強らしいので本筋からそれますが・・・

> for (i=0;i<4;i++) {
> a[i] = x[i].logi + x[i].math + x[i].ecom;
>
> printf("%sの合計点は%dです。\n", x[i].name,a[i]);
>
> }
> 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;

C言語では、こんなふうに処理の途中で変数宣言はできません。

引用返信 編集キー/
■37320 / inTopicNo.5)  Re[2]: 構造体へのポインタについて
□投稿者/ あんどちん (48回)-(2009/06/17(Wed) 09:22:45)
No37317 (.SHO さん) に返信
> Cのお勉強らしいので本筋からそれますが・・・
それた話題に書くのもなんですが…

> C言語では、こんなふうに処理の途中で変数宣言はできません。
C99ならできますね。
引用返信 編集キー/
■37321 / inTopicNo.6)  Re[3]: 構造体へのポインタについて
□投稿者/ .SHO (888回)-(2009/06/17(Wed) 09:43:46)
>>C言語では、こんなふうに処理の途中で変数宣言はできません。
> C99ならできますね。

でした。
失礼しました。

引用返信 編集キー/
■37322 / inTopicNo.7)  Re[1]: 構造体へのポインタについて
□投稿者/ .SHO (889回)-(2009/06/17(Wed) 09:50:56)
> grade_t* p = x;
> print_tensu(p,4);

わざわざ p に入れてから渡す必要ないです。

print_tensu(x,4);

で十分です。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -