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

这篇具有很好参考价值的文章主要介绍了c语言第二课------地基打牢,基础打紧,不可放弃。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者前言:

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

目录

变量的作用域和生命周期
常量
字符串+转义字符+注释
选择语句
循环语句
函数
_________________________________________________

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

变量的作用域和生命周期

变量的作用域:

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

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

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

#include <stdio.h>
int b = 10;
int main()
{
	
	{
		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;
}

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

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

常变量:是具有常属性的变量,一个变量被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;
}

结果:

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

 可以看出字符串的打印停止是要遇见'\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;
}

结果:

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

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

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

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

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

 转义字符

\?  在书写连续多个问号时使用,防止他们被解析成三字母词
\'  用于表示字符常量'
\“  用于表示一个字符串内部的双引号
\\  用于表示一个反斜杠,防止它被解释为一个转义序列符。
\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;
}

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

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

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

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

\' 打印这个"   '   "

下面我们来演示

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

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

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

代码如下:

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

结果:

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

 \a  蜂鸣声

\n换行符

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

代码:

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

	return 0;
}

结果:

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

\t 水平制表符

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

就是再\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;
}
结果:
c语言第二课------地基打牢,基础打紧,不可放弃
\xdd
dd 表示 2 个十六进制数字。 如: \x30 0
代码:
#include <stdio.h>
int main()
{
	printf("\\x56对应的十进制为%d\n", '\x56');
	printf("\\x56对应的ASCII值所对应的字符是%c\n", '\x56');
	return 0;
}

结果:

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

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

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

 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;
}

因为代码从上往下运行

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

总结:

以上就是我分享的内容,后面我会慢慢的给各位小可爱讲解的 文章来源地址https://www.toymoban.com/news/detail-481336.html

到了这里,关于c语言第二课------地基打牢,基础打紧,不可放弃的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark第二课RDD的详解

    RDD JAVA中的IO 1.小知识点穿插 1. 装饰者设计模式 装饰者设计模式:本身功能不变,扩展功能. 举例: 数据流的读取 一层一层的包装,进而将功能进行进一步的扩展 2.sleep和wait的区别 本质区别是字体不一样,sleep斜体,wait正常 斜体是静态方法 sleep:静态方法,和对象无关 t1.sleep 当前休

    2024年02月11日
    浏览(41)
  • STP和MTP(第二十二课)

    2、如何实现 1)在MSTP网络种,引入了域的概念,称为MST域 2)每一个MST域中包含一个或多个“生成树”称为“实例” 3)每个“实例生成树”都可以绑定vlan,实现vlan数据流的负载分担/负载均衡 4)默认情况下,所有的vlan都属于“实例树0:即:instance 0” 5)不同的“实例树”、

    2024年02月15日
    浏览(49)
  • 【Git】第二课:git安装和配置

    🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍 :分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服

    2024年03月23日
    浏览(32)
  • KAFKA第二课之生产者(面试重点)

    1.1 生产者消息发送流程 在消息发送的过程中,涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到Kafka Broker。 生产者如何发送的? 现在Main线程中将数

    2024年02月13日
    浏览(39)
  • linux课程第二课------命令的简单的介绍3

    🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉🎉🎉🎉🎉 🎂 🎂作者id:老秦包你会, 🎂 简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂 喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂

    2024年02月04日
    浏览(34)
  • Kafka第二课-代码实战、参数配置详解、设计原理详解

    引入依赖 生产者代码以及参数详解 消费者代码以及参数详解 实体类 引入基本依赖 配置application.yml 当配置ack-mode: MANUAL_IMMEDIATE时,需要手动在消费者提交offset,否则会一直重复消费 消费者 测试,访问生产者控制层,可以自动监听到消费者 Kafka核心总控制器Controller 在Kafka集

    2024年02月16日
    浏览(37)
  • 排序第二课【选择排序】直接选择排序 与 堆排序

    目录 1. 排序的概念: 2.选择排序的基本思想 3.直接选择排序 4.堆排序 排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中, 存在多个具有相同的的记录,若经过排序,这些记

    2024年02月14日
    浏览(33)
  • 剪枝与重参第二课:修剪方法和稀疏训练

    手写AI推出的全新模型剪枝与重参课程。记录下个人学习笔记,仅供自己参考。 本次课程主要讲解修剪方法和稀疏训练。 课程大纲可看下面的思维导图 修剪方法 主要包含训练后剪枝和训练时剪枝两种方法。 下图展示了这两种常见的剪枝方法的流程: 1.1 经典框架:训练-剪枝

    2023年04月11日
    浏览(37)
  • 第二课-一键安装SD-Stable Diffusion 教程

    看完这篇文章并跟着操作,就可以在本地开始 SD 绘图了。 理论上来说,这篇课程结束,想要画什么图都可以画了。 SD 是开源的,可以在 github 上找到。但直接下载源码安装,非常费劲,而且因为国内外差异,就是我这样的秃头程序员也难以应对。 所以,我们改用一个称作

    2024年02月13日
    浏览(44)
  • rabbitmq第二课-RabbitMQ核心编程模型以及消息应用场景详解

    使用RabbitMQ提供的原生客户端API进行交互。这是使用RabbitMQ的基础。 1.1、maven依赖 1.2、基础编程模型 1.首先创建连接,获取Channel 2.声明Exchange-可选 3、声明queue 4、声明Exchange与Queue的绑定关系-可选 总结:说白了,就是声明一个交换机和队列,然后进行绑定,至于Channel和连接

    2024年02月10日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包