函数就是程序中的功能,其实就是将程序打包,取一个名字,方便后面重复使用。函数的使用提高了代码的复用性和可维护性。
/*
函数的定义:
返回值类型 函数名(形参1, 形参2……)
{
函数体;
return 返回值;
}
*/
首先先定义一个简单的不带参数、不带返回值(其返回值其实为空)的函数例子,求10和20之和:
#include<stdio.h>
// 函数的定义
void sum()
{
int num1 = 10, num2 = 20, sum = 0;
sum = num1 + num2;
printf("%d\n",sum);
}
int main()
{
// 函数的调用
sum();
return 0;
}
需要注意的是1、函数名在定义过程中不能重复,2、函数与函数之间是平级关系,不能嵌套定义,3、函数不调用就不执行,4、自定义函数写在main函数下面要在上方再次申明。这里再定义一个带参数的函数,求任意两数之和。
#include<stdio.h>
// 函数的定义
void sum(int num1,int num2)
{
int sum = num1 + num2;
printf("%d\n",sum);
}
int main()
{
// 函数的调用
sum(20, 30); //50
return 0;
}
其中int num1 和 int num2 为形式参数,20 和 30 为实际参数,形参和实参必须一一对应。函数除了参数之外,还有返回值的使用。返回值使用关键字 return ,它的作用包括结束函数和把后面的数据交给调用处。return下面不能编写代码,因为永远执行不到。如果书写 return 的后面没有跟具体的数据仅表示结束函数,还有一点要注意的时,返回值必须和函数名前返回值的类型相对应,如果没有返回值即为空,使用 void 。函数有返回值之后,函数的调用处使用变量接受返回值。求任意两数之和,并返回结果判断大小。
#include<stdio.h>
// 函数的定义
int sum(int num1,int num2)
{
int sum = num1 + num2;
return sum;
}
int main()
{
// 函数的调用
int result_1 = sum(20, 30);
int result_2 = sum(30, 40);
if(result_1 == result_2){printf("结果相等\n");}
else if(result_1 > result_2){printf("结果1较大\n");}
else{printf("结果2较大\n");}
return 0;
}
数组是一种容器,可以存储同种数据类型的多个值。数组的定义为
数据类型 数组名 [长度]
int arr [3];
数组一旦定义之后,长度不可变,并且是连续的空间。数组在定义之后,还需要进行初始化,即给数组进行赋值,其格式为:
数据类型 数组名[长度] = {数据值,数据值……}
int arr[3] = {1,2,3};
如果长度省略,数据值的个数就是数组长度。如果长度未省略,但是数据值的个数 <= 长度,空缺的位置将由默认值填充,整数用 0 填充,小数用 0.0 填充,字符用'\0'填充 (其实就是空白字符),字符串用NULL填充(就是什么都没有)。
数组里面元素的访问包括获取和修改,其操作都利用到了索引。索引是数组的一个编号,也叫角标、下标、编号,从0开始,连续+1不间断。元素的获取一般赋值给一个变量,其格式为
变量 = 数组名[索引];
int num = arr[5];
元素的修改格式为
数组名[索引] = 数据值;
arr[5] = 10;
#include<stdio.h>
int main()
{
//定义数组并初始化
int arr[5] = {1,2,3,4,5};
//获取索引为2,4的元素相加
int sum = arr[2] + arr[4];
printf("%d\n",sum);//8
//修改最后一个元素为10
arr[4] = 10;
return 0;
}
遍历是依次获取数组的每一个元素,对数组进行遍历:
#include<stdio.h>
int main()
{
//定义数组并初始化
int arr[5] = {1,2,3,4,5};
//遍历数组进行打印
for(int i = 0; i < 5; i++){printf("%d\n",arr[i]);}
return 0;
}
那么数组在内存中是怎样存在的?首先简单介绍一下内存,当软件运行时,临时存储数据的就叫内存。内存中的数据只有点击保存之后,程序到对应位置取出数据,保存到硬盘,如果不保存再次打开会消失,比如记事本。那么如何把数据保存到内存中,又怎么把内存的对应位置数据取出来?
#include<stdio.h>
int main()
{
//获取变量的内存地址
int a = 10 ;
printf("%p\n",&a); //0000 0000 0061 FE1C
return 0;
}
#include<stdio.h>
int main()
{
//获取数组的内存地址
int arr[] = {1,2,3} ;
printf("%p\n",&arr); //0000 0000 0061 FE14
printf("%p\n",&arr[0]);//0000 0000 0061 FE14
printf("%p\n",&arr[1]);//0000 0000 0061 FE18
printf("%p\n",&arr[2]);//0000 0000 0061 FE1C
int len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n",len); // 3
return 0;
}
#include<stdio.h>
void printfun(int arr[])
{
printf("%zu\n",sizeof(arr));
}
int main()
{
int arr[] = {1,2,3,4,5} ;
printf("%zu\n",sizeof(arr)); //20
printfun(arr);//8
return 0;
}
#include<stdio.h>
void printfun(int arr[])
{
printf("%p\n",arr);
}
int main()
{
int arr[] = {1,2,3,4,5} ;
printf("%p\n",&arr); //000000000061FE00
printfun(arr);//000000000061FE00
return 0;
}
最后用一张图简单地说明了两者的关系。
#include<stdio.h>
void printfun(int arr[],int len)
{
for(int i = 0; i < len; i++){printf("%d ",arr[i]);}
}
int main()
{
int arr[] = {1,2,3,4,5} ;
int len = sizeof(arr) / sizeof(arr[0]);
printfun(arr, len);//1 2 3 4 5
return 0;
}
练习1:求包括五个元素的数组的最大值
#include<stdio.h>
int main()
{
int arr[] = {25,11,15,55,9};
//max的默认值一定是数组里面的数
int max = arr[0];
int len = sizeof(arr) / sizeof(arr[0]);
//遍历数组进行比较
for(int i = 1; i < len; i++)
{max = max > arr[i] ? max : arr[i];}
printf("%d\n",max); //55
return 0;
}
练习2:生成10个1到100的随机数存入数组,求出所有数据的和
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
// 1.定义数组
int arr[10] = {0};
int len = sizeof(arr) / sizeof(arr[0]);
// 2.生成10个1~100的随机数
srand(time(NULL));
for(int i = 0; i < len; i++)
{
int num = rand() % 100 + 1;
arr[i] = num;
printf("%d\n",arr[i]);
}
// 3.累加求和
int sum = 0;
for(int i = 0; i < len; i++){sum += arr[i];}
printf("%d\n",sum);
return 0;
}
生成10个1到100的随机数存入数组,要求数据不能重复,求出所有数据的和,求出所有数据的平均数,统计有多少个数据比平均值小。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int contain(int arr[], int len, int num)
{
for(int i = 0; i < len; i++ )
{
if(num == arr[i]){return 1;}
}
return 0;
}
int main()
{
// 1.定义数组
int arr[10] = {0};
int len = sizeof(arr) / sizeof(arr[0]);
// 2.生成10个1~100的随机数,并且不相同
srand(time(NULL));
for(int i = 0; i < len; )
{
int num = rand() % 100 + 1;
int flag = contain(arr, len, num);
if (!flag)
{
arr[i] = num;
i++;
}
}
for(int i = 0; i < len; i++)
{
printf("%d\n",arr[i]);
}
// 3.累加求和
int sum = 0;
for(int i = 0; i < len; i++){sum += arr[i];}
printf("和为:%d\n",sum);
// 4.求平均数
float avg = sum / 10.0;
printf("平均数为:%.2f\n",avg);
// 5.统计比平均数少的个数
int count = 0;
for(int i = 0; i < len; i++)
{
if(arr[i] < avg){ count++; }
}
printf("比平均数少的个数为:%d\n",count);
return 0;
}
练习3:键盘录入5个数据并存入数组,要求遍历数组,反转数组,再遍历数组。
#include<stdio.h>
void printfun(int arr[], int len)
{
for(int i = 0; i < len; i++)
{
printf("%d\n", arr[i]);
}
}
int main()
{
// 1.定义数组
int arr[5] = {0};
int len = sizeof(arr) / sizeof(arr[0]);
// 2.键盘录入数据
for(int i = 0; i < len; i++)
{
printf("请输入第%d个数字", i + 1);
scanf("%d",&arr[i]);
}
printfun(arr, len);
// 3.反转数组
for(int i = 0; i < len; i++)
{
if(i < len-1-i)
{
int temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
else{break;}
}
/*
int i = 0;
int j = len - 1;
while(i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
*/
printfun(arr, len);
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务