過去の投稿日別表示

[ リスト | 詳細 ]

全2ページ

[1] [2]

[ 次のページ ]

kadai032 予想解答


「kadai032」
 下記のように表示するプログラムを作成しなさい

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890

main ( )
{
	int i;

	for(i=0;i<10;i++){
		printf("%.*s\n",i+1,"1234567890");
	}
}

イメージ 1




これは以前やった課題の逆バージョン、特に問題なしっ
問題は次のkadai033です。。。


また何かありそうで怖いです(泣)
今から取り掛かります!





kadai033 予想解答


「kadai033」
 上記の、「kadai032」で、以下の条件を満たすこと

for を1個
printf を1個
変数2個

 で作成可能


main ( )
{
	int a;
	int i;


	for(i=0;i<10;i++){
		scanf("%d", &a);
	}

}


イメージ 2



これだとprintfを使ってないからNG。。。
もう一度考えて見ますっ
kadai031ボロボロでした。。。


kacai031 解答


イメージ 2


main()
{
 int a;
 int i;
 int f;
 int s;
 int m;

 f = 0x7FFFFFFF;
 s = 0x7FFFFFFF;
 m = 0;
 for ( i = 0; i < 10; i++ ) {
  scanf("%d",&a);
  if ( f > a ) {
   s = f;
   f = a;
  } else if ( f < a ) {
   m = 1;
   if ( a < s ) {
    s = a;
   }
  }
 }
 if ( m ) {
  printf("%d",s);
 } else {
  printf("なし",s);
 }
}

フラグを立てる = メモする
イメージ 1


kadai031の場合のフラグの意味するもの
「2番目に小さい数値は更新されたかどうか」
1となれば更新されてる
0であれば更新はなし

if( m ) の判定で「 偽=0 」となれば更新はなかったとして処理が出来る
ハードル高いです!!!




ですがとても大切です。。。







気持ちを切り替えて!!!
次の課題いきます
今度こそ正解に近いものを仕上げないとっ

・・・2問あるし


「kadai032」
 下記のように表示するプログラムを作成しなさい

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890

「kadai033」
 上記の、「kadai032」で、以下の条件を満たすこと

for を1個
printf を1個
変数2個

 で作成可能

kadai031

退避用の変数を用意して考えました

イメージ 1



・・・。
ごめんなさい。。。
解説を開きます。。。
気になって答えを見てしまいました。。
自分のと比べると・・・


結果はNG!!!


最大値がまず違う
4バイトで表すことのできる最大値 = 0x7fffffff





わかばくんのソース


イメージ 1

main()
{
 int a;
 int i;
 int f;
 int s;

 f = 0x7FFFFFFF;
 s = 0x7FFFFFFF;
 for ( i = 0; i < 10; i++ ) {
  scanf("%d",&a);
  if ( f > a ) {
   s = f;
   f = a;
  } else if ( s > a ) {
   s = a;
  }
 }
 printf("%d",s);
}

これだと詰めが甘いんですよね。。
同一「1」であるのなら2位は「0x7fffffff」でないとおかしいですものね。。。
うーん。。。




main()
{
	int a;
	int i;
	int f;
	int s;

	f = 0x7FFFFFFF;
	s = 0x7FFFFFFF;

	for ( i = 0; i < 10; i++ ) {
		scanf("%d",&a);
		if ( f > a) {
			if(s > f){
	 			s = f;
				f = a;
			}
		} else if ( s > a ) {
			s = a;
		}
	}
	printf("%d",s);
}


答えは出るけどしっくりしない。。



main()
{
	int a;
	int i;
	int f;
	int s;

	f = 0x7FFFFFFF;
	s = 0x7FFFFFFF;

	for ( i = 0; i < 10; i++ ) {
		scanf("%d",&a);
		if ( f > a) {
	 		s = f;
			f = a;
		} else if ( a != f && s > a ) {
			s = a;
		}
	}
	printf("%d",s);
}


いや、ちがう!!
もう少しでひらめきそう♪
ちょっと夕ご飯作ってきます。。。
kadai030
int型に直して色々修飾子をつけたりはずしたりしたけどNG、またしてもGiveUpです(泣)
解けないまま答えを開いてしまいました。。。

・・・。
初期化が違ってたんだぁ。


合計値を0で初期化してた
初期化の注意 : 変数の初期化を 0 としていましたが、マイナスの最低値とする必要があります

了解です!!

kadai030

main ( )
{
	int i;		/* カウント */
	int  a;		/* 入力 */
	int  s;		/* 最大数値 */

	s = 0x80000000;
	
	for(i=1;i<=10;i++){
		scanf("%d", &a);
		if( a > s ){
			s = a;
		}
	}

	printf("%d", s);
}

イメージ 1

イメージ 2



しっかりできました☆
次の課題にいきます



「kadai031」
 10回入力して、2番目に小さい値を表示する

イメージ 5


main ( )
{
	int  i;		/* カウント */
	int  a;		/* 入力 */
	int  s;		/* 最小数値 */
	int  r;		/* 2番目に小さい数値 */

	s = 01111111;
	r = 01111111;
	
	for(i=0;i<10;i++){
		scanf("%d", &a);
		if( a <= s ){
			s = a;
		}else if( a <= r){
			r = a;
		}
	}

	printf("%d", r);
}

イメージ 3

イメージ 4



「マイナス」ができてない。。。
解答が出てるけどもう少し考えて見ます。。。







その前に修正をUPです

イメージ 6


main ( )
{
	int  i;		/* カウント */
	int  a;		/* 入力 */
	int  s;		/* 最小数値 */
	int  r;		/* 2番目に小さい数値 */

	s = 0x7fffffff;
	r = 0x7fffffff;
	
	for(i=0;i<10;i++){
		scanf("%d", &a);
		if( a <= r ){
			if( a <= s ){
				s = a;
			}else{
				r = a;
			}
		}
	}
	printf("%d", r);
}

考え方としては
入力した数値が2番目と比べて大きいのなら無視、小さいのなら1番目に小さいものと比べるです
でも今のままじゃ「マイナス」は出てこない。。
やっぱり次のUP講義をよく読んでみます。。。

全2ページ

[1] [2]

[ 次のページ ]


よしもとブログランキング

もっと見る

[PR]お得情報

お肉、魚介、お米、おせちまで
おすすめ特産品がランキングで選べる
ふるさと納税サイト『さとふる』
コンタクトレンズで遠近両用?
「2WEEKメニコンプレミオ遠近両用」
無料モニター募集中!
話題の新商品が今だけもらえる!
ジュレームアミノ シュープリーム
プレゼントキャンペーン
ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事