// main.m
// 1-20随堂笔记
//讲师: 小辉
//笔者: 王学文
// Created by lanouhn on 15/1/20.
// Copyright (c) 2015年 lanouhn. All rights reserved.
// 函数(function//)
#import <Foundation/Foundation.h>
//引入头文件的过程,是一个复制粘贴的过程
#import "1 - 20课堂笔记2.h"
#import "Operator.h"
#import "Algorithm.h"
#import "MaxValue.h"
//无返回值, 无参数
//注: 没有返回值用void, 没有参数小括号()不能省略
void buyRedWine1(); //函数声明
void buyRedWine1() {
printf("没钱, 买个毛!\n");
}
//无返回值, 有参数
void buyRedWine2(float money);
void buyRedWine2(float money) {
printf("给了%.2f元\n", money);
printf("被(mai)狗(xiang)咬(yan)了(zi),钱(ji)被(xi)调(le)走了");
}
//3. 有返回值, 无参数
//有返回值, 要用rrturn 返回
int buyRedWine3();
int buyRedWine3() {
printf("都是自己人,给什么钱呀!一瓶酒算什么呀,咱们兄弟谈钱多伤感情!\n");
printf("买什么酒(1. 拉菲, 2. 其他): ");
int flag = 0;
scanf("%d", &flag);
if (flag == 1) {
return 1;
} else if (flag == 2) {
return 12;
} else {
return 0;
}
}
//4. 有返回值,有参数
//1. 如果函数有返回值,要保证任何情况豆油你改改有return返回值
//2. return之后的代码永远不会执行
float buyRedWine4(float money, int count);
float buyRedWine4(float money, int count) {
printf("给了%.2f元, 买%d瓶\n", money, count);
float price = 100.0; //酒价
return money - count * price;
}
int sumValue(int n);
int sumValue(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum = i + sum;
}
return sum;
}
int dayOfYear(int year, int mouth, int day);
int dayOfYear(int year, int mouth, int day) {
int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 0;
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
a[1] = 29;
}
for (int i = 0; i< mouth - 1; i++) {
days = days + a[i];
}
days = days + day;
return days;
}
int mid(int a, int b, int c );//有问题
int mid(int a, int b , int c) {
int m[3] = {a, b, c};
for (int i = 0; i < 3 - 1; i++) {
for (int j = 0; j < 3 - 1 - i; j++) {
if (m[j] > m[j + 1]) {
int temp = m[j];
m[j] = m[j + 1];
m[j + 1] = temp;
}
}
}
return m[1];
}
int count(int num);
int count(int num) {
int i = 0;
do {
i++;
num = num / 10;
} while (num > 0);
return i;
}
//如果 函数定义在 主调函数 的后面,一定要在 主调函数 前面写上 函数声明;
//主调函数: 如果在函数A中调用了函数B,就称函数A是函数B的主调函数;
int main(int argc, const char * argv[]) {
//函数是具有特殊功能的代码段
//函数定义的格式
/*
返回值的数据类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...){
语句
}
//根据有误返回值和有无参数,可以吧函数划分为
//1. 无返回值, 无参数
//2. 无返回值, 有参数
//3. 有返回值, 无参数
//4. 有返回值, 有参数
//函数定义在哪里?
//1. 函数与函数之间是并列的关系
//2. 函数定义不能够嵌套
//函数调用
//格式! 函数名(参数1, 参数2, ...)
//1. 对无返回值,无参数函数调用
//注: 没有参数,小括号()不能够省略
buyRedWine1();
//2. 对无返回值,有参数函数调用
//方法1
buyRedWine2(100.0);
//方法2
float money = 100.0;
buyRedWine2(money);
//3. 有返回值, 无参数函数调用
int count = 0;
count = buyRedWine3();
printf("买了%d瓶\n", count);
//4. 有返回值, 有参数函数调用
float leftMoney = 0.0;
leftMoney = buyRedWine4(1000.0, 5);
printf("剩余%.2f元\n", leftMoney);
*/
//编写函数int sumValue(int n):计算1到n的和
// int x = 0, k = 0;
// printf("请输入k为:");
// scanf("%d", &k);
// x = sumValue(k);
// printf("sum = %d\n", x);
//形参实参是没有关系的
//1. 形参: 形式参数,函数定义中的参数,没有固定的值,当函数被调用的时候,制才能够确定
//2. 实参: 实际参数,函数调用中的参数,有确定的值
//当函数调用的时候,实参向形参传递的过程,是一个内容拷贝的过程
//变量的作用域
//1. 先找到变量定义的位置,
//2. 往上找最近的大括号
//变量使用的时候,要先确定使用的哪一个变量,要进行变量的查找
//变量查找,先从同一级查找,如果找到,就使用;如果没有找到,就往上一级找,直到找到为止
//注: 变量不会向下查找
// int i= 0;
// for (int i = 0; i < 10; i++) {
// i = 100;
// }
// int n = 0;
// for (int i = 0; i < 10; i++) {
// if (i) {
// n = 100;
// }
// }
// printf("i = %d\n", i);
// printf("n = %d\n", n);
//编写函数DayOfYearViewer(year, mouth, day),使得函数返回由这三个数确定的那一天是一年中的第几天
// int year = 0, mouth = 0, day = 0, days = 0;
// printf("请输入年月日: ");
// scanf("%d %d %d", &year, &mouth, &day);
// days = dayOfYear(year, mouth, day);
// printf("该天是这一年的第%d天\n", days);
//编写函数, 返回三个整数的中间数
// int a = 0, b = 0, c = 0;
// printf("输入三个正整数:");
// scanf("%d %d %d", &a, &b, &c);
// int n = mid(a, b, c);
// printf("中间数为%d\n", n);
//编写函数,放回正整数n中的数字的个数
// int num = 0;
// printf("请输入一个正整数:");
// scanf("%d", &num);
// num = count(num);
// printf("这个数是%d位数\n", num);
//严格的函数包含
//1. 函数声明
//2. 函数定义
//3. 函数调用
//函数声明是对函数的描述,不包含具体的实现;
//格式;
//返回值类型,函数名(参数类型1 参数1, 参数类型2 参数2,...);
// printf("%d\n", add(1, 1));
// printf("%d\n", sub(4, 8));
// printf("%d\n", mul(4, 6));
// printf("%.2f\n", div1(5.0, 6.0));
//全局变量和局部变量
//局部变量: 定义在函数内部的变量,作用范围在函数内部
//全局变量: 定义在函数外部的变量,在全局都有效
// int array[5] = {1, 10, 3, 8, 5};
// printArray(array, 5);
//
// bubbleSort(array, 5);
printf("最大值是%d\n", max(3, 5));
return 0;
}