鱼C论坛

 找回密码
 立即注册
查看: 838|回复: 3

[已解决]自定义函数

[复制链接]
发表于 2020-12-19 16:21:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写函数实现:自定义函数功能是:计算数组元素中所有正数的平均值,主函数从键盘输入若干个数放入数组中,结果在主函数中输出。

请问如何定义一个未知长度的数组?并且将其传入子函数中?(不使用指针)
最佳答案
2020-12-20 16:05:21
程序就不写了,思路是使用数组,将输入的整数存进去,然后以数组名和数组长度作为实参调用自定义的函数;自定义的函数也有两个参数(形参),一个是 int *P[],用于接收主函数传递过来的数组地址,一个是 int n,用于接收该数组的长度,在自定义的函数里求和或求平均值都可以,需要注意的是,求什么就 return 什么,最后在主程序里输出。

未知长度的数组,也就是变长数组,定义它非常简单,数组里的元素个数只写个变量,通过键盘输入赋给该变量确定的值(如下)。但这是C99标准,需要支持C99的编译器才能运行

  1. int n;
  2. scanf("%d",&n);
  3. int array[n];
复制代码


调用的函数,一旦调用结束了,函数里的使用的变量,求得的结果也就被释放了,若没有返回值的话,那函数所做的一切都是白劳的,我这里举一个交换的例子,如图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-19 17:05:21 | 显示全部楼层
  1. #include <stdio.h>

  2. double average(int d[])
  3. {
  4.         int i , n , r                                      ;
  5.         for(r = n = 0 , i = 1 ; i <= d[0] ; i ++) {
  6.                 if(d[i] > 0) {
  7.                         r += d[i]                          ;
  8.                         n ++                               ;
  9.                 }
  10.         }
  11.         return 1.0 * r / n                                 ;
  12. }

  13. int main(void)
  14. {
  15.         int d[2000] , i                                    ;
  16.         scanf("%d" , & d[0])                               ;
  17.         for(i = 1 ; i <= d[0] ; i ++) scanf("%d" , & d[i]) ;
  18.         printf("%.2f\n" , average(d))                      ;
  19. }
复制代码

       编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 8
  4. 1 2 3 4 5 6 7 8
  5. 4.50

  6. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-19 19:42:11 | 显示全部楼层
不在c99标准下,真的可以不用指针对数组做动态定义吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-20 16:05:21 | 显示全部楼层    本楼为最佳答案   
程序就不写了,思路是使用数组,将输入的整数存进去,然后以数组名和数组长度作为实参调用自定义的函数;自定义的函数也有两个参数(形参),一个是 int *P[],用于接收主函数传递过来的数组地址,一个是 int n,用于接收该数组的长度,在自定义的函数里求和或求平均值都可以,需要注意的是,求什么就 return 什么,最后在主程序里输出。

未知长度的数组,也就是变长数组,定义它非常简单,数组里的元素个数只写个变量,通过键盘输入赋给该变量确定的值(如下)。但这是C99标准,需要支持C99的编译器才能运行

  1. int n;
  2. scanf("%d",&n);
  3. int array[n];
复制代码


调用的函数,一旦调用结束了,函数里的使用的变量,求得的结果也就被释放了,若没有返回值的话,那函数所做的一切都是白劳的,我这里举一个交换的例子,如图
函数指针.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-7 12:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表