1樓:匿名使用者
在這個程式中主要看哪個static這是靜態的意思 也就是說 當fun()函式運算完也不釋放x的值 直到mian()函式執行完才釋放x的值,這個程式的執行順序就是,先進入到mian()函式,做迴圈,s=s+fun()到這句的時候會去呼叫fun()函式 這是返回x=x+1=2 s=1+2 這時s=3 for迴圈中i的值自增後
i=2 這時s=3還是滿足條件,這樣一直迴圈下去,這個程式感覺不對,這樣就死迴圈了,因為fun()函式中的x值一直沒有被釋放 第二次執行的時候就變為x=2+1=3了。。這樣 主要就是static的作用
2樓:匿名使用者
static int x =1; //這句說明了x是個 靜態變數,每次呼叫函式修改的時候,會影響下次訪問時的值。所以有:
第一次呼叫fun()函式的時候,x = 1+1 =2;
第二次呼叫fun()函式的時候,x = 2+1 =3;
第三次呼叫fun()函式的時候,x = 3+1 =4;
.....
因此,main()中for迴圈
i=1時, s = 1+fun() = 1 + 2 =3;
i=2時, s = 3+fun() = 3 + 3 = 6;
i=3時, s = 6+fun() = 6 + 4 = 10;
........
由於 在迴圈中,i 是自加1 的,而s 也是增長的,而且增長的速度比 i 增長的快,所以始終有i<=s;
因此,這個程式會陷入死迴圈中~~根本就執行部了printf("%d\n",s);這條語句,因為程式一直在執行上面的迴圈語句....
3樓:黑色
只執行一次 隨後輸出3
一道c語言題目,求大神解答~~~
4樓:匿名使用者
先貼效果:
請輸入一個不多於5位的正整數:
25879
該數是 5 位數,正序是 25879 ,逆序是 97852再貼**:
#include "stdio.h"
#include "conio.h"
main()
else
printf(" 該數是 %d 位數,正序是 %d ,逆序是 %d \n",count,old,y);
} getch();
} 思路:
while(x>0)
把一個數 每次除10取餘,就得到個位了。
再把這個數除10(整除),就縮小為原來的10分之一了。在此處理就得到十位了。依次迴圈
直到為0結束!
為了按你的順序列印出來,我就特別處理了下。用old記錄原來輸入的x,y記錄新的數好運!
5樓:
#include "stdio.h"//
#include "string.h"//
void main(void)
6樓:魔囡
#include
int main()
printf("%d",digit);
return 0;}
7樓:匿名使用者
#include
void main()
for(i=1;i<=5;i++)//正序輸出(因為之前取整是按5位數取整,如果該數小於5位,則取整出現0)
if(a[i]!=0) printf("%d",a[i]);
for(i=5;i>=1;i--)//逆序輸出if(a[i]!=0) printf("%d",a[i]);}
8樓:90後_誠信
這個你可以輸入一個string的型別
一道c語言邏輯題目,求大神幫一下!
9樓:聽不清啊
#include
int main()
10樓:七琪淇
逐一驗證即可,偽**
實驗**:
#include
int main()
//假設b說的是真的,驗證:
res = 1;
if (res != 2 && res == 4)//假設c說的是真的,驗證:
res = 1;
if (res != 4 && res == 4)//假設d說的是真的,驗證:
res = 1;
if (res != 4 && res != 2)}實驗結果
一道c語言的題目,求大神解答。 5
11樓:雲中鶴隱
while(~scanf("%d",n)).
~是什麼
12樓:心河星塵
你忘記將每次迴圈前將sum清零了。還有格式等等問題。改法是#include
int main()
}sum = 0;
for(b=0;b printf("%.2f\n",sum/n); }return 0;} 13樓:匿名使用者 #include int main() {int n,i,j,a,b,sum=0; while(~scanf("%d",n)){int a[n][n]; for(i=0;i是那個意思吧。 14樓:匿名使用者 你的程式 太混亂了~~ 本是一個簡單的程式被你搞複雜了 15樓:匿名使用者 while(~scanf("%d",&n)) n前面少一個取地址符 16樓:匿名使用者 陣列名和變數名衝突(a). 一道c語言的題目,跪求大神解答,拜託能不能解釋一下執行過程
5 17樓:油條大巴 #include int main() ,*p1[3],(*p2)[3]; // 二維陣列p有3行,每行有3個整數. // 應該寫成int p[3][3]=, , }; // p等於0x28fee4,這是十六進位制數,是記憶體地址,從這個記憶體地址開始,連續存放9個整數. // p[0]等於0x28fee4,這是第0行的首地址,存放1,2,3這三個整數,每個整數佔用記憶體4個位元組, // 其中,[0x28fee4]=p[0][0]=1,[0x28fee8]=p[0][1]=2,[0x28feec]=p[0][2]=3 // p[1]等於0x28fef0,這是第1行的首地址,存放4,5,6這三個整數,每個整數佔用記憶體4個位元組, // 其中,[0x28fef0]=p[1][0]=4,[0x28fef4]=p[1][1]=5,[0x28fef8]=p[1][2]=6 // p[2]等於0x28fefc,這是第2行的首地址,存放7,8,9這三個整數,每個整數佔用記憶體4個位元組, // 其中,[0x28fefc]=p[2][0]=7,[0x28ff00]=p[2][1]=8,[0x28ff04]=p[2][2]=9 for(i=0;i<3;i++) p1[i]=p[i]; // int *p1[3]是"指標陣列",是一種"陣列",裡面存放的是"指標",也就是存放"記憶體地址". // 定義p1裡的數字"3"表示能存放3個"指標",也就是3個"記憶體地址". // i分別等於0,1,2 // i=0時,p1[0]等於p[0]=0x28fee4, p1[0]指向p的第0行的首地址,也就是指向的首地址. // i=1時,p1[1]等於p[1]=0x28fef0, p1[1]指向p的第1行的首地址,也就是指向的首地址. // i=2時,p1[2]等於p[2]=0x28fefc, p1[2]指向p的第2行的首地址,也就是指向的首地址. // p1等於0x28fed8,這是記憶體地址, // 記憶體地址0x28fed8裡連續存放了三個資料:0x28fee4,0x28fef0,0x28fefc // *p1=*(p1+0)等於0x28fee4,也就是 *p1 = p1[0]=p[0]=0x28fee4 // 也就是*p1指向二維陣列p的第0行的首地址 // *(p1+1)等於0x28fef0,也就是 *(p1+1) = p1[1]=p[1]=0x28fef0 // 也就是*(p1+1)指向二維陣列p的第1行的首地址 // *(p1+2)等於0x28fefc,也就是 *(p1+2) = p1[2]=p[2]=0x28fefc // 也就是*(p1+2)指向二維陣列p的第2行的首地址 // 所以,p1這個"指標陣列",存放了三個記憶體地址 , // 也就是 . // 這三個資料就是三個"指標",也就是三個"記憶體地址",分別是二維陣列p的三行整數的首地址. // 例如,*(p1+1)+0 指向 p[1] 的第0個整數4的記憶體地址 // *(p1+1)+1 指向 p[1] 的第1個整數5的記憶體地址 // *(p1+1)+2 指向 p[1] 的第2個整數6的記憶體地址 // *(*(p1+0)+0) = p[0][0] = 1 // *(*(p1+0)+1) = p[0][1] = 2 // *(*(p1+0)+2) = p[0][2] = 3 // *(*(p1+1)+0) = p[1][0] = 4 // *(*(p1+1)+1) = p[1][1] = 5 // *(*(p1+1)+2) = p[1][2] = 6 // *(*(p1+2)+0) = p[2][0] = 7 // *(*(p1+2)+1) = p[2][1] = 8 // *(*(p1+2)+2) = p[2][2] = 9 p2=p; // int (*p2)[3]是"陣列指標". 語句p2=p表示"陣列指標"p2指向二維資料p的首地址. // 定義p2裡的數字"3"表示每行有3個整數. // p2等於0x28fee4,這是記憶體地址,是二維資料p的首地址. // *p2 = *(p2 + 0) = p[0] = 整數p[0][0]的記憶體地址 // *(p2 + 1) = p[1] = 整數p[1][0]的記憶體地址 // *(p2 + 2) = p[2] = 整數p[2][0]的記憶體地址 // *( *p2 + 0 ) = *( *(p2 + 0) + 0 ) = p[0][0] = 1 // *( *p2 + 1 ) = *( *(p2 + 0) + 1 ) = p[0][1] = 2 // *( *p2 + 2 ) = *( *(p2 + 0) + 2 ) = p[0][2] = 3 // *( *(p2 + 1) + 0 ) = p[1][0] = 4 // *( *(p2 + 1) + 1 ) = p[1][1] = 5 // *( *(p2 + 1) + 2 ) = p[1][2] = 6 // *( *(p2 + 2) + 0 ) = p[2][0] = 7 // *( *(p2 + 2) + 1 ) = p[2][1] = 8 // *( *(p2 + 2) + 2 ) = p[2][2] = 9 for(i=1;i<3;i++) printf("%d,%d\n",*(*(p1+i)+1)+1,*(*++p2+1)+1); // i分別等於1,2 // i=1時, *(*(p1+i)+1)+1 = *(*(p1+1)+1)+1 // 其中,*(p1+1) 等於0x28fef0,也就是 *(p1+1) = p1[1]=p[1]=0x28fef0 // 也就是 *(p1+1) 指向二維陣列p的第1行的第0個整數的記憶體地址 // 而 *(p1+1)+1 指向二維陣列p的第1行的第1個整數的記憶體地址 // *(*(p1+1)+1)就是提取"第1行的第1個整數",也就是 // *(*(p1+1)+1) = p[1][1] = 5 // 所以,*(*(p1+1)+1) + 1 = 5 + 1 = 6 (這是螢幕輸出的第一行第一個整數) // 對於 *(*++p2+1) ,原本是 *( *(p2 + 0) + 1) = p[0][1] = 2 // 由於有"++p2"的運算,成為 *( *(p2 + 1) + 1 ) = p[1][1] = 5 // 所以, *(*++p2+1) + 1 = 5 + 1 =6 (這是螢幕輸出的第一行第二個整數) // i=2時, *(*(p1+i)+1)+1 = *(*(p1+2)+1)+1 // 其中,*(p1+2) 等於0x28fefc,也就是 *(p1+2) = p1[2]=p[2]=0x28fefc // 也就是 *(p1+2) 指向二維陣列p的第2行的第0個整數的記憶體地址 // 而 *(p1+2)+1 指向二維陣列p的第2行的第1個整數的記憶體地址 // *(*(p1+2)+1)就是提取"第2行的第1個整數",也就是 // *(*(p1+2)+1) = p[2][1] = 8 // 所以,*(*(p1+2)+1) + 1 = 8 + 1 = 9 (這是螢幕輸出的第二行第一個整數) // 對於 *(*++p2+1) ,之前i等於1時,是 *( *(p2 + 1) + 1 ) // 由於有"++p2"的運算,現在成為 *( *(p2 + 2) + 1 ) = p[2][1] = 8 // 所以, *(*++p2+1) + 1 = 8 + 1 =9 (這是螢幕輸出的第二行第二個整數) // 所以,程式輸出的第一行是6,6, 第二行是9,9 return 0;} 你主函式裡m肯定還是1,func函式中的靜態變數應該是8了吧。你檢視變數值的位置是什麼樣的,如果在主函式裡檢視肯定是主函式中的m,即為1,因為發生作用域覆蓋了。你是第二次進入func後設定斷點,檢視m數值的可定為8。由程式執行結果為8 此時i 3,m 3 1 4,因此返回值為8 17 此時i 3 8... a程式是遇到3的倍數就不輸出,然後繼續判斷下一個數 b程式是遇到第一個3的倍數就退出迴圈,不再輸出。n 3 n 200 這句為 n 3 與 n 200全成立為真是1 有1個不 成立為假是0 當然不等價了,你第一個程式是從100為起點的.到200為終點,這是一個條件成立則繼續執行.b是象一樓說的那樣.... 請參bai考du這zhi 篇回dao答專 屬 求一道c語言題目解答 pow 函式原型是 double pow double,double n pow 1 rate,year 這句裡year 是int 型,改為double 另外輸入函式 將 f 改為 lf 這句話的意思是 你輸入的時候要用這種形式 m...求教!一道C語言題目,求教一道c語言題,求詳細過程
求高人解答一道c語言題目求高人解答一道C語言題目
c語言題目求答案解析,C語言題目,,求答案解析。