c语言-教零基础/新手入门

C 简介

一提到语言这个词语,自然会想到的是像英语,汉语等这样的自然语言,因为它是人和人交换信息不可缺少的工具。而今天计算机普遍了我们生活的每一个角落,除了人和人的相互交流之外,我们必须和计算机交流。就像人类交流依赖自然语言一样,人类与计算机的沟通也需要语言,而编程语言正是这一沟通的桥梁。

C语言作为编程语言中的一种,具有独特的语法规则,既赋予了开发者与计算机“对话”的能力,又确保了计算机能够“无条件地”执行指令。这种交流方式包括消息传递和命令执行,和人类沟通的基本要素类似。

不过,计算机的“听从”与人的交流有所不同,它必须遵循C语言严格的语法和定义,只有这样,计算机才能准确理解并执行人类的意图。这种规则的严谨性也凸显了编程语言的特殊性——它不仅仅是语言,更是逻辑的表达形式,通过简洁、精确的指令,让计算机完成特定的任务。

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。

经典"Hello World" 

C语言编码规范

1. 命名规范

  • 变量命名:使用有意义的名称,避免使用无意义的单字母(如x、y),除非是循环变量。变量名要表达其功能,如counter、total_sum。
  • 大小写约定:通常小写字母用于变量名,宏定义用全大写字母,使用下划线分隔(如MAX_SIZE)。
  • 函数命名:函数名应以动词开头,描述其功能,如calculate_sum()、print_data()。

2. 缩进和格式

  • 一致的缩进:通常采用4个空格或1个Tab作为缩进,保持代码层级清晰。不要混用空格和Tab,以免不同编辑器显示不一致。
  • 代码块:即使在if、for、while等语句中只有一行代码,也建议使用花括号{}包裹,避免省略错误。
  • 行宽:每行代码不宜过长,通常建议控制在80-100字符以内,以便阅读。

3. 注释规范

必要的注释:给函数、复杂逻辑块和变量添加注释,但避免过度注释。注释要言简意赅,描述代码的意图,而不是逐行解释代码。

函数注释:在函数定义前添加注释,说明函数的功能、参数和返回值,如:

// 计算数组的平均值
// 参数:arr - 数组指针,size - 数组大小
// 返回值:数组的平均值
double calculate_average(int *arr, int size) {// 函数实现
}

5. 函数的良好设计

  • 函数单一职责:一个函数只做一件事,保持函数简洁,避免将多种功能混合在一个函数中。
  • 适当的函数长度:尽量控制函数长度,建议20-30行左右,过长的函数不利于阅读和维护。
  • 参数数量:函数参数数量应尽量控制在3-5个以内。若参数过多,考虑将相关数据打包到结构体中传递。

6. 变量声明和初始化

  • 局部变量声明靠近使用处:在C语言中,局部变量声明通常靠近其使用位置,保持代码简洁,减少作用域,避免混淆。
  • 及时初始化变量:在使用变量前要确保其已初始化,避免因未初始化而引发的未知行为。

变量及赋值

在C语言中,变量是用于存储数据的命名空间。每个变量都有一个数据类型,定义了它能存储的数据种类和占用的内存空间。

变量的定义语法

类型 变量名 = 初始值;

变量命名规则

变量名由字母、数字和下划线组成,且不能以数字开头。

变量名区分大小写,如count和Count是不同的变量。

变量名不能是C语言的关键字(如int、return等)。

基本数据类型

c语言的基本数据类型的知识点总结

unsigned修饰符

c语言--unsigned修饰符

基本输入输出语句

C语言中的基本输入输出语句

预处理命令

C语言之预处理

类型转换

在C语言中,类型转换(Type Casting)是指将一种数据类型的变量转换为另一种数据类型。类型转换分为自动类型转换强制类型转换两种方式。

自动类型转换

自动类型转换(隐式类型转换)是由编译器自动完成的,不需要程序员显式指定。当表达式中的不同类型数据参与运算时,编译器会根据一定的规则自动转换数据类型。

自动类型转换的规则

  • 从低精度到高精度:小范围数据类型自动转换为大范围数据类型。例如,int类型可以自动转换为float、double等。
  • 类型提升顺序:在表达式中,char和short会自动提升为int,而float会提升为double。
  • 双目运算符转换:在算术表达式中,如果操作数类型不同,编译器会将较低类型的操作数转换为较高类型后再进行运算。
#include  <stdio.h>void main() {int a = 5;float b = 3.2;float result = a + b; // a自动转换为float后与b相加,result为float类型printf("result = %.1f\n", result);char c = 'A';int ascii_value = c; // c自动转换为int类型,ascii_value的值为65printf("ascii_value = %d\n", ascii_value);}

自动转换带来的精度问题

有时候自动转换可能会导致精度损失。例如,将一个double转换为float时,可能会丢失小数位数。

#include  <stdio.h>void main() {double large_value = 12345.6789;float smaller_value = large_value; // large_value会自动转换为float,导致精度丢失printf("%.4f\n", smaller_value);// 输出:12345.6787}

强制类型转换

强制类型转换(显式类型转换)是指程序员通过在值前加上目标类型,将数据类型从一种显式地转换为另一种。强制类型转换在某些特定场合非常有用,例如当需要将一个float转换为int以去除小数部分时。

强制类型转换语法

(目标类型) 表达式

强制类型转换示例

float f = 3.14;
int i = (int)f; // 将f强制转换为int类型,结果为3,舍弃小数部分

在上述示例中,变量f被强制转换为int类型,结果为3,丢失了小数部分。

强制类型转换的应用场景

  • 舍弃小数部分:将浮点数转换为整数,去除小数部分。
  • 避免精度丢失:当低精度类型参与高精度运算时,强制将低精度类型转换为高精度类型,确保计算精度。
  • 指针类型转换:在某些情况下,需要将不同类型的指针进行转换。例如,void*指针可以转换为其他类型的指针。

自动类型转换与强制类型转换的区别

特点自动类型转换强制类型转换
执行者编译器自动进行程序员手动进行
转换规则由低精度转向高精度无需遵循高低精度规则
代码表示不需要额外的语法需要显式地指定目标类型
精度控制可能导致精度损失程序员可以控制转换精度
适用场景一般用于表达式运算中的隐式转换精度控制、特殊情况

运算符号 

在C语言中,运算符(Operator)用于执行各种运算,主要分为以下几类:

1. 算术运算符

算术运算符用于基本的数学运算,支持整数和浮点数。

运算符含义示例结果
+a + b两数相加
-a - b两数相减
*a * b两数相乘
/a / b两数相除
%取模(余数)a % b整数除的余数

注意/运算符在整数除法时只保留整数部分,%运算符仅适用于整数。

2. 赋值运算符

赋值运算符用于将右边的值赋给左边的变量。

运算符含义示例等价形式
=赋值a = b-
+=加后赋值a += ba = a + b
-=减后赋值a -= ba = a - b
*=乘后赋值a *= ba = a * b
/=除后赋值a /= ba = a / b
%=取模后赋值a %= ba = a % b

3. 关系运算符

关系运算符用于比较两个值,结果是布尔值(0表示假,1表示真)。

运算符含义示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b

4. 逻辑运算符

逻辑运算符用于对布尔表达式进行逻辑运算,返回布尔值。

运算符含义示例结果
&&逻辑与(AND)a && b两者都为真时为真
``逻辑或(OR)
!逻辑非(NOT)!a取反,真变假,假变真

5. 位运算符

位运算符直接操作二进制位,通常用于底层编程或性能优化。

运算符含义示例结果
&位与(AND)a & b两个位都为1时为1
``位或(OR)`a
^位异或(XOR)a ^ b位不同为1,相同为0
~位取反(NOT)~a0变1,1变0
<<左移a << 1左移1位,相当于乘以2
>>右移a >> 1右移1位,相当于除以2

6. 条件运算符(三元运算符)

条件运算符是简化的if-else结构,根据条件判断返回两个值中的一个。

语法:

条件 ? 表达式1 : 表达式2;

示例

int a = 10, b = 20;
int max = (a > b) ? a : b; // 如果a > b,max为a,否则为b

7. 自增和自减运算符

自增和自减运算符用于对变量进行增减操作,有前置和后置两种形式。

运算符含义示例结果
++自增a++++a增加1
--自减a----a减少1

前置和后置的区别

  • 前置(如++a):先增减,再参与表达式运算。
  • 后置(如a++):先参与表达式运算,再增减。

8. sizeof 运算符

sizeof运算符用于返回变量或数据类型的字节大小。

int a;
printf("%zu", sizeof(a)); // 输出a的字节大小
printf("%zu", sizeof(int)); // 输出int类型的字节大小

运算符优先级比较

运算符的优先级

优先级别为1的优先级最高,优先级别为10的优先级别最低。

判断与循环语句

C语言之判断与循环语句知识点总结

goto语句

goto语句在C语言中是一种控制流语句,允许程序跳转到指定位置继续执行。尽管它在特定场景中能简化代码,但一般不推荐使用,因为滥用goto会导致代码难以维护,降低可读性。

语法

goto label;
// 代码块
label: 
// 跳转目标位置的代码
  • label 是一个标识符,用来标记跳转位置,通常以冒号 : 结尾。
  • goto label; 语句会直接跳转到 label: 所在的位置并继续执行代码。

使用示例

#include <stdio.h>int main() {int i = 0;start: // 定义标签if (i < 5) {printf("i = %d\n", i);i++;goto start; // 跳转到标签 start}printf("循环结束\n");return 0;
}

在这个示例中,程序从 goto start; 跳回到 start: 标签位置,形成一个简单的循环,直到 i 达到5。

使用场景

虽然goto语句一般不推荐使用,但在某些情况下它能简化处理,比如:

  • 错误处理:特别是在需要释放资源的代码中,goto可以帮助减少重复代码。
  • 多层嵌套跳出:在多重循环或条件语句中快速跳出。

函数详解

C语言之函数详解

值调用(call by value)方式和引用调用(call by reference)

c语言中值调用(call by value)方式和引用调用(call by reference)_值调用和引用调用

数组详解

C语言之数组详解

指针详解

C语言之指针详解

结构体和共用体详解

C语言之结构体和共用体详解

文件操作

C语言之文件操作

数据结构之链表

C语言数据结构之链表

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安装配置教程】二、VMware安装并配置ubuntu22.04

一、准备&#xff1a; 虚拟机安装ubuntu&#xff0c;首先要先找到一个镜像&#xff0c;可以去ubuntu官方下载一个&#xff0c;地址&#xff1a;下载Ubuntu桌面系统 | Ubuntu&#xff0c;下载好iso的镜像文件后保存好&#xff0c;接下来打开VMware。 二、安装&#xff…

立体视觉的核心技术:视差计算与图像校正详解

立体视觉的核心技术&#xff1a;视差计算与图像校正详解 在立体视觉中&#xff0c;通过双目相机&#xff08;即左右两台相机&#xff09;的不同视角捕获的图像&#xff0c;结合几何关系&#xff0c;我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差&#xff08;di…

深度学习基础练习:从pytorch API出发复现LSTM与LSTMP

2024/11/5-2024/11/7&#xff1a; 前置知识&#xff1a; [译] 理解 LSTM(Long Short-Term Memory, LSTM) 网络 - wangduo - 博客园 【官方双语】LSTM&#xff08;长短期记忆神经网络&#xff09;StatQuest_哔哩哔哩_bilibili 大部分思路来自于&#xff1a; PyTorch LSTM和LSTMP…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

Docker了解

Docker是一种容器化技术&#xff0c;它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中&#xff0c;以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术&#xff0c;可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…

‘conda‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,Miniconda

下载了conda&#xff0c;但是在cmd里执行conda --version会显示’conda’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 原因是环境变量里没有添加conda&#xff0c;无法识别路径。 需要在系统环境变量里添加如下路径&#xff1a; 保存之后重新打开cmd&am…

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)

《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09; 《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09;理解TCP和UDPTCP/IP协议栈TCP/IP协议的诞生背景链路层网络层T…

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…

深度学习笔记12

1.神经网络的代价函数 神经网络可同时用于解决分类问题和回归问题&#xff0c;对于不同的问题会在输出层后&#xff0c;加上不同的变换函数。一般来说&#xff0c;回归问题使用恒等函数,分类问题使用sigmoid或softmax函数。而不同的变换函数&#xff0c;也对应不同的代价函数。…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type&#xff1a;队列类型1.2、Name&#xff1a;队列名称1.3、Durability&#xff1a;声明队列是否持久化1.4、Auto delete&#xff1a; 是否自动删除1.5、Exclusive&#xff1a;1.6、Arguments&#xff1a;队列的其他属性&#xf…

json即json5新特性,idea使用json5,fastjson、gson、jackson对json5支持

文章目录 1.新特性1.1.JSON&#xff06;JSON5官网2.示例2.1. IntelliJ IDEA2.1.1.支持.json5文件2.1.2.md支持json5代码块 2.9. 示例源码 1.新特性 【通用】 注释尾随逗号key无需引号&#xff08;或单引号&#xff09; 【字符串】 字符串可以用单引号引起来。字符串可以通过转…

【NOIP普及组】摆花

【NOIP普及组】摆花 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 小明的花店新开张&#xff0c;为了吸引顾客&#xff0c;他想在花店的门口摆上一排花&#xff0c;共 m 盆。通过调 查顾客的喜好&am…

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

Qt中 QWidget 和 QMainWindow 区别

QWidget 用来构建简单窗口 QMainWindow 用来构建更复杂的窗口&#xff0c;QMainWindow 继承自QWidget&#xff0c;在QWidget 的基础上提供了菜单栏、工具栏、状态栏等功能 菜单栏&#xff08;QMenuBar&#xff09;工具栏&#xff08;QToolBar&#xff09;状态栏&#xff08;Q…

《深入浅出Apache Spark》系列③:Spark SQL解析层优化策略与案例解析

导读&#xff1a;本系列是Spark系列分享的第三期。第一期分享了Spark Core的一些基本原理和一些基本概念&#xff0c;包括一些核心组件。Spark的所有组件都围绕Spark Core来运转&#xff0c;其中最活跃的一个上层组件是Spark SQL。第二期分享则专门介绍了Spark SQL的基本架构和…

安全的时钟启动

Note&#xff1a;文章内容以 Xilinx 系列 FPGA 进行讲解 1、什么是安全启动时钟 通常情况下&#xff0c;在MMCM/PLL的LOCKED信号抬高之后&#xff08;由0变为1&#xff09;&#xff0c;MMCM/PLL就处于锁定状态&#xff0c;输出时钟已保持稳定。但在此之前&#xff0c;输出时钟会…

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…

丹韵红墙成红毯至美背景!冠珠华脉「雍华京韵」于M essential大秀绽放京韵时尚

东方美学代表品牌M essential近日于上海科学会堂举办十周年大秀&#xff0c;并发布品牌全新2024/25冬春系列。冠珠瓷砖作为国风新韵合作品牌&#xff0c;以高定岩板华脉「雍华京韵」系列的宫墙丹韵打造红毯背景墙&#xff0c;中国高定岩板与中国高级时装作品碰撞着“中国美”的…

工程认证与Spring Boot:计算机课程管理的新探索

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数&#xff0c;您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤&#xff1a; 方法一&#xff1a;使用COUNTIF函数 准备数据&#xff1a;确保您的姓名列表位于一个连续的单元格区域&#xff0c;例如…