程序一:求一个数是否为素数。
#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