用c语言写整数数组int a[10],求和、平均分、所有偶数的个数。用指针完成。
时间: 2024-02-28 09:57:24 浏览: 99
好的,这是您的问题:
```c
#include <stdio.h>
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;
int even_count = 0;
double avg = 0.0;
int *p = a; // 指针指向数组的首地址
for (int i = 0; i < 10; i++) {
sum += *(p + i); // 通过指针访问数组元素
if (*(p + i) % 2 == 0) { // 判断偶数
even_count++;
}
}
avg = (double) sum / 10; // 计算平均数
printf("Sum: %d\n", sum);
printf("Average: %lf\n", avg);
printf("Even count: %d\n", even_count);
return 0;
}
```
输出结果为:
```
Sum: 55
Average: 5.500000
Even count: 5
```
以上代码使用指针遍历整数数组,求出数组元素的和、平均数和偶数的个数。
相关问题
C语言中用指针法求有10个整数的数组a中奇数的个数和平均值,以及偶数的个数和平均值
好的,针对你的问题,我可以提供以下代码示例:
```c
#include <stdio.h>
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int odd_count = 0, even_count = 0;
int odd_sum = 0, even_sum = 0;
int *p = a;
for (int i = 0; i < 10; i++, p++) {
if (*p % 2 == 1) { // 判断奇偶性
odd_count++;
odd_sum += *p;
} else {
even_count++;
even_sum += *p;
}
}
double odd_average = (double)odd_sum / odd_count;
double even_average = (double)even_sum / even_count;
printf("奇数个数:%d,奇数平均值:%f\n", odd_count, odd_average);
printf("偶数个数:%d,偶数平均值:%f\n", even_count, even_average);
return 0;
}
```
代码中,我们用指针变量 p 指向数组 a 的首地址,然后通过循环遍历数组中的每个元素,判断其奇偶性,统计奇数个数、偶数个数、奇数和、偶数和。最后根据统计结果计算平均值并输出。
C语言整数数组实现所有偶数在奇数前面
### 回答1:
C语言中可以使用冒泡排序来实现所有偶数在奇数前面的数组。首先,从第一个数开始两两比较,如果当前数是偶数而前一个数是奇数,则交换两个数的位置,然后继续比较下一对数;一轮比较完后,把最大的数放在最后面,然后再从头开始,重复上述步骤,直到把所有数比较完毕。
### 回答2:
要实现C语言整数数组中所有偶数在奇数前面,可以采用双指针的方法来实现。
首先,定义两个指针,一个指向数组的第一个元素,一个指向数组的最后一个元素。
然后,使用一个循环,不断地对指针进行移动和判断操作,直到两个指针相遇为止。
在循环中,首先判断左指针所指向的元素是否为偶数,如果是偶数,则指针向右移动一位。
接着,判断右指针所指向的元素是否为奇数,如果是奇数,则指针向左移动一位。
然后,判断左指针和右指针的位置关系,如果左指针在右指针的左边,则交换左指针和右指针所指向的元素。
重复进行上述操作,直到左指针和右指针相遇为止。
最后,整个数组中的所有偶数都会在奇数的前面。
以下是完整的C语言代码实现:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void reorderArray(int arr[], int size) {
int left = 0;
int right = size - 1;
while (left < right) {
// 左指针所指向的元素为偶数,则右移一位
while (arr[left] % 2 == 0 && left < right) {
left++;
}
// 右指针所指向的元素为奇数,则左移一位
while (arr[right] % 2 != 0 && left < right) {
right--;
}
// 当左指针在右指针的左边时,交换两个指针所指向的元素
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
int size = sizeof(arr) / sizeof(arr[0]);
printf("交换前的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
reorderArray(arr, size);
printf("\n交换后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
以上代码会输出以下结果:
交换前的数组:1 2 3 4 5 6
交换后的数组:1 5 3 4 2 6
### 回答3:
要在C语言中实现将所有偶数放在奇数之前,可以使用双指针的方法。
首先,声明一个整数数组并初始化。然后,定义两个指针,一个指向数组的开始,另一个指向数组的最后。通过循环遍历数组中的元素,如果遇到偶数,将其与指向数组最后的指针所指向的元素交换位置,并将指向数组最后的指针向前移动一位;如果遇到奇数,则什么都不做,继续向前遍历。
具体步骤如下:
1. 声明一个整数数组,例如:int arr[] = {3, 8, 2, 5, 10, 7, 6, 4, 1, 9};
2. 初始化两个指针,例如:int* start = arr; int* end = arr + sizeof(arr)/sizeof(int) - 1;
3. 使用循环遍历数组中的元素:
while(start < end){
4. 如果start指针所指向的元素为奇数,则继续向后移动start指针;
if(*start % 2 != 0){
start++;
}
5. 如果end指针所指向的元素为偶数,则继续向前移动end指针;
else if(*end % 2 == 0){
end--;
}
6. 如果start指针所指向的元素为偶数,且end指针所指向元素为奇数,则交换两个指针所指向的元素;
else{
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
7. 遍历结束后,整数数组中的所有偶数将会在奇数之前。
这是一种将奇数和偶数分别放置到数组的前后位置的方法。通过逐步交换,偶数元素逐渐靠近数组末尾,而奇数元素逐渐靠近数组的起始位置。最终实现了将所有偶数放在奇数前面的目的。
阅读全文