亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

哪位大神解釋一下,n不是應該<=m么

n<m的話你就取不到m,n就不會等于m,如果這個數是素數,應該會return 0吧 但是程序能跑出素數,求解

正在回答

6 回答

不會取不到m的,我們可以一步步來看。

1 在第一個for語句的第一個表達式中,便將2賦予了m;

2 然后判斷第二個表達式m<=50(此時m=2),值為1(即 結果為真);

3 然后執行第一個for語句的循環體語句中的第一個語句:第二個for語句;

4 在第二個for語句的第一個表達式中,將2賦予了n(此時m=2);

5 然后判斷第二個for語句的第二個表達式n<m(此時n=2,m=2),值為0(即 結果為假),不執行第二個for語句的循環體語句(即 第一個if語句),因此也不執行第二個for語句的第三個表達式(因為for語句的第三個表達式要在執行完循環體語句后才執行),此時m,n仍為2;

6 然后執行第一個for語句的循環體語句中的第二個語句(即 第二個if語句);

7 判斷第二個if語句的表達式m==n(此時m,n均為2),值為1(即 結果為真),所以執行第二個if語句的語句(即 顯示“2 ”);

8 此時第一個for語句的循環體語句已經執行完第一次,開始執行第三個表達式m++,使m=3,接著又回到第二個表達式m<=50,值為1,又開始第二次循環.......

8 回復 有任何疑惑可以回復我~
#1

慕粉9166412 提問者

謝謝您!當n=m時,直接執行最后一個if語句
2018-07-01 回復 有任何疑惑可以回復我~
#2

閑默_

謝謝大佬搭救
2018-08-17 回復 有任何疑惑可以回復我~
#3

Yttwindstyle

按照您的思路3也可以順利輸出,但是再往后走就有問題了 輸出m=3之后m執行第一個for語句的第三個代碼自增成為4,判斷m<=50為真,進入第二個for循環。 此時n=3,m=4,n<m成立,進行第二個for循環的if判斷4%3==0結果為假,故n執行第二個for循環的第三塊代碼自增成為4 然后就會進行第一個for循環的if判斷m==n,此時m=n=4,這輸出不就有問題了么 希望大佬能解惑,我是哪一個地方思考出問題了嗎?
2018-08-17 回復 有任何疑惑可以回復我~
#4

慕無忌6163732

膜拜大佬
2018-12-28 回復 有任何疑惑可以回復我~
查看1條回復

其實n<=m其中的"="相當于畫蛇添足,如果是一個素數的話在n<m的時候,由于n++使得n=m直接不滿足內循環中的n<m了,而沒使用break;

直接跳到到for(m==n)從而輸出素數。如果n<=m相當于在前面的基礎上多運算了一步然后break;到for(m==n),發現由于n++,n是大于m的還是沒輸出來。所以對于輸出的素數來說n<=m,n<m都沒關系

0 回復 有任何疑惑可以回復我~

m為什么等不到4呢

0 回復 有任何疑惑可以回復我~

因為N++,所以在跳出循環后n可能會等于m。

0 回復 有任何疑惑可以回復我~
#include?<stdio.h>
#include?<math.h>
int?main(){????
????int?m,?n,flag;????
????for(m=2;?m<=50;m++)????
????{		
????????for(n=2;?n<=sqrt(m);?n++)????????
????????{????????????
????????????if(flag=(m%n==0))?break;		
????????}		
????????if(flag)?continue;????????
????????printf("%d??",?m);	
?????}	
?????return?0;????
}


0 回復 有任何疑惑可以回復我~

何止不用取到m,取到m的平方根就夠了,不過取到平方根代碼要改

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

哪位大神解釋一下,n不是應該<=m么

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號