C语言入门学习系列:基本语法

目录

  • 引言
  • [1. 标准库与头文件](#1. 标准库与头文件)
  • [2. 语句](#2. 语句)
  • [3. 表达式](#3. 表达式)
    • [3.1 表达式在赋值语句中](#3.1 表达式在赋值语句中)
    • [3.2 表达式在控制结构中](#3.2 表达式在控制结构中)
    • [3.3 表达式作为函数参数](#3.3 表达式作为函数参数)
    • [3.4 表达式和语句的区别](#3.4 表达式和语句的区别)
  • [4. 语句块](#4. 语句块)
  • [5. 空格](#5. 空格)
  • [6. 注释](#6. 注释)
  • [7. printf() 函数](#7. printf() 函数)
    • [7.1 基本用法](#7.1 基本用法)
    • [7.2 占位符](#7.2 占位符)
    • [7.3 输出格式](#7.3 输出格式)

引言

cpp 复制代码
#include <stdio.h>

int main(void) {
  int a = 8888;
  printf("Hello World, %d\n", a);
  return 0;
}

这是一个非常简单的入门程序,但也是一个完整的C程序,麻雀虽小五脏俱全,包含了众多C语言基本语法知识:

  • 头文件
  • 主函数
  • 语句
  • 变量
  • 表达式
  • 数据类型
  • 标准库函数

1. 标准库与头文件

简单的说,C程序员在编写C程序时,只要干两件事:

  • ①自己编写函数
  • ②调用别人写的函数

为什么要调用别人写的函数呢?

主要是为了提高效率,如果每个程序都从0到1开始写,很多基础、通用的功能被实现多次,即降低效率,又使代码变得臃肿不便于维护。

C语言提供了大量的函数来完成各种基础、通用的任务,这些函数的集合称为标准库 ,使用这些函数前需要声明这些函数,即让编译器知道这些函数是存在的,函数声明包含在一类特殊的文件中,称之为头文件

例如, 要使用标准库中的输出函数 printf() ,这个函数的声明在头文件studio.h头中,需要在代码文件最前面指定,指定头文件的语句包含两部分:

  • ①预处理指令#include
  • ②尖括号包围的头文件名

例如,要包含标准输出库的头文件,语法如下:

c 复制代码
#include <stdio.h>

2. 语句

在C语言中,语句是构成程序的基本单位,用于执行特定的操作。每个语句以分号;结束。例如,一个简单的赋值语句:

c 复制代码
int a = 5; // 将整数5赋值给变量a

语句以逗号为结束标志,一行可以有多个语句,如:

c 复制代码
int a = 5; int b = 6; 

实际上,把一条语句写成多行,也是没有问题的:

c 复制代码
int 
a 
= 
5
; 

编译器始终会以逗号作为当前语句结束的标志。

逗号可以成为一个单独的语句,称之为空语句,空语句没有任何意义。

3. 表达式

表达式是计算得到一个值的任何合法的C代码片段。它可以是简单的变量引用,如 a,也可以是复杂的数学运算,如 a + b * 3

表达式可以出现在赋值语句中、控制结构中或作为函数参数。

3.1 表达式在赋值语句中

在C语言中,赋值语句通常涉及一个表达式计算结果赋给一个变量。表达式可以是简单的常量、变量,也可以是复杂运算的结果。

c 复制代码
#include <stdio.h>

int main() {
    int a = 5, b = 3;
    int sum = a + b; // 这里 "+ b" 是一个表达式
    printf("Sum: %d\n", sum);
    return 0;
}

在这个例子中,a + b就是一个表达式,计算结果为8,然后这个结果被赋值给了变量sum

3.2 表达式在控制结构中

控制结构(如if语句、循环语句)中常常使用表达式来决定程序的控制流程。表达式的真假(非零值视为真,零值视为假)会影响代码的执行路径。

c 复制代码
#include <stdio.h>

int main() {
    int age = 18;
    
    if (age >= 18) { // 这里的 "age >= 18" 是一个布尔表达式
        printf("You are an adult.\n");
    } else {
        printf("You are not an adult yet.\n");
    }
    
    return 0;
}

这里的age >= 18是比较表达式,判断年龄是否达到或超过18岁,从而决定了输出哪条消息。

3.3 表达式作为函数参数

函数调用时,传递给函数的可以是直接的值,也可以是表达式的结果。

c 复制代码
#include <stdio.h>

void printSum(int x, int y) {
    printf("Sum: %d\n", x + y);
}

int main() {
    int num1 = 10, num2 = 20;
    printSum(num1, num1 + num2); // "num1 + num2" 作为函数参数的表达式
    return 0;
}

printSum(num1, num1 + num2)中,num1 + num2是一个表达式,计算结果30作为第二个参数传递给了printSum函数。

3.4 表达式和语句的区别

表达式是任何可以计算出一个值的代码片段,表达式的核心在于"计算",它关注于产生一个结果,可能是语句的一个部分。

语句是程序执行的一个基本单位,代表了一个完整的执行动作。

二者的区别:

  • 语句包含表达式,表达式是语句的一部分
  • 表达式一定有返回值,语句不一定有

4. 语句块

语句块是一组由花括号 {} 括起来的语句集合。它们通常用来组织相关的操作,形成逻辑上的单元,比如函数体或者if、for等控制结构的主体。

c 复制代码
{
    int x = 1;
    printf("Value of x: %d\n", x);
}

5. 空格

虽然C语言对空格的要求较为宽松,但良好的空格使用习惯能显著提升代码的可读性。例如,在运算符两边添加空格,或在不同逻辑块之间使用空行。

6. 注释

注释是程序员与代码之间的沟通桥梁,帮助理解代码的功能和意图。C语言支持两种注释方式:

  • 单行注释:以 // 开头,直到行尾,整行都是注释,有效代码不能同行
c 复制代码
#include <stdio.h>

int main() {
    int a = 5, b = 3;
   
    // 这里 "+ b" 是一个表达式
    int sum = a + b; 
    printf("Sum: %d\n", sum);
    return 0;
}
  • 多行注释:以 /* 开始,以 */ 结束,二者之间的所有内容都是注释,可以包含多行,多行注释可以与有效代码同行,因为其有明确的开始、结束标志
c 复制代码
#include <stdio.h>

/*
 主函数
 打印加法计算结果
*/
int main() {
    int a = 5, b = 3;
   
    // 这里 "+ b" 是一个表达式
    int sum = a/* 多行注释可以插在代码中间 */ + b; 
    printf("Sum: %d\n", sum);
    return 0;
}

7. printf() 函数

printf() 是C语言中最常用的输出函数,属于标准输入输出库的一部分。

7.1 基本用法

c 复制代码
#include <stdio.h> // 引入标准输入输出库

int main() {
    printf("Hello, World!\n"); // 输出简单的字符串
    return 0;
}

7.2 占位符

占位符用于在字符串中指定位置插入变量值。

c 复制代码
int age = 25;
printf("I am %d years old.\n", age); // %d 用于整数

C语言的占位符列表:

  • %a:十六进制浮点数,字母输出为小写。
  • %A:十六进制浮点数,字母输出为大写。
  • %c:字符。 %d:十进制整数。
  • %e:使用科学计数法的浮点数,指数部分的e为小写。
  • %E:使用科学计数法的浮点数,指数部分的E为大写。
  • %i:整数,基本等同于%d。
  • %f:小数(包含float类型和double类型)。
  • %g:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e为小写。
  • %G:等同于%g,唯一的区别是指数部分的E为大写。
  • %hd:十进制 short int 类型。
  • %ho:八进制 short int 类型。
  • %hx:十六进制 short int 类型。
  • %hu:unsigned short int 类型。
  • %ld:十进制 long int类型。
  • %lo:八进制 long int 类型。
  • %lx:十六进制 long int 类型。
  • %lu:unsigned long int类型。
  • %lld:十进制 long long int 类型。
  • %llo:八进制 long long int 类型。
  • %llx:十六进制 long long int 类型。
  • %llu:unsigned long long int 类型。
  • %Le:科学计数法表示的 long double 类型浮点数。
  • %Lf:long double 类型浮点数。
  • %n:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。
  • %o:八进制整数。
  • %p:指针。 %s:字符串。
  • %u:无符号整数(unsigned int)。
  • %x:十六进制整数。
  • %zd:size_t类型。
  • %%:输出一个百分号。

7.3 输出格式

printf() 支持多种格式化选项来控制输出的格式,如宽度、对齐、精度等。

c 复制代码
float pi = 3.14159;
printf("Value of Pi: %.2f\n", pi); // 输出小数点后两位
相关推荐
就爱学编程5 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
oneouto5 分钟前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh3210 分钟前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
炭烤玛卡巴卡37 分钟前
学习postman工具使用
学习·测试工具·postman
北国无红豆1 小时前
【CAN总线】STM32的CAN外设
c语言·stm32·嵌入式硬件
单片机学习之路1 小时前
【C语言】结构
c语言·开发语言·stm32·单片机·51单片机
thesky1234561 小时前
活着就好20241224
学习·算法
蜗牛hb1 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑1 小时前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz2 小时前
游戏引擎学习第58天
学习·游戏引擎