目录
1.第一个C语言程序
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
写C语言代码,首先要写主函数main
printf是C语言提供的一个库函数
库函数的使用要包含对应的头文件"#include"
主函数是程序的入口,有且仅有一个(一个工程中main函数有且仅有一个)
2.数据类型
char //字符数据类型--->字符 1字节
short //短整型 2字节
int //整型 --->整数 4字节
long //长整型 4字节
long long //更长的整型 8字节
float //单精度浮点数 4字节
double //双精度浮点数 --->小数 8字节
这些数据类型是C语言提供的类型,也叫内置类型
sizeof是用来计算一个类型大小的---size_t --- "%u"
C语言标准规定 sizeof(long)>=sizeof(int)
计算机是能够识别二进制的 二进制:1/0;十进制0~9
3.变量,常量
3.1
//全局变量b ---定义在大括号外部
//局部变量a ---定义在大括号内部
3.2
局部变量的名字和全局变量的名字相同时,局部优先使用
3.3变量的使用
变量名要取得有意义
scanf //输入
printf //输出
3.4变量的作用域和生命周期
一个变量哪里可以使用,哪里就是它的作用域 {}内部
3.4.1作用域
1)局部变量的作用域是局部变量所在的局部范围
2)全局变量的作用域是整个工程
3.4.2生命周期
1)局部变量:进入作用域生命周期开始,出作用域生命周期结束
2)全局变量:整个程序的生命周期
3.5常量
3.5.1字面常量
20; //整型常量
3.14; //浮点型常量
'a'; //字符型常量
"abc"; //字符串常量
int a=10;
char ch='w';
3.5.2const修饰的常变量
const是一个C语言的关键字,const---常属性的意思
注意:const修饰的常变量是不能直接修改的
//下述程序的n本质上是一个变量,所以不能使用在数组定义时指定大小,所以n是常变量
3.5.3 #define定义的标识符常量
3.5.4 枚举常量
C语言提供了一个枚举类型
enum 标识符
{
//枚举常量
};
枚举常量的默认值是从0开始的,依次向下递增1.
4.字符串,转义字符,注释
4.1字符串
"hello world\n"
字符串的结束标志是一个'\0'的转义字符.在计算字符串长度时'\0'是结束标志,不算做字符串内容
strlen---库函数,用来求字符串的长度,计算的是'\0'之前出现的字符串个数
//数组arr2没有'\0',所以计算的值是一个随机值
4.2 转义字符
转变原来的意思
转义字符 | 释义 |
\' | 用于表示字符常量 ' |
\'' | 用于表示字符串内部的双引号 |
\\ | 表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行符 |
\? | 在书写连续多个?时使用, 防止他们被解析成三字母词 |
\r | 回车 |
\t | 水平制表符 TAB |
\v | 垂直 |
\ddd | ddd表示1~3个八进制的数字,eg:\130 X |
\xdd | dd表示2个十六进制数字,eg:\x30 x |
'\130'代表的就是把130这个8进制数数字转换成10进制后,得到88,作为ASCII码值代表的字符'X';
'\x31'将31这个16进制数字转换成10进制得到49,作为ASCII码值代表的字符'1';
4.3 注释
1)注释是用来解释代码的
2)可以用来注释一些不需要的代码
/*
C语言的注释风格,不支持嵌套
*/
// C++的注释风格
5.选择语句
if...else... switch
6.循环语句
while for do...while...
7.函数
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
scanf函数在调用失败,读取失败的时候,会返回EOF(end of file)--->本质(-1)
多组输入时,while ( scanf(...) !=EOF) {}
函数的特点就是简化代码,代码复用。
8.数组
能够存放一组相同类型的元素
int arr1[10]={1,2,3,4,5,6,7,8,9,10};//arr1是它的数组名
int arr2[10]={0};//首元素为0,剩下的元素初始化为0,不完全初始化
数组是有下标的,下标是从0开始的
10.操作符
算术操作符 | + - * / %(取模) |
移位操作符 | >> << 移动的是二进制位 |
位操作符 | 按位与& 按位异或^ 按位或| |
赋值操作符 | = += -= *= /= &= ^= |= >>= <<= |
关系操作符 | > >= < <= != == |
逻辑操作符 | && 逻辑与 ||逻辑或 |
单目操作符---只有一个操作数 | |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
++ | 前置,后置++ |
-- | 前置,后置-- |
(类型) | 强制类型转换 |
int a=0;
sizeof(a);//4
sizeof(int);//4
int b=10;
int b=++a;//前置++,先++,后使用,a=a+1,b=a
int b=a++; //后置++,先使用,后++,int b=a;,a=a+1
条件操作符
exp1?exp2:exp3 三目操作符
//若exp1的表达式为真,则输出exp2,否则输出exp3
逗号表达式
exp1,exp2,exp3,exp4
//表达式会从左到右依次计算,整个表达式的结果是最后一个表达式的结果
下表引用,函数调用和结构成员
[] () . ->
int arr[10]={0};
arr[5]=9;//[]--下标引用操作符,它的操作数:数组名,下标
m=a(3,5);//()--函数调用操作符,它的操作数:函数名,3,5