c语言第二课------地基打牢,基础打紧,不可放弃

news2024/11/23 18:51:21

作者前言:

欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda

目录

变量的作用域和生命周期

常量

字符串+转义字符+注释
选择语句

循环语句

函数
_________________________________________________

这次我们接着上一篇博客,我们接着来继续C语言的学习

变量的作用域和生命周期

变量的作用域:

简单的说就是变量的作用范围,比如我们创建了一个全局变量,作用域就是整个程序

局部变量就是在某块地方或者某个函数内使用

下面我要代码简单的讲解一下

#include <stdio.h>
int b = 10;
int main()
{
	int a = 20;
	{
		int a = 20;
		printf("%d\n", b);//(1)
	}
	printf("%d\n", a);//(2)
	printf("%d\n", b);//(3)
	return 0;
}

变量b是全局变量,a为局部变量 ,其中(1)和(3)都能打印出来,但是(2)却不能,因为a超出了自己的作用范围,

变量的生命周期:

变量的生命周期就是指,从变量诞生到变量销毁的时间段(可以理解为人的出生到死亡的时间)

局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束的时间段。
全局变量的生命周期是:整个程序的生命周期(全局变量的创建到整个程序的结束的时间段)。
这两者可以说是有关系但是这个关系又很微妙,当我们学习C语言更进一步会慢慢的理解

常量

分为四种

字面常量

45;

const修饰的常变量

代码一;

#include <stdio.h>
int main()
{
	int a = 10;
	printf("%d\n", a);
	a = 20;
	printf("%d\n", a);
	const int c = 20;
	printf("%d", c);
	c = 30;//这一个变量无法更改

	return 0;
}

代码二:

int main()
{
	const int a = 10;
	int arr[a] = { 1,2,3,4,5 };
	return 0;
}

上面小可爱可以去运行看看,都会报错足以看出常变量还是变量

常变量:是具有常属性的变量,一个变量被const修饰就会变成常变量,具有常量的属性但本质上还剩变量

#define定义的标识符常量

#define M 100
int main()
{
	printf("%d", M);
	return 0;
}
#define M 100
int main()
{
	
	int arr[M] = { 1,2,3,4,5 };
	return 0;
}

可以看出是常量

枚举常量

枚举:一一列举出来

比如RGB的三颜色  红 绿 蓝

代码:

#include <stdio.h>
enum Color 
{
	REN,
	GREEN,
	BLUE

};
int main()
{
	enum Color c = REN;
	printf("%d\n", c);
	enum Color a = GREEN;
	printf("%d\n", a);
	enum Color b = BLUE;
	printf("%d\n", b);


	return 0;
}
#include <stdio.h>
enum Color 
{
    //枚举常量
	REN=6,
	GREEN=3,
	BLUE=9

};
int main()
{
	enum Color c = REN;
	printf("%d\n", c);
	enum Color a = GREEN;
	printf("%d\n", a);
	enum Color b = BLUE;
	printf("%d\n", b);


	return 0;
}

上面一个是默认值,一个是可以赋值

所以枚举常量值可以改变

字符串+转义字符+注释

字符串

"hello"

由双引号( Double Quote )引起来的一串字符称为字符串字面值( String Literal ),或者简称字符
串。
字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串
内容
下面我来演示
#include <stdio.h>
int main()
{
	//字符串是可以存放在字符数组中的
	char arr[] = "bit";//我们放入数组的个数为4,其中的\0我们是看不见的
	char arr1[] = { 'b','i','t' };//我们放入数组的个数为3个
	printf("%s\n", arr);
	printf("%s\n", arr1);//要遇见\0才停止打印,因为\0为字符串的结束标记,


	return 0;
}

结果:

 可以看出字符串的打印停止是要遇见'\0',注意arr我们放入的元素为bit\0,arr1放入的是bit不要混淆了

或者我们打印一下字符串的长度

代码如下:

#include <string.h>
#include <stdio.h>
int main()
{
	//字符串是可以存放在字符数组中的
	char arr[] = "bit";//我们放入数组的个数为4,其中的\0我们是看不见的
	char arr1[] = { 'b','i','t' };//我们放入数组的个数为3个
	printf("%s\n", arr);
	printf("%s\n", arr1);//要遇见\0才停止打印,因为\0为字符串的结束标记,
	printf("arr的长度为:%d\n",strlen(arr));
	printf("arr1的长度为:%d\n",strlen(arr1));
	return 0;
}

结果:

 看看是不是就可以理解'\0'是字符串的结束标记

strlen()   计算字符串的长度,但是是计算'\0'前面的字符,'\0'不计算进去,但是'\0'也是字符,如果字符串的真正长度就是strlen()+1,--------要引入头文件<string.h>

而前面的sizeof()计算的是空间大小,是计算所有的,就拿上面的来说,只计算数组里面所有元素的总空间大小

 转义字符

\?  在书写连续多个问号时使用,防止他们被解析成三字母词
\'  用于表示字符常量'
\“  用于表示一个字符串内部的双引号
\\  用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a  警告字符,蜂鸣
\b  退格符
\f  进纸符
\n  换行
\r  回车
\t  水平制表符
\v  垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X
\xdd dd表示2个十六进制数字。 如:\x30 0

转义字符简单的讲就是转变原来的意思

下面我们来演示一下

#include <stdio.h>
int main()
{
	printf("c:\nfdf\tghg\dff");
	return 0;
}

 看看是不是和自己的想法有误啊,这就是存在了转义字符的干扰

注意一下啊 一个转义字符是一个字符哦哦

\? 这个转义字符现在已经无法显示出效果了我们可以了解一下 但是可以理解为打印输出?

\' 打印这个"   '   "

下面我们来演示

#include <stdio.h>
int main()
{
	printf("%c", '\'');
	return 0;
}

 \"这个转义字符是打印'  " '

代码如下:

#include <stdio.h>
int main()
{
	//printf("%c", '\'');
	printf("%c", '\"');
	return 0;
}

结果:

 \a  蜂鸣声

\n换行符

\b退格符(删除前面一个字符再打印)

代码:

lude <stdio.h>
int main()
{
	printf("ssf\bdff");

	return 0;
}

结果:

 

\t 水平制表符

就是再\t前面的字符以四个为一组,不够就补上空格 

下面的两个转义字符比较重要,

\ddd

ddd 表示 1~3 个八进制的数字。 如: \130 X
下面代码演示

代码:

#include <stdio.h>
int main()
{
	printf("\\151对应的十进制为%d\n", '\151');
	printf("\\151对应的ASCII值所对应的字符是%c\n", '\151');
	return 0;
}

 

结果:
\xdd
dd 表示 2 个十六进制数字。 如: \x30 0
代码:
#include <stdio.h>
int main()
{
	printf("\\x56对应的十进制为%d\n", '\x56');
	printf("\\x56对应的ASCII值所对应的字符是%c\n", '\x56');
	return 0;
}

结果:

 可能有些小可爱不知道ASCII是啥,下面我找来一个图给你们看看

 ASCII表:ASCII值对应的字符,注意有一些字符(0~31)电脑无法打印出来,不要瞎搞,大写字母+32得出对应的小写,小写字母-32得出对应的大写字母

注释

注释有两种  1./**/    2.//

不要过度注释

选择语句(选择结构)

if  else          switch

以烤红薯为例

代码如下

#include <stdio.h>
int main()
{
	int a = 0;
	printf("你是否加入比特(0/1):>\n");
	scanf("%d",&a);
	if (a == 1)
		printf("恭喜你加入比特\n");
	printf("是否好好学习(0/1):\n");
	scanf("%d",&a);
	if (a == 1)
		printf("好offer");
	else
		printf("种红薯");
	return 0;
}

switch现在先不写,后面我再来讲解

循环语句

for      while      do.....whlie

代码如下

#include <stdio.h>
int main()
{
	printf("加入比特");
	int a = 1;
	int line = 0;
	while (a)
	{
		int b = 0;
		char arr[] = { 'a','b','c' };
		printf("是否买彩票(0/1):>\n");
		scanf("%d",&b);
		if (strlen(arr) == 15)
		{
			printf("恭喜你中奖了");
			printf("迎娶白富美");
			break;
		}
		printf("你没中奖,好好学习吧");
		line++;
		if (line == 30000)
		{
			printf("经过你的努力,你成大牛了");
			printf("迎娶白富美");
			break;
		}
	}
	return 0;
}

break是停止循环

函数

就拿我们数学来讲 y=2*x+5  x可以赋不一样的值,y也会获得不一样的值

我们平时写的代码求和是这样写的

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	scanf("%d %d", &a, &b);
	sum = a + b;
	printf("%d", sum);
	return 0;
}

如果我们要写成函数就要把一部分代码放入一块地方保存,如果需要就拿出来使用

#include <stdio.h>
//函数的声明
int Add(int a, int b)
{
	int sum = 0;
	sum = a + b;
	return sum;
}
int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	scanf("%d %d",&a, &b);
	sum = Add(a, b);
	printf("%d", sum);
	return 0;
}

函数的定义 要知道函数的数据类型 ,函数名,函数是否有参数,如果有参数,是啥样的参数呢,还要有函数里面你想写啥内容,上面代码就可以说明,要写入计算两个变量的和,那我们就要在函数内写出计算两个变量之和的代码,记住要有返回值,

还有另一种写法

#include <stdio.h>
int Add(int a, int b);//函数的声明
int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	scanf("%d %d",&a, &b);
	sum = Add(a, b);
	printf("%d", sum);
	return 0;
}
//函数的定义
int Add(int a, int b)
{
	int sum = 0;
	sum = a + b;
	return sum;
}

因为代码从上往下运行

,函数的使用要先声明再使用,在前面定义函数也是声明的一种

总结:

以上就是我分享的内容,后面我会慢慢的给各位小可爱讲解的 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四十六、B+树

这一次我们来介绍B树。 一个m阶的B树具有如下几个特征&#xff1a; 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子&#xff0c;其中 m/2 < k < m 3.每一个叶子节点都包含k-1个元素&#xff0c;其中 m/2 < k < m 4.所有的叶子结点都位于同一层。…

Python学习ing

Python中 字符串不能通过 &#xff0c;把 数字等非字符串&#xff0c;进行拼接&#xff0c; 但Javascript中是可以的。 会把数字自动转换成字符串&#xff0c; 但python 提供了占位符 %s % 占位符 city "徐州" age 20 message "我是%s人,今天%s岁" …

面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…

新能源汽车保养vr仿真教学软件为职业培训带来新的思路和方法

电动车电池更换VR虚拟体验是一种利用VR虚拟现实技术实现对电动车电池更换进行模拟仿真演示和实操训练的虚拟仿真实验教学课件&#xff0c;相比传统教学模式&#xff0c;有效提高学生的实践能力和技能水平。 通过VR技术模拟现场&#xff0c;使培训人员可以身临其境滴观摩操作过程…

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1).环境准备&#xff1a; 操作系统&#xff1a;centos7 es版本&#xff1a;8.8.1 jdk:17 es与jdk等兼容支持查看 2).下载安装包上传到服务器&#xff0c;官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3).解压文件 tar -zxvf elasticsearch-8.8.…

信息差永远存在,聪明的人也永远能利用信息差赚钱

信息的差异永远存在&#xff01; 例子一&#xff1a; 在2018年&#xff0c;某宝在央视春晚中成功地获得了广告名额&#xff0c;但与此同时&#xff0c;上百位工程师没想到的是&#xff0c;这是一个恶梦的开始&#xff01; 由于春晚当晚的访问人数过多&#xff0c;服务器立刻发…

模块化相关知识点

这里写目录标题 模块化概述基本使用&#xff08;包的跨模块使用&#xff09;介绍代码演示 模块服务的使用&#xff08;跨模块接口的实现&#xff09;简介具体代码 模块化 概述 基本使用&#xff08;包的跨模块使用&#xff09; 介绍 代码演示 首先 要在第一个模块里&#xf…

路径规划算法:基于算术优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

SpringCloud公共模块项目搭建(二)

我们新建module公共模块项目 microservice-common&#xff0c;主要是放一些其他项目公用的东西&#xff0c;比如实体类&#xff0c;工具类等等&#xff1b; 新建module 勾选 create a simple project 取下module 名称 mircoservice-common 这里用默认的jar pom.xml 加下 jpa…

SpringBatch从入门到实战(四):表结构

batch_job_instance -> batch_job_execution/batch_job_execution_params -> batch_job_execution_context 一&#xff1a;batch_job_instance 作业实例 同一个作业&#xff0c;同一套作业参数 唯一标识一条记录&#xff0c;首次启动时插入一条数据。 字段描述JOB_IN…

MySQL 数据库基础

这里写目录标题 一、Mysql的基本概念数据库管理系统&#xff08;DBMS&#xff09;数据库系统 二、数据库的发展史三、 主流的数据库介绍数据库分为关系型数据库与非关系型数据库关系型数据库非关系型数据库介绍 四、 操作Mysql常用的数据类型&#xff1a;常看数据库结构查看当前…

共探数字化时代安全新思路,腾讯安全联合FreeBuf举办安全运营高峰论坛

近日&#xff0c;由网络安全行业门户FreeBuf主办&#xff0c;腾讯安全协办的「安全运营高峰论坛深圳站」在深圳益田威斯汀酒店圆满举行。在这场网络安全行业盛会上&#xff0c;数百名来自全国各地的网安人共聚一堂&#xff0c;围绕“安全运营”、“新时代下威胁情报对企业的价值…

为什么推荐使用线程池?

为什么推荐使用线程池&#xff1f; 更多优秀文章&#xff0c;请扫码关注个人微信公众号或搜索“程序猿小杨”添加。 背景&#xff1a; 若并发的线程数量很多&#xff0c;且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统的效率&…

如何使用Leangoo领歌scrum工具自动生成燃尽图

在上一篇&#xff0c;我为大家介绍了如何使用Leangoo领歌敏捷工具管理Sprint Backlog_哆啦B梦_的博客-CSDN博客&#xff0c;今天我们一起来看看Leangoo领歌敏捷工具是如何自动生成Scrum燃尽图的。 什么是scrum燃尽图&#xff1f; 燃尽图是在项目完成之前&#xff0c;对需要完…

什么是大数据?

现在大数据发展的如火如荼&#xff0c;也有不少小伙伴对于什么是大数据比较感兴趣&#xff0c;那么大数据在比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力…

文字表达的力量:如何通过编辑和校对优化内容

有效的文字表达能够为读者传递清晰的信息&#xff0c;产生深远的影响。通过编辑和校对优化内容&#xff0c;你可以提升文字表达的力量。以下是一些建议&#xff0c;帮助你在编辑和校对过程中优化内容&#xff0c;提高文字表达的力量。 1.确保内容的逻辑性和连贯性 一个具有说服…

15款好用的效果图设计制作软件推荐

无论你是设计师、工程师、室内设计师还是3D艺术家&#xff0c;你都必须熟悉效果图设计制作软件。 在这篇文章中&#xff0c;我们将向您介绍15个值得尝试的效果图设计制作软件&#xff01; 1.即时设计 即时设计是一款「专业UI设计工具」&#xff0c;不受平台限制&#xff0c;…

Spark学习笔记(一):Spark 基本原理

文章目录 1、Spark 整体架构1.1、Spark 集群角色1.1.1、Cluster Manager1.1.2、Worker Node1.1.3、Executor1.1.4、Application1.1.5、Driver1.1.6、Executor 2、Spark 运行基本流程2.1、RDD2.2、DAG2.3、DAGScheduler2.4、TaskScheduler2.5、Job2.6、Stage2.7、TaskSet Task2.…

宠物托管APP小程序系统开发 让专业的人帮你照顾宠物

宠物是人类的好朋友&#xff0c;为很多家庭带去了温馨与陪伴。但是对于很多养宠人士来说&#xff0c;在工作出差或者节假日出门旅游的时候&#xff0c;宠物的去处成为困扰他们的一大难题。那么有没有一个专业的机构可以在主人不在家的时候&#xff0c;为爱宠提供专业化的管护呢…

为数据弹性而生,阿里云云原生存储再提速

作者&#xff1a;之浩、展逸 企业在 Kubernetes 上运行 AI、大数据应用已成主流&#xff0c;资源弹性和开发运维效率得到显著提升的同时&#xff0c;计算存储分离架构也带来了挑战&#xff1a;网络延迟高、网络费用贵、存储服务带宽不足等。 以 AI 训练、基因计算、工业仿真等…