写一个C语言函数,形参是一个一维整型数组和数组的长度,将每一个元素像后面对比,如果相同,则将两个元素中靠右的元素的右边一个元素向左赋值,长度也减一。然后输出长度。
时间: 2024-03-07 21:49:51 浏览: 53
好的,下面是一个满足要求的C语言函数:
```c
int removeDuplicate(int arr[], int len) {
int i, j;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
int k;
for (k = j + 1; k < len; k++) {
arr[k - 1] = arr[k];
}
len--;
j--;
}
}
}
printf("长度为:%d\n", len);
return len;
}
```
这个函数接受一个一维整型数组和数组的长度作为参数。它使用两个循环来比较数组中的每个元素,并在发现重复元素时将靠右的元素向左移动,然后将数组的长度减一。最后,它将长度输出并返回。
相关问题
写一个C语言函数,形参是一个一维整型数组和数组的长度,功能是返回该数组中不同元素的个数。
可以使用一个哈希表来实现,遍历数组,将每个元素作为哈希表的键,值设为1,表示该元素出现过。最后统计哈希表中值为1的个数即可。
以下是实现代码:
```c
int countDistinct(int arr[], int n) {
int count = 0;
int hash[10000] = {0}; // 哈希表,初始值为0
for (int i = 0; i < n; i++) {
if (hash[arr[i]] == 0) { // 如果该元素还未出现过
count++; // 不同元素个数加1
hash[arr[i]] = 1; // 标记该元素出现过
}
}
return count;
}
```
其中,哈希表的大小可以根据实际情况调整。这里假设元素的取值范围在10000以内。
c语言一维实型数组 编写函数计算一维实型数组前n个元素的最大值、最小值和平均值。数组、n、最大值、最小值和平均值均作为函数形参,函数无返回值:在主函数中输入数据,调用函数得到结果。(要求用指针方法实现)
好的,下面是代码实现:
```c
#include <stdio.h>
void calculate(float arr[], int n, float *max, float *min, float *avg){
*max = *min = *avg = arr[0];
for(int i=1; i<n; i++){
if(arr[i] > *max){
*max = arr[i];
}
if(arr[i] < *min){
*min = arr[i];
}
*avg += arr[i];
}
*avg /= n;
}
int main(){
float arr[100], max, min, avg;
int n;
printf("请输入数组长度n:");
scanf("%d", &n);
printf("请输入%d个实数:", n);
for(int i=0; i<n; i++){
scanf("%f", &arr[i]);
}
calculate(arr, n, &max, &min, &avg);
printf("最大值为:%f\n", max);
printf("最小值为:%f\n", min);
printf("平均值为:%f\n", avg);
return 0;
}
```
在这个程序中,我们定义了一个名为 `calculate` 的函数,它接受一个一维实型数组,数组长度,以及三个指向 float 类型变量的指针。这个函数通过指针修改了最大值、最小值和平均值的值,而没有使用返回值。在计算最大值和最小值时,我们使用了 if 语句来进行判断;在计算平均值时,我们使用了累加器的方式,最后再除以 n 得到平均值。
在主函数中,我们首先读取了数组长度和数组中的数据,然后调用 `calculate` 函数来计算最大值、最小值和平均值。最后,我们使用 printf 函数打印出这三个值。
需要注意的是,在调用 `calculate` 函数时,我们传递了三个指针作为参数,这些指针分别指向了定义在主函数中的三个变量。因为这些变量的地址会传递给 `calculate` 函数,所以在函数内部就可以通过指针来修改这些变量的值,而这些修改也会反映到主函数中的变量上。
阅读全文