复习:
1、Linux常用的命令
ls cd pwd clear touch mv cp cat/head/tail/more mkdir rmdir chomd rm find grep ifconfig ping whoami sudo man
2、vim文本编辑器
vi是系统自带文本编辑器 vim是它的增强版本
三大模式:正常、插入、行底
切换方法:Esc i :
正常模式下的操作:
光标的移动:gg G nG vim file.c +n
删除代码: dd x dw\de ndd d$ d^ dgg dG
替换代码:r cw R
复制代码:yy nyy p粘贴
撤销操作:u U Ctrl+r
插入模式下的操作:
jj Ctrl+z Ctrl+x Ctrl+p
行底模式:
set nu、set nonu、%s/old/new
>n <n /key !cmd
3、C语言简介
美国贝尔实验室、肯.汤普逊、丹尼斯.里奇、1971~1973年
BCPl、newB、C、UNIX、Minxi、Linux、gcc
C89 C99 C11
4、C代码变成可执行程序的过程
预处理:查看宏函数、宏定义的替换结果,检查宏函数
gcc -E -》.i结尾的预处理文件
编译:理解C代码底层的工作原理 ++i i++,函数重载的原理
gcc -S -》 .s结尾的汇编文件
汇编:生成代码库
gcc -c -》.o 结尾的目标文件
链接:多文件编程的基础
gcc a.o b.o c.o… -》a.out 的可执行程序
5、gcc编译器常用参数
-Wall -Werror
-E -S -c -o -std=gnuxx -l -I -D(命令行宏定义)
6、C语言的文件类型名
.h .h.gch
.c .i .s .o .a .so
7、数据类型
signed char 1 -128~127
signed short 2 -32768~-32767
signed int 4 正负20亿
signed long 4/8
signed long long 8 9开头的19位整数
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8
unsigned long long 8 1开头的20位整数
float 4
double 8
long double 12/16
小数点后6位有效
8、变量名的取名规则
1、只能由字母、数字、下划线组成
2、不能是数字开头
3、不能与32个关键字重名
4、见名知意
9、变量的输入输出
printf 提示信息+占位符+变量名
scanf 占位符+变量名的地址
%hhd %hd %d %ld %lld %f %lf %LF
%nd %-nd %0nd %n.mf %g
10、运算符
/ % 除数不能为0,否则会产生浮点数例外
== 常量尽量放左边
++/-- 一行内不要出现多次
&& || 具有短路特性
A?B:C 不能出现流程控制语句
11、类型转换
自动类型转换:不同类型的数据会先自动转换为相同类型的数据,才能进行计算
尽量保证数据不丢失,可以适当地牺牲一些空间
1、字节少的向字节多的转
2、相同字节时,有符号的向无符号的转
3、整型向浮点型转
强制类型转换:
(类型)数据 有可能导致数据丢失,慎用
一、开关语句
switch(n)//n可以是数值、表达式,运算结果必须是整数
{
case val://val必须是常量
…
break;//关闭执行开关,如果每个case后面都有一个break,形成了分支结构
default://如果每个case都没打开,则打开该执行开关,而且任何位置都最后生效
}
case a … b:判断a到b范围的数据,此为GNU编译器独有的语法,不建议使用
练习1:输入一个月份,判断季节
123 春天
456 夏天
789 秋天
101112 冬天
other 输入月份有误
练习2:输入一个月份,判断有多少天,忽略润年、平年问题,other 输入月份有误
二、循环结构
for循环语句
循环就是让一段代码反复执行,达到你想要的结果
for是一种比较灵活(相比较于其他循环语句)而且比较危险的一种循环
for([1];[2];[3])
{
[4];
}
一般使用一个变量来引导循环的运行,这个变量就叫循环变量。
1、给循环变量赋值,C99标准才可以定义循环变量
2、判断循环变量是否达到边界
4、执行被反复执行的代码,也叫做循环体
3、改变循环变量,防止出现死循环,一般对循环变量自加或自减
1 2 4 3 2 4 3 2 …
大括号问题:
1、建议上下对齐
2、如果循环体只有一行代码时,大括号可以省略,但不利于扩展,一般商业代码要求大括号不能省略的。
for循环的多种写法:
for(; ; )
{
//死循环
}
int i = 0;
for(;i<10;i++)
{
}
for(int i =0;i<10;)
{
//
i++;
}
while循环语句:
while(循环条件)//当循环条件为真时,执行循环体,为假时结束循环
{
//循环体
}
while循环相当于for循环的精简版本
for循环负责明确知道循环次数的问题
while循环负责只知道结束条件而不确定循环次数的问题
do while 语句
do{
循环体
}while(循环条件);
先执行循环体,再判断循环条件,该循环体至少执行一次
适合先干活,后检查的情况
循环嵌套:
循环语句中包含循环语句
外层循环执行一次,内层循环执行n次
练习3:计算出所有的三位水仙花
练习4:输入一个正整数,判断是否是素数
练习5:输入一个整数,分解输出
-1234 1000 100 10 1
- 1 2 3 4
练习6:输入一个正整数,判断是否是回文数
12321 12321
跳转语句:
goto:可以实现在函数内任意跳转
他可能会破坏已经设计好的分支或循环语句,因此绝大多数公司都禁止使用。
但是它在驱动编程时特别适合处理异常。
标签名:
goto 标签名;
练习7:不使用循环语句计算N的阶乘
break
1、在switch语句中关闭执行开关
2、跳出循环,只能跳一层
continue
结束本次循环,进入下一次循环
return
1、返回一个数据给函数的调用者
2、结束函数的执行
练习8:不使用循环语句,计算前N项的斐波那契数列
(1,0)1、1、2、3、5、8、13、21...
作业:
1、打印9*9乘法表
2、编程解决百钱百鸡,鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡
3、计算100~1000所有素数
4、输入一个日期(yyyy-mm-dd),计算出该日期到公元元年1月1号过了多少天
5、显示一个图案:要求printf一次只能打印一个字符
********
********
********
********
********
********
********
********