如何在main函数中调用primeFactor函数并打印其返回结构体中的两个质数
如何在main函数中打印primeFactor返回的两个质数?
你已经通过结构体primefind实现了让primeFactor()返回两个质数的功能,接下来只需要在main()里接收这个结构体返回值,然后访问它的成员变量就能打印啦,具体步骤如下:
步骤1:修改main函数,添加测试与打印逻辑
把你的空main()函数改成这样,我添加了测试数值(比如选15,它是3和5的乘积),并完成打印逻辑:
int main() { // 定义一个测试用的数值,你可以换成其他两个质数的乘积,比如21=3*7 long int n = 15; // 用primefind类型的变量接收primeFactor的返回结果 primefind result = primeFactor(n); // 打印两个质数,注意用%ld格式符匹配long int类型 printf("分解得到的两个质数分别是:%ld 和 %ld\n", result.prime1, result.prime2); return 0; }
步骤2:关键注意事项
- 必须使用
%ld作为格式符,因为结构体里的成员是long int类型,用%d会导致输出错误; - 确保传入
primeFactor()的n确实是两个质数的乘积,否则原代码里的q可能因未初始化输出随机值。你可以在primeFactor()里给prime2加个默认初始化,比如tuple1.prime2 = 0;,这样没找到时能快速识别。
完整可运行代码示例
整合所有代码并优化后的版本如下:
#include <stdio.h> #include<stdbool.h> struct tuple { long int prime1,prime2; }; typedef struct tuple primefind; bool isPrime(int n) { if (n <= 1) return false; for (int i=2; i<n; i++) if (n%i == 0) return false; return true; } long int nextPrime(long int n) { if (n <= 1) return 2; long int prime = n; bool found = false; while (!found) { prime++; if (isPrime(prime)) found = true; } return prime; } primefind primeFactor(long int n) { primefind tuple1; // 初始化prime2为0,避免未找到时输出随机值 tuple1.prime2 = 0; long int p, q; p = 2; while (p <= (n / p)) { if (n % p == 0) { q = n / p; tuple1.prime2 = q; break; } p = nextPrime(p); } tuple1.prime1 = p; return tuple1; } int main() { long int n = 21; // 替换成你想测试的数值 primefind result = primeFactor(n); if (result.prime2 != 0) { printf("分解得到的两个质数分别是:%ld 和 %ld\n", result.prime1, result.prime2); } else { printf("该数值无法分解为两个质数的乘积\n"); } return 0; }
运行这段代码后,就能看到你想要的两个质数输出啦~
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

