1、基本语法
printf()
基本用法
printf() 的作⽤是将参数⽂本输出到屏幕。f 代表 format (格式化)
printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头文件。
#include <stdio.h>
int main(void) {
printf("Hello World\n");
}
2、变量
变量名
变量名属于标识符(identifier)
- 只能由字⺟(包括⼤写和⼩写)、数字和下划线( _ )组成。
- 不能以数字开头。
- ⻓度不能超过63个字符。
- 区分大小写,star,Star,STAR都是不同的变量
变量的声明
每个变量都有⾃⼰的类型(type)
int height, width;
// 等同于
int height;
int width;
变量的赋值
C 语⾔会在变量声明时,就为它分配内存空间,但不会清除内存⾥⾯原来的值。变量会是⼀个随机的值。所以 变量⼀定要赋值以后才能使⽤。
变量的声明和赋值,通常写在一行。
-
赋值表达式有返回值,等于等号右边的值。
int x, y, z, m, n; x = y = z = m = n = 3;
⼀次为多个变量赋值。赋值运算符是从右到左执⾏,所以先为 n 赋值,然后依次 为 m 、 z 、 y 和 x 赋值。
C 语⾔有左值(left value)和右值(right value)的概念。左值是可以放在赋值运算符左边的值,⼀般是变量;右值是可以放在赋值运算符右边的值,⼀般是⼀个具体的值。这是为了强调有些值不能放在赋值运算符的左边,⽐如 x = 1是合法的表达式,但是 1 = x 就会报错。
变量的作用域
作用域(scope)指的是变量⽣效的范围。C 语⾔的变量作⽤域主要有两种:⽂件作⽤域(file scope)和 块作⽤域(block scope)。
**文件作用域(file scope)**是指:在源码⽂件顶层声明的变量,从声明的位置到⽂件结束都有效。
int x = 1;
int main(void)
{
printf("%i\n", x);
}
x在文件顶层声明,从声明位置开始的整个当前⽂件都是它的作⽤域。
**块作用域(block scope)**是指:由⼤括号{ } 组成的代码块,它形成⼀个单独的作⽤域。凡是在块作用域里面声明的变量,只在当前代码块有效。
int a = 12;
if(a == 12){
int b ==99;
printf("%d %d\n",a,b); //输出12 99
}
printf("%d\n",a); //输出12
printf("%d\n",b); //出错
代码块可以嵌套
{
int i = 10;
if(i == 10){
int i = 20;
printf("%d\n",i); //输出20
}
printf("%d\n",i); //输出10
}
注意:因为是“声明”,所以才会这样,正常只是“赋值”
specially :for 的循环条件部分是⼀个单独的作⽤域
//循环条件
for(int i = 0;i < 5;i++)
//循环体内部
{
int i = 999;
printf("%d\n", i); //输出5次999
}
由于循环条件部分是⼀个单独的作⽤域,所以循环体内部的 i 不会修改掉循环变量 i ,因此这段代码的运⾏结果就是打印5次 999 。
3、运算符
算数运算符
- + :正值运算符(⼀元运算符)
- - :负值运算符(⼀元运算符)
- + :加法运算符(⼆元运算符)
- - :减法运算符(⼆元运算符)
- * :乘法运算符
- / :除法运算符
- % :余值运算符
(1)+ - 没什么要说的
⼀元运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
int x = -12;
int y = +x; //y还是-12
(2)* 就乘法
(3)/
Pay attention: 两个整数相除,得到还是⼀个整数。
float x = 6 / 4;
printf("%f\n", x); // 输出 1.000000
C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分
两个运算数必须⾄少有⼀个浮点数
float x = 6.0 / 4; // 或者写成 6 / 4.0printf("%f\n", x); // 输出 1.500000
another example:
int score = 5;
score = (score /