C 程序(3)



程序一:求一個數是否爲素數。

#include <stdio.h>

 

int main(void)

{

int n,m;

printf("Please input a number:\n");

scanf("%d",&n);

m=2;

while(n>m)

{

if(n%m==0)

break;

else m+=1;

}

if(n==m)

printf("%d is a prime.\n",n);

else

printf("%d is not a prime.\n",n);

 

    return 0;

}

 

調試過程中的錯誤:

while循環語句中,if(n%m==0)寫的是if(n%2==0)結果有很多數判斷不出來。

n%2在循環過程中一直不變,但m在變,所以導致許多不是素數的奇數被判斷成素數。

 

 

程序二:輸入一個數,用十六進制顯示出來。

#include <stdio.h>

void hex(int n);

 

int main(void)

{

int number;

printf("PLease input a number(q to quit):\n");

while(scanf("%d",&number)==1)

{

printf("Hexadecimal is:");

hex(number);

    printf("H\n");

printf("Please input a number(q to quit):\n");

}

printf("Done!");

    return 0;

}

 

void hex(int n)

{

int i;

i=n%16;

if(n>=16)

hex(n/16);

printf("%d",i);

return;

}

 

 

 

程序三:判斷0-256中,其平方值爲迴文數的數。

1

#include <stdio.h>

void huiwen(int n);

 

int main(void)

{

    int n;

for(n=0;n<257;n++)

{

if(n>=0&&n<=9 || n>=31&&n<=99);

else if(n>9&&n<32 || n>99&&n<257)

huiwen(n);

}

    return 0;

}

 

void huiwen(int n)

{

int t;

int g,s,b,q,w;

if(n>9&&n<32)

{

b=n*n/100;

s=n*n%100/10;

g=n*n%10;

if(g==b)

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

}

else

{

    w=n*n/10000;

    q=n*n%10000/1000;

    b=n*n%1000/100;

    s=n*n%100/10;

    g=n*n%10;

    if(g==w && s==q)

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

}

return;

}

思考:這是在限制的範圍內輸入一個數,若不限制範圍該怎樣做?

直接判斷平方值是幾位數,再有將n*nt代替減小運行時間。

得出2

#include <stdio.h>

void huiwen1 (int n);

void huiwen2 (int n);

 

int main(void)

{

    int n,t;

for(n=0;n<257;n++)

{

 t=n*n;

 if((t>99)&&(t<=999))

huiwen2(n);

 else if(t>=10000)

huiwen1(n);

}

    return 0;

}

 

void huiwen1 (int n)

{

int w,q,b,s,g,t;

t=n*n;

w=t/10000;

q=t%10000/1000;

b=t%1000/100;

s=t%100/10;

g=t%10;

if(g==w && s==q)

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

return;

}

 

void huiwen2 (int n)

{

int b,s,g;

int t=n*n;

b=t/100;

s=t%100/10;

g=t%10;

if(g==b)

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

return;

}

編譯過程中,三位數的平方值判斷出錯。

解決:將t=n*n;寫在了for語句之前,n並沒有賦值,所以不可以進行運算,系統會賦予給亂碼。

思考:如何將程序寫的更簡潔?

得出3

#include <stdio.h>

 

int main(void)

{

int n,t;

for(n=0;n<=256;n++)

{

t=n*n;

if(t>99 && t<=999)

{

if(t/100==t%10)

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

}

else if(t>=10000)

{

if(t/10000==t%10 && t%10000/1000==t%100/10)

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

}

}

 

    return 0;

}

 

輸出結果:

11   121

22   484

26   676

101  10201

111  12321

121  14641

202  40804

212  44944

 

發佈了47 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章