C语言之旅1----(原来C语言还能这样学!!!)

3 篇文章 0 订阅
3 篇文章 0 订阅

1.语句和语句分类

  • 语句:我们知道,中文用一个句号,英文用一个点号来结束一句话(表示一句话)。在C语言中,每一行的代码末尾就用;结束,表示一句代码(语句)写完。也就是说,每一个;代表一条语句。代码展示:
int a=10;    //表示一条语句
printf("Hello,World");  //表示一条语句
  • 语句的分类:可以分为:空语句,表达式语句,复合语句,控制语句,调用函数语句
    • 空语句: 顾名思义,就是这条语句什么实质性的内容也没有(里面啥也没有),就一个光秃秃的;。比如;
                  ; //里面啥也没有,就只有个;,这就是一条空语句

讲到这里,肯定有人心里面产生了疑问,既然空语句什么也不执行,为什么还要有空语句呢?对于这个疑问咱们不在本章节细讲,会在后面进行详细的讲解的。我先简单的讲一下其中一个用途。当我们的程序需要一条空语句且不需要它执行操作的时候,就需要一条空语句。

  • 表达式语句:就是这条语句是由表达式所构成的。(是不是有点废话),直接上代码展示:
int a=10;   //表达式语句
int b=20;	//表达式语句
int c=a+b;	//表达式语句
a++//a++的本质就是a=a+1;所以还是表达式语句

也就是说带=的,就是表达式语句

  • 复合语句:复合语句顾名思义就是语句有点复杂,有点多。其实每个复合语句就是一个就是一个代码块,如代码所示:
#include <stdio.h>
int main()			//打印0~122数字的实例代码
{
	int i=0;       //表达式语句
	for(i=0;i<123;i++)      //for{}整体就是复合语句
	{
		printf("i=%d ",i);
	}
	return 0;
}

其实每个子函数(子程序)也是一个个代码块(复合语句),如代码所示:

#include <stdio.h>
int add(int a,int b)   //add子程序就是一个复合语句(代码块)
{
	int c=a+b;
	return c;
}
int main()
{
	printf("计算的结果:%d",add(5,3));
	return 0;
}
  • 调用函数语句:这个从字面意思就能知道是啥意思,调用函数=调用子程序。如代码所示:
#include <stdio.h>
void Print_f(int arr[],int sz)  //自己定一个打印函数(程序)
{
	int i = 0;
    for (i = 0; i < sz; i++)
    {
	     printf("arr[i]=%d\n", arr[i]);
    }
}
int main()
{
	int arr[]={1,2,3,4,5};   //进行数组元素的打印
	int sz=sizeof(arr)/sizeof(arr[0]);
	Print_f(arr,sz);	//调用函数语句
	return 0;
}

运行的结果图,如图所示;在这里插入图片描述

  • 控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构,选择结构,循环结构),它们有特定的语句定义符组成,C语言有九种控制语句
    • 1.条件判断语句也叫分支语句if语句,switch语句;
    • 2.循环执行语句do while语句,while语句,for语句;
    • 3.转向语句break语句,goto语句,return语句;
      return,for这俩各位前面都见过了吧,至于这些语句具体怎么用,后面我们都会详解的(请各位期待一下吧),

2.注释是什么?为什么写注释?

  • 注释:这玩意儿太重要了,它就是对你所写的代码进行一个标注(解释),我们写完代码后要进行适当的注释。我们用'//'来进行注释,'//'单行注释,我们在'//'后面写一些代码的信息,在它后面想写什么就写什么,编译器会自动忽略//后面的信息——不进行编译。所以//可以在代码后面写些信息或者注释掉代码(编译器就无法进行编译),还有一个多行注释,用/**/,来进行多行注释,这种多行注释用来注释代码的(比单行注释代码要快些),一旦注释代码后,编译器就不进行编译,如图代码所示:
int a=10;       //对a进行赋值
int b=20;		//对b进行赋值
int c=a+b;		//a和b相加的值赋给c
// int a=10;    //单行注释
/*int g=10;    多行注释
float n=12.3;
*/

进行图片展示—未注释:在这里插入图片描述
进行图片展示—单行注释在这里插入图片描述
因为我们把// int i=10;进行了单行注释,所以编译器不进行编译,又因为我们调用了i,但编译器没有进行编译,所以就报错了。
进行图片展示—多行注释在这里插入图片描述

  • 为什么要写注释呢? 这个问题的答案很简单,就是为了让自己的代码更有可读性。当我们过好了长时间,回过头来看自己写的代码,如果当时我们给自己的代码进行了注释,我们能很快想起来每句代码的意思,反之,我们可能要好半天都无法想起来当时自己写的啥意思。给代码写注释,也为了方便他人进行阅读。我们可以进行换位思考,假如有一天,我们需要一份代码,结果啥注释也没写,那让我们怎么去看明白,对吧!当然注释,不用每行都些(不用想写作文一样),我们要适当的注释。

3.数据类型介绍

  • 数据类型:“类型”,就是一些元素所拥有的共同特征,比如,1,3,45……这些统称为整数,12.3,1.5……,这些统称为小数。“数据类型”,也就是对数据进行一个个的分类。只有分类好了(或者知道了数据类型),我们才能更好的对生活中的事物进行准 确的描述,编译器才知道怎样进行操作
  • 数据类型的分类:在这里插入图片描述
    本章节中,我们只讲内置类型,至于自定义类型我们后面会进行详细的讲解。内置类 :就是这些变量(什么是变量,我们下节进行讲解!)类型,C语言中已经给 我们规定好了,我们直接用就OK。自定义类型:虽然C语言中已经给我们规定了那么多种的变量类型,但在描述一些复杂的变量时候,内置类型就无法满足了,就需要我们根据自己的需求自己进行创建变量。(比如,当我们创建一个学生管理平台,描述一个学生的时候,我们不能单一描述他的身高或体重,因为描述一个完整的学生需要很多种变量,这个时候需要自定义类型—结构体)。-----'[]'内容的东西可以省略不写。
    • 字符型在这里插入图片描述

    • 整型在这里插入图片描述
      在C99后,C语言新增了更长整形long long:在这里插入图片描述

    • 浮点型在这里插入图片描述
      简单进行解读float:单精度. double:双精度。long double:多精度/长精度。

    • 布尔型:这个玩意儿就一个作用—就是用来判断真假的。在C99之前我们判断真假就是——0为假,非0为真。在C99之后,就特地的创建了布尔类型来专门表示真假

#include <stdbool.h>  //为布尔型的头文件
_Bool		//表示类型一
bool       //表示类型二

布尔类型就两个值:truefalse.

布尔类型的定义;
#define  bool   _Bool
#define  false  0;
#define  true   1;

进行代码展示:

#define  _CRT_SECURE_NO_WARNINGS	1
#include <stdio.h>
#include <stdbool.h>		//使用布尔类型要包含头文件
int main()				//i为假,不会打印Hello World,只会打印False.
{
	//_Bool i = false;
	bool i = false;       //_Bool或bool定义变量i都OK
	if (i)
		printf("Hello World");
	else
		printf("False");
	return 0;
}

输出的结果图;在这里插入图片描述
当然大家也可以自行改改代码玩一玩,比如,bool i=true;等。

  • 数据类型的长度:这里先给大家讲个东西,我们创建变量的本质就是向内存申请空间,具体申请多大的空间,由变量类型(数据类型)决定。也就是说,每种数据类型都占 有一定空间,不同的数据类型占有的空间大小不同。为了测出每种数据类型占有多少空间,我们引用一个操作符sizeof,用它测出每种数据类型的大小,它的单位:字节
    • sizeof的介绍sizeof是一个关键字,也是一个操作符(什么是操作符,后面我们会讲解的),专门用来计算数据类型长度的,它的操作数可以是类型表达式
1.sizeof (类型);
2.sizeof 表达式;
  • sizeof(类型) 测得数据类型长度(代码展示) :
#define  _CRT_SECURE_NO_WARNINGS	1
#include <stdio.h>
int main()
{
	
		printf("%zd\n", sizeof(char));
		printf("%zd\n", sizeof(_Bool));
		printf("%zd\n", sizeof(short));
		printf("%zd\n", sizeof(int));
		printf("%zd\n", sizeof(long));
		printf("%zd\n", sizeof(long long));
		printf("%zd\n", sizeof(float));
		printf("%zd\n", sizeof(double));
		printf("%zd\n", sizeof(long double));

	return 0;
}

运行结果图:在这里插入图片描述

  • sizeof(表达式)sizeof后面的表达式不进行计算----代码展示:
#define  _CRT_SECURE_NO_WARNINGS	1
#include <stdio.h>
int main()
{
	int a = 2;
	int b = 10;
	printf("%d", sizeof(a = a + b));
	printf("%d", a);
	return 0;
}

运行结果图示:在这里插入图片描述
我们从结果运行图可以看出来,sizeof后面的表达式并不进行计算sizeof后面是表达式时,可以不带(),而类型要带(),我建议大家使用sizeof的时候都带上().

  • sizeof的返回值类型:不知道大家注意到没?前面,我们在打印sizeof的测量的数值时,我们有用占位符%zd,也用%d占位符。按理来讲,sizeof测得的是整数(因为字节都是整数),既然是整数,那就应该用%d占位符。这就与sizeof的返回值类型有关。其实,用%zd%d,都OK的。在这里,主要是想讲一下%zd的来源:在这里插入图片描述

4.signed和unsigned

  • signed&unsigned: 前者是表示有符号,后者表示无符号。前面咱们讲数据类型的时候,大家都见过了。signed有符号,表示书写或打印的信息可以带+,-号(+可以省 略),比如,(signed)int a=10 /-10;unsigned无符号,它表示的数值类型不可以带符号,也就是说只能表示正数。
  • signed和unsigned的区别:
    • 数值取值的范围不同
      同一种数据类型中(占有相同的字节长度),unsigned能够表示的最大整数比signed要大一倍。比如,16位的signed short int 的取值范围:-32768~32767,最大是32767;而unsigned short int的取值范围是:0~65535,最大值增大到了65535。很明显,相同长度内,unsigned表示的最大整数比signed的大多了。具体的范围可以打开limits.h这个头文件。在这里插入图片描述

    • 数据储存的方式不同
      对于整数的存储,在计算机里是以补码的形式存储的,有符号位无符号位是两种截然不同的存储方式-----后面我们会细讲,本章点到为止。

    • 因为char而不同:前面,我们讲过[signed],可以省略不写----->signed int =int.但这种方式,对于char,不一定成立,即:signed char 不一定等于 char.原因很简单,这是因为在不同的编译器中,规定不同。但大多数编译器都是默认signed char =char。------ 提醒一下大家char是个特例

5.数据类型的取值范围

上述的数据类型很多,尤其整型类型就有short、int、long、long long 四种,为什么呢?
其实每⼀种数据类型有自己的取值范围,也就是存储的数值的最大值最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系 统上不同数据类型的极限值limits.h文件中说明了整型类型的取值范围。float.h 这个头文件中说明了浮点型类型的取值范围。为了代码的可移植性,需要知道某种整数类 型的极限值时,应该尽量使用这些常量
SCHAR_MIN , SCHAR_MAX signed char的最小值和最大值。
SHRT_MIN , SHRT_MAX short 的最小值和最大值。
INT_MIN , INT_MAX int 的最小值和最大值。
LONG_MIN , LONG_MAX long 的最小值和最大值。
LLONG_MIN , LLONG_MAXlong long的最小值和最大值。
UCHAR_MAX unsigned char的最大值。
USHRT_MAXunsigned short的最大值。
UINT_MAXunsigned int的最大值。
ULONG_MAX unsigned long的最大值。
ULLONG_MAX unsigned long long的最大值。
当我们想使用这些最大值或最小值时,我们可以写数字,也可以写它们的宏定义, 比如:

#include <limits.h> //使用这些宏定义的时候要包含头文件。
i < 127;---等价于---- i < SCHAR_MAX ;

6.点个彩蛋送给自己吧!!!

https://www.bilibili.com/video/BV13o4y137ct/?spm_id_from=333.337.search-card.all.click&vd_source=7d0d6d43e38f977d947fffdf92c1dfad在这里插入图片描述
每章一句‘你的日积月累,早晚会成为别人的忘尘莫及’。感谢各位看到这里,希望你们能有所收获,点赞+关注+收藏是对我最大的鼓励,咱们下期见啦,拜拜各位!!!

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值