
scanf関数を使用して、文字列を10回入力し一番大きい文字列を表示するプログラムを作ったのですが、
一番大きい「奇数」を表示するように条件を加えた場合どうすればよいのでしょうか?
偶数=割り切れる
奇数=割り切れない
ということまでは分かるのですがその先が分かりません。
一応一番大きい文字列を表示するプログラムを貼っておきます。
#include <stdio.h>
int main(void)
{
char str[1024];
char buf[10];
int i;
printf("文字列を10回入力して下さい:\n");
memset(str, 0, sizeof(str));
for (i = 0; i < 10; i++)
{
memset(buf, 0, sizeof(buf));
printf("input>\n");
scanf("%s", buf);
}
if (strcmp(buf, str) > 0)
{
strcpy(str, buf);
}
printf("output>\n%s\n" , str);
getchar();
}
No.1ベストアンサー
- 回答日時:
#include <stdio.h>
int main(void)
{
int num[10], max, maxodd, i;
puts("10個の整数を入力します");
for (i = 0; i < 10; i++) {
printf("%d個目:", i + 1);
scanf("%d", &num[i]);
}
max = maxodd = num[0];
for (i = 1; i < 10; i++) {
if (num[i] > max) {
max = num[i];
}
if (num[i] % 2 == 1 && num[i] > maxodd) {
maxodd = num[i];
}
}
printf("いちばん大きい数 :%d\n", max);
if (maxodd % 2 == 1) {
printf("いちばん大きい奇数:%d\n", maxodd);
}
else {
printf("入力した数の中に奇数がありませんでした\n");
}
return 0;
}
No.2
- 回答日時:
★『一番大きい文字列』というより『一番大きい整数値』ですよね。
・考え方(アルゴリズム)は次のように!
・まずは『scanf』で整数を受け取るようにします。→文字列ではなく。
・そしたら整数値が『偶数』、『奇数』か判定します。→割り切れない。
・『奇数』の時に最初に保存されていた『一番大きい奇数値』と比較します。→最初は『0』にしておく。
・新しく『scanf』で受け取った『奇数値』が大きければ保存し直します。
・これを 10 回繰り返せばよいのです。→これで最後に代入された『値』こそ『一番大きい奇数値』です。
サンプル:
int main( void )
{
int max = 0; ←最大値の変数(0で初期化しておくこと)
int n; ←整数値の変数
int i; ←繰り返し変数
printf( "文字列を10回入力して下さい:\n" );
for ( i = 0 ; i < 10 ; i++ ){
printf( "input>" ); ←『\n』は削除したほうが良い。なぜ?(考えてみよう)
scanf( "%d", &n ); ←ここで『整数値』を受け取る。
if ( (n % 2) != 0 ){ ←ここで2では割り切れないと判定(奇数なので)。
if ( n > max ){ ←ここで比較する。
max = n; ←ここで代入しなおす。
}
}
}
printf( "output>%d\n" , max ); ←ここで結果表示
getchar();
}
補足:
・『偶数』判定は、整数値を2で割りあまりが0。 →(n % 2) == 0
・『奇数』判定は、整数値を2で割りあまりが0以外。→(n % 2) != 0
・ほかにも『奇数』判定は『if ( n & 0x1 )』でも判定できますよ。
続けて『else』を使えば『偶数』判定も可能ですな。
・どうですか。理解できましたか。最後に『scanf』をお勉強しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語でAからZまでを表示する...
-
C言語での数字の花形表示
-
勝率をプログラムに
-
(C言語)めちゃくちゃな値にな...
-
コンパイルエラーについて
-
ダブルポインタで2次元配列を作成
-
C言語 関数
-
円の面積を求めるプログラミン...
-
プログラミング言語C
-
コマンドラインに出力した文字...
-
C++ 二次関数の重解、虚数解が...
-
SJIS→UTF-8の文字コード変換
-
c言語のプログラミングの問題で...
-
C言語 九九表
-
8人分のテストの点数を入力し、...
-
\\x1bを使ったswitch文が反応し...
-
長方形、円、三角形の計算する...
-
書式制御'%d'と'%f'について
-
C言語に関する質問です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語で2000年以降カレンダーを...
-
c言語でAからZまでを表示する...
-
【C】fizzbuzzのトリッキーなコ...
-
strcmp
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
コマンドラインに出力した文字...
-
8人分のテストの点数を入力し、...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
(C言語)めちゃくちゃな値にな...
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
コマンドプロンプトがすぐ消える
-
printfの出力内の文字をdefine...
-
scanfに文字が入力されたときに...
-
台形の面積を求めるプログラム
-
改行について 1行に何個かづ...
-
WM_CLOSEで閉じれないウィンド...
おすすめ情報