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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章