//
// main.m
// C05 函数-1
//
// Created by xalo on 15/10/20.
// Copyright (c) 2015年 Darling.com. All rights reserved.
//
#import <Foundation/Foundation.h>
// 1、函数定义
#pragma mark 无返无参函数
// 返回值类型:如果无返回值,必须使用void修饰符
// 函数名:遵守变量名的命名法则
// 参数列表:如果没有参数,可以用void修饰,也可以什么都不写,但是,小括号不能省略。
void printHello(void) // 括号内的void可以省略
{ // 在大括号里写实现功能的代码
printf("西安的青年都帅\n");
// return标志着函数的结束,如果return后边有数值,则将这个数值交给主调函数。
// 当return只负责结束函数执行时,可以省略return。当return负责返回值,则不能省略。
return;
}
#pragma mark 无返有参函数
void sum(int a, int b)
{
int c = a - b;
printf("a - b = %d\n", c);
}
#pragma mark 有返无参函数
int returnNumber()
{
// 有返回值的函数,return即表示函数到此结束执行,同时具备将结果交给主调函数的功能,这时的return不能省略。
return 20;
}
#pragma mark 有返有参函数
double returnToNumSum(double a , double b)
{
double c = a + b;
return c;
}
// 定义一个函数:交换两个整形变量的值
void exchangeTwoNums(int num1, int num2) // 形参
{
printf("num1 = %d, num2 = %d", num1, num2);
int temp = num1;
num1 = num2;
num2 = temp;
printf("num1 = %d, num2 = %d", num1, num2);
}
/*1、编写函数int sumValue(int n):计算1到n的和。*/
int sumValue(int n)
{
// 定义一个累加和的变量
int sum = 0;
for (int i = 1; i <= n ; i++) {
sum = sum + i; // sum保存累加和
}
return sum;
}
/*2、编写函数dayOfYear(year, month,day),使得函数返回由这三个参数确定的那一天是一年中的第几天。*/
int dayOfYear(int year, int month, int day)
{
// 1.1 用数组保存一年中各个月份的天数
int monthArray[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 1.2 判断闰年,平年,修改二月份天数
if( (year % 400 == 0 ) || (year % 4 == 0 && year % 100 != 0 )){
monthArray[1] = 29;
}
// 2.1 根据月份来 累加 当前月之前 总共多少天
int sumDay = 0;
for (int i = 0; i < month - 1; i++) {
sumDay = sumDay + monthArray[i];
}
// 3. 将当前月的天数加进累加器中
sumDay = sumDay + day;
// 4. 将结果返回给主调函数
return sumDay;
}
// // 复杂方法(比较)
// // 定义整形变量
// int year , month , day , sum;
//
// // 保存用户输入的整形数
// scanf("%d,%d,%d", &year, &month, &day);
//
// // 使用switch语句判断用户输入的月份,然后进入不同分支
// switch (month)//先计算某月 以前月份的总天数
// {
//
// case 1:sum = 0;break;
// case 2:sum = 31;break;
// case 3:sum = 59;break;
// case 4:sum = 90;break;
// case 5:sum = 120;break;
// case 6:sum = 151;break;
// case 7:sum = 181;break;
// case 8:sum = 212;break;
// case 9:sum = 243;break;
// case 10:sum = 273;break;
// case 11:sum = 304;break;
// case 12:sum = 334;break;
// default:printf("输入有误,请重新输入!");
// break;
// }
//
// // 再加上某天的天数
// sum = sum + day;
// // 判断闰年,若是,则再加上一天
// if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) && month == 2) {
// sum = sum + 1;
// }
//
// printf("%d年%d月%d日是这一年的第%d天", year, month, day, sum);
/*3、编写函数,返回三个整数的中间数。 */
int midNum(int a, int b, int c)
{
//1. 找出三个数中的最大数(两两比较)
int max = a > b ? a : b;
max = max > c ? max : c;
//2. 找出三个数中的最小数
int min = a < b ? a : b;
min = min < c ? min : c;
//3. 中间数的值 = (a+b+c)- (max+min)
int mid = (a + b + c)- (max + min);
return mid;
}
/*4、编写函数,返回正整数n中的数字的个数。*/
int returnNumCount(int n)
{
int count = 0;
// 如果用10去除,商不为零,表示这个数字至少是两位数,计数器加一
while (n / 10 != 0) {
count = count + 1;
n = n / 10;
}
// 在循环条件不满足时,n变成了一个只有一位的数,所以这一位也要加进计数器中
count = count + 1;
return count;
}
int main(int argc, const char * argv[]) {
/*
函数:完成某一功能的代码段。
函数名:给这段代码取一个名字,以后就可以通过这个名字来代替这段代码。
函数的参数:有的函数在完成某一任务时,需要一些必须的材料,我们把完成任务所需的材料叫做函数的参数。
函数的返回值:有的函数在完成任务以后,需要把任务结果返回给主调函数,就可以通过return语句来将结果返回。注意:return只能返回一个值,同时不能返回数组。
*/
// 函数的定义,一般定义在main函数前面
// 函数的调用:必须要先定义出来这个函数,定义之后才能调用
// 函数调用方式:函数名+参数列表
// 调用无返无参函数
printHello();
printHello();
// 调用无返、有参函数:有参数,所以函数有几个参数,就要在参数列表中写几个参数,参数的位置要一一对应
sum(6, 5);
// 调用有返无参函数: 有返回值的函数,需要在主调函数中定义一个对应返回值的变量,盛放返回值。
int c = returnNumber();
printf("c = %d\n", c);
// 调用有返有参函数
double num1 = 12.34;
double num2 = 34.56;
double d = returnToNumSum(num1, num2);
printf("d = %f\n", d);
// // 调用交换两个变量值的函数
// int a = 12; int b = 34;
// // 函数参数传递:将实参的值 拷贝 一份到形参变量的内存空间中,在被调函数中操作的参数是新开辟的内存的数值,和实参没有关系
// exchangeTwoNums(a, b); // 在主调函数中,参数叫做“实参”
// printf("a = %d, b = %d", a, b);
/*1、编写函数int sumValue(int n):计算1到n的和。*/
// int temp = sumValue(5);
// printf("sum = %d\n", temp);
/*2、编写函数dayOfYear(year, mouth,day),使得函数返回由这三个参数确定的那一天是一年中的第几天。*/
int m = dayOfYear(2000, 3, 1);
printf("data = %d", m);
// printf("%d\n",dayOfYear(2000, 3, 1)); // 精简写法
/*3、编写函数,返回三个整数的中间数。 */
// int x = midNum(2, 15, 7);
// printf("中间数是%d\n", x);
/*4、编写函数,返回正整数n中的数字的个数。*/
// int y = returnNumCount(88);
// printf("数字的个数%d\n",y);
return 0;
}