ページ 11

簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月27日(金) 21:33
by akira

コード:

勉強期間がまだ3カ月程度でまだよくわかっていないので
説明お願いしたいです。
すみませんがよろしくお願いします!

(1)
    int i=0,n=1000;
	while(n>0){
		n=n-7;
		i++;
	}	
	printf("i=%d,n=%d",i,n);

答えがi=143,n=-1になることを説明お願いします。
iは1000/143であってますか?

(2)
	int i,k=0,x[5]={-2,4,5,-3,1},a=x[0];
	
	for(i=1;i<5;i++){
		if(x[i]>a){
			k=i;
		}
	}	
	printf("%d",k);

答えが4になることがなぜかわかりません。
説明お願いしたいです。

(3)
int a=2,b;
	float c=3.0,d;
	b=c/(float)a;
	d=(float)a/c;
	printf("%d\n%.2f",b,d);

答えが1,0.67になることがなぜかわかりません。
bは1.5じゃないんですか??
0.67はなんとなくわかるのですが。

(4)
char a='a',b;
	b=a+5;
	printf("文字:%c,コード:%d",b,b);

答えがf,102になることがわかりません。
なぜfになるのですか?
102は97+5?

(5)
int a=26,b=4,c=0;
	while(a>=b){
	a=a-b;
	c=c++;
	}
	printf("%d...%d",c,a);

答えが0...2になることがわかりません。

(6)
int i,cnt=0;
	for(i=1;i<50;i++){
		if(i%3==0||i%7==0){
		cnt++;
	    }
	}	
	printf("i=%d,cnt=%d",i,cnt);

答えがi=50,cnt=21になることがわかりません。

(7)
char str[10];
	char str2[10];
	int i=0;
	strcpy(str,"4036");
	
	while(str[i]!='\0'){
		str2[i]='0'+'9'-str[i];
		i++;
	}
	str2[i]='\0';
	printf("%s",str2);

答えが5963になることがわかりません。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月27日(金) 22:57
by softya(ソフト屋)
とりあえず質問が多いので番号とこの掲示板のお約束であるcodeタグをご利用下さい。
※ とりあえず私が設定しておきました。

こちらまで手がまわらないのでHELPをお願いします。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月27日(金) 23:16
by akira
ソフト屋さん。
わざわざありがとうございます。
誰かhelpお願いします…

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月27日(金) 23:33
by softya(ソフト屋)
akira さんが書きました:ソフト屋さん。
わざわざありがとうございます。
誰かhelpお願いします…
これは課題でしょうか?
締め切りが決まっているなら細かく教えてください。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月27日(金) 23:39
by softya(ソフト屋)
動かして途中の経過が分かれば答えが何故こうなるのか説明できる気がしますし、どちらかと言うと数学的な問題ですよね。

(1)に関しては途中経過をprintfしてましたが、このコード以上の説明が必要なのでしょうか?

コード:

#include <stdio.h>

int main( void )
{
	int i = 0, n = 1000;
	while( n > 0 ) {
		n = n - 7;
		i++;
		printf( "途中 i=%d,n=%d\n", i, n );
	}
	printf( "i=%d,n=%d", i, n );
}
分からなければ何行目の何処が分からないか具体的に聞いてください。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 00:01
by akira
課題ではなく明日テスト(今日はずっと起きています)があり
問題を100問ぐらい解いてわかならかった1部を載せました。
質問の仕方が悪くてすみません。

テスト形式が
(1)でいうと
実行結果を書きなさいという感じで、
問題が
 int i = 0, n = 1000;
while( n > 0 ) {
n = n - 7;
i++;
printf( "途中 i=%d,n=%d\n", i, n );
これに関しても今回の質問全部に言えることですが
計算?などの仕方がわからないということです。
例えばiは1000/7で出すんです。みたいな感じで
教えてくれるとありがたいです。
答えは全部わかっているので
こうだから答えはこうですよ。って感じで
お願いしたいです。簡単な説明でいいので
お願いします!

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 00:27
by softya(ソフト屋)
申し訳ないですが徹夜では付き合えません。

プログラムをパターン分けして覚えても無駄ですよ。
パターン外れたら答えられませんので理解しないとダメです。

このプログラムの何処がわからないか聞いてください。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 00:28
by itoyan
コードが何をしているか分かりにくいときは、
途中でprint文を挟むくせを付けるとよいと思います。
デバッグなどでもよくprintして挙動の問題点を理解するということがあります。
全部ではありませんが、挙動を簡単に説明しておきます。

(2)
x[1]からx[4]まで順番に値を見て、x[0]を超えていたら、
そのたびに注目している配列の要素の添字をkに代入する。
kは上書きされるため、x[0]を最後に超えたx[4]の添字、つまり4がkに入った状態になっており、
print文ではその値が表示されている。(kは途中1や2にもなるが、3にはならないことには注意)

(3)
%dで実数を表示するときは小数点以下を切り捨てた整数として表示する。これにより1.5は1になる。

(4)
%cはアスキーコードの値に対応した文字を表示せよという意味。
アスキーコードの値はttp://e-words.jp/p/r-ascii.htmlを参照しましょう。
aは97、fは102になっていますよね?
char a = 'a';というのは'a'に対応するアスキーコードの値(97)を代入していると思ってください。

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 00:48
by akira
ソフト屋さんわざわざありがとうございました!


itoyanさん
(3)が1になる理由も(4)がfになるのもわかりました。
わかりやすい解説感謝です。
ありがとうございます。

他の方でも(1)や(4)以降の問題の解説お願いしたいです!

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 04:30
by トントン
まだ、いるのかな?

眠い状態なので
誤字や意味不明なことを書いたら申し訳ないです。
とりあえず、以下にヒントを。

(5)
>答えが0...2になることがわかりません。
答えが0...2になる理由は僕にもわかりません。
実際に動かしてみましょう。

(6)
for文の使い方はご存知ですか?
if文の使い方はご存知ですか?
%演算子をご存知ですか?

iが50未満であるとき
ループ処理を継続しています。
その間、iを3で割ったときの余りが0、または7で割ったときの余りが0であるとき
cntをインクリメントしています。
で、実際数えてみると答えのようになると思います。

(7)
配列の使い方はご存知ですか?
strcpy関数はご存知ですか?
while文の使い方はご存知ですか?

C言語では' 'で囲まれている時は文字を表しています。
asciiコード表などで調べてみると
'0'は、48
'9'は、57
です。
最初のstrは → str[0]='4'
ですね。
str2=48+57-'4'を計算してみてasciiコードで文字に変換してみましょう。
そうすると「'5'」になるのがわかりますか?

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 09:38
by akira
トントンさん
ありがとうございます。
助かりました!
もうちょっと詳しく知りたいので
他の方もできるなら教えて欲しいです。
よろしくお願いします!

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 11:47
by Dixq (管理人)
もうちょっと情報を多く載せるように心がけると回答者が助かると思います。

> もうちょっと詳しく知りたいので他の方もできるなら教えて欲しいです。

今現在知りたいのは何番と何番ですか?

Re: 簡単な質問ですが多くお願いしたいです。よろしくお願いします。

Posted: 2012年7月28日(土) 14:52
by 七瀬悠
通りすがりです。。。

(1)に関して言うとただ単純にコンパイラ目線で処理を追っていくと
i = 143
n = -1
になりますね。

n - 7を142回行った時点でn = 6 , i = 142なので
次のループ条件には引っ掛かります。(nがまだ0以上なので)
143回行うとやはり-1になりますが、条件判定は計算の前に行われているのでiは143になります。確実に

i = 143、つまりi = 1000/143です

質問主様がどういったお答えを望んでいるのか少し見え隠れしていますがわたしもまだ"C"自体は数日前から独学でやり始めたばかりなので貴方のお気持ちは痛いほど察せられます。

外野から大変失礼しました…((((.._ _)