望采纳
问题1
#include <stdio.h>
#include <stdlib.h>
void find(int all, int x, int size, int *sum, int *total) {
*sum = 0;
*total = 0;
for (int i = 0; i < size; i++) {
if (all[i] % x == 0) {
*sum += all[i];
(*total)++;
}
}
}
int main() {
int size;
printf("输入数组的大小:");
scanf("%d", &size);
int *all = malloc(size * sizeof(int));
if (all == NULL) {
printf("分配数组内存时出错\n");
return 1;
}
printf("输入数组的各个元素:");
for (int i = 0; i < size; i++) {
scanf("%d", &all[i]);
}
int x;
printf("输入一个整数,以便对数组中的元素进行除法:");
scanf("%d", &x);
int sum, total;
find(all, x, size, &sum, &total);
printf("被 %d 整除的数组元素之和为 %d,共有 %d 个\n", x, sum, total);
free(all);
return 0;
}
问题2
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void Afunc(int *p, int size) {
int zeros = 0;
for (int i = 0; i < size; i++) {
if (p[i] == 0) {
zeros++;
} else {
p[i - zeros] = p[i];
}
}
for (int i = size - zeros; i < size; i++) {
p[i] = 0;
}
qsort(p, size - zeros, sizeof(int), cmpfunc);
}
int cmpfunc(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int size = 10;
int *a = malloc(size * sizeof(int));
if (a == NULL) {
printf("分配数组内存时出错\n");
return 1;
}
a[0] = 12;
a[1] = 0;
a[2] = 31;
a[3] = 14;
a[4] = 5;
a[5] = 0;
a[6] = 0;
a[7] = 17;
a[8] = 0;
a[9] = 123;
Afunc(a, size);
printf("修改后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
free(a);
return 0;
}
问题3
#include <stdio.h>
#include <stdlib.h>
int get(int *pll, int a, int size) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (pll[mid] == a) {
return mid + 1;
} else if (pll[mid] > a) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return 0;
}
int main() {
int size = 9;
int *pll = malloc(size * sizeof(int));
if (pll == NULL) {
printf("分配数组内存时出错\n");
return 1;
}
pll[0] = -12;
pll[1] = 5;
pll[2] = 12;
pll[3] = 14;
pll[4] = 17;
pll[5] = 31;
pll[6] = 42;
pll[7] = 55;
pll[8] = 123;
int a = 55;
int result = get(pll, a, size);
if (result == 0) {
printf("数组中没有值为 %d 的整数\n", a);
} else {
printf("数组中值为 %d 的整数的位置是 %d\n", a, result);
}
free(pll);
return 0;
}