1樓:匿名使用者
你換了while語句中的scanf位置後,
那麼while語句前的scanf得到的x值就永遠都不會參與到while語句中的 t+=x;
這樣你輸入的第乙個數字x都是無效的!
補充的第一問:
c.它前面最近的未配對的if
第二問:以偶數為例,a為偶數時,a%2為0,你的要求是此時以下表示式為假。
a. a%2 = = 1 0==1,false
b. !(a%2 = = 0) !(0==1),true
c. !(a%2) !(0),true
d. a%2 0,false
只有a,d才是符合要求的。
the third question:
for(j=1;j<=i;j++)
printf("*");
這句迴圈僅當j=i+1時才跳迴圈。
if(j==i)printf("\n");這句當然不會成立了!
我猜測你的程式要表達的是,在這個for迴圈結束後輸出"\n"對吧?
你的for迴圈控制的是後面的語句列表;如果for下面有大括號,就把大括號作為內的所有語句作為語句列表,如果沒有大括號,就把for下面最近的單條語句作為迴圈物件。
在你的程式中,迴圈物件只是單語句printf("*");
其實不用加什麼大括號的,在迴圈結束後直接利用printf("\n")輸出"\n"就ok!(if(j==i)就不用加了,迴圈結束後j永遠都是i+1,你無非是想輸出換行符,你加if不是叫它不要輸出換行符嗎?)
the key to the 4th question:
前面的for迴圈是在i==10時才跳出,然後你用printf輸出a[10],這個已經是非法的了,最多隻可輸出a[9]。
我想你是打算輸出sum吧,但是這也有錯誤。
因為你的int sum是動態auto變數variable,auto varibal如果不初始化的話,其值是不確定的,只有靜態變數(如全域性變數)會自動對其進行0初始化。
所以你得加上int sum=0;
2樓:匿名使用者
移到上面後,就少加了乙個x,當然結果就不對了!
外面的scanf()讀取了乙個x,本來應該進入while()迴圈後首先被加,但是剛進入迴圈便又用scanf()讀取了乙個x,導致外面讀取的x沒有加.
3樓:cpp門徒
// - -~~~~~~
第乙個例如你輸入:1 2 3 4 5 -1它是 1 + 2 + 3 + 4 + 5 = 15第二個你輸入就完全變了:1 2 3 4 5 -11是外面那個scanf()的,判斷它!
=-1,進來又遇到scanf(),所以現在x已經是2了,也就是說是從2開始+起的了,2 + 3 + 4 + 5 = 14,14把,最後-1是裡面的scanf()的,它也是x哦,t += -1,也就-1咯,14-1=13
你說能一樣嗎?
補充:1:c
2:c // !(a%2) 假設a為奇數3,(3%2)=1 !1為0 那就代表為奇數3為假了,錯。
3:for(i=1;i<=10;i++)
{for(j=1;j<=i;j++)
i = 1,j = 1,第一次才i==j
輸出*後,j++=2
也就是說i==j那條件永遠不會為真
還有以後想再問別的問題,還是開多個問題好,別在補充裡問。
關於C語言的scanf問題
鍵盤的輸入是先讀入到快取,然後scanf再從快取中將資料讀出來按照格式賦值給相應的變數。一次的輸入如果沒有被讀完,下次可以繼續使用,也可以呼叫fflush stdin 函式將快取內容清空。因此,你可以一次輸入很多,也可以只輸入乙個 執行後在輸入給第二個 那要看scanf的格式如何了,比如第乙個sca...
c語言scanf函式格式問題
寒寒家 首先明確 1.對於 d的輸入,會忽略之前的空格 2.對於 c的輸入則不會忽略。3.對於 d的輸入,會被字元截斷,這也就是 輸入 10a20b 的時候,也不會錯的原因了。正確答案是a x1接收了10,y1接收了字元a,之後是一個空格,而輸入的是 d,所以會忽略空格,所以x2接收了20,y2接收...
c語言s 和s的區別,C語言 s 和s 的區別
s在定義的時候是定義乙個指標變數,使用的時候是取出指標變數s所指向的單元的值,s 就是乙個陣列。其實陣列和指標是有密切聯絡的,比如s 1 相當於 s 1 s是乙個指標變數,指向變數s的指標。而s是乙個指標陣列,代表了乙個陣列名為s的陣列。char s 代表的是乙個指向字元的指標,宣告之後可將其指向c...