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

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

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

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

Q&A

解決済

1回答

1555閲覧

c言語で、関数を用いて配列を表示させるときにエラーが出ます。

s_b_310

総合スコア12

C

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

0グッド

0クリップ

投稿2019/03/24 05:41

編集2019/03/24 05:46

前提・実現したいこと

今年から新社会人になる者で、プログラムに関してはほぼ素人なため質問させていただきます。
c言語の課題で「main関数で、NUMBER 人の学生の点数を格納する配列を宣言し、これら用いて点数を読み、表示する」という課題があるのですが、うまくいきません。
条件:以下の関数を用いて上記を達成する。

形式: void get_tensu(int tensu[], int no) tensu 配列の先頭要素へのポインタ no 配列の要素の数 機能:no 人分の学生の点数を読み、配列 tensu に格納する 制約: tensu は要素数 no の int 型の配列の先頭要素へのポインタであること
形式: void put_tensu(const int tensu[], int no) tensu 配列の先頭要素へのポインタ no 配列の要素の数 機能:配列 tensu に格納されている no 人分の学生の点数を表示する 制約: tensu は要素数 no の int 型の配列の先頭要素へのポインタであること

発生している問題・エラーメッセージ

人数を入力してください:5 5人の点数を入力 1番:1 2番:2 3番:3 4番:4 5番:5 合格点を入力 合格点:3 5人の点数 1番:0 2番:102 3番:0 4番:-2145257248 5番:1 最高:5 合格者数:3 swten[] 1 2 3 4 5 ten[] 1 2 3 4 5

該当のソースコード

c

1#include <stdio.h> 2 3#define NUMBER 80 4 5void get_tensu(int tensu[], int no){ 6 int i; 7 printf("%d人の点数を入力 \n", no); 8 for(i = 0; i < no; i++){ 9 printf("%2d番:",i+1); 10 scanf("%d",&tensu[i]); 11 } 12} 13 14void put_tensu(const int tensu[], int no){ 15 int i; 16 printf("%d人の点数 \n",no); 17 for(i = 0; i < no; i++){ 18 printf("%d番:%d\n",i+1,tensu[i]); 19 } 20} 21 22int main(void){ 23 24 int i,j; 25 int no; //人数 26 int ten[NUMBER]; //点数 27 int swten[NUMBER]; //順位付け点数 28 int max; //最高点 29 int PASSING_MARK; //及第点 30 int crear; //合格者数 31 32 printf("人数を入力してください:"); //***人数を指定*** 33 do{ 34 scanf("%d",&no); 35 if(no < 1 || no > NUMBER) printf("\a1~%dで入力",NUMBER); 36 } 37 while(no < 1 || no > NUMBER); 38 39 get_tensu(&ten[i], no); //***点数入力*** 40 printf("合格点を入力 \n 合格点:"); 41 scanf("%d", &PASSING_MARK); 42 max = ten[1]; 43 44 for(i = 0; i < no; i++){ //***計算を実行する*** 45 if(ten[i] > max) max = ten[i]; //最大値 46 if(ten[i] >= PASSING_MARK) crear++;//合格者数 47 swten[i] = ten[i]; 48 } 49 50 put_tensu(&ten[i], no); //***点数出力*** 51 52 printf("最高:%d\n",max); 53 printf("合格者数:%d\n",crear); 54 55 printf("swten[]\n"); 56 for(i = 0; i < no; i++){ 57 printf("%d\n",swten[i]); 58 } 59 60 printf("ten[]\n"); 61 for(i = 0; i < no; i++){ 62 printf("%d\n",ten[i]); 63 } 64 65 return 0; 66}

試したこと

put_tensu関数の使い方が間違っているのだとは思うのですが、調べても答えが見つかりません。
かなり見難い質問になってしまいましたが、助けていただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

get_tensu(&ten[i], no); //***点数入力***

この時点で iはいくつ? 初期化してないから不定じゃない?

投稿2019/03/24 05:46

episteme

総合スコア16614

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

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

s_b_310

2019/03/24 05:53

intで宣言した部分で i=0 と試してみましたが、出力したところ ***** 人数を入力してください:5 5人の点数を入力 1番:1 2番:2 3番:3 4番:4 5番:5 合格点を入力 合格点:3 5人の点数 1番:0 2番:-1669138087 3番:32766 4番:262 5番:0 最高:5 合格者数:3 ***** となり駄目でした……
episteme

2019/03/24 06:02

put_tensu(&ten[i], no); の直前で i == 0 になってますか?
s_b_310

2019/03/24 06:06

i == 0; put_tensu(&ten[i], no); //***点数出力*** としてみましたが結果は変わらずです
episteme

2019/03/24 06:08

そーじゃなくてぇ... iに0をセットしろと。 i = 0; しろと。
s_b_310

2019/03/24 06:25

・初めのput_tensu関数の記述で  for(i = 0; i < no; i++) ・各関数内で  int i = 0; としてあるのですが、これではセットできていないのですか?
episteme

2019/03/24 07:18 編集

put_tensu(&ten[i], no); の第一引数にはナニを与えたいの? &ten[0] でしょ? だったら呼ぶ前に i = 0 せにゃならんでしょ? ※ (mainを含む)各関数にある i は同じ名前の"別物"です。
s_b_310

2019/03/24 07:55

すみません!完全に誤解していました! put_tensu(&ten[0], no); にしてみたら無事動きました。ありがとうございました! &ten[i]の前にi = 0;としても駄目だという点はまだ完全に納得がいかないのですが、そちらは別の質問としてまた投稿させていただきます。
episteme

2019/03/24 08:05

ところで put_tensu(&ten[0],no) は put_tensu(ten, no) でOK. 配列 xx に対し &xx[0] と xx は”同じこと”です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問