C语言基础(速成版)

本篇文章是为了复习数据结构,速过一遍C语言的笔记;较于基础,供大家参考!!!


目录

🍓常量

🍌整形常量

🍌实型常量

🍌字符常量

🍌符号常量

🍌字符串型常量

🍓变量

🍉基本格式

🍉示例

🍉带初始化的变量定义

🍉变量名

🍌规则

🍌好的变量名

🍓C的数据类型

🍉基本数据类型

🍌整型

🍌字符型

🍌浮点型

🍉基本数据类型

🍌数组类型

🍌结构体类型

🍌共用体类型

🍌枚举型

🍌指针类型

🍉数据类型转换

🍌隐式类型转换(自动类型转换)

🍌显式类型转换(强制类型转换)

🍌注意事项和潜在问题

🍓输入输出

🍊输出

🍊输入

🍊常见的格式说明符

🍓运算符

🍌算术运算符

🍌关系运算符

🍌逻辑运算符

🍌 位运算符

🍌 赋值运算符

🍌条件运算符

🍌 逗号运算符

🍌sizeof 运算符

🍌示例

🍓选择与循环

🍉选择结构

🍌if-else 语句

🍌if-else if-else 语句

🍌switch 语句

🍉循环结构

🍌while 循环

🍌do-while 循环

🍌for 循环


🍓常量

🍉常量是一种在程序执行期间不会改变的固定值,常量分为五种类型如:

🍌整形常量

整形常量代表没有小数部分的整数。它们可以是正数、负数或零。例如:1, -99, 2048。

🍌实型常量

实型常量是带有小数点的数字,或者是科学计数法表示的数字;例如:3.1415-0.01、1.23e10。

🍌字符常量

字符常量是在单引号内的单个字符;例如:'a''1''$'。

🍌符号常量

符号常量是使用标识符来代替某个特定的值的常量。在C或C++中,通常使用#define预处理器来定义符号常量。例如:#define PI 3.14159

🍌字符串型常量

字符串常量是在双引号内的字符序列;例如:"Hello, world!""123 abc"


🍓变量

🍉定义:变量的定义是指明一个变量的类型和名称,这样程序就能为这个变量分配内存空间,并在程序中通过这个名称引用该变量的值。变量的定义包括了类型声明和变量名,可以选择性地包括一个初始化值。

🍉基本格式

<数据类型> <变量名>;

🍉示例

int age = 30;           // 定义一个整型变量age,并初始化为30
double price = 10.99;   // 定义一个双精度浮点型变量price,并初始化为10.99
char letter = 'A';      // 定义一个字符型变量letter,并初始化为'A'

🍉带初始化的变量定义

int age = 30;           // 定义一个整型变量age,并初始化为30
double price = 10.99;   // 定义一个双精度浮点型变量price,并初始化为10.99
char letter = 'A';      // 定义一个字符型变量letter,并初始化为'A'

🍉变量名

🍌变量名用于标识存储在内存中的某个位置。变量名的选择需要遵守一定的规则和最佳实践,这有助于代码的可读性和可维护性。

🍌规则

  • 字符集:变量名只能使用字母(A-Z,a-z)、数字(0-9)和下划线(_)。变量名的第一个字符不能是数字。
  • 区分大小写:在C语言中,大小写是敏感的。例如,ageAgeAGE 会被视为三个不同的变量。
  • 关键字限制:不能使用C语言的关键字作为变量名,例如 intreturnvoid 等。

🍌好的变量名

  • 有意义的命名:选择有描述性的变量名,这样可以更容易理解变量的用途。例如,使用 age 而不是 a 来存储一个人的年龄。
  • 简洁但清晰:变量名应该足够简短,同时又能清楚地描述信息。例如,numStudentsnumberOfStudentsInClass 更简洁,同时信息也足够清晰。
  • 使用下划线或驼峰式命名法:为了增加变量名的可读性,可以使用下划线分隔单词,如 max_height,或使用驼峰式命名法,如 maxHeight
  • 避免使用单一字符:除非在简单的循环中使用(如 for (int i = 0; i < 10; i++)),通常应避免使用单一字符作为变量名,因为这样的命名缺乏描述性。

虽然变量名没有硬性要求,但是在命名的时候尽可能的要保证规范和见文知意。


🍓C的数据类型


🍉基本数据类型

🍌整型

用于存储整数。根据存储的范围和符号,可以进一步分为 short int, unsigned short int, int, unsigned int, long int, unsigned long int, long long int, 和 unsigned long long int

🍌字符型

用于存储单个字符。可以是 signed charunsigned char,通常占用1个字节。

🍌浮点型

  • 单精度浮点型 (float):用于存储单精度浮点数。
  • 双精度浮点型 (double):用于存储双精度浮点数。

🍉基本数据类型

🍌数组类型

数组是一种数据结构,用于存储固定大小的相同类型元素的集合。数组的所有元素都存储在连续的内存位置中

int numbers[5] = {1, 2, 3, 4, 5};  // 整型数组
char name[10] = "John";            // 字符数组

🍌结构体类型

结构体是用户定义的数据类型,允许存储不同类型的数据项。结构体适合用来封装数据。

struct Person {
    char name[50];
    int age;
    float height;
};

struct Person person1 = {"Alice", 30, 5.5};

🍌共用体类型

共用体(或联合体)是一种结构,其成员共享同一块内存。定义共用体时,编译器只分配足够的内存来存储最大的成员。

union Data {
    int i;
    float f;
    char str[20];
};

union Data data;
data.i = 10;

🍌枚举型

枚举是一组命名的整型常数。枚举是用于声明一组命名的常量,它通过使用枚举可以更清晰地表达意图。

enum Color { Red, Green, Blue };
enum Color favoriteColor = Green;

🍌指针类型

指针是一个变量,其值为另一个变量的地址,即变量的位置在内存中的位置。通过指针,可以直接访问和操作内存地址中存储的数据。

int val = 20;
int *ptr = &val;  // 指针ptr指向变量val的地址

🍉数据类型转换

🍌隐式类型转换(自动类型转换)

这种转换是由编译器自动进行的,不需要程序员进行任何干预。通常发生在将一种数值类型的数据赋给另一种数值类型的变量时,特别是从小范围类型(如 int)到大范围类型(如 double)的转换。

示例:

int i = 100;
double d;

d = i;  // 隐式转换,int自动转换为double

在这种情况下,int 类型的 i 被自动转换为 double 类型的 d

🍌显式类型转换(强制类型转换)

当你需要将一种类型的变量强制转换为另一种类型时,可以使用显式类型转换。这通过类型转换运算符完成,其语法为 (type_name) expression

示例:

double d = 9.78;
int i;

i = (int) d;  // 显式转换,double强制转换为int

在这个例子中,double 类型的 d 被强制转换为 int 类型的 i,只保留整数部分,小数部分被丢弃。

🍌注意事项和潜在问题

  • 精度丢失:在将浮点类型转换为整数类型时,小数部分将被丢弃,这可能导致数据的精度损失。
  • 溢出:当将较大的数据类型转换为较小的数据类型时(如从 long longshort),如果数据超出目标类型的范围,则会发生溢出。
  • 符号问题:从有符号类型向无符号类型转换时,如果数值为负,则转换结果可能不符合预期,因为无符号类型不支持负数。

在使用数据类型转换时,确保理解目标类型和源类型的大小及其范围限制,以避免潜在的错误和数据损失。


🍓输入输出

🍊在C语言中,输入和输出是通过标准输入输出库(stdio.h)提供的函数进行的。最常见的输出函数是 printf,而输入主要是通过 scanf 函数处理。这两个函数提供了灵活的方式来读取和打印各种类型的数据。

🍊输出

printf 函数

printf 是一个非常强大的函数,用于将格式化的文本输出到标准输出(通常是终端或控制台)。

int printf(const char *format, ...);
  • format 字符串包含文本以及格式说明符,格式说明符用于后续参数的格式化。
  • ... 表示函数接受可变数量的参数。

示例

#include <stdio.h>

int main() {
    int number = 50;
    float pi = 3.14159;
    printf("Number: %d, Pi: %.2f\n", number, pi);
    return 0;
}

这个程序会打印:

Number: 50, Pi: 3.14

🍊输入

scanf 函数

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

int scanf(const char *format, ...);
  • format 字符串包含格式说明符,这些说明符定义了读取数据的类型。
  • ... 表示函数需要相应数量的指针参数,用于存储读取的数据。

示例

#include <stdio.h>

int main() {
    int age;
    float height;
    printf("Enter your age and height: ");
    scanf("%d %f", &age, &height);
    printf("Age: %d, Height: %.2f\n", age, height);
    return 0;
}

这个程序会请求用户输入年龄和身高,然后显示它们。

🍊常见的格式说明符

%d:整型
%f:浮点型
%c:字符
%s:字符串
%x、%X:十六进制整数
%%:输出一个百分号


🍓运算符

🍌算术运算符

用于执行基本的数学计算。

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:模运算(求余数,只用于整数)

🍌关系运算符

用于比较两个值的大小,结果为真(1)或假(0)。

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

🍌逻辑运算符

用于组合多个条件表达式。

  • &&:逻辑与
  • ||:逻辑或
  • !:逻辑非

🍌 位运算符

用于直接对整型数据的二进制位进行操作。

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移
  • >>:右移

🍌 赋值运算符

用于给变量赋值。

  • =:简单赋值
  • +=-=*=/=%=:复合赋值运算符,例如 a += b 等价于 a = a + b

🍌条件运算符

也称为三元运算符,用于基于条件表达式选择两个值中的一个。

  • ? ::表达式 condition ? expr1 : expr2,如果 condition 为真,则结果为 expr1,否则为 expr2

🍌 逗号运算符

用于在同一行内链接多个表达式,从左到右求值,并返回最右边表达式的值。

  • ,:例如 a = (t=3, t+2),先执行 t=3,然后计算 t+2,最终 a 的值为 5

🍌sizeof 运算符

用于获取数据类型或变量在内存中占用的字节数。

  • sizeofsizeof(type)sizeof(expression)

🍌示例

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    int result;
    
    result = a + b; // 15
    printf("a + b = %d\n", result);
    
    result = a > b; // 1 (true)
    printf("a > b = %d\n", result);
    
    result = a && b; // 1 (true)
    printf("a && b = %d\n", result);
    
    result = a & b; // 0
    printf("a & b = %d\n", result);
    
    result = a * b;
    printf("a * b = %d\n", result);
    
    return 0;
}

🍓选择与循环

🍉选择结构

🍌if-else 语句

  • 如果条件为真,执行一个代码块;如果为假,执行另一个代码块。
if (condition) {
    // code to execute if condition is true
} else {
    // code to execute if condition is false
}

🍌if-else if-else 语句

  • 用于多条件判断,从多个条件中选择一个执行。
if (condition1) {
    // code if condition1 is true
} else if (condition2) {
    // code if condition2 is true
} else {
    // code if none of the conditions are true
}

🍌switch 语句

  • 基于变量的值,选择多个代码块之一来执行。每个代码块用 case 标签标识,通常用于代替多个 if 语句。
switch (variable) {
    case value1:
        // code to execute
        break;
    case value2:
        // code to execute
        break;
    default:
        // code to execute if none of the cases match
}

🍉循环结构

🍌while 循环

  • 在条件为真的情况下重复执行代码块。
while (condition) {
    // code to execute repeatedly
}

🍌do-while 循环

  • 至少执行一次代码块,之后如果条件为真,则继续执行。
do {
    // code to execute repeatedly
} while (condition);

🍌for 循环

  • 通常用于执行固定次数的循环,允许在一个表达式中初始化变量,检查条件,和更新变量。
for (initialization; condition; update) {
    // code to execute repeatedly
}

希望这些能对刚学习算法的同学们提供些帮助哦!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值