一,数据类型
1.数据类型的介绍
C语言中提供了丰富的数据来描述生活中的各种数据。例如:整型类型描述整数,字符类型描述字符,浮点类型描述小数。那么,“类型”是什么呢?类型就是相似数据所拥有的共同特征,编译器只有了解了数据类型,才知道如何操作。本文主要是简单讲一下内置类型。
2.内置类型
a.字符型
char[signed] charunsigned char
b.整型
// 短整型short [int][signed] short [int]unsigned short [int]// 整型int[signed] intunsigned int// ⻓整型long [int][signed] long [int]unsigned long [int]// 更⻓的整型//C99 中引⼊long long [int][signed] long long [int]unsigned long long [int]
c.浮点型
floatdoublelong double
d.布尔类型
C语言原来是没有布尔类型的,而是有整数0表示假,非零值表示真。在C99中才引入布尔类型,专门表示真假。
1 _Bool
布尔类型头文件为:
<stdbool.h>
布尔类型变量取值:true或false
1 #define bool _Bool
2
3 #define false 0
4 #define true 1
3.数据类型的长度
数据类型是有长度的,使用不同的数据类型,能够创建出长度不同的变量,变量的长度不同,存储的数据范围就有所差异。
a.sizeof操作符
sizeof是一个关键字,也是操作符,sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
1 sizeof (类型)
2 sizeof 表达式
注:①sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
②sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
③sizeof 的计算结果是 size_t 类型的。size_t是一种无符号的整数,这种整数值在打印的时候,使用%zd。
④sizeof中表达式不计算。表达式的执行要在程序运行期间才能执行,而在编译期间已经将sizeof处理掉了,所以在运行期间就不会执行表达式了。
二,变量
1.变量的创建
了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。
int age;//整形变量
量在创建的时候给⼀个初始值,就叫初始化。
int age =18;//初始化
2.变量的分类
• 全局变量:在⼤括号外部定义的变量就是全局变量 (全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的)。
• 局部变量:在⼤括号内部定义的变量就是局部变量 (局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的)。
如果局部和全局变量名字相同会怎么样呢?
运行结果:
从中我们可以看出当局部变量和全局变量同名的时候,局部变量优先使用。(简记:局部优先)
注:⼀般我们在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区。 a. 局部变量是放在内存的栈区 b. 全局变量是放在内存的静态区 c堆区是用来动态内存管理的。
三,算术操作符
我们在写代码的时候,会涉及到运算,这时就需要用到算术操作符。他们分别是:+,-,*,\,%,它们都是双目操作符。注:操作符也被叫做运算符。
1.+和-
+ 和 - ⽤来完成加法和减法。
+ 和 - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符。
2.*
3./
4.%
四,赋值操作符
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
1.连续操作符
2.复合操作符
1 int a =10;2 a =a+3;3 a =a-2;
这样的代码我们可以换一下:
1 int a =10;2 a +=3;3 a -=2;
这样就方便我们写代码了。
五,单目操作符
1.++和--
int a = 10;int b = ++a; //++ 的操作数是 a ,是放在 a 的前⾯的,就是前置 ++printf("a=%d b=%d\n",a , b);
计算⼝诀:先+1,后使⽤;
int a = 10;a = a+1;b = a;printf("a=%d b=%d\n",a , b);
计算⼝诀:先使⽤,后+1
计算⼝诀:先-1,后使⽤
计算⼝诀:先使⽤,后-1
2.+ 和 -
1 int a = +10; 等价于 int a = 10;
六,强制类型转换
1 (类型)
int a = 3.14;//a 的是 int 类型 , 3.14 是 double 类型,两边的类型不⼀致,编译器会报警告
1 int a = (int)3.14; // 意思是将 3.14 强制类型转换为 int 类型,这种强制类型转换只取整数部分
七,printf介绍
1.基本用法
#include <stdio.h>int main(void){printf("Hello World");return 0;}
#include <stdio.h>int main(void){printf("Hello World\n");return 0;}
#include <stdio.h>int main(void){printf("Hello\nWorld\n");printf("Hello\n");printf("World\n");return 0;}
2.占位符
a.占位符
printf() 可以在输出⽂本中指定占位符。
// 输出 There are 3 apples#include <stdio.h>int main(){printf("There are %d apples\n", 3);return 0;}
#include <stdio.h>int main(){printf("%s will come tonight\n", "zhangsan");return 0;}
#include <stdio.h>int main(){printf("%s says it is %d o'clock\n", "lisi", 21);return 0;}
b.占位符列举
• %c :字符。• %d :⼗进制整数。• %f :⼩数(包含 float 类型和 double 类型)。• %hd :⼗进制 short int 类型。• %p :指针。(地址)• %s :字符串。• %u :⽆符号整数(unsigned int)。
3.输出格式
a.输出格式
b.限定宽度
#include <stdio.h>int main(){printf("%5d\n", 123); // 输出为 " 123"return 0;}
#include <stdio.h>int main(){printf("%-5d\n", 123); // 输出为 "123 "return 0;}
// 输出 " 123.450000"#include <stdio.h>int main(){printf("%12f\n", 123.45);return 0;}
c.总是显示正负号
#include <stdio.h>int main(){printf("%+d\n", 12); // 输出 +12printf("%+d\n", -12); // 输出 -12return 0;}
d.限定⼩数位数
// 输出 Number is 0.50#include <stdio.h>int main(){printf("Number is %.2f\n", 0.5);return 0;}
// 输出为 " 0.50"#include <stdio.h>int main(){printf("%6.2f\n", 0.5);return 0;}
#include <stdio.h>int main(){printf("%*.*f\n", 6, 2, 0.5);return 0;}// 等同于 printf("%6.2f\n", 0.5);
e.输出部分字符串
// 输出 hello#include <stdio.h>int main(){printf("%.5s\n", "hello world");return 0;}
八,scanf介绍
#include <stdio.h>int main(){int score = 0;printf("请输⼊成绩:");scanf("%d", &score)printf("成绩是:%d\n", score);return 0;}
![9353e91cea9649888312a06cc8af2672.png](https://i-blog.csdnimg.cn/blog_migrate/edb3185a6f858f8ed7e27e64b7da9cdb.png)
![85166784d24e4cb3a1f1f27c57792145.png](https://i-blog.csdnimg.cn/blog_migrate/2e3e265a51924c2eac0fe9b60d134340.png)
1.基本用法
scanf("%d", &i);
scanf("%d%d%f%f", &i, &j, &x, &y);
#include <stdio.h>int main(){int x;float y;// ⽤⼾输⼊ " -13.45e12# 0"scanf("%d", &x);printf("%d\n", x);scanf("%f", &y);printf("%f\n", y);return 0;}
#include <stdio.h>int main(){int x;float y;// ⽤⼾输⼊ " -13.45e12# 0"scanf("%d%f", &x, &y);return 0;}
2.scanf的返回值
1 #include <stdio.h>int main(){int a = 0;int b = 0;float f = 0.0f;int r = scanf("%d %d %f", &a, &b, &f);printf("a=%d b=%d f=%f\n", a, b, f);printf("r = %d\n", r);return 0;}
3.占位符
• %c :字符。• %d :整数。• %f : float 类型浮点数。• %lf : double 类型浮点数。• %Lf : long double 类型浮点数。• %s :字符串。• %[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。
#include <stdio.h>int main(){char name[11];scanf("%10s", name);return 0;}
4.赋值忽略符
#include <stdio.h>int main(){int year = 0;int month = 0;int day = 0;scanf("%d-%d-%d", &year, &month, &day);printf("%d %d %d\n", year, month, day);return 0;}
#include <stdio.h>int main(){int year = 0;int month = 0;int day = 0;scanf("%d%*c%d%*c%d", &year, &month, &day);return 0;}