C语言数据类型和变量

张开发
2026/4/5 16:24:52 15 分钟阅读

分享文章

C语言数据类型和变量
一、数据类型的介绍一字符型1.char2.signed char有符号的3.unsigned char无符号的二整形1.短整型1shortint2signedshort int3unsigned short int2.整形1int2signedint3unsigned int3.长整型1.longint2.signedint3.unsigned int4.更长的整形1.long longint2.signedlong long int3.unsigned long long int三浮点型1.float2.double3.long double四布尔类型1.写法bool或_Bool2.使用布尔类型必须包含头文件stdbool.h3.布尔变量的取值是true或者false4.例子#includestdbool.h _Bool flag true; if (flag) printf(i like C\n);五各种数据类型的长度1.sizeof操作符1sizeof是一个关键字也是操作符能够计算sizeof操作符数的类型长度单位是字节2sizeof的操作数可以使变量也可以是表达式sizeof类型 sizeof表达式当sizeof后面是表达式的时候可以省略后面的括号。3sizeof后面的表达式不真实参与运算是根据表达式的类型得出大小4sizeof的计算结果为size_t类型#includestdio.h int main(){ int a 10; printf(%zd\n,sizeof a); return 0; }2.sizeof中表达式不计算#define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h int main() { short s 2; int b 10; printf(%d\n, sizeof(s b 1)); printf(%d\n, s); return 0; }二、signed和unsigned1.signed关键字表示一个类型带有正负号包含负值2.unsigned关键字表示该类型不带有正负号只能表示零和正整数3.对于int类型默认是带有正负号的4.unsigned的好处是同样长度的内存能够表示的最大整数值增大了一倍5.unsigned int a可以写作unsigned a6.但是C语言规定char不等同于signed char可能是signed也可能是unsigned取决于当前系统。三、变量一变量的创建1.创建变量的语法形式 data_type nameeg. int age char ch double weight2.创建变量时我们要给它一个初始值就叫初始化eg.int age183.如果不知道初始值我们可以统统设置为0二变量的分类1.全局变量在大括号外部定义的变量全局使用2.局部变量大括号内部定义的变量局部使用3.如果局部变量与全局变量同名呢答案是局部变量优先使用四、算术运算符算数运算符包括 - * / %这些操作符都是双目操作符运算符又被叫做操作符一和-1.操作数位于操作符两端的数叫做操作数和-这种操作符有2个操作数的叫作双目操作符。二*三/1.整数除法1除号两端如果都是整数则执行整数除法得到的结果一定是整数2float x 6 / 4; int y 6 / 4; printf(%f\n, x); printf(%d\n, y);在上述示例中尽管x为浮点型但结果依旧是1.0而不是1.5。原因是C语言中的整数除法是整除只会返回整数部分丢弃小数部分。2.浮点数除法1当两个运算数至少有一个是浮点数时C语言就会进行浮点数除法float x 6 / 4.0; int y 6 / 4.0; printf(%f\n, x); printf(%d\n, y);此时x1.500000 y1四%1.%表示求模取余运算符返回两个整数相处的余数。2.只能用于整数3.负数求模规则结果的正负号取决于第一个运算数的正负号五、赋值运算符创建变量时给一个值叫做初始化在变量创建好后再给一个值这叫作赋值一连续赋值int a 5; int b 6; int c 7; c b a 3;方向从右向左赋值建议拆开来写二复合赋值符int a 10; a 3; a - 2;int a 10; a a 3; a a - 2;上面两段代码每一行都表示相同意思六、单目操作符 -- -一定义只有一个操作数的操作符被叫做作单目操作符二和--这里只说明--类似1.后置1口诀先使用后1int a 10; int b a; printf(a%d,b%d\n, a, b); return 0;2.前置1先1后使用2int a 10; int b a; printf(a%d,b%d\n, a, b); return 0;三和-这里的是正号-是负号都是单目操作符七、强制类型转换int a3.14上一段代码编译器在调试后会报错怎样避免这个问题呢int a(int)3.14此时编译器调试后不会报错但是强制类型转换最好不用八、scanf和printf介绍一printf1.基本用法printf不会在行尾自动添加换行符若要换行则需在需要输出的文本末尾添加“\n”使用printf这个函数之前必须添加stdio.h这个头文件2.占位符1printf参数与占位符是一一对应关系且顺序读取如果参数个数少于占位符个数可能会输出内存中的任意值2占位符列举int类型的整数的10进制形式打印%dint类型的整数的8进制形式打印%oint类型的整数的16进制形式打印%xshort int类型的整数的10进制形式打印%hdshort int类型的整数的8进制形式打印%hoshort int类型的整数的16进制形式打印%hxlong int类型的整数的10进制形式打印%ldlong int类型的整数的8进制形式打印%lolong int类型的整数的16进制形式打印%lx字符%c小数%ffloat【%f默认小数点后打印六位】 %lfdouble指针用来打印地址%p字符串%s%zdsize_t类型3.输出格式printf可以定制占位符的输出格式4限定宽度4.1printf允许限定占位符的最小宽度int main() { printf(%5d\n, 123); return 0; }%5d表示占位符的宽度至少为5位。如果不满5位对应的值前面会添加空格。输出的值默认是右对齐即输出的值前面有空格。若希望改成左对齐则在%后面插入-int main() { printf(%-5d\n, 123); return 0; }4.2总是显示正负号int main() { printf(%d\n, 12); printf(%-d\n, 12); return 0; }4.3限定小数位数举例来说若希望小数点后只保留两位则占位符可以写成%.2f还可以结合宽度限制来使用例如%6.2f或者写成以下形式printf(%*.*f\n, 6, 2, 0.5);4.4输出部分字符串%s占位符用来输出字符串默认是全部输出。如果只想输出开头部分可以用%.【m】s指定输出的长度其中【m】代表一个数字表示所要输出的长度。int main() { printf(%.7s\n, hello world); return 0; }二scanf1.基本用法1scanf函数用于读取用户的输入2格式scanf“%d”i3特别注意变量前面必须加上指针变量除外因为scanf传递的不是值而是地址。即将变量i的地址只想用户输入的值4scanf处理数值占位符时会自动过滤掉空白字符包括空格、制表符、换行符等所以空格回车等并不影响其解读数据5scanf前面的“”的最后不要带空格等空白符6int main() { int x; float y; scanf(%d%f, x, y); printf(%d\n, x); printf(%f\n, y); return 0; }2.scanf的返回值1scanf的返回值是一个整数表示成功读取的变量个数2如果没有读取或匹配失败则返回03若在成功读取任何数据之前读取错误或读取到文件结尾则返回常量EOF-1int main() { int a 0; int b 0; int c 0; int r scanf(%d%d%d,a,b,c); printf(%d, r); return 0; }3.占位符1%c不会忽略空白字符总是返回当前的第一个字符无论该字符是否为空格。而其他的占位符则都会忽略。2若要强制跳过一个或多个空白字符则可写成scanf“ %c”ch【在%前加上一个空格】3%s的规则从当前第一个非空白字符串开始读起直到遇到空白字符空格、换行符、制表符等为止。另外scanf遇到%s占位符会在字符串变量末尾存储一个空字符“\0”#includestdio.h int main() { char arr[] { 0 }; scanf(%s, arr); printf(%s\n, arr); return 0; }4使用%s时为防止系统崩溃要在scanf中规定特定形式即scanf“%【m】s”string这样的话最多读取10个字符就算有多余的也会直接丢弃不会有不安全的情况4.赋值忽略符1原因键盘输入数据时的格式要与scanf中占位符的格式相同否则会出现错误2为了避免这种情况我们可以进行如下操作scanf(%d%*c%d%*c%d, a, b, c);这样无论读取的数据中间用什么字符隔开都会被忽略

更多文章