/***********************************************************************
「kadai031」
10回入力して、2番目に小さい値を表示する
************************************************************************/
#include <stdio.h>
main()
{
int i; /* カウンター */
int a; /* 入力 */
int b; /* 最小 */
int c; /* 2番目に小さい数字 */
b = 0x70000000;
c = 0x70000000;
for(i=0;i<10;i++){
scanf("%d",&a);
if(b>a){
c = b;
b = a;
}
}
printf("10回入力して2番に小さな数字は%dです",c);
}
うーん。。。 答えがちがう。。。 /***********************************************************************
「kadai031」
10回入力して、2番目に小さい値を表示する
************************************************************************/
#include <stdio.h>
main()
{
int i; /* カウンター */
int a; /* 入力 */
int b; /* 最小 */
int c; /* 2番目に小さい数字 */
int d; /* フラグ */
b = 0x70000000;
c = 0x70000000;
d = 0;
for(i=0;i<10;i++){
scanf("%d",&a);
if(b>a){
c = b;
b = a;
}
if(b<a || c>a){
d = 1;
c = a;
}
}
if(d){
printf("10回入力して2番に小さな数字は%dです",c);
}else{
printf("2番目はないです");
}
}
出てきた答えはあってるけど、もし入力文字が 0x70000000だったときに判定がずれちゃう。。。 やり直ししなきゃ(; ;) /***********************************************************************
「kadai031」
10回入力して、2番目に小さい値を表示する
************************************************************************/
#include <stdio.h>
main()
{
int i; /* カウンター */
int a; /* 入力 */
int b; /* 最小 */
int c; /* 2番目に小さい数字 */
int d; /* フラグ */
b = 0x70000000;
c = 0x70000000;
d = 0;
for(i=0;i<10;i++){
scanf("%d",&a);
if(b>a){
c = b;
b = a;
}else if(b<a){
d = 1;
if(c>a){
c = a;
}
}
}
if(d){
printf("10回入力して2番に小さな数字は%dです",c);
}else{
printf("2番目はないです");
}
}
コレでよし!
|

- >
- Yahoo!サービス
- >
- Yahoo!ブログ
- >
- 練習用








0x70000000
というのは、正の数の最大かな?
おしい!
ちがうよ
符号ビットが0で、あとのビットがすべて1が最大
なので
0111 1111 1111 1111 1111 1111 1111 1111
が正解
16進だと
0x7fffffff
だね
ちなみに、このプログラムに
20億1, 20億2, ... 20億10 と入れるとわかるんやないかな
2010/9/28(火) 午前 6:56
ち、ちがうよ?!
・・・
そうすね、ちがいますね(; ;)
0111=7
1111=7
32ビットだから・・・
32/4=8
7fffffff
16進数は0x
20億1, 20億2, ... 20億10 でテスト?!
奥が深いです。。。
2010/9/28(火) 午後 10:52