c語言 幫我看一下這個程式為什麼結果總是輸出

2022-01-27 15:56:10 字數 4249 閱讀 4288

1樓:匿名使用者

你term沒初值,c語言預設是0,也就是說,你的term=term*2,始終得到的term還是0;

sum也是0,因此結果始終是0;

你在long sum=0語句前面加上一句 term=1;結果就對了;

2樓:

因為 return 0;所以就、、、

3樓:班丘曉桐

我不認為上面輸出結果為0

4樓:

你要求的是2^1+2^2+2^3+。。。+2^16。前面2的幾次方的時候值比較小,int型別的term還能裝的下;後面的數越來越大,不僅超出了int型別的term最大長度,還超出了long型別的sum的最大長度。

因此輸出的是無符號long型別的最小值0。

解決辦法是:把term和sum設為double型別,後面用浮點型別格式(長度滿足要求)輸出(「%f",sum)。

5樓:匿名使用者

資料溢位後隱式轉換導致輸出是0,不同編譯器對資料型別的長度定義不一樣,你可以用sizeof(int)看一下你的編譯器給的int是幾個位元組。

6樓:尼瑪x站崗

不會吧,你用的什麼編譯器?我的在vs2008上,執行就是對的啊。

誰幫我看一下這個c語言程式輸出結果為什麼是1,2,0?

7樓:

首先理解啊while(a0,所以不執行迴圈體。

最後輸出即為你執行得到的結果。

8樓:

a>b>c表示是錯的 應表示為a>b&&b>c

請幫忙解釋一下下面的程式為什麼結果輸出是0,0,關於c語言的

9樓:匿名使用者

看你的**排版看到頭暈。p[1].m->n 的m為第三個元素,n未初始化,全域性變數預設為0。,p[2].m->n的m為第乙個元素,n在迴圈中被賦值為0。

眼睛有點痛

c語言初學者 以下這個程式 為什麼我無論賦值多少給a,b 結果輸出x總為0?

10樓:德克and德華

你需要注意,你正在copy進行bai的是整數除法,只要被除數比除數小,du結果就zhi會是0。例如1/2,結果是0。dao

試試改成這樣x=(-2*a+1.0*(4*a-b)/(2*a+b))/(a-4*b)*(a+b);

x定義成float,不要定義成int

11樓:求專家解惑

你將來x定義成 int型變數,就意味著x只能是自整數了,比如 3除以5,,本來等於0.6,但由於是int,結果會顯示0。3除以2,又會得到1。

就是將實際的結果的小數部分去掉了。所以你需將x 定義成float型或者double型,還有一點就是你要將printf("x=%d",x)改為printf("x=%f",x),其中d表示輸出int型,f表示輸出float型或double型。這樣就行了。望採納

12樓:予所否者

int型別的除法 相當於截尾 沒有小數點以後的 分數小於分母就會為0

13樓:月光下的狼

你輸入a=2,b=0,你看他輸出還是0?

c語言,下面程式,執行時輸入的第乙個數輸出總是0,為什麼?(具體問題執行後可見到,我描述不清)

14樓:匿名使用者

第乙個數輸出總是0? 輸入1 2 3 4 5 6就輸出的4.

15樓:

在 a=data[i][0] 定點看看 i的值多少 我沒有編譯環境

c語言,下面的程式結果為啥是0

16樓:

恭喜你,你發現了乙個非常重要的系統漏洞形式。有很多對系統的破解都是基於此原理,下面我此進行一下解釋。

首先先大概指明錯誤: char buf[4]; 是分配了4個位元組的儲存空間, strcpy(buf, "aaaa"); 是向buf寫入5個位元組的資料,因為別忘了字串最後總隱藏著乙個字串結束符'\0',也就是說,strcpy向buf寫入的資料超過了它自身的大小,於是資料寫入過程就出現了越界,這樣就會造成其它變數的資料被破壞(當然也可能是系統資料被破壞)。在這個例子裡,對buf的越界寫入後,恰好破壞了i的值,因此最後i的值變成了0。

這段程式需要正確執行,需要這樣定義: char buf[5];   //buf必須是5個位元組或者超過5個位元組。

好了,下面再詳細解釋一下整個過程:

(1) 首先,需要指出,區域性變數的記憶體分配是在棧中分配的,而棧的分配是從記憶體的高位址向低位址分配。

記憶體位址      變數        值

0x1000        buf[0]

0x1001        buf[1]

0x1002        buf[2]

0x1003        buf[4]

0x1004        i(低8位)     0x01

0x1005        i(高8位)     0x00

(3) 執行strcpy函式後:

記憶體位址      變數        值

0x1000        buf[0]      'a'

0x1001        buf[1]      'a'

0x1002        buf[2]      'a'

0x1003        buf[4]      'a'

0x1004        i(低8位)    0x00  (因為"aaaa"最後還要寫乙個字串結束符'0')

0x1005        i(高8位)    0x00

看到沒,最後那個字串結束符正好把變數i低8位的內容給破壞了。因此最後輸出i的值是0。

這個錯誤就是典型的「緩衝區溢位漏洞」。你知道蘋果手機為什麼能越獄麼?很多時候就是利用了類似這樣的處理漏洞!

17樓:醉俊傑

你的buf大小只有4,而「aaaa」是五個位元組,也就是說存在記憶體錯誤,看起來,多出的那個'\0'存到了i裡;

改正很簡單,buf[5]再試試。

c語言:哪位大神幫我看下為什麼這個程式 輸入資料後按回車 就崩潰(輸入:3+4=9,理應輸出:0)

18樓:聽不清啊

已經修改好了:

#include //此程式判斷輸入的200以內加減表示式,輸出正確式子的個數

#include

#include

int main()

char a[1000]= ;

int length,i,j,k,n,g,m,b,c;

int num1,num2,num3;

int res1,res2,res3;

b=0;

while(gets(a))  //存入陣列

length=strlen(a);

for(i=0; a[i]!='+' && a[i]!='-'; i++) //此時a[i]=='+'或'-'

for(j=i+2; a[j]!='='; j++) //a[j]=='='

//找到符號的位置

n=1;

num1=0;

for(k=i-1; k>=0; k--)

res1=a[k]-48;

num1=res1*n+num1;

n*=10;//轉換num1為乙個數,注意字元直接用乘法

n=1;

num2=0;

for(g=j-1; g>i; g--)

res2=a[g]-48;

num2+=res2*n;

n*=10;//轉換num2為乙個數

if(a[j+1]!='?')

n=1;

num3=0;

for(m=length-1; m>j; m--)

res3=a[m]-48;

num3+=res3*n;

n*=10;//轉換num3為乙個數

if(a[i]=='+' && ((num1+num2)==num3))

b++;

if(a[i]=='-' && ((num1-num2)==num3))

b++;

for(c=1; a[c]; c++)

a[c]=0;

printf("%d\n",b);

return 0;

幫忙看一下這個c 程序,幫忙看一下這個c 程式

include class complex void display private double real,imag complex complex complex complex double r void complex int main ok大功告成 好累 幫你指正一下吧,你在把2.5和c1...

哪位大佬能幫我看一下這個C語言哪錯了

把fp fopen stuinfo.dat rb 改為fp fopen studinfo.dat rb 或把fp fopen studinfo.dat wb 改為fp fopen stuinfo.dat wb 這是主要問題 在後加一句fclose fp 這提倡的完善寫法。為檢測讀出到底是否正確,應該...

C語言 幫看一下程式哪裡有問題啊。

主函式中沒有為p分配空間。修改方法有二 其一 用malloc函式為其分配空間。其二 此題目無需將p定義為指標變數 直接用struct date型別即可。第一種方法 首先包含標頭檔案,然後將主函式改為如下形式 main free p 將主函式修改為如下形式 main main struct date ...