• 締切済み

C++言語の課題です

C++言語の課題です 4つの数字をキーボードから入力させ、入力が終わったら、その最大値を表示するプログラムを作成しなさい という問題が出ました。 4つの数字を入力して 読み込むまではわかりましたが 条件分岐のところから わからなくなりました。 使ってる文法は printf scanf if elseif などです どなたか教えて下さい

みんなの回答

  • ahco_i-o
  • ベストアンサー率0% (0/1)
回答No.6

scanf, printf 使ってるんなら、C++ではなくC言語なのでしょう。 int i; int dt; int max = 0; for(i=0;i<4;i++) { scanf( "%d", &dt ); if(max < dt) max = dt; } printf("max = %d \n", max); 単純です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> 一行ごとに簡単に説明をしていただけませんか? なんとなく理解できたとのことなので、理解できたことを自分の言葉で説明してみてください。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> 4つの数字を 数値ではなく、「数字」というのが引っ掛け問題ですね。 > キーボードから入力させ キーボードから入力する一般的な方法はありません。 > その最大値を表示する 表示する一般的な方法もありません。 入力や表示の部分がどうしても処理系に依存してしまいますが、処理系不明なので一般的な回答は不可能です。 一応、Visual C++の場合の例を挙げると... #include <conio.h> #include <cctype> int main() {  int max = -1;  for (int i = 0; i < 4; i++)  { retry:   while (!::_kbhit())    ;   int c = ::_getch();   if (!std::isdigit(c))    goto retry;   ::_putch(c);   if (c > max)    max = c;  }  ::_cprintf("\n%c\n", max); } こんな感じでしょうか?

SAKAE48
質問者

補足

ありがとうございます なんとなく理解することが出来ました よかったら 一行ごとに簡単に説明をしていただけませんか? お願いします。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

printfとかscanfとか使っているところを見るとC++ではなくCのような気がしますが、それはさておき。 課題レベルで推測される模範解答上、あと欲しいのは ・配列 ・for ですね。 あと、"elseif"という文法はC/C++にはありません。 C/C++では"else"と"if"の組み合わせで成立しています。 #まぁ配列とforを使ったらelseは要らなくなりますが

回答No.2

#include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; int main() {  vector<int> input(istream_iterator<int>(cin),(istream_iterator<int>()));  if ( input.size() >= 4 )   cout << *max_element(input.begin(), input.begin()+4) << endl; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

あなた自身でこの処理をするとしたら, どのようにしますか?

関連するQ&A

  • C言語の課題で

    C言語の課題で 「成績集計プログラム 入力件数nをキーボードより入力し、n人分のテストデータを入力する。その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。ただし、平均点は実数型とし小数点第2位まで出力する。平均点以外の変数は整数型とする。」というのが出ました。 #include <stdio.h> int main(void) { int n,a,b,c; int res,i; printf("入力件数を入力して下さい。\n"); scanf("%d",&n); for(i = 1; i <= n; i++) { printf("点数を入力して下さい。\n"); scanf("%d",&a); printf("%d人目=>%d\n",i,a); if(i == res) break; } return 0; } ここまでは、出来たのですが、後が分かりません。どなたか教えていただけませんか?お願いします。

  • C言語の課題

    大学でC言語の課題がでて、わからないので質問しました。 課題が人数をキーボードから入力する。 人数分の得点を入力して成績を表示する。 結果をファイルに保存する。 A 80~100点 B 70~79点 C 60~69点 D 60点未満 との事でした。 授業では、fp、printf、scanf、else、などを使いました。 よろしくお願いします。

  • この課題を解いてください

    大学で C言語の入門の授業を取っています。 受講生はC言語をやるのは初めてのようです。 私は何年か前からやっていたので楽勝の授業なんですが、 3週目にして、以下の課題を与えられました。 キーボードから数値を入力して、それが正なら「plus」を、負なら「minus」 を、ゼロなら「zero」を表示するプログラムを作成せよ。ただしピリオド「.」が入力されたら終了とする。 で、私は、 #include<stdio.h> #include <stdlib.h> int main(void){ char s[1]; int a; while (1){ printf("変数aに数字を入力してください\n"); printf("a="); scanf("%s",&s[0]); a=atoi(s); if(s[0]=='.')break; if(a>0){ printf("%d is plus\n",a); }else if(a==0){ printf("%d is zero\n",a); }else{ printf("%d is minus\n",a); } } return(0); } のように作りました。 私は授業ではまだ習っていない配列や、atoiという関数を使いましたが、 他の履修生にとっては難しい課題じゃないですか? それとももっとシンプルに作れますか?

  • C言語!教えてください!

    /* キーボードから4桁の数字を読み込み、3で割った余りが0ならばそのまま  表示する。1ならば数字と並びを逆に表示する。  2ならばその数字と逆に並べた数字の差の絶対値を表示。その際に差が0  であるなら入力した数字をそのまま表示するプログラム。 */ #include <stdio.h> int main(void) { int no; printf("4桁の数字を入力してください:"); scanf("%d",&no); if(no % 3 ==0) printf("%d \n" , no); else if(no % 3 ==1) do{ printf("%d",no%10); no = no / 10; }while (no > 0 ); else ここから絶対値を考えようとしたのですが 逆にした値が文字で置かれていないのでやりようがありません。 逆にした値は文字で置けるものなんですか? それともこの文ではできませんか? よろしくお願いします。

  • C言語 繰り返しの問題

    C言語の初心者です。 キーボードから値を入力して、1から入力された値までの奇数の和を求めて出力するプログラムを作成します。以下のように組んでみましたが、全然うまくいきません。誰か教えていただけませんか? #include<stdio.h> int main(void) { int i,n,sum; sum=0; printf("入力値:",n); scanf("%d",&n); if(n<=0) { printf("\n合計値:0\n"); } else { printf("入力値:\n",n); for(i= 1; i<= n; i=i+2) { if(n%2=1) { sum=sum+i; } } } printf("\n合計値\n",sum); }

  • C言語の課題で困っています;

    C言語の課題で困ってます; 学校の課題で、キーボードから文字を入力する(最大80文字)。入力された文字列と、入力した文字列を逆順にした文字列を表示する。(malloc,freeを使って作成して下さい) ヒントで #invlude <stdio.h> void main(void){ char *buf; //入力文字列用 char *seq; //入力文字列用コピー用 char *rev; //逆順文字列用 int lec, i; buf =(char*)malloc(81); printf("文字列を入力:"); scanf("%s"buf ); for(i = 0; buf[i] ??? '\0'; i++){ } Ien = i; /* lenに文字列の長さが入る */ seq = ???(??? + 1); /* len+1文字文確保*/ for(i = 0; ???; i++){ seq[0] = buf[0]; } free(buf); rey = ???(len + 1); for(i = 0; < len; i++){ rev[len - i - 1] = seq[i]; } ren[i] ~ '\0'; printd("入力文字列 : %s\n",sep); でたんですが、全然分からなくて足りない部分の答えを教えてもらえると助かります;

  • c言語の問題で質問があります。

    * 繰り返しを利用して,printfの命令を一回だけ用いて, * -5 から -2 と 3 から 5 までの数字を表示するプログラムを作成せよ * * ※ プログラム中に printfは一回しか記述してはいけません * * ヒント:繰り返しの中で,条件分岐をうまく利用しましょう. * 【実行結果】 -5 -4 -3 -2 3 4 5 * */ これを、コマンドプロンプトで表示するには、メモ帳にどう入力すればよいですか?

  • C言語のプログラムでうまく動きません。

    xとyを入力してその商を求めよという問題なのですが、大きい数字を小さい数字で割るようになっています。また、当然分母が0の時には不定となるので、次のようなプログラムを作りましたが、うまく動きません。どこが悪いか考えてもわかりませんでした。教えていただけませんでしょうか。 #include<stdio.h> main() { int x; int y; double syou; printf("xを入力せよ"); scanf("%d",&x); printf("yを入力せよ"); scanf("%d",&y); syou=x/y; if("syou>=1") { if("y==0") { printf("不定です"); } printf("答えは%fです。",&syou); } else { if("x==0") { printf("不定です"); } syou=y/x; printf("答えは%fです。",&syou); } } これでx、yを入力しても不定と出てきて、xの方が大きいときには見当はずれの大きな数字が出てきます。逆にyの方が大きいと同じく不定と出てきて答えは0.000と表示します。

  • C言語 データ

    今キーボードで入力された数字のデータを、あるアドレスのデータに書き込むという学習をしています。 #define Dout 035E ~~~~ printf("KEY INPUT\n"); scanf("%d",&c); outp(Dout,0xc); printf("035E:%x\n",Dout); 035Eというアドレスを定義したあとに、この文面ではDoutにscanfで入力された 数字は、outp(Dout,0xc);この中のcにデータとして書き込むのは出来ないのでしょうか? 例えば、0が入力されれば0を書き込み、1が入力されれば1を書き込むというプログラム にしたいと思っています。 教えていただけないでしょうか?

  • C言語の課題でまたまた悩んでいます。

    前にも、投稿して一部はうまくいきその後自力で何とかしようと頑張ったのですがやはりできませんでした。そこでもう一度皆さんの力を借りたいと思い投稿しました。 改めまして、 課題は構造体で顧客情報を確保(キーボードで1~50の顧客情報の数を入力)し、分岐点(登録、一覧表示、削除、ファイル出力、終了)に行き、それぞれを行なうプログラムです。 登録では、名前、ふりがな、電話番号を入力(idは1から順につける)。名前、ふりがなの型はcharで確保して入力もそのままなんですが、電話番号の型はcharにして0~9までとハイフンのみ入力可能にし、他の文字を入力したらエラーを返すようにするみたいなんですが方法がわからないです。 一覧表示では、id、名前、ふりがな、電話番号をそれぞれ表示します。今のところ問題はないです。 削除では、指定したidを削除し、削除したidは再利用はできないがその分新たなidで顧客情報を入力することができる。 記述してエラーは出なかったのですが削除はされません。 ファイル出力では、csv形式で出力するみたいなんですが。記述してもエラーが返ってくるばかりでよくわからないです。構造体の出力の場合 、記述の仕方が違うと思うのですが???の部分など全体的に記述の仕方がわかりません。 ちなみに、私が記述したのは下記のとおりです。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include "top.h" #include "ichiran.h" #define size_id (4) #define size_name (24) #define size_huri (24) #define size_tel (16) struct kokyaku { long id[size_id]; char name[size_name]; char huri[size_huri];   char tel[size_tel];   struct kokyaku *next; }; int main() { int kokyaku , bunki , sakuzyo , i , j; //顧客情報確保の件数 メニュー画面での分岐 削除id番号 顧客情報の件数と比較 long id = 1; //顧客番号 struct kokyaku *kok; printf("顧客情報がありません。何件分確保しますか?(1 - 50)"); scanf("%d",&kokyaku); system("cls"); if(kokyaku < 1 || kokyaku > 50) { printf("<<入力範囲にありません>>\n"); printf("<<処理を中断します>>\n"); return 0; }else{ kok = (struct kokyaku *)malloc( sizeof(struct kokyaku) * (kokyaku)); } i = 0; while(bunki = 5){ printf("%s", top1); printf("処理区分>"); scanf("%d",&bunki); system("cls"); switch(bunki) //メニュー画面での分岐 { case 1: //登録 if(id <= kokyaku)     {     printf("***** 顧客登録画面 *****\n");     *(kok[i].id) = id;     printf("氏名  :");     scanf("%s", kok[i].name);     printf("ふりがな:");     scanf("%s", kok[i].huri);     printf("電話番号:");     scanf("%s", kok[i].tel);     id++;     kok[i].next = &kok[i+1];     i++;     }else{ printf("登録がいっぱいになりました");   } break; case 2: //一覧表示 printf("%s\n", ichiran1); printf("%s\n", ichiran2); j = i; i = 0; while(i < j) { printf("%d%5s%25s%25s\n", *(kok[i].id) , kok[i].name , kok[i].huri , kok[i].tel); i++; } printf("%s\n", ichiran2); break; case 3: //削除 scanf("%d",&sakuzyo); for(i = 0;i < kokyaku || i < sakuzyo;i++) { if(i == sakuzyo - 1)   {  kok[i-1].next = &kok[i+1];  }  }  kokyaku++;     break; case 4: //ファイル出力 FILE *fp; if((fp = fopen("kokyaku.csv", "w")) == NULL ) { return 0; } while(fgets(???) != NULL) { printf("%s", ???); } fclose(fp); printf("プログラムが終了しました。\n"); return 0; break; case 5: //終了     return 0; break;     default: //エラー printf("<<処理区分エラー>>"); break; return 0; } } return 0; } ちなみにエラーが出ている場所は削除とファイル出力の部分のみです。 完成にはまだ遠くおかしなところがたくさんあると思います。ご指摘よろしくお願いします。

専門家に質問してみよう