【C语言入门】初识C语言:掌握编程的基石

📝个人主页🌹:Eternity._
⏩收录专栏⏪:C语言 “ 登神长阶 ”
🤡往期回顾🤡:C语言入门
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

❀C语言入门

  • 📒1. 选择语句与循环语句
    • 🍁选择语句
    • 🍂循环语句
  • 📙2. 函数
  • 📜3. 数组
    • ⛰️数组定义
    • 🏞️数组下标
    • 🌄数组使用
  • 📚4. 操作符,常见关键字与 #define
    • 🌞操作符
    • 🌙#define
    • ⭐常见关键字
      • 🌈关键字 typedef
      • 🌈关键字static
  • 📝5. 指针
    • 🎩内存
    • 🎈指针变量的大小
  • 📘6. 结构体
  • 📖7. 总结


前言: 在踏入C语言编程的奇妙旅程之初,掌握基本语句无疑是我们搭建知识大厦的坚实基石。C语言,作为一门历史悠久且功能强大的编程语言,其简洁明了的语法结构为我们提供了表达逻辑、控制程序流程的强大工具。而基本语句,正是这些工具中的基础与核心。

本篇文章旨在引领初学者走进C语言基本语句的世界,通过深入浅出的讲解和实例演示,帮助大家理解并掌握这些语句的用法。我们将从最基本的赋值语句开始,逐步深入到条件判断、循环控制等关键语句,让每一位读者都能清晰地感受到C语言编程的魅力与力量

让我们一同踏上这段充满挑战与收获的C语言编程之旅吧!


📒1. 选择语句与循环语句

🍁选择语句

C语言中的选择语句主要用于基于不同条件执行不同的代码块。C语言中主要有两种选择语句:if语句和switch语句

选择语句流程图

Created with Raphaël 2.3.0 开始 表达式 语句一 结束 语句二 yes no

选择语句代码示例

int main()
{
	int n = 0;
	printf("你会去敲代码吗?(选择1 or 0):>");
	scanf("%d", &n);
	if(n == 1)
	{
		prinf("坚持,你会有好offer\n");
	}
	else
	{
		printf("放弃,回家卖红薯\n");
	}
	return 0;
}

🍂循环语句

C语言中的循环语句允许我们重复执行一段代码多次,直到满足某个条件为止。

C语言的循环结构实现的三种方式:

  • while语句
  • for语句
  • do … while语句

循环语句流程图

Created with Raphaël 2.3.0 开始 买彩票 走向成功 老实学习 yes no yes no

循环语句代码示例(while循环)

// while循环
int main()
{
	printf("努力学习\n");
	int line = 0;
	while (line <= 20000)
	{
		line++;
		printf("我要继续努力敲代码\n");
	}
	if (line > 20000)
		printf("好offer\n");
	return 0;
}

注意:剩下的没讲的内容会在后续的专题讲解


📙2. 函数

C语言中的函数是执行特定任务的独立代码块。函数允许你将代码组织成可重用的单元,这有助于使程序更加模块化、易于理解和维护。函数可以接受输入(称为参数)并可以返回输出(称为返回值)

场景分析

// 在一般的时候,我们让两个数相加就会用以下方法
// 当时当我们要多次使用时,就会冗余,降低代码可读性
// 为了能够实现功能复用,我们通常会使用函数来定义这个加法方式
int main()
{
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	printf("输入两个操作数:>");
	scanf("%d %d", &num1, &num2);
	sum = num1 + num2;
	printf("sum = %d\n", sum);
	return 0;
}

函数代码示例

int Add(int x, int y) // 类型 函数名(函数参数......)
{
	int z = x + y;
	return z;
}
int main()
{
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	printf("输入两个操作数:>");
	scanf("%d %d", &num1, &num2);
	sum = Add(num1, num2);
	printf("sum = %d\n", sum);
	return 0;
}

函数的特点就是简化代码,代码复用,关于函数先介绍这么多,让我们进入下一环节


📜3. 数组

C语言中的数组是一种基本的数据结构,它允许你存储相同类型的数据项集合。在数组中,每个数据项(也称为元素)可以通过索引来访问,索引通常是一个整数,用于指定元素的位置。数组中的索引是从0开始的,这意味着第一个元素的索引是0,第二个元素的索引是1,依此类推

注意:

  • 数组的大小在编译时是固定的,不能动态改变
  • 数组索引越界是C语言中常见的错误之一,它可能导致未定义行为,包括程序崩溃
  • 数组名在表达式中通常被当作指向数组第一个元素的指针,但在数组定义和数组大小表达式中除外

⛰️数组定义

数组的定义包括指定数组的类型、数组的名称以及数组中元素的数量(即数组的大小)。数组的大小在定义时必须是一个常量表达式,不能是变量

type arrayName[size];
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
  • type 是数组中元素的类型(如 int、float、char 等)。
  • arrayName 是数组的名称。
  • size 是数组中元素的数量。

🏞️数组下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的

数组可以通过下标来访问的

int arr[10] = {0};
//如果数组10个元素,下标的范围是0-9

在这里插入图片描述


🌄数组使用

数组遍历代码演示

int main()
{
	int i = 0;
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	for(i=0; i<10; i++)
	{
	printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

📚4. 操作符,常见关键字与 #define

🌞操作符

操作符简单介绍为主,后面课件重点讲

类型操作符
算术操作符+ - * / %
移位操作符>> <<
位操作符& ^ |
赋值操作符= += -= *= /= &= ^=

单目操作符

操作符功能
逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
--前置、后置--
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

关系操作符

操作符功能
>大于
>=不小于
<小于
<=不大于
!=不等于
==相等

逻辑操作符

操作符功能
&&逻辑与
||逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1, exp2, exp3, …expN

注意:逗号表达式会取最后一个的值作为结果

下标引用、函数调用和结构成员

[] () . ->

🌙#define

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
	int sum = ADD(2, 3);
	printf("sum = %d\n", sum);
	sum = 10*ADD(2, 3);
	printf("sum = %d\n", sum);
	return 0;
}

⭐常见关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的

在这里插入图片描述


🌈关键字 typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
	//观察num1和num2,这两个变量的类型是一样的
	unsigned int num1 = 0;
	uint_32 num2 = 0;
	return 0;
}

🌈关键字static

static是用来修饰变量和函数的

  • 修饰局部变量-称为静态局部变量
  • 修饰全局变量-称为静态全局变量
  • 修饰函数-称为静态函数

修饰局部变量

void test()
{
	//static修饰局部变量
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	int i = 0;
	for(i=0; i<10; i++)
	{
		test();
	}
	return 0;
}

static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束

修饰全局变量

//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
	printf("%d\n", g_val);
	return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
	printf("%d\n", g_val);
	return 0;
}

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用,所以代码2在编译的时候会出现连接性错误

修饰函数

//代码1
//add.c
int Add(int x, int y)
{
	return c+y;
}
//test.c
int main()
{
	printf("%d\n", Add(2, 3));
	return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
	return c+y;
}
//test.c
int main()
{
	printf("%d\n", Add(2, 3));
	return 0;
}

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用,所以代码2在编译的时候会出现连接性错误


📝5. 指针

C语言中的指针是C语言编程中一个非常核心且强大的特性。指针允许你直接访问内存地址,并操作这些地址中存储的数据。理解指针对于深入理解C语言以及后续学习更高级的语言(如C++、Java等)中的内存管理非常关键


🎩内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
在这里插入图片描述
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的

取出变量地址代码示例

int main()
{
	int num = 10;
	&num; // 取出num的地址
	// 注:这里num的4个字节,每个字节都有地址
	// 取出的是第一个字节的地址(较小的地址)
	printf("%p\n", &num);//打印地址,%p是以地址的形式打印
	return 0;
}

在这里插入图片描述
地址的存储,需要定义指针变量

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

指针代码示例

int main()
{
	int num = 10;
	int *p = &num;
	*p = 20;
	return 0;
}

在这里插入图片描述
注意:以整形指针举例,可以推广到其他类型


🎈指针变量的大小

//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
	printf("%d\n", sizeof(char *));
	printf("%d\n", sizeof(short *));
	printf("%d\n", sizeof(int *));
	printf("%d\n", sizeof(double *));
	return 0;
}

结论:指针大小在32位平台是4个字节,64位平台是8个字节


📘6. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息

结构体定义

struct Stu
{
	char name[20];//名字
	int age; //年龄
	char sex[5]; //性别
	char id[15]//学号
};

结构体的初始化

//打印结构体信息
struct Stu s = {"张三"20"男""20180101"};

//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);

//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps->id);

📖7. 总结

在结束这篇关于介绍C语言基本语句的文章之际,我们不禁感慨于C语言那简洁而强大的魅力。从最基本的变量声明、数据类型到控制流语句如if-else、for循环、while循环,再到函数定义与调用,每一个基础语句都是构建复杂程序大厦的基石

通过学习和实践这些基本语句,我们不仅能够编写出解决简单问题的程序,更为后续深入学习C语言的高级特性,如指针、结构体、文件操作等打下了坚实的基础。C语言不仅仅是一种编程语言,它还是理解计算机底层工作原理、掌握内存管理、优化程序性能的一把钥匙

希望这篇文章能够成为你C语言学习之旅的一个良好起点,激发你对编程的无限热爱与探索欲。记住,编程之路虽长且艰!
在这里插入图片描述

希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行!
谢谢大家支持本篇到这里就结束了,祝大家天天开心!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 python ping

报错提示&#xff1a;错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 用python做了一个批量ping脚本&#xff0c;在windows专业版上没问题&#xff0c;但是到了windows服务器就出现这个报错 解决方法&#xff1a;右键 管理员身份运行 这个脚本 …

使用 PCA 可视化数据的分类能力

使用 PCA 探索数据分类的效果&#xff08;使用 Python 代码&#xff09; 「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 主成分分析 (PCA) 是数据科学家使用的绝佳工具。它可用于降低特征…

年轻人为什么那么爱喝奶茶?

作者 | 艾泊宇 为什么年轻人那么爱喝奶茶&#xff1f;答案很简单&#xff1a;对他们来说&#xff0c;奶茶之于年轻人&#xff0c;正如白酒之于中年人。 奶茶不仅仅是一种饮料&#xff0c;它已经演化成一种文化现象&#xff0c;代表着温暖和爱的象征&#xff0c;甚至在某种程度上…

【机器学习】机器学习与电商推荐系统的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在电商推荐系统中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 特征工程 1.2 模型选择1.2.1 协同过滤1.2.2 矩阵分解1.2.3 基于内容的推荐1.2.4 混合推荐 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 …

热备路由HSRP与VRRP

一、什么是HSRP HSRP&#xff08;Hot Standby Router Protocol&#xff09;是Cisco的专有协议&#xff0c;用于实现网络中路由器的冗余和故障转移。通过HSRP&#xff0c;可以将多台路由器组成一个“热备份组”&#xff0c;形成一个虚拟路由器。在这个组内&#xff0c;只有一个…

【自适应滤波系列四】回声消除(Acoustic Echo Cancellation, AEC)信号模型及其本质

什么是回声 关于回声的产生与传播,凌逆战(https://www.cnblogs.com/LXP-Never)大佬在其博客中阐述得很详细,可以去看他的博客,下面部分图片来源于其博客 回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。一些回声是必要的,比如剧院里的音乐回声…

Character.ai因内容审查流失大量用户、马斯克:Grok-3用了10万块英伟达H100芯片

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 1、爆火AI惨遭阉割&#xff0c;1600万美国年轻人失恋&#xff1f;Character.ai被爆资金断裂 美国流行的社交软件Character.ai近期对模型进行大幅度内容审查&#xff0c;导致用户感到失望并开始流失。…

2024阿里云大模型自定义插件(如何调用自定义接口)

1&#xff0c;自定义插件入口 2&#xff0c;插件定义&#xff1a;描述插件的参数 2.1&#xff0c;注意事项&#xff1a; 2.1.1&#xff0c;只支持json格式的参数&#xff1b;只支持application/JSON&#xff1b;如下图&#xff1a; 2.1.2&#xff0c;需要把接口描述进行修改&a…

使用RNN模型构建人名分类器

使用RNN模型构建人名分类器 1 项目需求和实现分析 短文本分类问题 2 数据处理三部曲 场景1&#xff1a;数据处理三部曲示意图 场景2&#xff1a;三个字母onehot编码形状分析 3 构建RNN模型 4 构建训练函数并进行训练 - 有关模型、损失函数、优化器三者在pytorch中的表示 5…

U-Net在影像组学:医学图像分割中的研究进展|顶刊速递·24-07-04

小罗碎碎念 本期文献主题&#xff1a;U-Net在影像组学/医学图像分割中的研究进展 U-Net对于研究影像组学的老师/同学&#xff0c;应该非常熟悉&#xff0c;今天这期推文就是想系统的盘一盘它在医学图像分析中的应用情况。六篇文献最新的是上个月刚发表的&#xff0c;最旧的也是…

java入门-基础语法(运算符)

运算符是对变量、字面量进行运算的 符号 &#xff08;一&#xff09;基本的算术运算符、符号做连接符 &#xff08;1&#xff09;基本运算符&#xff1a;(加)&#xff0c; - &#xff08;减&#xff09;、 * &#xff08;乘&#xff09;、 / &#xff08;除&#xff09;、%&…

DP:背包问题----0/1背包问题

文章目录 &#x1f497;背包问题&#x1f49b;背包问题的变体&#x1f9e1;0/1 背包问题的数学定义&#x1f49a;解决背包问题的方法&#x1f499;例子 &#x1f497;解决背包问题的一般步骤&#xff1f;&#x1f497;例题&#x1f497;总结 ❤️❤️❤️❤️❤️博客主页&…

什么是分库分表?它有哪些实现类型?

假如你正在使用关系型数据库开发一款健康类系统。业务发展很好&#xff0c;系统有很多活跃的新老用户&#xff0c;这些用户会和平台的医生团队进行交互&#xff0c;每天可能会生成数万甚至数十万级别的业务数据。这样的话&#xff0c;随着数据量越来越大&#xff0c;系统中的某…

Java项目:基于SSM框架实现的游戏攻略网站系统分前后台【ssm+B/S架构+源码+数据库+毕业论文+任务书】

一、项目简介 本项目是一套基于SSM框架实现的游戏攻略网站系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

静态方法与实例方法的区别

静态方法与实例方法的区别 1、静态方法&#xff08;Static Methods&#xff09;1.1 调用方式1.2 访问权限 2、实例方法&#xff08;Instance Methods&#xff09;2.1 调用方式2.2 访问权限 3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1…

使用 Smart-doc 记录 Spring REST API

如果您正在使用 Spring Boot 开发 RESTful API&#xff0c;您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的&#xff0c;因为它为将来的更新提供了参考&#xff0c;并帮助其他开发人员与您的 API 集成。很长一段时间以来&#xff0c;记录 REST API 的方…

用Python轻松转换Markdown文件为PDF文档

Markdown&#xff0c;以其简洁的语法和易于阅读的特性&#xff0c;成为了许多作家、开发者和学生记录思想、编写教程或撰写报告的首选格式。然而&#xff0c;在分享或打印这些文档时&#xff0c;Markdown的纯文本形式可能无法满足对版式和布局的专业需求。而将Markdown转换为PD…

模拟退火算法1——简介

模拟退火算法来源于固体退火原理&#xff0c;将固体加温至充分高&#xff0c;再让其徐徐冷却&#xff0c;加温时&#xff0c;固体内部粒子随温升变为无序状&#xff0c;内能增大&#xff0c;而徐徐冷却时粒子渐趋有序&#xff0c;在每个温度都达到平衡态&#xff0c;最后在常温…

【C++】 解决 C++ 语言报错:Stack Overflow

文章目录 引言 栈溢出&#xff08;Stack Overflow&#xff09;是 C 编程中常见且严重的错误之一。栈溢出通常发生在程序递归调用过深或分配过大的局部变量时&#xff0c;导致栈空间耗尽。栈溢出不仅会导致程序崩溃&#xff0c;还可能引发不可预测的行为。本文将深入探讨栈溢出…