问题:从键盘输入n(n<=100)数,求这些数的平均值,并找出其中最大值和最小值,(12345分别怎么填)


#include <stdio.h>
int main()
{
    float minmax(float a[], int n, float *p, float *q);
    float arr[100],max,min,average;
    int n,i;
    scanf("%d",&n);
    for (i=0;i<n;i++)
        scanf("%f",&arr[i]);
    average=minmax(①);
    printf("average=%.2f, max=%.2f, min=%.2f\n", average, max, min);
    return 0;
}
float minmax(float a[],int n,float *p,float *q)
{
    float sum=0,*pi=a;
    *p=a[0]; 
    *q=a[0];
    while(②)
    {
    sum+=*pi;
    if(*p<*pi)
     ③
    else if(*q>*pi)
       ④
    pi++;
    }
    return ⑤;
}

程序已经修改,请见下图源码:

#include <stdio.h>
int main()
{
    float minmax(float a[], int n, float *p, float *q);
    float arr[100],max,min,average;
    int n,i;
    scanf("%d",&n);
    for (i=0;i<n;i++)
        scanf("%f",&arr[i]);
    average=minmax(arr,n,&max,&min);
    printf("average=%.2f, max=%.2f, min=%.2f\n", average, max, min);
    return 0;
}
float minmax(float a[],int n,float *p,float *q)
{
    float sum=0,*pi=a;
    *p=a[0]; 
    *q=a[0];
    while(*pi!=null)
    {
    sum+=*pi;
    if(*p<*pi)
     *p=*pi;
    else if(*q>*pi)
       *q=*pi;
    pi++;
    }
    return sum/n;
}

  • 你看下这篇博客吧, 应该有用👉 :输入n(n「=50)个职工的工资(单位为元,一元以下部分舍去),计算工资总额,计算给职工发放工资时,所需各种面额人民币的最小张数
  • 除此之外, 这篇博客: 用C语言设计程序,输入一个整数N(N<100),打印N*N的环形矩阵。中的 用C语言设计程序,输入一个整数N(N<100),打印N*N的环形矩阵。例如: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • N=3,则打印:

    1 2 3
    8 9 4
    7 6 5
    又如,N=4,则打印:
    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7

    放个图吧!
    在这里插入图片描述

    话不多数,直接上代码
    我尽可能的写上注释,如果有不理解的,欢迎留言。

    #include<stdio.h>
    main()//函数入口,主函数
    {
    	int i,j,k,l;//循环标注位
    	int a=1;
    	int n;
    	int arry[100][100];//用于存放数组
    	scanf("%d",&n);//接收输入的N,用于确定需要打印多少阶的矩阵
    	i=j=k=l=0;//统一初始化一下,避免出错
    	l=n;//先用 l 接收N的数值用于最后的输出
    		//因为接下来的操作会修改源N的值
    
    	while(1){//每完成一圈,循环一次,循环条件为一直循环,
    		for(j=k;j<n;j++){//按要求填充第一行的矩阵,行号 i 不变,列号j自加;
    			arry[i][j]=a;
    			a++;
    		}
    		j--;//上一个循环会多加一次,这里减去
    		a--;
    		for(i=k;i<n;i++){//按要求填充最右边的一列。
    			arry[i][j]=a;
    			a++;
    		}
    		i--;
    		a--;
    		for(j=n-1;j>k;j--){//按要求填充最下面的一行
    			arry[i][j]=a;
    			a++;
    		}
    		for(i=n-1;i>k;i--){//按要求填充最左边的一列
    			arry[i][j]=a;
    			a++;
    		}
    		i++;
    		if(arry[i+1][j]==(n*n)) break;//跳出条件,如果已经填充了所有位置,则跳出
    		//到此完成一轮循环
    		n--;//然后右边界减一
    		k++;//左边界也减一
    	}
    	
    	for(i=0;i<l;i++){//这里就是填充完成以后,打印填充过得区域
    		for(j=0;j<l;j++){
    			printf("%d	",arry[i][j]);
    		}
    		printf("\n");//换行
    	}	
    } 
    

    第一次写,完全是自己的思路,可能不是很详细。如果有需要记得留言,我会考虑再做一个详细的讲解。
    点个关注吧 亲 !点个赞也行啊。

  • 以下回答由chatgpt基于相关博客总结生成:

    问题一:

    实现过程如下:

    1.首先说明一下,输入n个数字,需要使用for循环,每次循环中使用scanf()输入一个数字即可; 2.输入完毕后,分别计算这些数字的平均值、最大值、最小值,这可以通过一次for循环实现,循环中通过if语句和变量记录计算即可; 3.最后输出平均值、最大值、最小值,注意格式的设置。

    代码如下:

    #include <stdio.h>
    
    int main() {
        int n, i;
        double avg = 0, max, min, sum = 0;
        printf("请输入n个数字:\n");
        scanf("%d", &n);
        scanf("%lf", &max);  // 输入第一个数,初始化max和min
        scanf("%lf", &min);
        sum = max + min;
        for (i = 3; i <= n; i++) {
            double num;
            scanf("%lf", &num);
            if (num > max) {
                max = num;
            }
            if (num < min) {
                min = num;
            }
            sum += num;
        }
        avg = sum / n;  // 计算平均值
        printf("平均值为:%.2lf\n最大值为:%.2lf\n最小值为:%.2lf\n", avg, max, min);  // 输出结果
        return 0;
    }
    

    当输入数字1,2,3,4,5时,输出平均值为3.00,最大值为5.00,最小值为1.00。

    问题二:

    实现过程如下:

    1.输入圈子人的数量,使用数组给这些人编号; 2.用指针指向编号数组的头部,利用while循环进行循环操作,当仅剩下一个人的时候结束; 3.在循环中,使用if语句计数和对头上编号为0的人进行操作,报数每次加1,报数到3的人头上编号改为0,标记退出,并统计退出的人数,退出人数等于总人数减1时结束; 4.最后循环结束后,输出剩下的一个人的编号。

    代码如下:

    #include <stdio.h>
    
    void main() {
        int num[50], n, *p, j, loop, i, m, k;
        printf("请输入这一圈人的数量:\n");
        scanf("%d", &n);
        p = num;
        // 开始给这些人编号
        for (j = 0; j < n; j++) {
            *(p + j) = j + 1;
        }
        i = 0;  // i用于计数,即让指针后移
        m = 0;  // m记录退出圈子的人数
        k = 0;  // k报数1,2,3
        while (m < n - 1)  // 当退出的人数不大于总人数时,即留下的人数至少是一个人
            //这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
            //这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
        {
            if (*(p + i) != 0)  //如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
            {
                k++;
            }
            if (k == 3) {
                k = 0;       // 报数清零,即下一个人从1开始报数
                *(p + i) = 0;  //将报数为3的人编号重置为0
                m++;         //退出人数加1
            }
            i++;  //指针后移
            if (i == n)  //这句很关键,如果到了队尾,就要使指针重新指向对头
                //并且它只能放在i++后面,因为只有i++了才有可能i==n
            {
                i = 0;
            }
        }
        printf("现在剩下的人是:");
        for (loop = 0; loop < n; loop++) {
            if (num[loop] != 0) {
                printf("%2d号\n", num[loop]);
            }
        }
    }
    

    参考资料:

    1. CSDN:算法笔记 之 鱼丸的代码板子集锦;

    2. CSDN:二轮笔试和一轮技术面试心得(19年年底);

    3. 百度文库:预约-OI题解集合.