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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

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

Q&A

2回答

2228閲覧

[C]最小枚数お釣りの支払い方法を求めるコードの構文エラー[ヒント頂けると幸いです]

akka-n

総合スコア0

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

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

0グッド

0クリップ

投稿2020/07/28 13:53

前提・実現したいこと

C言語でお釣りの枚数が最も少なくなる支払方法を求める機能を実装中に以下のエラーメッセージが発生しました.
いろいろ試したのですが自分の力では解決できず...
お力,お借りできれば幸いです.

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

以下のエラーが出ています

エラー E2188 rep1.c 66: 式の構文エラー(関数 main )

該当のソースコード

C

1#include<stdio.h> 2 3 4void maisuu(int zen,int sum,int en,int *mai,int *mai_sum){ 5 *mai=(zen-sum)/en; 6 *mai_sum=+*mai; 7} 8 9int main(void) 10{ 11 int en[9]={10000,5000,1000,500,100,50,10,5,1}; 12 int en_m[9]; 13 int p[9]; 14 int best_p[9]; 15 int no,i,i1,i2,i3,i4,i5,i6,i7,i8,i9,p1,enm,sum,mai,mai_sum,bestp,best_maisuu; 16 enm=0; 17 mai=0; 18 mai_sum=0; 19 best_maisuu=0; 20 21 do{ 22 printf("所持金を入力してください\n"); 23 for(i=0; i<9 ;i++){ 24 printf("%d:",en[i]); 25 scanf("%d",&en_m[i]); 26 enm=enm+en[i]*en_m[i]; 27 } 28 printf("所持金合計:%d\n",enm); 29 30 printf("会計の合計を入力してください:"); 31 scanf("%d",&sum); 32 33 if(enm-sum<0){ 34 puts("\aお金を下ろしてきてください"); 35 } 36 }while(enm-sum<0); 37 38 for(i=0; i<9 ;i++){ 39 best_maisuu=+en_m[i]; 40 } 41 42 for(i1=0;i1<en_m[0];i1++){ 43 for(i2=0;i2<en_m[1];i2++){ 44 for(i3=0;i3<en_m[2];i3++){ 45 for(i4=0;i4<en_m[3];i4++){ 46 for(i5=0;i5<en_m[4];i5++){ 47 for(i6=0;i6<en_m[5];i6++){ 48 for(i7=0;i7<en_m[6];i7++){ 49 for(i8=0;i8<en_m[7];i8++){ 50 for(i9=0;i9<en_m[8];i9++){ 51 p[0]=i1; 52 p[1]=i2; 53 p[2]=i3; 54 p[3]=i4; 55 p[4]=i5; 56 p[5]=i6; 57 p[6]=i7; 58 p[7]=i8; 59 p[8]=i9; 60 p1=en[0]*i1+en[1]*i2+en[2]*i3+en[3]*i4+en[4]*i5+en[5]*i6+en[6]*i7+en[7]*i8+en[8]*i9; 61 if(p1-sum>0){ 62 for(i=0;i<9;i++){ 63 maisuu(p1,sum,en[i],&mai,&mai_sum); 64 } 65 if(best_maisuu>mai_sum){ 66 best_p[]=p[]; 67 bestp=p1; 68 best_maisuu=mai_sum; 69 } 70 } 71 } 72 } 73 } 74 } 75 } 76 } 77 } 78 } 79 } 80 81 printf("以下を支払ってください\n"); 82 for(i=0; i<9 ;i++){ 83 printf("%d:%d\n",en[i],best_p[i]); 84 } 85 printf("支払金合計:%d\n",bestp); 86 printf("お釣り:%d\n",best_p-sum); 87 printf("お釣りの枚数:%d\n",best_maisuu); 88 89 return 0; 90}

試したこと

配列が関数に入っているのが悪いのかと,別にint変数を作って,それに入れてから,関数に入れたり,ポインタ関数側の変数も配列にしてみたりしてみましたが,改善されません.

補足情報(FW/ツールのバージョンなど)

習い始めたばかりで知識も浅いのですが,エラーが解決できないともだもだします...
ヒントやワードだけでもいただけたら,助かります.

あと,なんだかまだまだ改善できそうな汚いコードなので,何かアドバイスがあればお願いします.

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

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

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

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

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

cateye

2020/07/28 14:41 編集

best_p[]=p[];・・・・インデックスがありません。 printf("お釣り:%d\n",best_p-sum);←best_pは配列です。 インデントをちゃんと付けましょう。
Daregada

2020/07/28 14:33

何カ所か、「=+」って書いてあるけど、「+=」の間違いでは。
guest

回答2

0

まずは、お釣りの枚数を正確に数えるところから始めてはどうでしょうか。

C

1int get_otsuri_count(int total, int payment, int *values) 2{ 3 int otsuri = total - payment; 4 int count = 0; 5 for (int i = 0; i < 9; i++) { 6 int n = otsuri / values[i]; 7 count += n; 8 otsuri -= n * values[i]; 9 } 10 return count; 11}
mai_sum = get_otsuri_count(p1, sum, en);

投稿2020/07/29 03:06

Daregada

総合スコア11990

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

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

0

投稿2020/07/28 16:33

cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問