C语言复习概要(一)

在这里插入图片描述

本文

      • C语言入门详解:从基础概念到分支与循环
        • 1. C语言常见概念
          • 1.1 程序的基本结构
          • 1.2 变量作用域和存储类
          • 1.3 输入输出
          • 1.4 编译与运行
        • 2. C语言中的数据类型和变量
          • 2.1 基本数据类型
          • 2.2 变量的声明与初始化
          • 2.3 常量与枚举
        • 3. C语言的分支结构
          • 3.1 if语句
          • 3.2 if-else语句
          • 3.3 嵌套if语句
          • 3.4 switch语句
          • 4.2 while循环
          • 4.3 do-while循环
          • 4.4 循环的控制语句
        • 5. 分支与循环的综合应用
          • 5.1 简单的计算器示例
          • 5.2 查找数组中的最大值
      • 总结

C语言入门详解:从基础概念到分支与循环

C语言作为现代编程语言的鼻祖之一,在系统编程、嵌入式开发、操作系统内核等领域占据了极其重要的位置。C语言以其简洁、高效、可移植性等特点,成为了很多其他高级语言(如C++、Java、Python)的基础。本文将深入探讨C语言的常见概念、变量和数据类型、分支结构以及循环结构,帮助初学者更好地掌握这门经典编程语言。


1. C语言常见概念

在学习任何编程语言之前,理解其核心概念至关重要。C语言的程序结构、函数、变量作用域、输入输出、编译运行等内容构成了其基本框架。

1.1 程序的基本结构

C语言的程序是由函数和语句组成的模块化代码集合,每个C语言程序至少有一个主函数,即main()函数。程序从main()函数开始执行,当程序结束时返回一个整数值,通常是0,表示程序成功运行。

基本结构

#include <stdio.h>  // 标准输入输出头文件int main() {// 主函数体printf("Hello, World!\n");return 0;
}
  • #include <stdio.h>:这是一个预处理指令,用于引入标准输入输出库,该库包含printf()scanf()等常用函数。
  • int main():这是程序的主函数,程序的执行从这里开始。返回类型int表明函数返回整数值。
  • printf():这是一个输出函数,能够将字符串或变量值输出到控制台。
1.2 变量作用域和存储类

在C语言中,变量的作用域决定了它的可见性和生命周期,通常分为局部变量全局变量。局部变量只能在其声明的代码块内访问,而全局变量可以在整个程序中访问。

  • 局部变量:在函数或代码块内定义,函数执行结束时,局部变量被销毁。
  • 全局变量:在所有函数外部定义,可以在整个程序中访问。

存储类描述了变量的生命周期、初始值和存储方式,主要有以下几种:

  • auto:默认的局部变量存储类。
  • extern:用于声明一个全局变量或函数在其他文件中定义。
  • static:用于局部变量时,其值在函数结束后不会被销毁,用于全局变量时,其作用域限制在当前文件中。
  • register:提示编译器将变量存储在CPU寄存器中,以提高访问速度。

示例

#include <stdio.h>int globalVar = 10;  // 全局变量void func() {int localVar = 5;  // 局部变量printf("Local variable: %d\n", localVar);
}int main() {func();printf("Global variable: %d\n", globalVar);return 0;
}

在这个示例中,globalVar是一个全局变量,localVar是局部变量。全局变量的值可以在程序的不同部分访问,而局部变量只能在函数func()中使用。

1.3 输入输出

C语言提供了丰富的输入输出功能。printf()用于向屏幕输出数据,scanf()用于从用户获取输入。

  • printf():格式化输出,用法类似于打印字符串或变量。
  • scanf():用于获取用户的输入,按格式指定的变量存储输入值。

代码示例

#include <stdio.h>int main() {int age;printf("Enter your age: ");scanf("%d", &age);printf("Your age is: %d\n", age);return 0;
}

程序会提示用户输入年龄,然后通过scanf()将用户的输入值存储在变量age中,并使用printf()输出。

1.4 编译与运行

C语言是编译型语言,这意味着源代码需要通过编译器翻译成机器代码才能在计算机上执行。常见的C语言编译器有GCC(GNU Compiler Collection)、Clang、MSVC等。

编译流程

  1. 编写源代码并保存为.c文件。
  2. 使用编译器进行编译,如gcc命令:gcc program.c -o program
  3. 生成可执行文件,运行该文件:./program

2. C语言中的数据类型和变量

C语言的数据类型定义了变量可以存储的值的类型和范围。每种数据类型都有特定的存储需求和表示方式。

2.1 基本数据类型

C语言中的数据类型分为以下几类:

  • 整型int):用于存储整数。常见的整型有intshortlong,可以通过unsigned修饰符表示无符号整型。
  • 字符型char):用于存储单个字符,占用1个字节。
  • 浮点型float):用于存储小数,占用4个字节,精度较低。
  • 双精度浮点型double):精度高于float,占用8个字节。
  • 布尔型:虽然C语言没有专门的布尔类型,但我们通常使用整型,0表示false,非零值表示true

数据类型表

数据类型存储大小取值范围
char1字节-128 到 127 或 0 到 255
int2或4字节-32,768 到 32,767 或 -2^31 到 2^31-1
float4字节1.2E-38 到 3.4E+38
double8字节2.3E-308 到 1.7E+308
short2字节-32,768 到 32,767
long8字节-2^63 到 2^63-1
2.2 变量的声明与初始化

在C语言中,变量在使用之前必须先声明。声明变量时需要指定其类型,且可以在声明的同时为其赋初值。

  • 变量声明:告诉编译器该变量的类型和名称。
  • 变量初始化:为变量赋初值,防止未初始化变量的使用可能导致程序行为异常。

示例

#include <stdio.h>int main() {int age = 25;  // 声明并初始化变量float weight = 70.5;char grade = 'A';printf("Age: %d, Weight: %.1f, Grade: %c\n", age, weight, grade);return 0;
}

这里我们定义了整型、浮点型和字符型变量,并进行了初始化。

2.3 常量与枚举

在C语言中,常量的值在程序执行过程中是不可更改的,使用const关键字定义常量。枚举(enum)是一种用户定义的数据类型,用于表示一组相关的常量。

常量示例

#include <stdio.h>int main() {const int DAYS_IN_WEEK = 7;printf("There are %d days in a week.\n", DAYS_IN_WEEK);return 0;
}

枚举示例

#include <stdio.h>enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};int main() {enum Weekday today;today = Wednesday;printf("Today is day %d of the week.\n", today);  // 输出3return 0;
}

在上述程序中,枚举类型Weekday定义了7个常量,分别代表一周中的天数。


3. C语言的分支结构

分支结构使得程序可以根据条件执行不同的代码路径。在C语言中,常见的分支结构包括if语句、if-else语句、嵌套if语句和switch语句。

3.1 if语句

if语句是最基本的分支结构,它根据条件表达式的真假来决定是否执行某段代码。

语法

if (条件) {// 如果条件为真,执行这段代码
}

示例

#include <stdio.hint main() {int number = 10;if (number > 0) {printf("The number is positive.\n");}return 0;
}

在这个示例中,程序根据number的值决定是否输出正数。

3.2 if-else语句

if-else语句在条件为假时执行另一个代码块。

语法

if (条件) {// 如果条件为真,执行这段代码
} else {// 如果条件为假,执行这段代码
}

示例

#include <stdio.h>int main() {int number = -5;if (number >= 0) {printf("The number is non-negative.\n");} else {printf("The number is negative.\n");}return 0;
}

这个程序根据number的值判断它是非负数还是负数。

3.3 嵌套if语句

当多个条件需要嵌套判断时,可以使用嵌套if语句。它可以有效地处理复杂的条件。

示例

#include <stdio.h>int main() {int number = 0;if (number > 0) {printf("The number is positive.\n");} else if (number < 0) {printf("The number is negative.\n");} else {printf("The number is zero.\n");}return 0;
}

这里,程序根据number的值进行三重判断,并输出相应的信息。

3.4 switch语句

switch语句适合用于多个可能的值来控制执行路径。相比多个if-else语句,switch结构更具可读性。

语法

switch (变量或表达式) {case1:// 当变量等于值1时执行break;case2:// 当变量等于值2时执行break;default:// 默认执行
}

示例

#include <stdio.h>int main() {int day = 3;switch (day) {case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;case 4:printf("Thursday\n");break;case 5:printf("Friday\n");break;case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("Invalid day\n");}return 0;
}在这个例子中,根据变量`day`的值,`switch`语句会打印对应的星期几。如果值不在17之间,默认会打印“Invalid day”。---#### 4. C语言中的循环结构循环是编程中的重要控制结构,用于重复执行一段代码。C语言中常见的循环结构有`for`循环、`while`循环和`do-while`循环。##### 4.1 for循环`for`循环用于在已知循环次数的情况下执行循环,它将初始化、条件判断和迭代操作结合在一起。**语法**:```c
for (初始化; 条件; 迭代) {// 循环体
}

示例

#include <stdio.h>int main() {for (int i = 0; i < 5; i++) {printf("i = %d\n", i);}return 0;
}

在这个例子中,for循环将变量i0增加到4,并在每次迭代中输出i的值。

4.2 while循环

while循环在条件为真时反复执行循环体,适合用于循环次数不确定的情况。

语法

while (条件) {// 循环体
}

示例

#include <stdio.h>int main() {int i = 0;while (i < 5) {printf("i = %d\n", i);i++;}return 0;
}

这个程序与for循环类似,但使用了while循环来逐步增加i的值。

4.3 do-while循环

do-while循环和while循环类似,但它至少会执行一次循环体,因为条件是在循环体执行之后才进行判断的。

语法

do {// 循环体
} while (条件);

示例

#include <stdio.h>int main() {int i = 0;do {printf("i = %d\n", i);i++;} while (i < 5);return 0;
}

即使初始值为i = 0do-while循环也会先执行循环体,然后再检查条件是否成立。

4.4 循环的控制语句

在C语言中,控制循环执行过程的语句包括breakcontinuegoto

  • break:用于立即终止循环,跳出当前循环体。
  • continue:跳过当前迭代的剩余部分,进入下一次迭代。
  • goto:一种直接跳转到程序中指定标签的语句,尽量避免使用,容易导致程序难以调试和理解。

示例:使用breakcontinue

#include <stdio.h>int main() {for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 当i为5时,终止循环}if (i % 2 == 0) {continue;  // 跳过偶数}printf("i = %d\n", i);}return 0;
}

这个程序会输出奇数并在i等于5时终止循环。


5. 分支与循环的综合应用

在编写实际的C语言程序时,往往会结合使用分支结构和循环结构,以实现更复杂的逻辑处理。

5.1 简单的计算器示例

一个基本的计算器程序,可以根据用户的输入进行加法、减法、乘法和除法运算,结合了分支结构和循环结构。

示例

#include <stdio.h>int main() {char op;double num1, num2;while (1) {printf("Enter operator (+, -, *, /) or 'q' to quit: ");scanf(" %c", &op);if (op == 'q') {break;}printf("Enter two numbers: ");scanf("%lf %lf", &num1, &num2);switch (op) {case '+':printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);break;case '-':printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);break;case '*':printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);break;case '/':if (num2 != 0) {printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);} else {printf("Error! Division by zero.\n");}break;default:printf("Invalid operator.\n");}}return 0;
}

这个程序允许用户输入一个算术运算符和两个操作数,然后根据用户的选择进行运算,直到用户输入'q'退出程序。

5.2 查找数组中的最大值

结合分支结构和循环结构,我们还可以编写一个查找数组中最大值的程序。

示例

#include <stdio.h>int main() {int n, i, max;printf("Enter number of elements: ");scanf("%d", &n);int arr[n];printf("Enter %d integers: ", n);for (i = 0; i < n; i++) {scanf("%d", &arr[i]);}max = arr[0];  // 假设第一个元素为最大值for (i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}printf("The maximum value is: %d\n", max);return 0;
}

该程序通过for循环遍历数组中的每个元素,并使用if语句比较当前元素与最大值,最后输出数组中的最大值。


总结

本文详细介绍了C语言的常见概念、数据类型、变量的声明与初始化、分支结构以及循环结构,并通过多个代码示例展示了如何使用这些基本构件编写C语言程序。通过学习这些内容,初学者能够更好地理解C语言的基本结构和逻辑控制,为后续的高级编程技巧打下坚实的基础。

C语言的简单性和灵活性使其成为计算机科学中的核心编程语言。掌握了本文介绍的内容后,建议继续深入学习指针、数组、结构体、函数等高级话题,进一步提高编程能力。

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

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

相关文章

0108 Spring Boot启动过程

Spring Boot 的启动过程可以分为以下几个关键步骤&#xff1a; 1. SpringApplication 初始化 Spring Boot 应用的启动是通过调用 SpringApplication.run() 方法完成的。在这个过程中&#xff0c;Spring Boot 会通过 SpringApplication 类对应用进行初始化&#xff0c;包括设置…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近&#xff0c;到了国庆节&#xff0c;自己呆在学校当守校人&#xff0c;太无聊了&#xff0c;顺便做一个小demo帮祖国目前庆生&#xff01;&#xff01;&#xff01; 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

Linux驱动开发(速记版)--设备树插件

第六十八章 设备树插件介绍 Linux 4.4之后引入了动态设备树&#xff0c;其中的设备树插件&#xff08;Device Tree Overlay&#xff09;是一种扩展机制&#xff0c;允许在运行时动态添加、修改或删除设备节点和属性。 设备树插件机制通过DTS&#xff08;设备树源文件&#xff0…

挖矿病毒记录 WinRing0x64.sys

之前下载过福晰pdf编辑器&#xff0c;使用正常。 某天发现机器启动后&#xff0c;过个几分钟(具体为5min)会自动运行几个 cmd 脚本(一闪而过)&#xff0c;但是打开任务管理器没有发现异常程序&#xff08;后面发现病毒程序伪装成System系统程序&#xff0c;见下图&#xff09;…

SpringCloud Config配置中心 SpringCloud Bus消息总线

一、SpringCloud Config 使用git储存配置信息 1&#xff09;什么是 SpringCloud Config项目实现的目标是将配置文件从本地项目中抽出来放到git仓库中&#xff0c;项目启动时自动从git仓库中取配置文件。 但是本地项目不直接和git仓库通信&#xff0c;而是通过配置服务器中转。…

python如何查询函数

1、通用的帮助函数help() 使用help()函数来查看函数的帮助信息。 如&#xff1a; import requests help(requests) 会有类似如下输出&#xff1a; 2、查询函数信息 ★查看模块下的所有函数&#xff1a; dir(module_name) #module_name是要查询的函数名 如&#xff1a; i…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

iPhone、iPad、iOS储存空间不足,瘦身终极方法

如果你实在是需要瘦身&#xff0c;但是确实没有什么可以删除了&#xff0c;也不想备份到其他地方&#xff0c;就这样做。 删除不需要的自带应用。 你可以删除FaceTime、股票、等app&#xff0c;但是不要删除你需要的app。 删除的界限是这样的&#xff1a;你永远都不可能使用…

OceanBase企业级分布式关系数据库

简介 OceanBase 数据库是阿里巴巴和蚂蚁集团不基于任何开源产品&#xff0c;完全自研的原生分布式关系数据库软件&#xff0c;在普通硬件上实现金融级高可用&#xff0c;首创“三地五中心”城市级故障自动无损容灾新标准&#xff0c;具备卓越的水平扩展能力&#xff0c;全球首…

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中&#xff0c;总是需要多个人同时对一个项目进行修改&#xff0c;如何高效快速地进行修改&#xff0c;且控制各自修改的版本不会和他人的进行重叠&#xff0c;这就需要用到Git分布式版本控制器了 作用 解决了一致性&#xff0c;并发性…

CSS 圆形边框与阴影

目录 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影

Megabit兆比特10月比特币激增做好准备-最新加密货币新闻

Kaiko Research最近的分析表明&#xff0c;交易员正在积极为潜在的强劲表现做好准备特币(BTC)比今年十月。目前&#xff0c;BTC的交易价格为60800美元&#xff0c;在测试了60000美元的支撑位后&#xff0c;最近上涨了800美元。Megabit兆比特自成立以来,Megabit凭借用户友好的界…

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Appl…

【设计模式-职责链】

定义 职责链模式是一种行为设计模式&#xff0c;**它通过将请求发送给链上的多个处理者来避免请求发送者与处理者之间的紧密耦合。每个处理者可以选择处理请求或将其传递给链中的下一个处理者。**这样&#xff0c;可以将处理请求的责任链式组织&#xff0c;从而实现更灵活的请…

【HDP】zookeeper未授权漏洞修复

目录 一、禁用四字命令 二、ZK-Client增加kerberos 一、禁用四字命令 Zookeeper四字命令的使用方式非常简单&#xff0c;通常有两种方式。第一种是通过Telnet方式&#xff0c;使用Telnet客户端登录ZooKeeper的对外服务端口&#xff0c;然后直接使用四字命令即可&#xff1b;第…

django的URL配置

1 django如何处理一个请求 首先Django要使用根URLconf模块&#xff0c;通过setting.py配置文件的ROOT_URLCONF来设置。 加载该模块后并查找变量 urlpatterns。这是一个Python的django.conf.urls.url()实例列表。 Django按顺序运行每个URL模式&#xff0c;并在匹配所请求的…

.NET Core 高性能并发编程

一、高性能大并发架构设计 .NET Core 是一个高性能、可扩展的开发框架&#xff0c;可以用于构建各种类型的应用程序&#xff0c;包括高性能大并发应用程序。为了设计和开发高性能大并发 .NET Core 应用程序&#xff0c;需要考虑以下几个方面&#xff1a; 1. 异步编程 异步编程…

Windows平台如何实现RTSP|RTMP流录像?

好多开发者使用场景&#xff0c;除了实现基础的低延迟RTSP、RTMP播放外&#xff0c;还需要实现RTSP、RTMP流数据的本地录像功能。本文以大牛直播SDK的Windows平台播放模块为例&#xff0c;介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像&#xff1b; [拉…

15分钟学 Python 第34天 :小项目-个人博客网站

Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及&#xff0c;个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中&#xff0c;我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…

二叉树深度学习——将二叉搜索树转化为排序的双向链表

1.题目解析 题目来源&#xff1a;LCR 155.将二叉搜索树转化为排序的双向链表 测试用例 2.算法原理 首先题目要求原地进行修改并且要求左指针代表前驱指针&#xff0c;右指针代表后继指针&#xff0c;所以思路就是 1.使用前序遍历创建两个指针cur、prev代表当前节点与前一个节点…