一、常见数据类型
1.整数类型
int i = 0;
初始C语言时,int类型可以满足大部分程序的整数类型需求。int是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。
short int i = 0; short i = 0;
short int类型(或简写为short)是有符号整型,占用的存储空间可能比int类型少,常用于较小数值的场合以便节省空间。
long int i = 0; long i = 0;
long int类型(或简写为long)是有符号整型,占用的存储空间可能比int类型大,常用于比较大数值的场合。
long long int i = 0; long long i = 0;//C99新加
long long int类型(或简写为long long)是有符号整型,占用的存储空间可能比long类型大,常用于非常大数值的场合,该类型至少占64位。
2.浮点数类型
float i = 0;
float类型是单精度浮点数类型,可以至少表示6位有效数字。
double j = 0;
doule类型是双精度浮点数类型,可以至少表示10位有效数字。
long double k = 0;
C语言中规定,long double用于比double更高精度的要求,但只要求至少和double精度相同。
3.布尔类型
#include<stdbool.h>//需要包含头文件<stdbool.h> int main(void) { _Bool flag = true; if(flag) printf("ok!"); }
C99标准中新增的_Bool类型,用于表示布尔值,即逻辑值true和false。
4.字符类型
char = 'a';
char类型用于存储字符,但是从技术层面来讲,char是整数类型,由于ASCII值可知,char类型实际上储存的是整数而非字符。
二、变量
1.变量的创建
在C语言中,将经常变化的值称为变量,不变的值称为常量。而类型的存在就是为了创建不同的变量。
data_type name; | | //数据类型 变量
在定义变量时,可以给予变量一个初始值,叫初始化。
int num = 10; float ret = 1.2;
2.变量的分类
(1)全局变量
全局变量是在大括号外部定义的一个变量。
#include<stdio.h> int num = 10; int main(void) { printf("%d ", num);//打印值为10 }
全局变量的使用范围比较广,在整个工程中都是可以使用到。
(2)局部变量
局部变量在大括号内部定义的一个变量,可以在循环中、函数中等等。
#include<stdio.h> int mian(void) { int i = 1; while(i<2) { float n = 10/i; printf("%d ", num); i = i + 1; } }
局部变量只能在自己所在的局部范围内使用。
如果全局变量和局部变量的名字相同会优先打印局部变量。
三、运算符
C语言中使用运算符表达算数运算。C语言中的运算符的使用范围非常广,在表达式,语言,函数中都可以使用。
1.加分运算符
a+b; c=a+3; 3+3; printf("%d ", c+d, 2+2, 3+f);
加法运算符“+”运用于加法运算,使运算符俩侧的值相加。 加法运算符俩侧可以是变量或者是常量。
2.减法运算符
a-b; c=a-3; 3-3; printf("%d ", c*d, 2-2, 3-f);
减法运算符“-”运用于减法运算,使运算符俩侧的值相减。 减法运算符俩侧同样可以是变量或者是常量。
3.乘法运算符
ret = 8*3; cam = 1*ret; hil = ret*cam; printf("%d ", 1*1, ret*hil);
乘法运算符“*”运用于乘法运算,使运算符俩侧的值相减。
4.除法运算符
除法运算符“/”运用于除法运算,/左侧是被除数,/右侧是除数。在进行除法运算时,整数除法和浮点数除法不同
//整数除法 metre = 8/4;//值为2 ret = 8/3;//值为2
由于整数除法的结果只能为整数,所以在C语言中,整数除法得到的小数部分被丢弃,这一过程被称为截断。
//浮点数除法 num = 3.0/1.0;//值为0.3333334
浮点数除法的结果只能是浮点数。
5.求模运算符
求模运算符“%”,也称求余运算符,可以求得俩个整数的余数,且只能运用于整数运算。
num = 9%3;//值为0 ret = 7%3;//值为1
加法、减法、乘法、除法、求模运算符都是双目运算符,即运算符俩侧都需要有运算对象。
6.符号运算符
“+”和“-”被用来表示正负。
int i = 1; int j = +1;//等价于i=1; int k = -1;
符号运算符为单目运算符,即单侧需要有运算对象。
7.自加运算符
自加运算符“++”,也称递加运算符,可以是作用对象值递加1。使用自加运算符时会有俩种情况,++出现在变量前面,称为前缀递加;++出现在变量后面,称为后缀递加。
++i;//前缀递加 j++;//后缀递加 //i和j的值都加1
俩者在实际使用中也有异同。
//前缀递加 int k = 0; int i = 5; k = ++i;//k=6;i=6; //口诀:先自加,后使用
前缀递加在使用时,++在前面,需要先自加,然后赋值。
//后缀递加 int m = 0; int n = 5; m = n++;//m=5;n=6; //先使用,后递加
后缀递加在使用时,++在后面,需要先赋值,然后自加。
8.自减运算符
自减运算符在使用时和自加运算符相同。
自减运算符“–”,也称递减运算符,可以是作用对象值递减1。使用自减运算符时也会有俩种情况,–出现在变量前面,称为前缀递减;–出现在变量后面,称为后缀递减法。
//前缀递减 int k = 0; int i = 5; k = --;//k=4;i=4; //口诀:先自减,后使用
前缀递减在使用时,–在前面,需要先自减,然后赋值。
//后缀递减 int m = 0; int n = 5; m = n--;//m=5;n=4; //先使用,后递加
后缀递减在使用时,–在后面,需要先赋值,然后自减。
自加、自减运算符也是单目运算符,需要单侧有运算对象。
9.赋值运算符及赋值表达式
(1)赋值运算符
赋值运算符“=”可以将一个表达式的值赋给变量。
int i = 0; i = 5 * 4; i = i + 1;
1.被赋值的变量必须是单个变量,且必须在赋值运算符的左边。
2.赋值运算符“=”与数学中的“=”不一样。
3.当表达式的值类型与被赋值变量的类型不同,但都是数值或者字符类型时,系统会自动将表达的值类型改变为被赋值变量的类型。
(2)复合赋值运算符
复合赋值运算符,即在赋值运算符之前加上双目运算符。C语言中有十种复合赋值运算符:+=、-=、/=、*=、%=、>>=、<<=、&=、|=、^=.
int i = 0; i = i + 9; i += 9;//等价于 i=i+9;
复合赋值预算符可以简化过程,提高编译效率。
10.逗号运算符
逗号运算符“,”,也称顺序求值运算符,可以将多个表达式连接起来以此求值。
int i = 0; i = 4 + 5,i * 4//没有; //先计算i=4+5;得到i=9;再计算i*4=36; //整个逗号表达式的值为36.
逗号表达式的值一般为:表达式1,表达式2,……表达式n
需要依次计算每个表达式的值,最后一个表达式计算的是这个逗号表达式的值。
四、printf相关问题
以提问的方式简答printf函数相关问题,以便检测大家
1.何为printf函数?
使用头文件#include格式输出函数printf是按照指定的格式,向显示器输出不同类型的数据·(int,float,char等),printf函数的格式一般为printf(格式控制,输出列表)。
printf("a=%d\n", a);
2.格式控制是什么?
格式控制是用在“”中,其包含三种信息:a=是普通字符,%d是格式说明(占位符),\n是转义字符。
3.输出列表是什么?
输出列表是为了输出数据,可以是变量、常量、字符、字符串或者表达式。
4.格式说明(占位符)是个啥?
格式说明占位符}的一般形式为:%[标志][宽度][精度][长度][类型]组成。
printf("%-5.3ld", i);
格式说明占位符}的作用是将输出的数据转化为指定的格式输出。
格式说明(占位符}由转换说明和转换说明修饰符组成,转换说明把储存在电脑里的二进制格式的值使用不同的类型输出,转换说明与打印的数据类型相匹配,例如:“%d打印整数类型,%f打印小数类型,%c打印字符类型,%s打印字符串类型……”
转换说明修饰符可以输出不同类型的值时对其格式进行修饰,例如“可以改变字段宽度的%*d,可以改变精确度的%.*f。”
通常来讲,占位符中还有标记,由于其也起修饰作用,可以归类在修饰符中对占位符进行修饰,例如“%-*d可以让输出值向左对齐”
5.转换说明有哪些?
转换说明为%[类型],不同的[类型]会输出不同的值。
6.如何多个占位符怎么一起使用?
格式控制中的一个占位符对应唯一的输出列表中的数据,是按照顺序一一对应的关系。
7.如何如何限定输出最小宽度?
%[宽度][类型]中宽度为正整数,可以输出结果的宽度。若结果长度大于指定宽度,输出结果长度;若结果长度小于指定宽度,输出长度为指定长度,输出的数据向右对其,左面空余部分为空格。
8.如何限制小数的使用精度?
%[精度][类型]中精度为.加正整数,可以限定小数的位数。
9.如何控制左对齐或者右对齐?
%[标志][宽度][类型]中标志可以为”-”,%-[宽度][类型]时数据向左对齐,%[宽度][类型]时数据向右对齐。
10.如何总是输出带有“+”“-”的值?
%[标志][类型]中标志可以为“+”,结果为正值会打印的数据会带有“+”,结果为负值会打印的数据会带有“-”。
11.如何改变转换说明的长度?
%[长度][类型]中确定确定类型后,更换不同的[长度]可以改变字节长度。
12.%*.*f 是什么意思?
在最初打印数据时不了解应该打印的结果宽度以及结果的小数精度,可以使用代替[宽度][精度],在后面的输出列表处也需要有对应的变量或常量。
13.如何输出部分字符串?
输出字符串使用的转换说明为%s,默认输出时为全部字符。若需要输出部分的字符,可以模仿[精度]使用,例如“%.3s”打印三个字符。