当前位置: 首页 > news >正文

【C语言】第二课 基础语法

一、🧱 基本程序结构

每个C程序都有一个基本的框架,这是程序执行的起点。

#include <stdio.h> // 包含标准输入输出头文件,这样我们才能使用 printf 等函数int main() {      // main 函数是程序的入口,程序从这里开始执行// 你的代码写在这里printf("Hello, World!\n"); // 打印 Hello, World! 到屏幕,\n 表示换行return 0;      // 返回 0 通常表示程序成功执行完毕
}

要点说明:

  • #include预处理器指令,用于包含其他文件(通常是头文件.h)。stdio.h 包含了输入输出函数的声明,如 printfscanf
  • main() 函数是必须的,它是C程序的入口点。程序执行从这里开始。
  • return 0; 表示程序正常退出。非零值通常表示错误。

二、🔢 数据类型、变量与常量

程序需要存储和操作数据,这就需要变量和常量。

1. 基本数据类型

C语言提供了几种基本数据类型来存放不同类型的数据:

数据类型含义示例说明
int整型int age = 25;存储整数,如 100, -5
float单精度浮点型float pi = 3.14f;存储小数,精度较低
double双精度浮点型double e = 2.71828;存储小数,精度比 float 高
char字符型char grade = 'A';存储单个字符,用单引号括起

示例代码:变量定义与初始化

#include <stdio.h>int main() {int age = 30; // 定义整型变量并初始化float height = 1.75f; // 定义浮点型变量并初始化,'f' 表示 float 类型char grade = 'A'; // 定义字符型变量并初始化double weight = 65.5; // 定义双精度浮点变量// 打印变量值printf("Age: %d\n", age); // %d 用于输出整数printf("Height: %.2f meters\n", height); // %.2f 表示保留两位小数printf("Grade: %c\n", grade); // %c 用于输出字符printf("Weight: %.1f kg\n", weight); // %.1f 表示保留一位小数,double也可以用%f输出return 0;
}

要点说明:

  • 变量命名规则:只能由字母、数字和下划线组成,且不能以数字开头。C语言区分大小写。
  • 初始化:好的编程习惯是在定义变量时就赋予初始值,避免使用未初始化的变量导致不可预知的结果。
2. 常量

常量是其值在程序运行期间不可改变的量。

  • const 修饰的变量:表示变量是只读的。
    const double PI = 3.14159; // PI 的值之后不能再修改
    
  • #define 宏常量:在编译前进行文本替换。
    #define MAX_SIZE 100 // 注意没有分号,且通常用大写字母命名
    

三、📥 输入与输出

程序需要与用户交互,接收输入和显示输出。

1. 格式化输出 printf()

printf() 函数用于将格式化的数据输出到标准输出(通常是屏幕)。

常用格式说明符:

格式符含义
%d输出有符号十进制整数
%f输出浮点数
%c输出单个字符
%s输出字符串

你可以使用精度控制输出格式,例如 %.2f 表示保留两位小数。

2. 格式化输入 scanf()

scanf() 函数用于从标准输入(通常是键盘)读取格式化的数据。

重要: 在使用 scanf 读取变量时,必须在变量名前加上 & 符号(取地址运算符),表示将输入的值存储到该变量所在的内存地址中。

#include <stdio.h>int main() {int num1, num2;float price;char ch;printf("请输入两个整数,用空格隔开:");scanf("%d %d", &num1, &num2); // 读取两个整数,注意 & 符号printf("请输入一个浮点数:");scanf("%f", &price); // 读取一个浮点数printf("请输入一个字符:");scanf(" %c", &ch); // 注意 %c 前面的空格,用于消耗之前输入留下的换行符printf("你输入的数字是:%d 和 %d\n", num1, num2);printf("你输入的价格是:%.2f\n", price);printf("你输入的字符是:%c\n", ch);return 0;
}

四、🧮 运算符与表达式

运算符用于对变量和常量进行各种操作。

类型运算符示例说明
算术运算符+, -, *, /, % (取模/求余)c = a % b;计算余数
关系运算符>, <, ==, !=, >=, <=if (a == b) {...}判断相等
逻辑运算符&& (与), `(或),!` (非)
赋值运算符=, +=, -=, *=, /=a += 5; // 等价于 a = a + 5;

示例代码:

#include <stdio.h>int main() {int a = 10, b = 3;float result;result = a / (float)b; // 将b强制转换为float,使除法变为浮点除法printf("a / b = %.2f\n", result); // 输出 3.33printf("a %% b = %d\n", a % b); // 输出 1,%% 用于输出一个百分号if (a > 5 && b < 5) { // 逻辑与运算printf("Both conditions are true.\n");}a += 20; // 等价于 a = a + 20;printf("a is now %d\n", a); // 输出 30return 0;
}

五、🎛️ 控制流语句

控制程序执行的流程,是实现复杂逻辑的关键。

1. 条件语句 if - else

根据条件的真假执行不同的代码块。

#include <stdio.h>int main() {int score;printf("请输入你的分数 (0-100): ");scanf("%d", &score);if (score >= 90) {printf("成绩优秀!\n");} else if (score >= 70) { // 注意是 else ifprintf("成绩良好。\n");} else if (score >= 60) {printf("成绩及格。\n");} else {printf("成绩不及格,需要努力。\n");}return 0;
}
2. 选择语句 switch - case

当一个变量有多种可能的取值时,switch 语句比多个 if-else 更清晰。

#include <stdio.h>int main() {int day;printf("请输入星期数字 (1-7): ");scanf("%d", &day);switch (day) { // switch 后的表达式必须是整型或字符型case 1: // case 后的值必须是整型常量或常量表达式printf("星期一\n");break; // break 至关重要,用于跳出整个 switch 块case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;// ... 可以继续写 case 4, 5, 6case 7:printf("星期日\n");break;default: // 当所有 case 都不匹配时,执行 defaultprintf("输入错误!请输入 1-7 之间的数字。\n");}return 0;
}

⚠️ 注意:忘记写 break 会导致“穿透”现象,即程序会继续执行下一个 case 的语句,直到遇到 breakswitch 结束。

3. 循环语句

用于重复执行一段代码。

  • for 循环:适合已知循环次数的场景。
    #include <stdio.h>int main() {// for (初始化; 循环条件; 增量表达式)for (int i = 0; i < 5; i++) { // 循环5次,i从0到4printf("i = %d\n", i);}return 0;
    }
    
  • while 循环:适合循环次数不确定,但循环条件明确的场景。
    #include <stdio.h>int main() {int count = 0;while (count < 3) { // 只要条件为真,就继续循环printf("Hello while loop! Count: %d\n", count);count++; // 不要忘记改变循环条件,否则可能成为死循环}return 0;
    }
    
  • do-while 循环:先执行一次循环体,再判断条件。至少执行一次
    #include <stdio.h>int main() {int num;do {printf("请输入一个正数:");scanf("%d", &num);} while (num <= 0); // 条件检查在循环体之后printf("你输入的是: %d\n", num);return 0;
    }
    
4. 循环控制 breakcontinue
  • break:立即终止整个循环或 switch 语句。
  • continue:跳过本次循环中剩余的代码,立即开始下一次循环。
#include <stdio.h>int main() {// 示例:breakfor (int i = 0; i < 10; i++) {if (i == 5) {break; // 当 i 等于 5 时,跳出整个循环}printf("%d ", i); // 输出: 0 1 2 3 4}printf("\nBreak example ended.\n");// 示例:continuefor (int j = 0; j < 6; j++) {if (j == 3) {continue; // 当 j 等于 3 时,跳过下面的打印,直接进行 j++}printf("%d ", j); // 输出: 0 1 2 4 5}printf("\nContinue example ended.\n");return 0;
}

六、📝 注释

注释用于解释代码,提高可读性,编译器会忽略它们。

  • 单行注释:以 // 开始,到行尾结束。
    // 这是单行注释
    int age; // 声明一个年龄变量
    
  • 多行注释:以 /* 开始,以 */ 结束。
    /* 这是一个多行注释,可以跨越多行 */
    

http://www.xdnf.cn/news/1456543.html

相关文章:

  • 【开题答辩全过程】以 基于微信小程序的宠物领养系统为例,包含答辩的问题和答案
  • 理解 C# `async` 的本质:从同步包装到状态机
  • 云手机与网络游戏相结合的优势?
  • AI大模型企业落地指南-笔记05
  • 【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)
  • 【华为培训笔记】ASON原理
  • 关于嵌入式学习——嵌入式硬件3
  • 如何在MacOS上卸载并且重新安装Homebrew
  • 企业微信SCRM工具推荐:微盛AI·企微管家为什么是首选?
  • c#泛型公共类示例
  • Next.js App Router 中文件系统路由与页面跳转实践(以用户详情页面为例)
  • 1688拍立淘接口对接实战案例
  • Playwright-ui自动化工具
  • 如何设置PPTX的默认打开应用为PowerPoint
  • ​​AI生成PPT工具推荐,从此以后再也不用担心不会做PPT了​​
  • Effective Python 第10条 - 用赋值表达式减少重复代码
  • 股价暴跌后扔出 “王炸”,美团 LongCat 大模型到底是续命还是真有料?
  • Linux网络服务——基础设置
  • 【Kubernetes】知识点4
  • 吐槽一下福昕pdf阅读器高级专业版
  • git命令常用指南
  • openEuler2403安装部署Kafbat
  • 用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
  • 关于多Agent协作框架的讨论:以产品经理工作流为例对比Sub Agent与AutoGen
  • 标注工具labelimg使用简介
  • 02-Media-4-mp4muxer.py 录制视频并保存为MP4文件的示例
  • 员工离职导致研发文档遗失的原因与防范方法
  • emmc擦写寿命-分区能拯救系统盘吗?
  • 日本移动应用市场营销分析:娱乐和金融应用增长强劲,游戏类广告支出最高!
  • Process Explorer 学习笔记(第三章3.1.2):管理权利与提权机制解析)