C语言编程


C语言学习第二节

接上一节继续学习,本节学习转义字符,语句与语句分类,数据类型

一、转义字符

(https://en.cppreference.com/w/c/language/escape.html)

1. 含义:转变原来意思的字符,如\n\0

示例:

#include<stdio.h>

int main()
{
	printf("abcndef\n");
	printf("abc\ndef");
	return 0;
}
结果为abcndef
	  abc
	  def

n变为\n得到的结果不一样,转义字符将字符n的意思转变为换行
注意:变成转义字符后,字符长度为1,如:\t一共有两个字符长度,但\t字符长度为1

(1)三字母词

  • 如今编译器中无法验证三字母词,这里做简单的说明:编写代码时,出现??)会变成]??(会变成[
  • 这里使用转义字符\?,防止编辑器将??)变成]??(变成[等,正常打印出??)??(

示例:

#include<stdio.h>

int main()
{
	printf("(are you ok??)\n");
	printf("(are you ok\?\?)");
	return 0;
}
结果为(are you ok??)
      (are you ok??)
  • 这里结果一致是由于现在的编辑器默认不启用三字母词,其实第一个结果应(are you ok],这里一般仍利用转义字符打印字符

(2)常见转义字符

  • \?在书写连续多个问号使用,防止他们被解析成三字⺟词,在新的编译器上没法验证了
  • \'表示字符常量’
  • \"表示一个字符串内部的双引号
  • \\表示一个反斜杠,防止它被解释为一个转义序列符——经常打印路径
  • \a警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生
  • \b退格键,光标回退一个字符,但不删除字符;并且使用多少\b,光标将会回退多少个字符——观察其作用时,用F10快捷键
  • \f换页符,光标移到下⼀页。在现代系统上,这已经反映不出来了,行为改成类似于\v
  • \n换行符
  • \r回车符,光标移到同一行的开头
  • \t水平制表符,光标移到下一个水平制表位,通常是下⼀个4或8的倍数;占8个字符——输出对齐信息时使用
  • \v垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同⼀列
  • \ddd表示八进制的转义字符,d d d表示八进制下的三个数(可以d,dd,ddd,最多三个数)——八进制下的数为0-7,即\130是八进制下的转义字符,但是\180不是八进制下的转义字符
  • \xdd表示十六进制的转义字符,x是固定的,d d表示十六进制下的两个数(可以d,dd,最多两个数)——十六进制下的数为0-15
  • \0NULL字符,是转义字符\ddd中的一种,其ASCII码值为0

示例:

#include<string.h>
#include<stdio.h>

//数清字符串的长度,尤其注意转义字符;这里判断哪些是字符,哪些是转义字符
int main()
{
	int len1 = strlen("c:\test\145\besr.c");
	printf("%d\n",len1);
	int len2 = strlen("c:\test\145\1besr.c");
	printf("%d\n", len2);
	return 0;
}


//\ddd与\xdd分别表示八进制与十六进制的转义字符
int main()
{
	printf("%c\n", '\243');//243是八进制,换成十进制为163,ASCII码表中十进制163对应的字符为?
	printf("%c\n", '\x56');//56是十六进制,换成十进制为86,ASCII码表中十进制163对应的字符为V
	return 0;
}


//\t水平制表符,保证信息对齐
int main()
{
	printf("a\taa\taaa\taaaa\t\n");
	printf("bb\tbbb\tbbbb\tbbbbb\t\n");
	return 0;
}


//\r光标移到同一行开头
int main()
{
	printf("abcdef\r");
	return 0;
}


//\b光标回退到前一个字符,后面有多少个\b光标就回退到前多少个字符
int main()
{
	printf("abcdef");
	printf("\b");
	printf("xxx");
	return 0;
}


int main()
{
	printf("abcdef\b\b\b");
	return 0;
}


int main()
{
	printf("abcdef\n");
	printf("a\bcdef\b");
	return 0;
}


//\a发出警告
int main()
{
	printf("%c\n", '\'');
	printf("%s\n", "\"");
	printf("G:\test\file\bVC\n");//假设为一个文件路径
	printf("G:\\test\\file\\bVC\n");
	printf("\a");
	return 0;
}


int main()
{
	printf("(are you ok??)\n");
	printf("(are you ok\?\?)");
	return 0;
}


//\n换行
int main()
{
	printf("abcndef\n");
	printf("abc\ndef");
	return 0;
}

(1)13;14
(2)?;V
(3)
a aa aaa aaaa
bb bbb bbbb bbbbb
(4)按F10进行操作,可以看到光标在第一个字符处
(5)(6)(7)按F10进行操作
(8)' ;" ;G: est ilVC; G:\test\file\bVC


二、语句与语句分类

C语言代码语句共有五种分类:空语句,表达式语句,函数调用语句,复合语句,控制语句

1.空语句

  • 一个分号;就是一个语句,称空语句
  • 应用场景:需要一个语句,但是不需要他起作用,可用空语句

代码如下:

#include<stdio.h>

int main()
{
	;//空语句
	return 0;
}

2.表达式语句

  • 表达式之后加一个;就是一个语句,表达式如:a+bb+cint a=5

代码如下:

int main()
{
	int a = 5;
	int b = 6;
	a + b;
	return 0;
}

3.函数调用语句

  • 调用函数后加分号;——函数调用语句

代码示例:

int main()
{
	printf("abcdef");
	return 0;
}

4.复合语句

  • 一整个代码块,如上一节输出ASCII码值从32到127的字符
int main()
{
	int i = 0;
	for (i = 32; i <= 177; i++);
	{
		printf("%d ", i);
	}
	return 0;
}

5.控制语句——之后一一介绍

  • 包含三种结构:顺序结构、选择结构、循环结构;C语言中包含九种控制语句
  • 条件判断语句(分支语句)——if语句、switch语句
  • 循环执行语句——do while语句、while语句、for语句
  • 转向语句——continue语句、goto语句、break语句、return语句

三、数据类型、signed、unsigned

C语言数据类型包含内置类型与自定义类型

1.内置类型(C语言自带)

整型家族包含字符型与整型,signedunsigned是修饰整型家族数据类型的关键词

  • signed——数据带有符号的,有正负号,如温度、海拔
  • unsigned——数据不带有符号的,只有0与正整数——较于signed,数据类型的取值在同样长度内存的最大整数值会大一倍
  • 下面[]里面的内容可以省略

(1)字符型——char

  • 取自字符英文——character
char a;//字符型
signed char a;//有符号的字符型,这里的signed char不等于char,signed不可隐藏
unsigned char a;//无符号的字符型

(2)整型

  • 取自整型英文——integer
  • short [int]——short——短整型
  • int——整型
  • long [int]——long——长整型
  • long long [int]——long long——更长的整型
short a;//短整型
int a;//整型
long a;//长整型
long long a;//更长的整型
signed int  a;=[signed] int  a;//这里signed可以省略,有符号的整形
unsigned int a;//这里不可省略,无符号的整型
signed short  a;=[signed] short  a;
unsigned short a;
signed long  a;=[signed] long  a;
unsigned long  a;
signed long long  a;=[signed] long long  a;
unsigned long long  a;

(3)浮点型

这里不介绍signedunsigned

  • float
  • double
  • long double
//浮点型
float a;
double  a;
long double a;

(4)布尔类型

  • 表示真假的类型——_Bool
  • 使用库函数include<stdbool.h>

代码示例:

#include<stdio.h>
#include<stdbool.h>//引用_Bool

//可以使用_Bool或者bool
int main()
{
	bool flag1 = false;//假
	bool flag2 = true;//真

	if (flag1)
	{
		printf("haha\n");
	}
	if (flag2)
	{
		printf("hehe");
	}
	return 0;
}


int main()
{
	_Bool flag1 = false;
    _Bool flag2 = true;

	if (flag1)
	{
		printf("haha\n");
	}
	if (flag2)
	{
		printf("hehe");
	}
	return 0;
}


int main()
{
	_Bool flag1 = true;
	_Bool flag2 = true;

if (flag1)
	{
		printf("haha\n");
	}
if (flag2)
	{
		printf("hehe");
	}
	return 0;
}


int main()
{
	_Bool flag1 = false;
_Bool flag2 = false;

	if (flag1)
	{
		printf("haha\n");
	}
if (flag2)
{
		printf("hehe");
	}
	return 0;
}

(1) (2)输出hehe
(3)都输出
(4)都不输出

2.自定义类型(可以创造的类型)

  • 数组
  • 结构体——struct
  • 枚举——enum
  • 联合体——union

3. signed与unsigned

  • signed——数据带有符号的,有正负号,如温度、海拔——%d打印
  • unsigned——数据不带有符号的,只有0与正整数——较于signed,数据类型的取值在同样长度内存的最大整数值会大一倍——%u打印
  • 分出 signedunsigned是为让计算机更好的实现,比如对于身高只有正值,可以使用intunsigned int,但使用unsigned int可以更好的限制范围
    代码示例:
#include <limits.h>
#include <stdio.h>
//%d——打印有符号的数据类型
//%u——打印无符号的数据类型
int main()
{
	int a = 100;
	unsigned int b = 200;
	printf("%d\n", a);
	printf("%u\n", b);
	int c = -100;
	printf("%d\n", c);
	printf("%u\n", c);
	return 0;
}

100 200 -100 4294967196
最后一个结果可知有符号的数据类型是不可以用%u打印的,出现错误

四、数据类型长度与取值范围

(https://en.cppreference.com/w/c/language/arithmetic_types.html#.E6.95.B0.E6.8D.AE.E6.A8.A1.E5.9E.8B)

1.sizeof

  • 计算sizeof操作符数的类型的长度,单位字节——计算的是类型的长度,单位是字节(Byte)
  • 1字节=8 bit, bit为计算机二进制中1,0存储的空间(就是一个小格子)
  • sizeof(变量)——sizeof(m)或sizeof m——这里可以脱去括号
  • sizeof(数据类型)——sizeof(int)——这里不能脱括号,必须有括号
  • sizeof(表达式)——sizeof(3+5)——这不参与括号内的运算,只是计算数据类型长度,看示例
  • %zu——在printf函数中打印

代码示例一——计算各个数据类型的长度

#include<string.h>
#include<stdio.h>
#include<stdbool.h>//引用_Bool

int main()
{
	int m = 5;
	//sizeof(m);
	//sizeof m;
	//sizeof(int);
	//sizeof(3+5);
	printf("%zu\n", sizeof m);//int长度
	printf("%zu\n", sizeof(m));//int长度
	printf("%zu\n", sizeof(int));//int长度
	printf("%zu\n", sizeof(3+5));//int长度

	printf("%zu\n", sizeof(char));//char长度
	printf("%zu\n", sizeof(_Bool));//_Bool长度
	printf("%zu\n", sizeof(short));//short长度
	printf("%zu\n", sizeof(int));//int长度
	printf("%zu\n", sizeof(long));//long长度——有可能是4个字节,也有可能是八个字节(取决于数据模型)
	printf("%zu\n", sizeof(long long));//long long长度——固定的八个字节
	printf("%zu\n", sizeof(float));//float长度
	printf("%zu\n", sizeof(double));//double长度
	printf("%zu\n", sizeof(long double));//long double长度——有可能是8个字节,也有可能是16个字节(取决于数据模型)

	return 0;
}

4 4 4 4 1 1 2 4 4 8 4 8 8

代码示例二——sizeof不计算括号内的运算

#include<stdio.h>


int main()
{
	short s=5;
	int a=10;
	printf("%zu\n", sizeof(s = a + 5));
	printf("%d\n", s);
	return 0;
}

2;5——直接输出的是short的长度,并且输出的s值不是15,而是5,说明sizeof不进行括号内的运算

2.取值范围——数据类型中存储的数值的最大值最小值区间

  • 对于数据类型的取值范围可以搜索头文件limits.hfloat.h,只需记住前面名称即可
  • 若要打印出某个数据类型的最大值,需要记清楚名称,%d打印,并且使用头文件limits.hfloat.h

代码示例:

#include <limits.h>
#include <stdio.h>

//打印有符号int类型的最大值
int main()
{
	printf("%d\n", INT_MAX);
	return 0;
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了数据类型与计算数据类型长度,接下来会详细介绍变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值