任务和代码:
/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.10
*版本号:v2.
*
*问题描述:编制一个函数reverse,返回给定数据的“反序数”.
*问题输出:例如输入1234,输出4321。请编制reverse函数,实现要求的功能。
*/
#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){ //函数只管求值,不管输出。输出由main函数完成
int y=0;
while(x!=0){
y=y*10+x%10; //m进一位并加上余数
x/=10;
}
return y;
}
/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.10
*版本号:v2.
*
*问题描述:编制isPalindrome(),用于判断参数是否是回文数——回文数
*问题输出:如1221和121都是回文数,而1231、123都不是回文数。isPalindrome()函数的返回值是int型,是回文返回1(真),不是回文,返回0(假)
*/
#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){ //在这个函数中只管判断,不能出现printf语句!
int l;
l=reverse(n);
if(l!=n)
return 0;
}
int reverse(int x){ //函数只管求值,不管输出。输出由main函数完成
int y=0;
while(x!=0){
y=y*10+x%10; //m进一位并加上余数
x/=10;
}
return y;
}
/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.10
*版本号:v2.
*
*问题描述:编制一个返回值为int型的函数isPrimer(),用于判断参数是否为素数
*问题输出:是素数返回1-真,不是素数,返回0-假
*/
#include<stdio.h>
int isPrimer(int);
int main(){
int m;
scanf("%d",&m);
if(isPrimer(m))
printf("是素数");
else
printf("非也");
}
int isPrimer(int n){ //在这个函数中只管判断,不能出现printf语句!
int t,i;
t=sqrt(n);
for(i=2;i<=t;i++){
if(n%i==0)
return 0;
}
}
/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.10
*版本号:v2.
*
*问题描述:编制main函数,调用上面定义的3个函数
*问题输出:输出1000以内的所有素数。
输出1000以内的所有回文数。
输出1000以内的所有回文素数。
输出10000以内的所有可逆素数。
*/
#include <stdio.h>
#include <math.h>
int isPrimer(int);
int isPalindrome(int);
int reverse(int);
void printPrime();
void printPalindrome();
void printPrimeAndPalindrome();
void printReversiblePrime();
int main(){
printf("1000以内的所有素数: \n");
printPrime();
printf("\n\n");
printf("1000以内的所有回文数: \n");
printPalindrome();
printf("\n\n");
printf("1000以内的所有回文素数: \n");
printPrimeAndPalindrome();
printf("\n\n");
printf("1000以内的所有可逆素数: \n");
printReversiblePrime();
printf("\n\n");
}
int isPrimer(int n){ //判断是否为素数
int t,i;
t=sqrt(n);
for(i=2;i<=t;i++){
if(n%i==0)
return 0;
}
}
int isPalindrome(int n){ //判断是否为回文数
int l;
l=reverse(n);
if(l!=n)
return 0;
}
int reverse(int x){ //判断是否为反序数
int y=0;
while(x!=0){
y=y*10+x%10;
x/=10;
}
return y;
}
void printPrime(){ //输出1000以内的所有素数
int i,n=0;
for(i=2;i<=1000;i++){
if(isPrimer(i)){
printf("%d\t",i);
n++;
if(n%5==0)
printf("\n");
}
}
}
void printPalindrome(){ //输出1000以内的所有回文数
int i,n=0;
for(i=1;i<=1000;i++){
if(isPalindrome(i)){
printf("%d\t",i);
n++;
if(n%5==0)
printf("\n");
}
}
}
void printPrimeAndPalindrome(){ //输出1000以内的所有回文素数
int i,n=0;
for(i=2;i<=1000;i++){
if(isPrimer(i)&&isPalindrome(i)){
printf("%d\t",i);
n++;
if(n%5==0)
printf("\n");
}
}
}
void printReversiblePrime(){ //输出10000以内的所有可逆素数
int i,n=0;
for(i=2;i<=1000;i++){
if(isPrimer(i)&&isPrimer(reverse(i))){
printf("%d\t",i);
n++;
if(n%5==0)
printf("\n");
}
}
}
运行结果:
知识点总结:
有返回值和没有返回值两种函数的调用
心得:
在判断语句中,也可以使用函数表达式