程序一:求一個數是否爲素數。
#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*n用t代替減小運行時間。
得出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