C语言学习日记(3)
#include<stdio.h>
int main() {
void print_star(); //声明:写函数声明时,可以简单复制已定义的函数的首行,再加一个分号,就构成函数的声明
void print_message();
print_star();//调用
print_message();
print_star();
return 0;
}
void print_star() { //无参函数
printf(“*******************************\n”);
}
void print_message() {
printf(“Hi! World!\n”); //void空类型无返回值,不写return
}
C程序的执行是从main 函数开始的,在main函数中调用其它函数,调用结束后返回main函数,结束运行。
函数间可以相互调用,但是不能调用main函数,main函数是被操作系统调用的。
从用户使用角度看,函数有两种:
1.库函数(系统提供,直接使用);
2.用户自己定义的函数。
从函数的形式看,有两种:
1.无参函数 (主调函数不向被调用函数传递数据)
2.有参函数(主调函数通过参数向被调用函数传递数据)
#include<stdio.h>
int max(int x, int y) { //形参
int z;
z = x > y ? x : y;
return(z);
}
int main() {
int max(int x, int y);
int a, b, c;
printf(“请输入两个整数:”);
scanf_s(“%d%d”, &a, &b);
c = max(a, b); //实参
printf(“最大值为%d\n”, c);
return 0;
}
实参与形参的类型应相同或赋值兼容
函数调用时的数据传递
1.形式参数:定义函数时函数后面括号中的变量名称。
2.实际参数:主函数调用函数时,函数名后面括号中的参数。
在调用函数时,系统会把实参的值传递给被调用的形参,在调用期间有效。
函数调用的过程
形参,在未出现函数调用时并不分配内存单元,被调用时,才临时分配内存单元。形参的值发生改变,不影响主调函数的实参的值。
实参和形参在内存中占用不同的存储单元,实参无法得到形参的值。
函数的返回值
通过函数中的return语句获得,如果需要从被调用函数带回一个函数值供主调函数使用,被调用函数中必须包含return语句。
函数类型决定返回值类型。不带回值的函数应定义为空(void)类型。
函数的嵌套调用
输入4个整数,找出其中最大的数
#include<stdio.h>
int max4(int a, int b, int c, int d) {
int max2(int a, int b);
int m;
m = max2(a, b); //调用max2函数,将a,b中最大值赋给m
m = max2(m, c);//将a,b,c
m = max2(m, d);//将a,b,c,d
return m;
}
int max2(int a,int b) {
if (a > b) return a;
else return b;
}
int main() {
int max4(int a, int b, int c, int d);
int a, b, c, d, max;
printf("请输入四个整数");
scanf_s("%d%d%d%d", &a, &b, &c, &d);
max = max4(a, b, c, d);
printf("最大值为%d", max);
return 0;
}
//11, 12行可改为: return(a >= b ? a : b);
//5 - 7行可改为:m = max(max2(max2(a, b), c), d);
函数的递归调用
学生的年龄依次减小,递归求第一个学生的年龄。
#include<stdio.h>
int age(int n) {
int c;
if