質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1790閲覧

C言語の関数化と戻り値

-Yuya-

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/23 09:30

①の箇所に引数をstProfile構造体として、そのメンバ値(身長と体重)からBMI値を計算して、それを戻り値とする関数を定義すること。②の箇所にBMIを計算する関数を呼び出す処理を書く。また、profList[i].BMIへ関数の戻り値を代入すること。
この問題が分からないです。

コード#include<stdio.h> #define PROF_NUM (2) // 人物情報の総数 typedef struct { char name[1024]; // 名前 int age;// 年齢 double weight; // 体重kg double height; // 身長cm double BMI; // BMI }stProfile; // 構造体の定義と別名の定義 // ①引数をstProfile構造体として、そのメンバ値(身長と体重)からBMI値を計算して、それを戻り値とする関数 // 関数の定義をここに書く int main(void) { // 構造体の宣言と初期化 stProfile profList[PROF_NUM]; for (int i = 0; i < PROF_NUM; i++) { // 構造体配列profListの各メンバ(.BMI以外)の入力 printf("氏名を入力:"); scanf_s("%s", profList[i].name, 1023); // 文字列nameの場合は&は不要 printf("年齢、体重[kg]、身長[cm]をコンマ区切りで入力(例:20,60.0,170.0):"); scanf_s("%d, %lf, %lf", &profList[i].age, &profList[i].weight, &profList[i].height); } printf("\n人物情報一覧\n"); for (int i = 0; i < PROF_NUM; i++) { // ②BMIを計算する関数をここで呼び出す。 // 関数の呼び出しをここに書いて、profList[i].BMIへ関数の戻り値を代入する。 // 構造体配列profListの各メンバの出力 printf("氏名:%s\n年齢:%d歳\n体重:%5.1f\n身長:%5.1f\nBMI:%5.1f\n-------\n", profList[i].name, profList[i].age, profList[i].weight, profList[i].height, profList[i].BMI); } return 0;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/07/23 09:34

どこまで書いてみましたか?
-Yuya-

2020/07/23 09:36

まだ全然かけていません
otn

2020/07/23 10:29

不明点は具体的に何ですか?
-Yuya-

2020/07/23 23:37

最初の①の引数をstProfileの構造体としてというところがよくわからないです。
-Yuya-

2020/07/24 00:54

申し訳無いのですが引数の概念についてもお願いします。
-Yuya-

2020/07/24 01:44

なるほどよくわかりました。
guest

回答2

0

ベストアンサー

最初の①の引数をstProfileの構造体としてというところがよくわからないです。

関数の引数並び(カッコの中)に、型名と引き数の変数名を書きます。
double bmi(stProfile prof) { ~~~ }

関数定義の実行文の中では、profという変数名で引き数を参照できます。
例えば、体重はprof.weightで参照できます。

「引き数という概念自体」が理解できていない場合は、補足下さい。

#追記
引き数について。

数学の関数で、sin()というのがありますが、これは「三角関数の正弦(サイン)を計算して返す関数」です。
使うときにsin(3)とか書くと思いますが、この3が関数に引き渡す値で、これを実引数と言います。
この関数を自分で書く場合、関数の頭書きはdouble sin(double kakudo)のようにカッコの中に、受け取る変数名とその型を書きます。この受け取る変数を仮引数と言います。
実引数と仮引数の型が異なる場合、仮引数の型に変換可能であれば変換されて関数に引き渡されます。変換不能ならエラー。

公式を使って、kakudoの値からサイン値を求めたら、return 計算結果;書くと呼び出した側に計算結果の値を返すことが出来ます。

という風に、引き数の仕組みと、returnによる返り値とで、関数と呼び出し側との間で情報をやりとりします。
例えば絶対値を返す関数だとこうなります。

C

1double zettaichi(double hikisuu){ 2 if(hikisuu>=0) return hikisuu; 3 return -hikisuu; 4} 5使う側: 6 x = zettaichi(a-10);

応用編として、引き数に「変数のアドレス」を渡して、呼び出し側の変数の中身を書き換えることもできます。scanf等で使います。

投稿2020/07/24 00:45

編集2020/07/24 01:26
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

では①だけ:

C

1double calcBMI(const stProfile* profile) { 2 return profile->weight / (profile->height/100 * profile->height/100); 3}

投稿2020/07/23 11:24

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問