課程
/后端開發(fā)
/C
/C語言入門
n<m的話你就取不到m,n就不會(huì)等于m,如果這個(gè)數(shù)是素?cái)?shù),應(yīng)該會(huì)return 0吧 但是程序能跑出素?cái)?shù),求解
2018-06-23
源自:C語言入門 4-14
正在回答
不會(huì)取不到m的,我們可以一步步來看。
1 在第一個(gè)for語句的第一個(gè)表達(dá)式中,便將2賦予了m;
2 然后判斷第二個(gè)表達(dá)式m<=50(此時(shí)m=2),值為1(即 結(jié)果為真);
3 然后執(zhí)行第一個(gè)for語句的循環(huán)體語句中的第一個(gè)語句:第二個(gè)for語句;
4 在第二個(gè)for語句的第一個(gè)表達(dá)式中,將2賦予了n(此時(shí)m=2);
5 然后判斷第二個(gè)for語句的第二個(gè)表達(dá)式n<m(此時(shí)n=2,m=2),值為0(即 結(jié)果為假),不執(zhí)行第二個(gè)for語句的循環(huán)體語句(即 第一個(gè)if語句),因此也不執(zhí)行第二個(gè)for語句的第三個(gè)表達(dá)式(因?yàn)閒or語句的第三個(gè)表達(dá)式要在執(zhí)行完循環(huán)體語句后才執(zhí)行),此時(shí)m,n仍為2;
6 然后執(zhí)行第一個(gè)for語句的循環(huán)體語句中的第二個(gè)語句(即 第二個(gè)if語句);
7 判斷第二個(gè)if語句的表達(dá)式m==n(此時(shí)m,n均為2),值為1(即 結(jié)果為真),所以執(zhí)行第二個(gè)if語句的語句(即 顯示“2 ”);
8 此時(shí)第一個(gè)for語句的循環(huán)體語句已經(jīng)執(zhí)行完第一次,開始執(zhí)行第三個(gè)表達(dá)式m++,使m=3,接著又回到第二個(gè)表達(dá)式m<=50,值為1,又開始第二次循環(huán).......
慕粉9166412 提問者
閑默_
Yttwindstyle
慕無忌6163732
其實(shí)n<=m其中的"="相當(dāng)于畫蛇添足,如果是一個(gè)素?cái)?shù)的話在n<m的時(shí)候,由于n++使得n=m直接不滿足內(nèi)循環(huán)中的n<m了,而沒使用break;
直接跳到到for(m==n)從而輸出素?cái)?shù)。如果n<=m相當(dāng)于在前面的基礎(chǔ)上多運(yùn)算了一步然后break;到for(m==n),發(fā)現(xiàn)由于n++,n是大于m的還是沒輸出來。所以對(duì)于輸出的素?cái)?shù)來說n<=m,n<m都沒關(guān)系
m為什么等不到4呢
因?yàn)镹++,所以在跳出循環(huán)后n可能會(huì)等于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的平方根就夠了,不過取到平方根代碼要改
舉報(bào)
C語言入門視頻教程,帶你進(jìn)入編程世界的必修課-C語言
2 回答哪位大神解釋下
2 回答不懂呀,哪位大神解釋一下
2 回答哪位大神能幫我解釋一下啊?
5 回答n=2 m=2 那么n<m就不對(duì)啊 是不是應(yīng)該改成n<=m
1 回答哪位大神幫我解釋下哪錯(cuò)了
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-06-23
不會(huì)取不到m的,我們可以一步步來看。
1 在第一個(gè)for語句的第一個(gè)表達(dá)式中,便將2賦予了m;
2 然后判斷第二個(gè)表達(dá)式m<=50(此時(shí)m=2),值為1(即 結(jié)果為真);
3 然后執(zhí)行第一個(gè)for語句的循環(huán)體語句中的第一個(gè)語句:第二個(gè)for語句;
4 在第二個(gè)for語句的第一個(gè)表達(dá)式中,將2賦予了n(此時(shí)m=2);
5 然后判斷第二個(gè)for語句的第二個(gè)表達(dá)式n<m(此時(shí)n=2,m=2),值為0(即 結(jié)果為假),不執(zhí)行第二個(gè)for語句的循環(huán)體語句(即 第一個(gè)if語句),因此也不執(zhí)行第二個(gè)for語句的第三個(gè)表達(dá)式(因?yàn)閒or語句的第三個(gè)表達(dá)式要在執(zhí)行完循環(huán)體語句后才執(zhí)行),此時(shí)m,n仍為2;
6 然后執(zhí)行第一個(gè)for語句的循環(huán)體語句中的第二個(gè)語句(即 第二個(gè)if語句);
7 判斷第二個(gè)if語句的表達(dá)式m==n(此時(shí)m,n均為2),值為1(即 結(jié)果為真),所以執(zhí)行第二個(gè)if語句的語句(即 顯示“2 ”);
8 此時(shí)第一個(gè)for語句的循環(huán)體語句已經(jīng)執(zhí)行完第一次,開始執(zhí)行第三個(gè)表達(dá)式m++,使m=3,接著又回到第二個(gè)表達(dá)式m<=50,值為1,又開始第二次循環(huán).......
2018-07-25
其實(shí)n<=m其中的"="相當(dāng)于畫蛇添足,如果是一個(gè)素?cái)?shù)的話在n<m的時(shí)候,由于n++使得n=m直接不滿足內(nèi)循環(huán)中的n<m了,而沒使用break;
直接跳到到for(m==n)從而輸出素?cái)?shù)。如果n<=m相當(dāng)于在前面的基礎(chǔ)上多運(yùn)算了一步然后break;到for(m==n),發(fā)現(xiàn)由于n++,n是大于m的還是沒輸出來。所以對(duì)于輸出的素?cái)?shù)來說n<=m,n<m都沒關(guān)系
2018-07-22
m為什么等不到4呢
2018-07-15
因?yàn)镹++,所以在跳出循環(huán)后n可能會(huì)等于m。
2018-07-03
2018-07-03
何止不用取到m,取到m的平方根就夠了,不過取到平方根代碼要改