#本文章为学习笔记,如有不足还请多多包涵。同时欢迎各位一起学习交流。
C语言基础学习笔记–01
C语言关键字, C语言简洁、紧凑,使用方便、灵活。ANSI C标准C语言共有32个关键字,9种控制语句,程序书写形式自由,区分大小写。
1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字:![在这里插入图片描述]
2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字:
char: 声明字符型变量或函数
short : 声明短整型变量或函数
int: 声明整型变量或函数
long: 声明长整型变量或函数
float: 声明单精度浮点型数据或函数
double: 声明双精度浮点型数据或函数
unsigned: 无符号数据类型,修饰整型数据
signed: 有符号数据类型,修饰整型数据
struct: 声明结构体变量或函数
union: 声明共用数据类型
enum: 声明枚举类型
void: 声明无返回值或者无参数的函数,声明无类型的指针
if: 条件语句
else: 条件语句否定分支(与 if 连用)
switch: 用于开关语句
case: 开关语句分支
default: 开关语句中的“默认”分支
for: 一种循环语句
do: 循环语句的循环体
while: 循环语句的循环条件
break: 跳出当前循环
continue: 结束当前循环,开始下一轮循环
goto: 无条件跳转语句
return: 子程序返回语句(可以带参数,也可不带参数)
auto: 声明自动变量
extern: 声明变量或函数是在其它文件或本文件的其他位置定义
register: 声明寄存器变量
static: 声明静态变量
const: 声明只读变量
sizeof: 计算数据类型或变量长度(即所占字节数)
typedef: 用以给数据类型取别名
volatile: 说明变量在程序执行中可被隐含地改变
在计算机语言中,数据有两种表达方式:常量和变量。
常量。在程序运行过程中,其值不能被改变的量称为常量。常用的常量有以下几类:
"Hello World"
#define PI 3.1415926
变量。变量代表一个有名字、具有特定属性的一个存储单元。在程序运行期间,变量的值可以改变的。 变量必须先定义后使用。
常变量。常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。常变量是由名字的不变量,而常量是没有名字的不变量。
标识符。在计算机高级语言中,用来对变量、符号常量名、函数、 数组、类型等命名的有效字符序列统称为标识符。C语言规定标识符只能有字母、数字、下划线3中字符组成,且第一个字符必须为字母或下划线。
#include
int main()
{
//声明一个变量a,a在这里没有建立存储空间
int a;
a = 10; //err, 没有空间,就不可以赋值
int b = 10; //定义一个变量b,b的类型为int,b赋值为10
return 0;
进制也就是进位计数制,是人为定义的带进位的计数方法。 对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
10000 | 20 | 16 | 10 |
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
术语 | 含义 |
---|---|
b | bit(比特)一个二进制代表一位,一个位只能表示0或1两种状态。数据传输是习惯以“位”(bit)为单位。 |
B | Byte(字节)一个字节为8个二进制,称为8位,计算机中存储的最小单位是字节。 |
kb | 千字节 1KB=1024B |
M | 兆字节 1MB=1024KB |
G | 吉字节 1GB=1024MB |
十进制转化二进制的方法:用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
28的二级制数为 11100
八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢8进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
十进制转化八进制的方法:
用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
70的八制数为 106
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示。其中A—F表示10—15这些称作十六进制数字。
#include
int main()
{
int a = 123; //十进制方式赋值
int b = 0123; //八进制方式赋值, 以数字0开头
int c = 0xABC; //十六进制方式赋值
//如果在printf中输出一个十进制数那么用%d,八进制用%o,十六进制是%x
printf("十进制:%d\n",a );
printf("八进制:%o\n", b); //%o,为字母o,不是数字
printf("十六进制:%x\n", c);
return 0;
}
一个数的原码(原始的二进制码)有如下特点:
十进制数 | 原码 |
---|---|
+15 | 0000 1111 |
-15 | 1000 1111 |
+0 | 0000 0000 |
-0 | 1000 0000 |
原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。
十进制数 | 反码 |
---|---|
+15 | 0000 1111 |
-15 | 1111 0000 |
+0 | 0000 0000 |
-0 | 1111 1111 |
反码运算也不方便,通常用来作为求补码的中间过渡。
在计算机系统中,数值一律用补码来存储。
补码特点:
十进制数 | 补码 |
---|---|
+15 | 0000 1111 |
-15 | 1111 0001 |
+0 | 0000 0000 |
-0 | 0000 0000 |
打印格式 | 含义: |
---|---|
%d | 输出一个有符号的10进制int类型 |
%o | 输出8进制的int类型 |
%x | 输出16进制的int类型,字母以小写输出 |
%X | 输出16进制的int类型,字母以大写输出 |
%u | 输出一个10进制的无符号数 |
#include
int main()
{
int a = 123; //定义变量a,以10进制方式赋值为123
int b = 0456; //定义变量b,以8进制方式赋值为0567
int c = 0xabc; //定义变量c,以16进制方式赋值为0xabc
printf("a = %d\n", a);
printf("8进制:b = %o\n", b);
printf("10进制:b = %d\n", b);
printf("16进制:c = %x\n", c);
printf("16进制:c = %X\n", c);
printf("10进制:c = %d\n", c);
unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值
printf("有符号方式打印:d = %d\n", d);
printf("无符号方式打印:d = %u\n", d);
return 0;
}
#include
int main()
{
int a;
printf("请输入a的值:");
//不要加“\n”
scanf("%d", &a);
printf("a = %d\n", a); //打印a的值
return 0;
}
打印格式 | 含义: |
---|---|
%hd | 输出short类型 |
%l | 输出long类型 |
%ll | 输出long long类型 |
%hu | 输出unsigned short类型 |
%lu | 输出unsigned long类型 |
%llu | 输出unsigned long long类型 |
字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(’ ')把字符括起来。
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型。
#include
int main()
{
char ch = 'a';
printf("sizeof(ch) = %u\n", sizeof(ch));
printf("ch[%%c] = %c\n", ch); //打印字符
printf("ch[%%d] = %d\n", ch); //打印‘a’ ASCII的值
char A = 'A';
char a = 'a';
printf("a = %d\n", a); //97
printf("A = %d\n", A); //65
printf("A = %c\n", 'a' - 32); //小写a转大写A
printf("a = %c\n", 'A' + 32); //大写A转小写a
ch = ' ';
printf("空字符:%d\n", ch); //空字符ASCII的值为32
printf("A = %c\n", 'a' - ' '); //小写a转大写A
printf("a = %c\n", 'A' + ' '); //大写A转小写a
return 0;
}
#include
int main()
{
char a;
printf("请输入a的值:");
//不要加“\n”
scanf("%c", &a);
printf("a = %c\n", a); //打印ch的字符
return 0;
}
实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。
数据类型 | 占用范围 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |