THE SIXTH DAY LEARNING (函数 C语言)
函数
#import "Fuction.h"
//#import <>: 引入系统头文件
//#import "": 引入自定义头文件
#import "ArrayOperation.h"
#import <Foundation/Foundation.h>
//1.无返回值, 无参数
//注: a.没有返回值类型写void, void空类型
//b.没有参数, 小括号不能省略
void buyBeer(){
printf("没钱, 买不了!\n");
}
//2.无返回值, 有参数
//int money = 11
void buyBeer2(int money){
printf("%d元被狗咬了, 钱被狗狗叼走了!\n", money);
}
//3.有返回值, 无参数
//注: 有返回值, 使用return返回
int buyBeer3(){
printf("都是自己人, 给什么钱啊! 一瓶啤酒算什么, 咱们兄弟谈钱伤感情!\n");
return6;
//printf("O(∩_∩)O~\n");
}
//4.有返回值, 有参数
int buyBeer4(int money, int count);//函数声明
int buyBeer4(int money, int count){
int price = 3;
printf("花了%d元, 买了%d元\n", price *count, count);
return money - price * count;
}
int sumValue(int n);
int sumValue(int n){
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
int middle(int a, int b, int c);
int middle(int a, int b, int c){
//1.
int mid = (a > b) ? ( b > c ? b : ( c > a ? a : c ) ) : ( a > c ? a : ( c > b ? b : c ) );
//2.
// int max = 0, min = 0;
// //求最大值
// //max = a > b ? (a > c ? a : c) : (b > c ? b : c);
// if (a > b) {
// if (a > c) {
// max = a;
//
// } else {
// max = c;
// }
// } else {
// if (b > c) {
// max = b;
// } else {
// max = b;
// }
// }
//
// //求最小值
// min = a < b ? (a < c ? a : c) : (b < c ? b : c);
//
//求中间值
//return a + b + c - min - max;
return mid;
}
//求最大公约数gcd
int maxDiv(int a, int b){
//辗转相除法
int res = a % b;
while (res != 0) {
a = b;
b = res;
res = a % b;
}
return b;
}
int dayOfYear(int year, int month, int day){
int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sum = 0;
if (year >= 0 && year <= 2016) {
if (month >= 1 && month <= 12) {
if (day > 0 && day <= a[month - 1]) {
if (year % 400 == 0 ||(year % 4 == 0 && year % 100 != 0)) {
a[1] = 29;
}
for (int i = 0; i < month - 1; i++) {
sum += a[i];
}
} else {
printf("日期错误!");
}
} else {
printf("日期错误!");
}
} else {
printf("日期错误!");
}
return sum + day;
}
//全局变量
int t = 10;
void printHello();
void change(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
printf("a = %d b = %d",m, n);
}
int main(int argc, constchar * argv[]) {
//函数: 具有特定功能的代码段
//函数定义: 创建一个函数
//格式
/*
返回值的数据类型函数名(数据类型1 参数名1, 数据类型2, 参数名2, ...)
{
函数体(执行的语句)
}
*/
//注: 函数和函数之间是并列的关系, 函数不能嵌套定义
//注; 参数的数据类型相同, 数据类型也不能够省略
//函数定义的形式
//根据函数有无返回值和有无参数
//1.无返回值, 无参数
//2.无返回值, 有参数
//3.有返回值, 无参数
//4.有返回值, 有参数
//函数调用: 执行函数体的代码
//格式
//函数名(参数1, 参数2, ...)
//主调函数: 如果在函数A中调用了函数B, 函数A就称为函数B的主调函数
//函数调用的过程: 先回到函数定义中, 执行函数体中的代码, 执行完后, 回到主调函数
/*
//1.无返回值, 无参数的调用
//注: 没有参数, 括号不能够省略
buyBeer();
//2.无返回值, 有参数的调用
//注: 有参数, 参数要写一个确切的值, 这个会拷贝到函数定义的参数中
buyBeer2(100);
//3.有返回值, 无参数的调用
//注: 定义变量来接收返回值
int count = buyBeer3();
printf("买了%d瓶酒\n", count);
//4.有返回值, 有参数的调用
int money = buyBeer4(100, 30);
printf("还剩%d元\n", money);
//return的作用
//1.return用于返回某个数值(有返回值的函数定义)
//2.return终止当前函数的执行, 重新返回到主调函数
//break作用
//1.break跳出switch...case语句
//2.在循环中使用, 跳出本层循环
//continue作用
//在循环中使用, 跳出本次循环, 加速循环的执行
*/
/*
//1、编写函数int sumValue(int n):计算1到n的和。
// int sum = sumValue(9);
int n = 0, sum = 0;
printf("Input n:");
scanf("%d", &n);
sum = sumValue(n);
printf("sum = %d\n", sum);
*/
//函数的好处
//1.重复利用某些代码
//2.具有良好的移植性
//编写函数, 返回三个整数的中间数
//printf("mid = %d\n", middle(3, 2, 4));
//编写函数, 求两个数的最大公约数
//printf("maxDiv = %d\n", maxDiv(8, 4));
//2、编写函数dayOfYear(year, month, day),使得函数返回由这三个参数确定的那一天是一年中的第几天。
//printf("这是今年的第%d天", dayOfYear(2000, 3, 3));
//一个严格的函数包含:
//函数定义
//函数调用
//函数声明
//函数声明: 对函数功能的说明, 不具有实质性的代码
//格式
//返回值的数据类型函数名(数据类型1 参数名1, 数据类型2, 参数名2, ...);
//当函数定义在主调函数的下方时, 必须在主调函数上方写函数声明
//printHello();
//形参: 形式参数, 函数定义时的参数, 没有固定的值, 当函数调用时, 才能确定
//实参: 实际参数, 函数调用时的参数, 有确定的值
// int i = 10;
// sumValue(i);//在函数调用时, 实参把值传递给形参
//编写函数, 实现交换两个变量的值
// int a = 10, b = 20;//错误!只是改变了函数里的m n
// change(a, b);
//局部变量: 定义在函数内部的变量, 从变量定义开始, 到下一个大括号结束
//全局变量: 定义在函数外部的变量, 作用域从变量丁一开始, 到这个文件结束
//注: 尽量不使用全局变量, 全局变量不好管理
if (YES) {
int x = 10;
x = 20;
}
//把函数定义在其他文件中
//注: 调用函数, 需要引入头文件
printf("和: %d\n", add(3, 4));
printf("差: %d\n", sub(4, 5));
printf("积: %d\n", mul(4, 5));
printf("商: %.2f\n", divide(4, 5));
int array[5] = {1, 3, 2, 4, 5};
// for (int i = 0; i < 5; i++) {
// printf("%d ", array[i]);
// }
// printf("\n");
printArray(array, 5);
sortArray(array, 5);
printArray(array, 5);
//写一个函数, 实现打印数组
//数组作为函数参数