1樓:網友
當輸入的數是完全平方數時,最後的結果都會是x*(x+1),原因是當m ==n時跳出while迴圈體後,在for迴圈中n會+1
修改後的是。
#include
using namespace std;
int main()
int m,n;
bool f;
m = 1;
while(m)
cin>>m;
f=true;
for(n=2;nif(m%n==0)
f=false;
break;
if(f)coutif(m%n==0)
coutelsebreak;
if(m ==n) /只需要新增這兩行。
break;
cout覺得不錯給分吧,哥們。
2樓:網友
問題主要有3點:
1. m沒有初始化就開用了 (while(m))這樣不好;
2. 1也是質數加點判斷把;
3.最重要的一點,m=m/n; 運算的時候對m 做了修改,下一次迴圈m值就變了。
在這裡定義乙個區域性變數 int temp ,temp = m,用temp來運算,下次在用m 覆蓋temp就行了。
新手求解乙個c的問題!!
3樓:網友
你原來的程式存在著3個問題:
第一:你的本意是想通過cut_word函式,來除去非字母的部分,因此你在這個函式里面建立了乙個陣列array,來存在新的字串。但是,這裡有乙個很重要的一點!
那就是這個array陣列是乙個區域性變數,因此在這個函式呼叫結束了以後,array陣列佔用的記憶體就釋放了,就相當於不存在了,所以即便你已經返回了array陣列第乙個元素的位址,但是由於這個陣列已經沒有了,所以在主函式中,new_word指標相當於接收了乙個空的字串!所以說你後面在改進了以後,卻不顯示東西,原因就在這裡,所以在保留cut_word函式的情況下,你應該把陣列array宣告為static
第二:你的cut_word函式中while函式是有問題的。首先你while的條件,(*st++)
\0')這個條件在判斷了以後,st的值就已經指向下乙個元素了,就不符合你的原意了,因此你應該在做完以後再執行st++的操作。
第三:return應該是return(array);
這是完善了的函式,也完善了一些細節,建議你再多看看字元陣列與字元指標這方面的知識。
#include
#include
#define len 20
int main (void)
char *cut_word (char *st)return (array);}
4樓:
return p的p指向的是最後乙個字母的下一位址 puts函式是輸出當前位址以後的內容。
C語言改錯題,求大神指點
include include void fun char s s j 0 字元 不是字串 不能回用雙引 答號 main 1 intfun int n 沒有抄加宣告襲,後面有return且返回值是int型的,應該聲bai明int 2 sum sqrt s sum 求的是各項之du和,應該把前面zhi...
c語言程式改錯
幫你改一下,有序陣列的折半查詢。include define n 10 int fun int a,int m return 1 main k,m printf a陣列中的資料如下 n else printf not be found n 1 fun函式應該定義為返回值為int 2 else if ...
c語言新手問題,求前輩指教,C語言新手,就是一點小疑問,求指教
for n 1 n i n 這一句執行的結果並不是2 0 2 n 1 而是2 0 2 0 2 1 2 0 2 0 2 n 1 所以並不等於2 n 1。這是我修改的 include include int main if m i 0.01 s printf d n i return 0 你修改後的 f...