C语言复习概要(一)

news/2024/12/21 21:21:06/

在这里插入图片描述

本文

      • 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.ppmy.cn/news/1536812.html

相关文章

MPLS解决BGP路由黑洞问题

文章目录 MPLS应用实验实验配置 MPLS应用实验 实验目的&#xff1a;解决BGP中IBGP邻居之间存在的问题 MPLS解决BGP路由黑洞问题实验 配置完基本的MPLS和BGP操作之后&#xff0c;只有R2和R5上面有两个私网的路由&#xff0c;中间的设备没有私网路由&#xff0c;这时候默认还是走…

大数据可视化分析建模论

大数据可视化分析建模论 前言大数据可视化分析建模 前言 在这个信息爆炸的时代&#xff0c;数据如同潮水般涌来&#xff0c;我们每天都在与海量的数据打交道。数据已经成为了企业决策、科研创新以及社会发展的核心要素。如何从这些纷繁复杂的数据中提取有价值的信息&#xff0…

盲拍合约:让竞拍更公平与神秘的创新解决方案

目录 前言 一、盲拍合约是什么&#xff1f; 二、盲拍合约工作原理 1、合约创建与初始化 2、用户出价&#xff08;Bid&#xff09; 3、出价结束 4、披露出价&#xff08;Reveal&#xff09; 5、处理最高出价 6、结束拍卖 7、退款与提款 三、解析盲拍合约代码…

【无人水面艇路径跟随控制2】(C++)USV代码阅读: SetOfLos 类的从路径点和里程计信息中计算期望航向

【无人水面艇路径跟随控制2】&#xff08;C&#xff09;USV代码阅读&#xff1a; SetOfLos 类的从路径点和里程计信息中计算期望航向 写在最前面set_of_los.cpp小结详细解释头文件包含命名空间构造函数和析构函数设置参数函数获取航向函数 &#x1f308;你好呀&#xff01;我是…

人脸表情行为识别系统源码分享

人脸表情行为识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【斯坦福CS144】Lab2

一、实验目的 实现一个 TCPReceiver&#xff0c;用以接收传入的 TCP segment 并将其转换成用户可读的数据流。 二、实验内容 1.接收TCP segment&#xff1b; 2.重新组装字节流&#xff08;包括EOF&#xff09;&#xff1b; 3.确定应该发回给发送者的信号&#xff0c;以进行…

UE4 材质学习笔记03(翻书(Flipbook)动画/环境混合)

一.FlipBook Animation 如果你想让游戏以每秒30帧的速度运行&#xff0c;所有内容都必须在33毫秒内渲染出来&#xff0c; 如果你想让游戏以每秒60帧的速度运行的话&#xff0c;必须在16毫秒内。 所以当一个效果需要很多细节的时候&#xff0c;往往会离线创建它&#xff0c;然…

Linux操作系统——概念扫盲I

目录 虚拟机概念刨析 在那之前&#xff0c;询问什么是虚拟化&#xff1f; 现在来看看什么是虚拟机 虚拟机有啥好的 小差&#xff1a;那JVM也叫Java Virtual Machine&#xff0c;有啥区别呢&#xff1f; Reference 虚拟机概念刨析 我们下面来简单聊聊虚拟机这个概念。对于…