アプリ版:「スタンプのみでお礼する」機能のリリースについて

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();
}

A 回答 (2件)

#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;
}
    • good
    • 0

★『一番大きい文字列』というより『一番大きい整数値』ですよね。


・考え方(アルゴリズム)は次のように!
・まずは『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』をお勉強しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!