函数
○ 一个函数只能完成一个功能.
○ 定义函数:
返回值类型 函数名 (参数列表){
函数体
}
○ 定义函数的作用 :代码复用
模块化开发
○ 函数是不能嵌套定义的,但能嵌套调用.
○ 函数的链式访问:将函数的返回值作为另一个函数返回值的参数.
○ 常用库函数
查函数文档 : http://www.dotcpp.com/course/lib/
让我们通过例题来感受函数的作用吧:
○ 判断是否为闰年 :(函数的应用)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int isLeapYear(int yaer);//声明函数int main() {int year = 0;printf("请输入一个年份:");scanf("%d", &year);int res = isLeapYear(year);//调用函数return 0;
}//创建函数
int isLeapYear(int year) {if (year % 4 == 0 || year % 100 != 0 && year % 400 == 0) {printf("是闰年\n");}else {printf("不是闰年\n");}return 0;
}
○ 打印100~999的水仙花数:(函数的应用)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main() {printf("100-999的水仙花数有:\n");int res = 0;res= shui();return 0;
}
int shui() {int a, b, c;for (int i = 100; i <= 999; i++) {a = i / 100; //百位b = i / 10 % 10;//十位c = i % 10; //个位if (i == (a * a * a) + (b * b * b) + (c * c * c)) {printf("%d\n", i); //153,370,371,407共4个}}
}
递归
○ 递归的要素:
- 递归终止的条件
- 递归操作
○ 猴子吃桃问题:(递归)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main() {//递归的要素1.递归终止的条件// 2.递归操作//递归函数(语义--[参数列表])//猴子吃桃问题:有一堆桃,第一天吃了一半,觉得好吃多吃了一个,第二天吃了剩下的一半,觉得好吃又多吃了一个,第三天....第四天剩了一个,问一共多少桃子?printf("输入天数:");int days = 0;scanf("%d", &days);int nums = monkeyEatPeach(days);printf("有%d桃子\n", nums);return 0;}//递归函数int monkeyEatPeach(int day) { //倒数天数//终止条件if (day == 1) {return 1;}//递归操作return (monkeyEatPeach(day - 1) + 1) * 2;return 0;}
○ 求一个数的阶乘:(递归)
#define _CRT_SECURE_NO_WARNINGS 1 /* 求n! */
#include <stdio.h>
//声明一个函数wn,来求阶乘
int wn(int n) {//递归终止条件if (n == 0 || n == 1) {return 1;}//递归操作return n * wn(n - 1);
}
int main() {int n = 0;printf("请给n赋值:");scanf("%d", &n);printf("%d!=%d\n", n, wn(n));//调用函数return 0;
}
○ 查找斐波那契数列的某一项:(递归)
#define _CRT_SECURE_NO_WARNINGS 1//斐波那契数列(查找第n项)
#include<stdio.h>
int fib(int n) {//终止条件if (n == 1|| n == 2) {return 1;}//递归操作return(fib(n - 1) + fib(n - 2));
}
int main() {int n = 0;printf("请输入要查找的项数n:");scanf("%d", &n);int res = fib(n); //调用函数printf("斐波那契数列的第%d项 = %d\n", n, res);return 0;
}
循环 是语法中较为重要的,让我们通过几个例题来巩固下循环吧。
经典例题
○ 在数组中查找最大的数:(数组遍历)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//自定义了个max函数,来实现功能
int max(int arr[], int size) {int max = arr[0];//默认第一个元素为最大数for (int i = 1; i < size; i++) {if (arr[i] > max) {//遍历数组,遇见更大的数就赋给maxmax = arr[i];}}return max;
}
int main() {int arr[] = { 3, 7, 2, 9, 5 };int size = sizeof(arr) / sizeof(arr[0]);//计算数组长度printf("The max value in the arr is: %d\n", max(arr, size));//调用了max函数return 0;
}
○ 99乘法表: (循环)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++)printf("%d*%d=%d ", i, j, i * j);printf("\n");}return 0;
}
○ 输入正确密码:(循环|判断)
#define _CRT_SECURE_NO_WARNINGS 1//输密码
#include <stdio.h>
int main() {char password[125] = { 0 };int count = 3;//规定有3次机会do {printf("你还有%d次机会,请输入密码(6位)\n", count);scanf("%s", password);if (strcmp(password,"211314")==0) { //输入211314密码正确printf("恭喜您,密码正确!");break;}count = count - 1;} while (count >= 1);printf("GAME OVER!");return 0;
}
○ 格式训练:(格式符号)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {printf("请输入你的名字:\n");char name[20];scanf("%s", name);printf("\"%s\"\n", name);//加双引号printf("\"%20s\"\n", name);//数字表示空格,正为左对齐printf("\"%-20s\"\n", name);//负为右对齐printf("%*s", strlen(name) + 20, name);//任意添加空格
}