C语言中为什么函数不声明也能够使用

有4个学生,每个学生有3门课程,每门课程的学分不一样。请计算每一个学生的加权平均成绩。


#include
#define N 3 //N门课程 
//float aver(int x[],int y[])为什么c语言中此处不声明也能够编译通过? 
int main()
{
    int scores[4][N]={{82,87,99},{96,98,97},{89,90,91}};
    int credit[N]={3,4,2},i;
    float aver(int *,int *),p;
    for(i=0;i<4;i++)
    {
        p=aver(scores[i],credit);
        printf("第%d个学生的加权平均成绩为:%.2f\n",i+1,p);
    }
    return 0;
}
float aver(int x[],int y[])
{
    int n,sum1=0,sum2=0;
    for(n=0;nreturn ((float)sum1/sum2); 
}

这里已经声明了,

img

main第三行 float aver(int *,int *)
这不是写了么

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/4647233
  • 这篇博客也不错, 你可以看下输入多个学生多门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。
  • 除此之外, 这篇博客: C语言--指针--返回指针值的函数中的 例题10-24 有若干个学生的成绩(每个学生有4门课),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数实现。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • //例题10-24 有若干个学生的成绩(每个学生有4门课),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数实现。 
    
    #include<stdio.h>
    int main()
    {
    	float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
    	float *search(float (*pointer)[4],int n);  //函数声明 
    	float *p;
    	int i,m;
    	printf("ente the number of student:");
    	scanf("%d",&m); //m是要查找的学生序号 
    	printf("The scores of No.%d are:\n",m);
    	p=search(score,m);
    	for(i=0;i<4;i++)
    		printf("%5.2f\t",*(p+i));// *(p+i):该学生第i门课程的成绩 
    	printf("\n");
    	return 0;
    } 
    float *search(float (*pointer)[4],int n)
    //pointer是指向包含4个元素的一维数组的指针变量 
    //pointer+1 指向socre数组序号为1的行 
    // *(pointer+1) 指向1行0列元素。加上*后,指针 行控制-->列控制 
    {
    	float *pt;
    	pt=*(pointer+n);
    	return pt;
    }
    

    输入:1
    结果如图:
    在这里插入图片描述

  • 您还可以看一下 黄菊华老师的基于微信学校新生报到小程序 毕业设计毕设源码使用教程课程中的 学校新生报到小程序-管理系统如何发布小节, 巩固相关知识点