課程
/后端開發
/C
/C語言入門
n<m的話你就取不到m,n就不會等于m,如果這個數是素數,應該會return 0吧 但是程序能跑出素數,求解
2018-06-23
源自:C語言入門 4-14
正在回答
不會取不到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,又開始第二次循環.......
慕粉9166412 提問者
閑默_
Yttwindstyle
慕無忌6163732
其實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都沒關系
m為什么等不到4呢
因為N++,所以在跳出循環后n可能會等于m。
#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;???? }
何止不用取到m,取到m的平方根就夠了,不過取到平方根代碼要改
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
2 回答哪位大神解釋下
2 回答不懂呀,哪位大神解釋一下
2 回答哪位大神能幫我解釋一下啊?
5 回答n=2 m=2 那么n<m就不對啊 是不是應該改成n<=m
1 回答哪位大神幫我解釋下哪錯了
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-06-23
不會取不到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,又開始第二次循環.......
2018-07-25
其實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都沒關系
2018-07-22
m為什么等不到4呢
2018-07-15
因為N++,所以在跳出循環后n可能會等于m。
2018-07-03
2018-07-03
何止不用取到m,取到m的平方根就夠了,不過取到平方根代碼要改