返回:贺老师课程教学链接 项目要求
【项目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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #include<math.h> 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<stdio.h> #include<math.h> 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; }