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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1474閲覧

配列とwhileとif

aaaaabbbbb

総合スコア1

C

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/01 18:32

編集2021/11/02 02:32

前提・実現したいこと

C言語です
適当な数字を配列に格納し、その数字が50以上だったらA、50未満だったらBをプリントする、という風にしたい場合?に何を入れればいいかわかりません。

該当のソースコード

C言語

1#include<stdio.h> 2 3int main(void) 4{ 5 int score[30]; 6 int score_count; 7 int score_point; 8 int i; 9 10 score_count=0; 11 while(1){ 12 scanf("%d",&score_point); 13 if(score_point==0){ 14 break; 15 } 16 score[score_count]=score_point; 17 score_count++; 18 } 19 20 for(i=0; i<score_count; i++){ 21 printf("score[%d]...%d\n",i,score[i]); 22 if (50<=?){ 23 printf("A\n"); 24 }else if(50>?){ 25 printf("B\n"); 26 } 27 } 28 return 0; 29} 30

試したこと

score[i]やscore_pointを入れてみましたが、できませんでした。

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

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

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

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

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

jimbe

2021/11/01 19:50 編集

日本語の問題でしょうか。 「その数字」とは何でしょう? > できませんでした どうなるはずがどうなって「できなかった」と判断されたのでしょうか。
aaaaabbbbb

2021/11/02 00:11

その数字、は適当に配列に格納した数字です。 できませんでした、というのは50以上でも以下でも結果がAになってしまった、という事です。
dodox86

2021/11/02 00:43

[2021/11/02 09:12]の質問編集を読んで: 回答をいただいた上で編集したようですが、そもそも提示のコードはコンパイルエラーが出る未完成品です。 > berak; "berak"ではありません。"break"です。 > print("B\n"); "print"ではありません。"printf"のはずです。ちゃんとコンパイルして実行して試したのでしょうか。
dodox86

2021/11/02 01:11

良く見るとfor文で使っている変数iの定義もない。質問用に転載してミスったようですが、問題が起きているコードとは違う、コンパイルエラーも起きるコードでやり取りしても時間が無駄になります。
aaaaabbbbb

2021/11/02 01:11

プログラムを打ち込んだ物をコピペ出来なかったのでここに投稿する時は全部手書きでやってました…なので実際に実行する時はエラーも出てないので合っています……。 記載ミスすみません…直します。
aaaaabbbbb

2021/11/02 01:12

iの定義も書き忘れていましたが、実際には書いてます…
dodox86

2021/11/02 01:14

手元にエディターで書いたC言語ソースファイルがあるのでしょう? それを手元の開発環境で実行して結果が分かるのではないのですか?
aaaaabbbbb

2021/11/02 01:15

実行してもエラーが出ないためよく分かりません…C言語は始めたてでちゃんと分かってなくて…すみません、
dodox86

2021/11/02 01:25

コピペできない状況というのが分かりませんが、(やり方が分からないのか、何らかのコピーガードがあるのか) コピー&ペーストの仕方: 1. 何らかのテキストエディターでC言語ソースファイルを開く。 2. 表示されている内容すべてを選択。(ショートカットキー「CTRL+A」でできる場合もある) 3. 選択されている内容をクリップボードへコピー。(大抵の場合、ショートカットキーCTRL+C) 4. 3.で選択した内容をペースト。(大抵の場合、ショートカットキー CTRL+V)
aaaaabbbbb

2021/11/02 01:26 編集

コピペのやり方は分かっているのですが、何故か出来なくて…ご丁寧にありがとうございます!次回以降試してみます。 今回は恐らく全部修正できてると思います… まだまちがいあったらすみません…
Zuishin

2021/11/02 01:30

プリントで配られた課題だからコピペできないんだと思います。 どう見ても穴埋め問題ですから。
dodox86

2021/11/02 01:31

> まだまちがいあったらすみません… こういうのは正直、回答する意欲を削ぐのでやめた方がいいです。(私は削げました)
aaaaabbbbb

2021/11/02 01:31

すみません、穴埋め問題でなく自分で作った問題ですのでそう言われましても…という感じです。
Zuishin

2021/11/02 01:32

自分で作れるわけがない。
aaaaabbbbb

2021/11/02 01:32

ここのサイトで質問するのが初めてだったので申し訳ないです。以後気をつけます。
aaaaabbbbb

2021/11/02 01:32

なぜ作れるわけがないとおっしゃるのでしょうか…?
Zuishin

2021/11/02 01:34 編集

作れる人はこんなことで悩まないから。 for の前に while の中身を書くところでつまずく。
aaaaabbbbb

2021/11/02 01:36

先生から頂いたスライドを見ながら試行錯誤して作っており、C言語を学ぶのは数週間目なので分からないことの方が沢山です。その中で調べながらやっておりますので、【作れる人】ではありません。まだ初心者で分からないため質問させていただいています。また、質問のところにも初心者マークを付けさせていただいています。
Zuishin

2021/11/02 01:36

だから作れるわけがないと言ったんだけど。
aaaaabbbbb

2021/11/02 01:37

for,whileどちらか、もしくはどちらも使用するとの事だったので両方使用しています。
aaaaabbbbb

2021/11/02 01:39

作れない人ならばこれが作れるわけが無い ということを仰りたいようですが、参考資料があります。それを見ながら作っておりますので、作れる部分があり、作れない部分は質問させていただいているのです。
dodox86

2021/11/02 01:39

一応指摘しておきますと、 > まだまちがいあったらすみません… 間違いまだあります。?の部分を直してもコンパイル通りません。中カッコが足りない。epistemeさんにいただいた回答から解決していってください。
Zuishin

2021/11/02 01:42

「作る」ではなく「書き写す」と言うならわかる。 だから「作る能力のない人がプリントを見ながら書き写した」と言ったまで。 プリントではなくスライドだと言うなら、そんなものどっちでも同じ。
aaaaabbbbb

2021/11/02 01:42

dodox86さん、ありがとうございます。確かにカッコが足りませんでした。付け足してきます
aaaaabbbbb

2021/11/02 01:45

確かにまだ不勉強ですし、分からないことが沢山ありますので、作る、ではなく書き写す、の方が仰りたいことは伝わります。しかし書き写すでは無く、私自身これを書く際に「参考に」して書いたため、そのような書き方にしました。 おそらく他の方にも通知がいってしまいますし、質問の意図とは反しており解決しないためこれ以上の返信は控えさせていただきます。
Zuishin

2021/11/02 01:47

ここは宿題代行サイトではない。 反論は無用。
Zuishin

2021/11/02 01:48

https://teratail.com/help/avoid-asking > 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
aaaaabbbbb

2021/11/02 01:50

うーん、ちょっとズレてるなと思うので返信します、何かを作りたい、課題を解いて欲しい、では無く、「課題を作るにあたって1部分からないプログラミングがあるのでそれをどうするか知りたい」はプログラミングで困ってる質問では無いのでしょうか?コードを書いて欲しい、課題を解いて欲しい、という意図は一切書いていないと思うのですが。
Zuishin

2021/11/02 01:59 編集

課題を解いてほしいわけではないならもう既存の回答で解決してるはず。 穴埋め問題の穴の中身を教えてほしいという質問のどこが課題代行でないのか理解できない。 いや、それ以前に while の中が理解できていれば間違えるはずがない。 通知がいくので反論は無用。
episteme

2021/11/02 02:43

> score[i]やscore_pointを入れてみましたが、できませんでした。 「できませんでした」を説明してください。期待する結果と実際の結果を。
aaaaabbbbb

2021/11/02 02:45

入力した数字が50以上だったらA、50未満だったらBをプリントする、ということをしたいのですが、score[i]やscore_pointをいれてもAしか出力されませんでした。
episteme

2021/11/02 02:50 編集

> score[i]やscore_pointをいれてもAしか出力されませんでした。 ...おかしいな、僕とこでは score[i]でちゃんと動いてくれましたよ? 質問に示したコードと異なってはいませんか? ---実行結果 10 20 50 60 0 ←ここまで入力 score[0]...10 B score[1]...20 B score[2]...50 A score[3]...60 A
BeatStar

2021/11/02 04:43

言葉で『どのようにした』と書くよりも、コードを載せた方が無難ですよ。 場合によっては質問者と回答者がそれぞれ違う意味で取っている可能性があるので。
WoodenHamlet

2021/11/02 07:22

実際に試した入力と「できなかった」という出力、「どうなって欲しかった」かを示す出力を質問に追記してはどうでしょうか
aaaaabbbbb

2021/11/02 07:29

epistemeさん ほんとうですか!?もう一度やり直してみます。ありがとうございます。 BeatStarさん、WoodenHamletさん まとめてのお返事ですみません。分かりました!もう一度確認をしてみてから記載します。
aaaaabbbbb

2021/11/02 07:56

epistemeさん もう一度やり直してみたところ、正しく実行することができました。長々とお時間いただいてしまってすみません。 何回書き直して実行しても治らなかったのですが、おそらく修正してくださった段階でできるようになったのかなと思います。
episteme

2021/11/02 08:12

... コンパイルしてない、とか。
aaaaabbbbb

2021/11/02 08:17

いつも実行するときと同じように今回もやっていたので、コンパイルはできていると思います…
fana

2021/11/02 08:45

> ?に何を入れればいいか という課題点に関して直接的な回答を示したというのに,無視で終了にゃん?
aaaaabbbbb

2021/11/02 08:49

fanaさん いまいち理解ができなかったので後でもう一度読み直してから返信しようと思っていたら返信するのを忘れてしまっていました…申し訳ないです。
guest

回答2

0

条件を満たす関数 f を考え,
"?" の部分には各「その数字」で計算された関数値を与えればよいのではないでしょうか.

C

1int f( const int *s, int i ) 2{ 3 return (int)( 100 / ( 1.0 + exp(-(*(s+i)-50)) ) + 0.5 ); 4} 5 6int main(void) 7{ 8 int i; 9 //入力部分は省略 10 int score_count = 6; 11 int score[30] = { -10, 0, 49, 50, 51, 100 }; 12 13 //後半の for の部分 14 for (i = 0; i < score_count; i++) { 15 printf("score[%d]...%d\n", i, score[i]); 16 int FuncVal = f( score, i ); 17 if (50 <= FuncVal ) { 18 printf("A\n"); 19 } 20 else if (50 > FuncVal ) { 21 printf("B\n"); 22 } 23 } 24 return 0; 25}

投稿2021/11/02 02:27

fana

総合スコア11660

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

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

aaaaabbbbb

2021/11/02 08:51

int main(void)の前には#include<stdio.h>しか書いたことがないのでよくわからなかったです…。 int main(void)の前に書くやり方もあることを知らなかったので調べてみます。
fana

2021/11/02 09:05

単に「score[i] でいいじゃん」だと穴埋めの穴が埋まっただけで終わりそうだから がんばってぼやかしたのだけど, 「関数」を知らんからそもそもこのコードが読めない,と.(それは想定外だった)
guest

0

ベストアンサー

if(score_point=0){

=は代入。比較したいなら==です。

C

1#include<stdio.h> 2 3int main(void) { 4 ... 5 for(i=0; i<score_count; i++){ 6 printf("score[%d]...%d\n",i,score[i]); 7 if (50<=?) { 8 printf("A\n"); 9 } else if(50>?) { 10 print("B\n"); 11 return 0; // ここでreturnするとプログラムが終了します。 12 } 13 // ついでに{~}も対をなしていません

投稿2021/11/01 19:13

編集2021/11/01 21:57
episteme

総合スコア16614

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

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

aaaaabbbbb

2021/11/02 00:10 編集

すみません、そこは私の記載ミスでした。 書く時は==にしています。
episteme

2021/11/02 01:26

ふたつ目の指摘に関してはいかが?
aaaaabbbbb

2021/11/02 01:30

2つ目わからず見落としていました、すみません。 〜が対をなしていない、とはどういうことでしょうか…?
kazuma-s

2021/11/02 02:12

「{」が 6個、「}」が 4個なので、対応が取れていないということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問