返回:贺老师课程教学链接 项目要求
【项目6-回文、素数】
(1)编制一个函数reverse,返回给定数据的“反序数”,例如输入1234,输出4321。请编制reverse函数,在下面代码的基础上补充相关的部分,实现要求的功能。
int main()
{
int m,n;
scanf("%d", &m);
n=reverse(m);
printf("%d\n", n);
return 0;
}
int reverse(int x) //函数只管求值,不管输出。输出由main函数完成
{ }
算法提示:流程图及其示例见图。
#include
int reverse(int);//自定义函数的原型(即函数声明)
int main()
{
int m,n;
scanf("%d", &m);
n=reverse(m);
printf("%d\n", n);
return 0;
}
int reverse(int x)
{
int m=0;
while(x>0)
{
m=m*10+x%10;
x=x/10;
}
return m;
}
int main()
{
int m;
scanf("%d", &m);
if(isPalindrome(m))
printf("%d是回文数,噢耶!\n", m);
else
printf("%d不是回文数。回文有什么好!\n", m);
return 0;
}
int isPalindrome(int n) //在这个函数中只管判断,不能出现printf语句!
{ }
[参考解答]
解法1:
#include
int isPalindrome(int);//自定义函数的原型(即函数声明)
int main()
{
int m;
scanf("%d", &m);
if(isPalindrome(m))
printf("%d是回文数,噢耶!\n", m);
else
printf("%d不是回文数。回文有什么好!\n", m);
return 0;
}
int isPalindrome(int n)
{
int palindrome=0; //为0代表假,默认不是回文数
int m,k;
m=n;
k=0;//k用于求出n的反序数
while(m>0)
{
k=k*10+m%10;
m=m/10;
}
if(k==n)
palindrome=1; //是回文,修改为1
return palindrome;
}
#include
int isPalindrome(int);//自定义函数的原型(即函数声明)
int reverse(int);
int main()
{
int m;
scanf("%d", &m);
if(isPalindrome(m))
printf("%d是回文数,噢耶!\n", m);
else
printf("%d不是回文数。回文有什么好!\n", m);
return 0;
}
int isPalindrome(int n)
{
int palindrome=0; //为0代表假,默认不是回文数
if(reverse(n)==n)
palindrome=1; //是回文,修改为1
return palindrome;
}
int reverse(int x)
{
int m=0;
while(x>0)
{
m=m*10+x%10;
x=x/10;
}
return m;
}
int main()
{
//此处写代码,能够调用isPrimer函数完成“测试”
}
int isPrimer(int n) //在这个函数中只管判断,不能出现printf语句!
{
}
[参考解答]
#include
#include
int isPrime(int);
int main()
{
int m;
scanf("%d", &m);
if(isPrime(m))
printf("%d是素数。\n", m);
else
printf("%d不是素数。\n", m);
return 0;
}
int isPrime(int n)
{
int prime=1;
int k=(int)(sqrt(n));
int i;
for(i=2; i<=k; i++)
{
if(n%i==0)
{
prime=0;
break;
}
}
return prime;
}
#include
#include
int isPalindrome(int);
int reverse(int);
int isPrime(int);
int main()
{
int m;
printf("(1)输出1000以内的所有素数\n");
for(m=2;m<1000;++m)
{
if(isPrime(m))
printf("%d\t", m);
}
printf("\n\n");
printf("(2)输出1000以内的所有回文数\n");
for(m=2;m<1000;++m)
{
if(isPalindrome(m))
printf("%d\t", m);
}
printf("\n\n");
printf("(3)输出1000以内的所有回文素数\n");
for(m=2;m<1000;++m)
{
if(isPalindrome(m)&&isPrime(m))
printf("%d\t", m);
}
printf("\n\n");
printf("(4)求1000以内的所有可逆素数\n");
for(m=2;m<1000;++m)
{
if(isPrime(m)&&isPrime(reverse(m)))
printf("%d\t", m);
}
printf("\n\n");
return 0;
}
int isPalindrome(int n)
{
int palindrome=0; //为0代表假,默认不是回文数
if(reverse(n)==n)
palindrome=1; //是回文,修改为1
return palindrome;
}
int reverse(int x)
{
int m=0;
while(x>0)
{
m=m*10+x%10;
x=x/10;
}
return m;
}
int isPrime(int n)
{
int prime=1;
int k=(int)(sqrt(n));
int i;
for(i=2; i<=k; i++)
{
if(n%i==0)
{
prime=0;
break;
}
}
return prime;
}