(1)定义函数charprime(intn),判断n是否素数,若是返回1,否则返回0;(2)定义函数unsignedintinput_uint()输入一个不小于2的无符号正整数,并返回该数值;若不符合,则重新输入直至输入数据合法;(3)定义函数voidget2int(unsignedn12[2]),调用(2)的函数取得两个正整数n1,n2,使得n12[1]=n1+n2、n12[0]=n1;(4)定义函数printa(unsignedprims[][2],n),可以按行打印输出二维数组的值。(5)定义主函数main(),调用前述的函数查找指定整数区间内的孪生素数对,并统计孪生素数的组数,保存到一个二维数组中primes[][2],然后输出该数组。(6)要求除主函数之外的所有函数保存在sub.c文件中,主程序(函数)保存在tprimes.c文件中
时间: 2024-02-22 09:57:26 浏览: 164
C语言函数课件
sub.c文件代码如下:
```c
#include <stdio.h>
// 判断n是否素数
int charprime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 输入一个不小于2的无符号正整数,并返回该数值,若不符合,则重新输入直至输入数据合法
unsigned int input_uint() {
unsigned int n;
do {
printf("请输入一个不小于2的正整数:");
scanf("%u", &n);
} while (n < 2);
return n;
}
// 调用input_uint()函数取得两个正整数n1,n2,使得n12[1]=n1+n2、n12[0]=n1;
void get2int(unsigned n12[2]) {
n12[0] = input_uint();
n12[1] = input_uint() + n12[0];
}
// 按行打印输出二维数组的值
void printa(unsigned primes[][2], int n) {
for (int i = 0; i < n; i++) {
printf("%u %u\n", primes[i][0], primes[i][1]);
}
}
```
tprimes.c文件代码如下:
```c
#include <stdio.h>
#include "sub.h"
#define MAX 1000000 // 指定整数区间的上限
int main() {
unsigned primes[MAX / 2][2], n = 0; // 二维数组保存孪生素数对及组数
for (unsigned i = 3; i <= MAX; i++) {
if (i % 6 != 1 && i % 6 != 5) { // 排除不可能是素数的数
continue;
}
if (charprime(i) && charprime(i + 2)) { // 判断是否是孪生素数对
primes[n][0] = i;
primes[n][1] = i + 2;
n++;
}
}
printa(primes, n);
printf("孪生素数对的组数:%u\n", n);
return 0;
}
```
阅读全文