c语言数组之间的计算

将几组数据分别存入几个数组中, 怎么求这几个数组中 对应位置数据相加的平均值 并把对应位置的平均值存入一个新的数组中

int arr1[10];
int arr2[10];
int arr3[10];
float avg[10];
for (int i = 0; i < 10; i++)
avg[i] = (arr1[i]+arr2[i]+arr3[i]) / 3.0f;

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7452643
  • 这篇博客你也可以参考下:C语言中利用自定义函数来交换俩个变量的值 与 直接在主函数创建一个中间变量 这俩种方法的区别。形参与实参的联系
  • 除此之外, 这篇博客: C语言基本栈操作之字符串数字分隔与求数据的个数和最值中的 要求编写一个函数,将整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数,存储到一连续的存储空间中,最后输出整数的个数及最大数和最小数。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include <time.h>
    #include <string.h>
    #define MAXSIZE 20
    //从键盘输入一行以“,”分隔的一组整数,求数据的个数,数据的最大值,最小值,并输出。
    //要求编写一个函数,将整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数,
    //存储到一连续的存储空间中,最后输出整数的个数及最大数和最小数。
    //d = atof(op); //不是运算符,就肯定是因数了。所以,用atof函数,将字符串转换为double类型/浮点数   
    
    typedef struct node {		//定义栈结构
    	char data;		// 队列元素类型为char 
    	struct node *next;
    }Stack;
    
    char *Input(char item[MAXSIZE]);  //输入字符数字元素
    double *String_Deal(char item[MAXSIZE], Stack **str); //整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数										 
    void Init_Stack(Stack **s);//建立栈空间,初始化栈
    Stack *Push_Stack(Stack **top, char x);  //入栈
    Stack *Pop_Stack(Stack **top, char x);  //出栈
    void *Output_Stack(Stack *num);  //输出栈元素
    char *Input(char item[MAXSIZE]);  //输入字符数字元素,存放到数组
    void Prt(double figure[]);  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    
    void main()
    {
    	char arr[MAXSIZE] = {0};  //存放输入的原始字符串
    	Stack *number;   //存放分割后的字符串链表
    	double figure[MAXSIZE];  //用数组存放转换后的数字
    	Input(arr);  //输入字符数字元素
    	Init_Stack(&number);
    	String_Deal(arr, &number);
    	Output_Stack(number);//输出分隔后栈内字符元素
    	//figure[MAXSIZE] = *String_Deal(arr, &number);
    	//Prt(figure); //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    }
    
    //整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数
    double *String_Deal(char item[MAXSIZE], Stack **result)//item为输入的字符串
    {
    	char *buf = item; //声明buf saveptr两个变量,是strtok_r函数的需要。  
    	char *saveptr = NULL;
    	char *op; //分隔后的每个字符数字或字符符号 
    	Stack *p;  //p指向入栈后的数字字符
    	double ss;
    	//当strtok()在参数buf的字符串中发现参数","中包涵的分割字符时,则会将该字符改为\0 字符。
    	//在第一次调用时,strtok()必需给予参数buf字符串,往后的调用则将分割后的字符参数saveptr设置成buf。
    	//每次调用成功则返回指向被分割出片段的指针。
    		while ((op = strtok_s(buf, ",", &saveptr)) != NULL) //利用strtok_s函数分隔字符串
    	{
    		if (op != NULL)
    		{
    			Push_Stack(result, *op);//数字字符存入栈
    			buf = saveptr;
    		}
    	}
    	printf("字符分隔并进栈成功!正在将字符串链表中存储的整数串转换成整数......\n");
    	p = *result;
    	int j = 0;  //存放数字数组下标,从0开始存放数据
    	double figure[MAXSIZE];
    	while (p->next )
    	{
    		if (p->data >= '0'&&p->data <= '9')
    		{
    			ss = atof(&(p->data));//字符转为浮点数
    			figure[j] = ss;
    			j++;
    			p = p->next;
    			printf("figure[%d]=%3.6f\n", j, figure[j-1]);//输出分隔后的数字(浮点型)
    		}
    		printf("\n");
    	};
    	Prt(figure);  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    	return figure;
    }
    //建立栈空间,初始化栈
    void Init_Stack(Stack **s)//Stack *Init_Stack(Stack *s,int x)
    {
    	*s = (Stack *)malloc(sizeof(Stack));
    	(*s)->next = NULL;
    }
    
    Stack *Push_Stack(Stack **top, char x)  //入栈
    {
    	Stack *s;
    	int i = 0;
    	s = (Stack *)malloc(sizeof(Stack));
    	s->data = x; s->next = *top; *top = s;
    	return *top;
    }
    
    Stack *Pop_Stack(Stack **top, char x)  //出栈
    {
    	Stack *p;
    	if (top == NULL) return NULL;
    	else
    	{
    		x = (*top)->data ;
    		p = *top;
    		*top = (*top)->next;
    		free(p);//释放内存
    		return *top;
    	}
    }
    
    char *Input(char item[MAXSIZE])  //输入字符数字元素
    {
    	char ch;
    	int i = 0;
    	printf("从键盘输入一行以“,”分隔的一组整数,以'#'结束输入:\n");
    	ch = getchar();
    	while (ch != '#')
    	{
    		item[i] = ch;
    		i++;
    		ch = getchar();
    	}
    	return item;
    }
    void *Output_Stack(Stack *num)  //输出栈元素
    {
    	int y = 0;
    	printf("输出栈内数字元素为(最后一个为结束符):\n");
    	while (num != NULL)
    	{
    		printf("%c  ", num->data);
    		Pop_Stack(&num, y);
    	}
    	printf("\n");
    	return NULL;
    }
    void Prt(double figure[])  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    {
    	int i = 0;
    	if (figure[0] ==NULL)
    	{
    		printf("数组空!\n");
    	}
    	printf("数组存在的元素如下:\n");
    	double min = figure[0], max = figure[0];
    	while (figure[i]>=0)
    	{
    		printf("-->%3.3f ", figure[i]);
    		if (figure[i] <= min) min = figure[i];
    		if (figure[i] >= max) max = figure[i];
    		i++;
    	}
    	printf(" *******结束!\n");
    	printf("***数字个数为%3d个***\n", i);
    	printf("***最大数为:%3f***\n", max);
    	printf("***最小数为:%3f***\n", min);
    }
    
  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点

要将几组数据分别存入几个数组中,并求这几个数组中对应位置数据的平均值,然后将对应位置的平均值存入一个新的数组中,可以按照以下步骤进行:

  1. 定义并初始化几个数组,每个数组存储一组数据。
  2. 确定数组的长度(假设为length)。
  3. 定义一个新的数组,长度与之前的数组相同,用于存储对应位置的平均值。
  4. 使用一个循环,从第一个位置遍历到最后一个位置。
  5. 在每个位置,分别从每个数组中取出对应位置的数据,并累加到一个变量中。
  6. 计算平均值:将累加的值除以数组的个数(假设为count)。
  7. 将平均值存入新的数组的对应位置。
  8. 循环结束后,新的数组中存储了对应位置数据的平均值。

以下是一个示例代码,演示了将几个数组的对应位置数据求平均值并存入新的数组的过程:

#include <stdio.h>

#define LENGTH 5 // 数组的长度

int main() {
    // 定义并初始化几个数组
    int array1[] = {1, 2, 3, 4, 5};
    int array2[] = {6, 7, 8, 9, 10};
    int array3[] = {11, 12, 13, 14, 15};

    // 定义新的数组,用于存储对应位置的平均值
    int averageArray[LENGTH];

    // 计算平均值
    for (int i = 0; i < LENGTH; i++) {
        int sum = 0;
        int count = 0;

        // 计算对应位置的累加值
        sum += array1[i];
        sum += array2[i];
        sum += array3[i];

        // 计算数组的个数
        count += 3;

        // 计算平均值并存入新的数组
        averageArray[i] = sum / count;
    }

    // 输出平均值数组
    for (int i = 0; i < LENGTH; i++) {
        printf("%d ", averageArray[i]);
    }
    printf("\n");

    return 0;
}

上述示例代码中,假设有三个数组 array1array2array3,每个数组的长度都是 5。通过循环遍历对应位置的数据并求和,然后除以数组的个数得到平均值,并将平均值存入 averageArray 数组中。最后,输出 averageArray 数组的内容。