C语言入门这一篇就够了,厂长推荐学习( 六 )


递归demo 。
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁 。问第4个人岁数,他说比第3个人大2岁 。问第3个人,又说比第2人大两岁 。问第2个人,说比第1个人大两岁 。最后 问第1个人,他说是10岁 。请问第5个人多大?
程序分析:
利用递归的方法,递归分为回推和递推两个阶段 。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推 。
#includeint dfs(int n) {return n == 1 ? 10 : dfs(n - 1) + 2;}int main() {printf("第5个人的年龄是%d岁", dfs(5)); return 0;}
局部与全局
C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量 。
变量存储类别
: C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式 。
C语言中存储类别又分为四类:
1、用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式 。如:
2、用修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量 。如下为静态局部变量:
注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量) 。
3、为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字作声明 。例如:
: 注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量 。
4、用声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量 。如:
内部函数与外部函数
静态变量只赋值一次
外部函数练习
hello.c
#include #include "test.c"//引用test.c文件extern void printLine()//这里定义的方法对吗?{printf("**************\n");}int main(){say();return 0;}
test.c
#include void printLine();static void say(){printLine();printf("I love imooc\n");printf("good good study!\n");printf("day day up!\n");printLine();}
对于hello.c来说,直接引入了test.c文件 。那么就可以调用testc中的方法say()
而对于test.c并没有引入,可以通过声明来调用另一个源文件中暴露出来的方法 。
综合练习
北京市出租车打车计费规则如下:
每公里单价计费2.3元起步价13元(包含3公里)晚上23点(含)至次日凌晨5点(不含)打车,每公里单价计费加收20% 。每次乘车加收1元钱的燃油附加税 。
小明每天上下班都要打车,公司和家的距离为12公里,上午上班时间为9点,下午下班时间为6点 。
请编写一个小程序计算小明每天打车的总费用 。
#include float taxifee(int clock,int miles){float money;if(miles<=3){money=14;printf("费用为14\n");}else{if(clock>=23 || clock<5){money=13+1+2.3*(miles-3)*1.2;printf("夜间车费为:%f\n",money);}else{money=13+1+2.3*(miles-3);printf("日间车费为:%f\n",money);}}return money;}int main(){printf("打的总费用:%.1f\n",taxifee(9,12)+taxifee(18,12));return 0;}
数组初体验
程序中也需要容器,只不过该容器有点特殊,它在程序中是一块连续的,大小固定并且里面的数据类型一致的内存空间,它还有个好听的名字叫数组 。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购