c语言学习,从入门到进阶系列(代码片段)

JackChao JackChao     2022-12-07     723

关键词:

C语言学习,从入门到进阶系列(二)

承接上文,这边帮大家解决printf里面的一些%。
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数flot
%lf 浮点数double
%e(%E) 浮点数指数输出
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数
%x(%X) 十六进制整数
%p 指针
%s 字符串
%% “%”
这边帮大家整理了一些。当然还有好多好多。
然后我们继续来了解一些C语言的其他知识。
## 全局变量与局部变量
我们可以想象整个C语言环境是宇宙。局部变量是整个宇宙中每个星球上的生物。他们没有超能力,只能在各自的星球上生活。全局变量就是超人,可以遨游整个宇宙。
这样说还是有点抽象的我们上代码。

int m = 0;  //全局变量
int main()

	printf("%d ", m);
	while (1)
	
		int m1 = 10;  //局部变量
		printf("%d ", m1);
		break;
	
	printf("%d ", m);
	return 0;

我们可以看到我们的m是超人,m1呢是像我们一样的常人。
超人可以到main()函数里面旅游,可是我们的m1只能在whil循环里面生活。当然我们的m1有理想,想去警察局去改自己的名字。把自己的名字改成m。那么问题来了,它能改名成功吗?
警察局的警察叔叔看到这份请求之后当然是同意的啦。毕竟名字自由。但是警察叔叔还是提出了建议,希望大家尽量不要改成名字一样的,每个人都是独特的,不要为了一己私欲,一味的模仿别人,要做自己。

回到学术点的东西。介绍两个知识点:

作用域和生命周期

局部变量的作用域:局部变量所在的局部范围
全局变量的作用域:整个工程
局部变量的生命周期:进入局部变量所在的范围,生命周期开始,出局部范围生命周期结束
全局变量的生命周期:程序的生命周期

当我们要引用外部全局变量的时候要用extern来提取。

extern int abc;

这样就能提取一个工程内的外部变量。(注意要标识是什么类型的变量)

const修饰的常变量

#include<stdio.h>
const int m = 0;
int a = 0;
int main()

	a = 100;
	m = 20;
	printf("%d %d", a, m);
	return 0;

我们定义了两个全局变量。a和m。m前面有一个怪怪的“帽子”const;那这个“帽子”是干什么的呢?当我们运行上面的代码的时候,相信大家都会遇到报错。为什么呢?
都是“帽子”惹的祸。因为const修饰的变量是不能被修改。所以当我们在main函数里面m = 20的时候会出现错误。
注意:常变量的定义,不是常量,只是带有了常属性。不能用于数组的大小定义。

#define定义的标识符常量

#include<stdio.h>
#define Max 100
int main()

	int a = Max;
	printf("%d", a);
	return 0;

这个标识符定义的Max是常量可以用于数组的大小定义。

枚举常量

#include<stdio.h>
enum color

	//枚举的可能取值 是常量不能更改
	green,
	blue,
	red
;
int main()

	enum color s = green;
	printf("%d %d %d ", green, blue, red);   //输出是   0 1 2 
	return 0;

enum是用来定义枚举常量的。枚举里面的初值是从0开始往下衍生的。我们也可以给他赋初值。

#include<stdio.h>
enum color

	//枚举的可能取值 是常量不能更改
	green = 3,
	blue = 9,
	red
;
int main()

	enum color s = green;
	printf("%d %d %d ", green, blue, red);   //输出是    3 9 10
	return 0;

我们可以看到我们没有给red赋初值,但与之前的red的输出不一样。所以可以知道enum里面接下来的值是依靠之前的值往下衍生的。

常量的知识差不多就是这样子啦。
那我接下来学习的知识

字符串

我们先前在第一章里面知道了char类型,是用于定义字符变量的,这个变量可以获取的字符只有一个的。是用单引号来获取的。

#include<stdio.h>
int main()

	char a = 'a';
	printf("%c", a);   //输出是  a;
	return 0;

当我们要获取一连串的字符的时候应该怎么办呢?
这个时候我们想一想,我们是不是要用一连串的地方来放这些东西。
这时候我们想到了一个东西。数组。

#include<stdio.h>
int main()

	char a[10] = "abcdef";
	printf("%s", a);   //输出是  abcdef;
	return 0;

我们可以看到a[10] 之后获取的字符串被 ” “双引号包围了。所以这个就是字符和字符串不同的地方。
那我们了解一下,这个字符串是怎么保存的呢?
依据字符的保存可以知道,一个地方放一个字符。那么我们上个代码可以想到。字符只有6个。但是地方有十个,那剩下的怎么办呢?
其实字符不止6个而是7个。为什么呢,因为我们的电脑在读取的时候,要知道字符串什么时候会结束,所以f字符之后会自带一个结束标志 \\0 。这个标志来标识结束。剩下的空间也是\\0

#include<stdio.h>
int main()

	char a[10] = "abcdef";
	char b[] =  'a','b','c','d','e','f' ,'\\0';
	char c[] =  'a','b','c','d','e','f' ;
	printf("%s\\n%s\\n%s", a ,b,c);
	return 0;


我们可以从上面的代码发现,c数组的输出有点问题。因为什么呢?
眼尖的同学会发现,c比b少了一个元素 \\0.就是因为这个偷懒,让电脑不知道什么时候结束。所以 之后会输出一串我们不知道的东西。
所以字符串的\\0很重要!!!!!
所以字符串的\\0很重要!!!!!
所以字符串的\\0很重要!!!!!

转义字符

\\a 响铃
\\b 退格(BS) ,将当前位置移到前一列
\\f 换页(FF),将当前位置移到下页开头
\\n 换行(LF) ,将当前位置移到下一行开头
\\r 回车(CR) ,将当前位置移到本行开头
\\t 水平制表(HT) (跳到下一个TAB位置)
\\v 垂直制表(VT)
\\ 代表一个反斜线字符’’
’ 代表一个单引号(撇号)字符
" 代表一个双引号字符
\\0 空字符(NULL)
\\ddd 1到3位八进制数所代表的任意字符
\\xdd 1到2位十六进制所代表的任意字符
? (三字母词)一个比较古老的概念现在的编译器大都不用了这边提一提
转义字符是 ‘\\’ 这个可以把原本字符转变一个意思。

选择语句

#include<stdio.h>
int main()

	int a = 0;
	scanf("%d", &a);
	if (a > 0)
	
		printf("正数");
	
	else
	
		printf("负数");
	
	return 0;

这边的if else语句就是选择语句。
if(判断条件)

(判断条件许可之后的操作);

else if(判断条件)

(判断条件许可之后的操作);

else

(判断条件不许可之后的操作);

这边是if else语句嵌套的模板。

循环语句

循环语句有三种。
for
whil
do
这三种循环语句的模板都不同。
for循环的代码模板
int i = 1;
for( i = 1 ; i <= n ; i ++) //运用了for循环
fact *= i;

while循环的模板
while( 循环的条件)

循环内部的执行语句; //循环条件判断的变量要改变,要不然就会死循环。

do while循环模板
do

循环语句
while(循环条件);
## 函数
还记得我们第一期的那个加法实现吗?
如果我们要实现减法,除法等等。那我们就会发现,我们的main函数越来越长,而且到时候寻找的时候又很麻烦。那我们就像main函数一样,创建一个函数。这个函数可以帮我们简化main函数里面的内容。

#include<stdio.h>

//加法函数:
int jf(int m, int n) //当中的m和n是用来接收变量的桥梁。这边的int时决定这个函数的返回值。

	return m + n;    // 实现m+n;并返回值。返回值的类型与定义时的类型相同



int main()

	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	printf("%d", jf(m, n));
	return 0;

这样子我们的main函数做的事情就少了。虽然这个函数不能淋漓尽致的把函数的好处体现,但我相信,现在在读文章的你,之后会慢慢体会,作者的能力有限,而且限于篇幅,只能稍微点到为止。在此表示歉意。

数组

当我们要存储一连串的东西的时候,就会用到数组。
数组由数组名和下标组合。

#include<stdio.h>
int main()

	int a[10];   //a是数组名,10是下标,用于查找,并且标识能存储多少数据。int是这个数组的类型。数组的定义类型同变量定义

注意:数组的下标是从0开始到最大值 - 1.就比如上面这个代码的下标是:0,1,2,3,4,5,6,7,8,9。
数组的初始化:

#include<stdio.h>
int main()

	int a[10] =  0,1,2,3,4,5,6,7,8,9 ;   //a是数组名,10是下标,用于查找,并且标识能存储多少数据。int是这个数组的类型。数组的定义类型同变量定义
	int i = 0;
	for (i = 0; i < 10; i++)
	
		printf("%d ", a[i]);   //输出结果   0 1 2 3 4 5 6 7 8 9 
	
	return 0;

数组的初始化是用来初始化的
学到这里,我们还不知道+ - * / 这些都是什么东西。还有没有像这些,一样的东西。我们下期再见。
我是来自江南的大学生,我们一起进步。乾坤未定,你我皆是黑马。

c语言学习,从入门到进阶系列(代码片段)

C语言学习,从入门到进阶系列(三)话接上文,我们聊到了操作符的地方。就是那些‘+’,‘-’,‘*’,‘/’。这些学过小学数学的应该都知道,只不过“*”这个东西会比较陌生,这个... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(六)这一期我们来讲讲函数函数是什么?我们回顾一下我们在初中,高中学习的函数,比如一次函数,二次函数……。C语言中的函数也是一样的。我们在一开始就见过函数了。那... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(六)这一期我们来讲讲函数函数是什么?我们回顾一下我们在初中,高中学习的函数,比如一次函数,二次函数……。C语言中的函数也是一样的。我们在一开始就见过函数了。那... 查看详情

c语言学习从入门到进阶(代码片段)

循环继续的学习。这边我们学习一下循环的嵌套;我们之前学习过条件语句的嵌套,其实循环语句的嵌套也是一样的。我们看一个代码:#include<stdio.h>intmain() for(inti=0;i<10;i++) for(intj=0;j<10;j++... 查看详情

c语言学习,从入门到进阶(代码片段)

分支和循环C语言中有三种结构:顺序结构,选择结构,循环结构。顺序结构选择结构:循环结构:这些图片都很好的说明了这些结构顺序结构首先我们来看看顺序结构的代码都长什么样子呢?#include<stdio... 查看详情

c语言学习,从入门带进阶系列(代码片段)

C语言学习,从入门带进阶系列(一)我是来自江南的学生,在接触到C语言之后有一点自己的想法,想和大家分享。有不对的地方希望大家可以指出,我在日后的过程中一定改正。以免误人子弟。现在的时... 查看详情

kotlin基础从入门到进阶系列讲解(入门篇)android之gson的使用(代码片段)

Kotlin基础从入门到进阶系列讲解(入门篇)Android之GSON的使用Android之GSON的使用Android之GSON的使用->返回总目录<-Google提供的GSON开源库可以让解析JSON数据的工作简单到让你不敢想象的地步项目中需要添加GSON库的依赖。编辑app/b... 查看详情

算法竞赛从入门到进阶(代码片段)

算法竞赛从入门到进阶1.算法竞赛概述1.1C语言中输入输出函数putchar()getcharprintf()scanf()puts()gets()sscanf()1.2输入结束方式 while(scanf("%d%d",&a,&b)!=EOF)     //等价于 while(~scanf("%d%d",&a,&b)) 查看详情

c++从入门到进阶的系列书籍推荐

目录1、C++入门书籍1.1、C语言程序设计(谭浩强)1.2、C++Primer中文版(第5版)2、VC++/MFC书籍2.1、VC++深入详解(孙鑫)2.2、深入浅出MFC(侯捷)3、C++进阶书籍3.1、 查看详情

ijkplayer系列14:从入门到进阶问题树梳理

ijkplayer系列14:从入门到进阶问题树梳理基础准备语法基础:C语言以及JNI开发是必备的能力C语言语法简单复习https://anacz.blog.csdn.net/article/details/100065438不过说实话,在看源码的时候,感觉对指针的理解还是有限... 查看详情

sqlserveralwayson从入门到进阶——分析和部署alwaysonavailabilitygroup(代码片段)

本文属于SQLServerAlwaysON从入门到进阶系列文章前言:本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQLServer实例和基于群集的SQLServerFCI的区别。上一节已经介绍了... 查看详情

kotlin基础从入门到进阶系列讲解(入门篇)sqlite数据库存储(代码片段)

Kotlin基础从入门到进阶系列讲解(入门篇)SQLite数据库存储SQLite数据库存储1、创建数据库2、升级数据库3、添加数据4、更新数据5、删除数据6、查询数据SQLite数据库存储->返回总目录<-1、创建数据库SQLiteOpenHelper是一个抽象类... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(六)这一期我们来讲讲函数函数是什么?我们回顾一下我们在初中,高中学习的函数,比如一次函数,二次函数……。C语言中的函数也是一样的。我们在一开始就见过函数了。那... 查看详情

c语言学习从入门到进阶(代码片段)

循环继续的学习。这边我们学习一下循环的嵌套;我们之前学习过条件语句的嵌套,其实循环语句的嵌套也是一样的。我们看一个代码:#include<stdio.h>intmain() for(inti=0;i<10;i++) for(intj=0;j<10;j++... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(七)书接上文,我们继续了解一些函数函数的定义和函数的声明定义和声明是不一样的。声明是一定要在函数调用之前的,定义可以在调用之前或者调用之后。我们来看看下面一段有意思... 查看详情

c语言学习,从入门到进阶(代码片段)

分支和循环C语言中有三种结构:顺序结构,选择结构,循环结构。顺序结构选择结构:循环结构:这些图片都很好的说明了这些结构顺序结构首先我们来看看顺序结构的代码都长什么样子呢?#include<stdio... 查看详情

c++入门系列1从c到c++:c++类和对象到底是什么意思?(代码片段)

号外号外,接下来会整理一系列C++自学的笔记,提前透露很详细的哦。想和博主一起学习C++的小伙伴可以提前关注起来。学习C++不迷路!在开始我们C++的章节前,我先引入一个子版块——... 查看详情

nodejs系列课程,从入门到进阶帮你打通全栈

本课程由社区博主:Scott 编写本文通过提供给大家学习的方法,以及我个人录制的一系列视频,帮助你更快更好的学习Nodejs,了解前后端的HTTP知识,以及配置和使用阿里云ECS来部署你的Nodejs项目,成为那个具有争议的全栈开... 查看详情