2、请编写函数void fun(int x,int pp[],int *n)。它的功能是:求出能整除x且不是偶数的各整数,并按从大到小的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
时间: 2023-03-16 21:44:46 浏览: 151
void fun(int x,int pp[],int *n) {
int k = 0;
for(int i = x;i > 0;i--){
if(i % x == 0 && i % 2 != 0){
pp[k] = i;
k++;
}
}
*n = k;
}
相关问题
C++题目53:利用指针求偶数因子 编写函数void fun(int x, int* pp, int* n),它的功能是:求出x的偶数因子,并按从小到大的顺序放在pp所指向的数组中,这些因子的个数通过形参n返回(假设pp指向足够大的空间)。 【输入形式】 一个整数 【输出形式】 从小到大排列的偶数因子(空格分隔)
下面是题目53的C++代码实现:
```c++
#include <iostream>
using namespace std;
void fun(int x, int* pp, int* n) {
int cnt = 0;
for (int i = 2; i <= x; i += 2) {
if (x % i == 0) {
pp[cnt++] = i;
}
}
*n = cnt;
}
int main() {
int x;
cin >> x;
int pp[100]; // 假设足够大的空间
int n;
fun(x, pp, &n);
for (int i = 0; i < n; i++) {
cout << pp[i] << " ";
}
cout << endl;
return 0;
}
```
函数`fun`的实现思路是:从2开始遍历到x,每次增加2,如果x能被当前数整除,则把该数存入数组pp中,同时计数器cnt加1。最后,把cnt的值通过指针n返回。主函数中,先输入整数x,然后调用函数fun,得到偶数因子数组pp和因子个数n,最后输出数组pp中的元素。
请编写函数void fun(int x,int pp【】,int*n),求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如:若x中的值为:35,则有4个数符合要求,它们是:1,5,7,35。
要编写这个函数 `fun`,首先我们需要遍历所有可能的除数,检查它们是否能整除 `x` 并且是奇数。我们将使用一个循环从1开始直到 `x` 的平方根,因为如果 `y` 是 `x` 的因子,那么 `x / y` 也是因子,所以不需要超过 `sqrt(x)`。
以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <math.h>
// 检查数字是否能被 x 整除且是奇数
int is_odd_divisor(int x, int num) {
if (num % 2 == 0 || num > x) {
return 0; // 如果不是奇数或者大于 x,则返回0
}
if (x % num == 0) {
return 1; // 如果能整除则返回1
}
return 0;
}
void fun(int x, int pp[], int* n) {
*n = 0; // 初始化计数器 n 为0
for (int i = 1; i <= sqrt(x); i++) { // 遍历从1到x的平方根
if (is_odd_divisor(x, i)) {
pp[(*n)++] = i; // 如果找到合适的除数,放入数组并增加计数器
}
}
// 对数组进行排序(这里假设pp已经足够大)
// 注意:sort函数未提供,实际项目中可能需要自行实现或使用库函数qsort
// sort(pp, n);
printf("能整除且不是偶数的除数为: ");
for (int i = 0; i < *n; i++) {
printf("%d ", pp[i]);
}
printf("\n");
}
int main() {
int x = 35;
int pp[100]; // 假设数组足够大
int n;
fun(x, pp, &n);
return 0;
}
```
在这个例子中,我们先检查 `is_odd_divisor` 函数,然后在 `fun` 函数中对每个可能的除数进行判断。找到后,将它们添加到 `pp` 数组并将计数器 `n` 加一。注意,为了保持简洁,这里没有包含一个完整的排序步骤,实际应用中需要添加适当的排序算法。
阅读全文