ページ 11

関数の受け渡し

Posted: 2007年1月22日(月) 11:00
by mai
関数の受け渡しの問題で
次のアイウの手順を参考にプログラムを作成せよ
(ア) 氏名,出身地,年齢,体重のそれぞれの変数名をname,hc,age,weightとして,それらの情報を持つ構造体profを宣言する.また,それぞれの変数に以下の3名分の情報を代入する.
 山本一郎,東京都,22才,65.3 kg
 近藤次郎,福岡県,21才,98.2 kg
 岡田三郎,北海道,19才,72.1 kg
(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.
(ウ) main関数内でgets関数を用いて氏名を入力し,関数rirekiに引数として渡し,氏名,出身地,年齢,体重の各情報を戻り値として得て,それらを画面に表示する.

最初の各メンバーの部分はこのような感じになるのでしょうか 
char name
int hc
float age
どなたか模擬解答をお願いできませんでしょうか
char weight

Re:関数の受け渡し

Posted: 2007年1月22日(月) 11:07
by a
ここは学校の問題をみんなで解決する掲示板ではないと思いますよ。

Re:関数の受け渡し

Posted: 2007年1月22日(月) 11:14
by ヒロ
確かにaさんの言うことは一理ありますね・・・

maiさんもある程度自分で考えて作ってみて、
作ったソースを見せていただければ、
「こうした方がいいよ」等のアドバイスもできると思いますよ。
まずは自分で挑戦してみましょう!

なぁんてぴよぴよレベルが偉そうに言える事ではないんでしょうけど・・・

Re:関数の受け渡し

Posted: 2007年1月22日(月) 14:57
by ま~く
> 最初の各メンバーの部分はこのような感じになるのでしょうか 
> char name
> int hc
> float age
> char weight

名前と出身地は文字列、年齢は整数値、体重は実数値ですよね?
そうなると以下のようになります。

char name[20]; <--- 20は適当です
char hc[20]; <--- 20は適当です
int age;
float weight;

Re:関数の受け渡し

Posted: 2007年1月22日(月) 21:44
by mai
最初の部分はこんな感じで大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
x.hc = 東京都;
x.age = 22才;
strcpy(x.weight, "65.3Kg");
}

Re:関数の受け渡し

Posted: 2007年1月22日(月) 22:05
by box
> 最初の部分はこんな感じで大丈夫でしょうか

一部が正しくありません。

> 		x.hc = 東京都;

出身地は文字列データです。名前と同じようにstrcpyを使ってください。

> 		x.age = 22才;

数値データをセットするときに、単位(才)は不要です。

> 		strcpy(x.weight, "65.3Kg");

体重は数値データです。strcpyを使ってはいけません。

Re:関数の受け渡し

Posted: 2007年1月22日(月) 22:25
by mai
このようになおしてみたのですが大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}

Re:関数の受け渡し

Posted: 2007年1月23日(火) 09:11
by Yuki
ちなみに、コンパイル~実行環境はありますか?

タイプするだけより、ご自分で試していただけたほうが、より理解が深まると思うのですが。

Re:関数の受け渡し

Posted: 2007年1月23日(火) 17:56
by mai
アドバイスありがとうございます 全体的には以下のように作ってみました どうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("を入力してください:");
scanf("%s", rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = a(rireki);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}

Re:関数の受け渡し

Posted: 2007年1月23日(火) 19:04
by box
お手元にCのコンパイラはないのですか?

Re:関数の受け渡し

Posted: 2007年1月23日(火) 19:42
by mai
すみません 学校のパソコンルームにいかなければできないです

Re:関数の受け渡し

Posted: 2007年1月23日(火) 20:10
by ダッシュ
http://dixq.net/c/

ここの管理人さんの作られたHPです。ここの「C言語を学ぶ前に」(ページ左側の欄の一番上)にコンパイラの落とし方が紹介されています。

Re:関数の受け渡し

Posted: 2007年1月23日(火) 20:11
by ダッシュ
なぜかアイコンがお礼になってる・・・orz

Re:関数の受け渡し

Posted: 2007年1月23日(火) 21:49
by box
> struct prof a(char c[/url])

問題文に
「(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.」
とあります。
関数名はaではないですね。

> return x;

return文を書く場所が正しくありません。

> printf("を入力してください:");

何の入力を求めているのか、正しく書いてください。

> scanf("%s", rireki);

問題文に
「(ウ) main関数内でgets関数を用いて氏名を入力し」
とあります。
scanfは使えないですね。
また、名前に対する変数名がrirekiというのは、ふさわしくないですね。

Re:関数の受け渡し

Posted: 2007年1月23日(火) 22:37
by mai
boxさんがおっしゃられていた部分を変えてみましたがいかがでしょうか
gets関数の部分があまり自信がないのですが

Re:関数の受け渡し

Posted: 2007年1月23日(火) 23:01
by mai
すみませんちゃんと貼れていませんでした 失礼しました
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof rireki(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}

Re:関数の受け渡し

Posted: 2007年1月24日(水) 13:33
by box
コンパイルすると何個かエラーが出るはずです。
エラーメッセージを見て、ご自分でどこまで修正できるか
挑戦してみてください。

Re:関数の受け渡し

Posted: 2007年1月24日(水) 17:34
by mai
学校のパソコンルームを先生に無理を言ってお願いしてあけてもらい、コンパイルしてみましたが、以下の部分でエラーが多く確認されましたが修正不可能でした 一部を直すと前の部分でエラーが出てしまいエラーの連鎖となってしまいます
while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}

Re:関数の受け渡し

Posted: 2007年1月25日(木) 20:28
by mai
エラーが修正できずこまっています どなたかたすけてください お願いします

Re:関数の受け渡し

Posted: 2007年1月25日(木) 20:49
by box
> エラーが修正できずこまっています どなたかたすけてください お願いします

そもそも、構造体の定義が正しくないですよ。よく確認してください。
知事名や県花名などの定義は、以前の問題のものです。

Re:関数の受け渡し

Posted: 2007年1月26日(金) 00:12
by mai
定義の何がちがうのでしょうか。 これでいいと思って解いていたのですが

Re:関数の受け渡し

Posted: 2007年1月26日(金) 02:14
by 管理人
ネットで「構造体」で調べると沢山出てきますので、まず、定義と宣言をきちんと書いて見ましょう。

Re:関数の受け渡し

Posted: 2007年1月26日(金) 02:16
by ま~く
あら^^;
私がアドバイスした結果 ちゃんとprofという構造体を定義できていたじゃないですか。

> 最初の部分はこんな感じで大丈夫でしょうか
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
>
>
> };
> ...

Re:関数の受け渡し

Posted: 2007年1月26日(金) 03:04
by 管理人
maiさん、お伝えしたい事がありますので私までメールを送っていただけないでしょうか。
どうかルールを守って投稿してください。お願いします。

Re:関数の受け渡し

Posted: 2007年1月27日(土) 08:29
by mai
大変ご迷惑をおかけしもうしわけありませんでした。 以下のようになりましたどうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
};
struct prof rireki(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}

Re:関数の受け渡し

Posted: 2007年1月27日(土) 09:27
by 管理人
いえ、投稿内容に問題があると申し上げているのではないのです。
何が規約違反かわからないのでしたら、お伝えしますので、dixqhp@gmail.comまでご連絡下さい。