学C第7天(函数,数组)
1.函数的概念:抽象某个独立的功能,使之成为程序的一个独立实体。从而可以重复使用。
2.函数的定义
返回值类型 函数名(参数列表)
{
函数体;
}
3.函数说明
1).函数在定义时,未注明函数的返回值类型时,默认为int。函数没有返回值时,使用void
2).函数名必须符合表示符的命名规则
3).函数的定义在程序中都是平行的,不允许在函数内部在定义一个函数
4).即使是无参函数,函数名后的括号也不能省
4.函数的形式参数和实际参数
形式参数:函数定义时列表中的参数就是形参,用来接收调用该函数时传递的参数,在函数被调用之前,编译器不会为形参开辟空间,当函数执行结束时,创建的形参被销毁
实际参数:函数调用时传递的参数就是实参
说明:
1).实参向形参传递数据是单向值传递,调用函数通过参数传递传给被调函数,被调函数通过return,将值返回给调用函数
2).实参和形参在内存中被分配到不同的内存单元,函数调用时,将实参的值传给形参,改变形参的值不会影响实参原来的值
3).实参和形参的顺序应该保持一致并且个数相等。
4).实参和形参的数据类型应该保持一致,否则会出现强制类型转换。
5.函数的返回值
1).return语句,可以使函数向调用处返回一个值。
2).return可以立即从当前函数中退出,返回到调用的函数中,同时返回一个值给调用函数。
3).return后的表达式应与函数的返回值类型一致,不一致会以函数的返回值类型为主
6.函数的调用
1).函数以表达式语句的形式出现
2).函数出现在表达式中
3).函数作为其他函数的实参
7.函数声明
1). 函数名(参数列表);其中参数列表的形参名可以省略
2).当函数的定义放在调用之前时,可以直接调用,反之,需要先声明在调用。
3).函数声明主要是通知编译器被调函数的返回值类型、函数名以及参数等信息
4).函数的声明应与函数头保持一致,否则会报错
8.函数调用
1).即使调用无参函数,函数名后的括号不能省略
2).有参函数在调用时,实参与形参个数必须相等,类型应尽量保持一致
3).调用库函数时,需要包含相关的头文件
9.高内聚,低耦合
内聚度:模块内各成分之间互相依赖性大小的度量。内聚度越大,模块内各成分之间联系越紧密,其功能越强
耦合度:模块之间相互依赖性大小的度量。耦合度越小,各模块之间的相对独立性就越大。
10.示例:
int isPrime(int num);//函数声明
//质数:1和本身
void main()
{
//函数调用
printf("%d", isPrime(111));
getchar();
}
//函数定义
int isPrime(int num)
{
int flag = 0;
for (int i = 2; i < num; i++)
{
if (num == 1 || num == 2)flag = 1;
if (num%i == 0)
{
flag = 0;
break;
}
flag = 1;
}
return flag;
}
数组定义:同一个类型的多个元素的集合,在内存中开辟连续的空间,数组中的元素必须属于相同的数据类型
1.一维数组
1).数组声明:数组类型 数组名[数组大小]
2).数组的初始化:
类型 数组名[大小]={初值列表};([]中的大小可以省略)
int arr[10]={1,2,3,4,5}或者 int arr[]={1,2,3,4,5}
3).数组访问
数组名[下标]
4).数组的不合法操作
不能用一个已经初始化的数组对另一个数组赋值
不能对数组进行整体输入输出(除字符串外)
不能对数组进行比较
不能对数组进行整体运算
5).数组的引用
&数组名[下标] 或者 数组名+(-)整数
比如:&arr[5]与arr+5
6). 数组名表示数组的首地址,比如arr=&arr[0],数组作为参数传递的时候,传递的时地址,占4个byte
7).数组越界不会报错,如果越界访问,程序可能会崩溃,因为数组外的内存空间,不确定是否有访问权限。
8).排序:
方式一:普通排序
{
for (int i = 0; i < length-1;i++)
{
for (int j = i + 1; j < length;j++)
{
if (arr[i]>arr[j])
{
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
方式二:选择排序
{
int min;
for (int i = 0; i < length-1; i++)
{
min = i;
for (int j = i+1; j < length; j++)
{
if (arr[min]>arr[j])
{
min = j;
}
}
if (min != i)
{
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
方式三:冒泡排序
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length - 1 - i;j++)
{
if (arr[j]>arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] =temp;
}
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。