变量:
1.变量的定义
变量类型 变量名;
int score;
2.变量的赋值
score = 100;
score = a;
score = b = 100;
3.变量的输出
int a = 200;
printf("%i", a);
常用格式符:
1> %d\%i 整数(int)
2> %f 小数(float、double)
3> %c 字符(char)
变量使用注意:
1.变量的作用域
从定义变量的那一行代码开始,一直到所在的代码块结束
2.代码块的作用
及时回收不再使用的变量,为了提升性能
交换变量:
a = 10
b = 11
交换之后
a -> 11
b -> 10
1.利用第三方变量(工作,掌握)
int temp = a;
a = b;
b = temp;
2.不利用第三方变量(面试,有印象)
a = b - a;
b = b - a;
a = b + a;
C程序从开发到运行需要哪些步骤?
1> 编写.c源文件
2> 编译.c源文件为.o目标文件
3> 链接.o目标文件为可执行文件
4> 运行可执行文件
拓展名为.c、.o、.out分别是什么文件?在C程序开发的哪个阶段产生的?
1> .c是C语言源文件,在编写代码的时候创建
2> .o是目标文件,在编译成功的时候产生
3> .out是可执行文件,在链接成功的时候产生
变量内存:
1.内存寻址由大到小,优先分配内存地址比较大的字节给变量
2.变量越先定义,内存地址就越大
3.取得变量的地址:&变量名
4.输出地址:%p
5.一个变量一定先进行初始化,才能使用
scanf函数使用:
1.定义一个变量,用来保存用户输入的整数
2.scanf函数只接受变量的地址
3.scanf函数是一个阻塞式的函数,等待用户输入
4.用户输入完毕后,就会将用户输入的值赋值给number变量
5.函数调用完毕
1.输入字符
2.一次性输入多个数值,并且以某些符号隔开
3.如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符
4.scanf中不能写\n
算法运算:
1.取余运算(模运算)
2.%两边都是整数
3.%取余结果的正负性只跟%左边的数值有关
4.自动类型转换(double->int)
int a = 10.8;
强制类型转换(double->int)
int b = (int) 10.5;
printf("%d\n", a);
自动类型提升(int->double)
double c = 10.6 + 6;
5.sizeof函数,sizeof(10) , sizeof 10, sizeof(10.9),sizeof 10.9,sizeof(int),sizeof(char)
6.关系运算
条件成立就返回1,真
条件不成立就返回0,假
7.逻辑与 条件1 && 条件2
逻辑或 条件1 || 条件2
逻辑非 !条件 如果条件成立,就返回0;如果条件不成立,就返回1
8.三目运算符 条件 ? 数值1 : 数值2 条件真,取数值1;条件假,取数值2
9.比较大小时,常量值放左边,变量放右边,这样可以防止写错,尤其是写比较是否等于情况
(写if(a==0),可能会写成if(a=0),这样写错了可能出现警告,而不是错误,
但是若if(0=a),少写了就会提示错误的,应该写成if(0==a) )
10.注意赋值运算符,不要写成两个=
11.if语句后面不要写;
12.如果要在if后面的语句中定义新的变量,必须用大括号{}
13.if与switch
if (条件)
{
}
switch (数值)
{
case 数值1:
语句1;
break;
case 数值2:
语句2;
break;
default :
语句3;
break;
}
1.break:退出整个switch语句
2.如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止
3.如果要在case后面定义新的变量,必须用大括号{}包住
4.if和switch异同
1> if语句能完成的功能,switch并不一定能完成
int a = 10;
if (a>100)
{
}
2> 在有些情况下,if语句和switch语句可以互换
3> switch能完成的功能,if语句都能完成
scanf注意:
scanf中必须传入变量的地址,而不是直接传入变量的值
scanf中不要包含\n,\n对scanf有特殊含义
注意项:
// 10是常量,不能进行++运算
// 因为10++相当于10 = 10 + 1
//int a = 10++;
// %两侧必须是整数
if和while
if (条件)
{
}
while (条件)
{
循环体
}
运行原理
1.如果一开始条件就不成立,永远不会执行循环体
2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......
break
直接结束整个while循环
continue
结束当前的循环体,进入下一次循环体的执行
1.先确定需要重复执行的操作
2.再确定约束条件
3.最简单的死循环 while(1);
while与do-while
while (条件)
{
}
do {
} while(条件);
while和do-while的区别
1.很多情况下,while和do while可以互换
2.while特点:如果一开始的条件不成立,永远不会执行循环体
do while特点:不管一开始的条件是否成立,至少会执行一次循环体
3.最好使用while
for循环:
for (语句1; 条件; 语句2)
{
循环体
}
语句1:初始化语句
语句2:增量语句(执行完循环体后再执行的语句)
1.for一开始就会执行一次语句1(整个for循环只会执行一次)
2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立
不要随便在for()后面写分号
for (int i=0; i<5; i++);
{
printf("哈哈\n");
}*/
/* 错误:变量a的作用域不明确
如果要在循环体中定义新的变量,必须用大括号{}包住
最简单的利用for循环实现死循环 for(;;);
break和continue:
break:
1.使用场合
1> switch语句:退出整个switch语句
2> 循环结构:退出整个循环语句
* while
* do while
* for
2.注意点
只对最近的循环结构有效
continue:
1.使用场合
循环结构:结束当前这次的循环体,进入下一次循环体
* while
* do while
* for
2.注意点
只对最近的循环结构有效
函数:
1.什么情况下定义函数:添加一个常用的新功能
2.函数的定义格式
返回值类型 函数名(形式参数列表)
{
函数体
}
3.定义函数需要明确的东西
1> 起一个有意义的函数名
2> 确定函数的形参个数
3> 确定函数的返回值
参数注意点
1.形式参数:定义函数时函数名后面中的参数,简称形参
2.实际参数:调用函数式传入的具体数据,简称实参
3.实参个数必须等于形参个数
4.函数体内部不能定义和形参一样的变量
5.如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值
6.一个函数可以没有形参,也可以有无限多个形参
形式参数,简称形参
return的作用:
1> 退出函数
2> 返回一个具体值给函数调用者
返回值注意点
1> void代表没有返回值
2> 如果没有明确说明返回值类型,默认是返回int类型
3> 就算明确声明了返回值类型,也可以不返回任何值
默认情况下,C语言不允许两个函数的名称一样
函数情况注意:
1.默认情况下,不允许有函数的名称一样
2.函数不能嵌套定义
3.函数不能重复定义,但是可以重复声明
4.如果有函数的声明,没有函数的定义
1> 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
2> 链接报错,因为链接的时候会检测函数是否定义
include
1> 作用:拷贝右边文件的所有内容到#include所在的位置
2> 自定义的文件用"",系统自带的文件用<>
3> #include <stdio.h>的目的:拷贝printf函数的声明
\n是一个转义字符
\t tab键
\" 一个双引号
printf函数返回的字符串常量的字符数,并不是字数
1个汉字占据3个字符
1.函数的定义放.c文件,函数的声明放.h文件
2.如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
3..h文件的作用:被别人拷贝。编译链接的时候不需要管.h文件
4.cc xx.o xxx.o 将多个目标文件链接在一起
cc xx.c xxx.c 将多个源文件编译、链接
void表示没有返回值,因此不应该return一个整数 省略return也可用
返回值是int类型,因此return后面应该跟上一个整数 return 0 这个0仅仅是随便写的,具体返回什么值,应该根据业务逻辑
函数不能嵌套定义
不允许有函数同名,除非,它们函数的形参个数和类型不同
部分总结:
一、选择结构
1.if
1> 结构
if (条件) {
} else if (条件2) {
} else if (条件3) {
} else {
}
2> 特点
* 同一时刻,只有一个大括号里面的代码会被执行
2.switch
1> 结构
switch (数值)
{
case 数值1:
break;
case 数值2:
break;
case 数值3:
break;
default:
break;
}
2> 特点
1> 默认情况下,只有一个case后面的代码会被执行
2> 如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止
3> 如果要在case后面定义一个新的变量,必须用大括号{}包住
二、循环结构
1.while
1> 特点:如果一开始条件不成立,永远不会执行循环体
2.do while
1> 特点:不管条件是否成立,至少会执行一次循环体
3.for
4.选择
1> 一般优先使用for循环
2> 然后再考虑while
3> 最后再考虑do while