今天分享一个典型的多函数嵌套的c语言程序!
使用visual stdio c++ 2019。
首先,使用模块化的设计能让程序更加容易理解与维修。如
int isprime(unsigned n); //返回0表示非素数
unsigned revers(unsigned n);
此两个自定义函数可以放在另外一个源文件,也可以放在同一个源文件。但设置两个源文件的时候注意两个源文件都要写入你所需要的头文件。放在同一个源文件的时候注意在需要用上此函数的函数加声明。
#include<stdio.h>
#include<math.h>
int main()
{
int isprime(unsigned n);
unsigned revers(unsigned n);
unsigned a, b;
unsigned i;
int c=0;
printf("请输入查找范围最小数:");
scanf_s("%d", &a);
printf("请输入查找范围最大数:");
scanf_s("%d", &b);
for (i = a; i <= b; i++) {
if (isprime(i) && revers(i)) {
printf("存在特殊素数:%d\n", i);
c++;
}
else {};
}
if (c == 0) printf("此范围无特殊素数!");
return 0;
}
此时应对int和unsigned变量细心关注,
int isprime(unsigned n);此函数主要用于此数是否为素数的甄别。
int isprime(unsigned n)
{
int k,j;
k = sqrt(n);
for (j = 2; j <= k; j++)
if (n % j == 0)break;
if (j >= k + 1)
return(n);
else return 0;
}
相关算法可以参阅谭浩强主编的c程序设计(第四版)。
如果此数不是素数,则isprime(i) && revers(i)的值直接为0,跳过此次循环,i=i+1。
unsigned revers(unsigned n);此函数用于反序数的生成以及生成的素数的甄别。
unsigned revers(unsigned n)
{
int isprime(unsigned n);
int d = 0;
int e = 0;
int f = n;
unsigned len = 0;
if (isprime(n) == 0)return 0;
else {
while (n >= 10) {
n = n / 10;
len++;
}
for (unsigned i = 0; i <= len; i++) {
d = d * pow(10, len + 1 - i);
f -= d;
d = (int)(f / pow(10, len - i));
e += (d * pow(10, i));
}
if (isprime(e) != 0)return(e);
else return 0;
}
}
相关做法不一。这里大家可以随意对算法进行个性创作。
最后,对此程序进行测试。这里以100~500为例。
得出结果为:
存在特殊素数:101
存在特殊素数:107
存在特殊素数:113
存在特殊素数:131
存在特殊素数:149
存在特殊素数:151
存在特殊素数:157
存在特殊素数:167
存在特殊素数:179
存在特殊素数:181
存在特殊素数:191
存在特殊素数:199
存在特殊素数:311
存在特殊素数:313
存在特殊素数:337
存在特殊素数:347
存在特殊素数:353
存在特殊素数:359
存在特殊素数:373
存在特殊素数:383
存在特殊素数:389
若有技术问题,欢迎各位的建议与指正!