C语言基础学习总结

目录

一、数据类型、常量、变量及运算符

(1)数据类型

(2)常量与变量

(3)运算符

二、输入输出

三、控制语句

(1)分支语句

1.if-else

2.Switch-case

(2)循环语句

1.do-while

2.for

四、数组

(1)一维数组

(2)字符数组和字符串

(3)二维数组

五、指针

六、函数


一、数据类型、常量、变量及运算符

(1)数据类型

  1. 基本数据类型

    • int:用于声明整数类型的变量,通常占据4个字节(32位系统)或8个字节(64位系统)的内存空间。
    • char:用于声明字符类型的变量,通常占据1个字节的内存空间,表示ASCII字符集中的一个字符。
    • float:用于声明单精度浮点数类型的变量,通常占据4个字节的内存空间。
    • double:用于声明双精度浮点数类型的变量,通常占据8个字节的内存空间。
  2. 派生数据类型

    • 数组(Array):用于声明相同类型的连续内存空间组成的集合。
    • 指针(Pointer):用于存储变量的地址,可以指向其他变量或函数。
    • 结构体(Struct):用于将多个不同类型的变量组合在一起形成一个新的数据类型。
    • 联合体(Union):类似于结构体,但所有成员共享同一块内存空间,用于节省内存。
  3. 枚举类型(Enum):用于声明一组具有名称的常量,这些常量的值可以自动递增或手动指定。

  4. void类型:表示空类型,通常用于函数返回类型,表示函数不返回任何值。

(2)常量与变量

  1. 常量(Constants)

    • 常量是程序中固定不变的值,不能被修改。
    • 常量可以是文字常量(例如,整数常量、浮点数常量、字符常量等)或符号常量(使用#defineconst关键字定义的常量)。
  2. 变量(Variables)

    • 变量是用来存储可变数据的标识符。
    • 变量在程序运行时可以被赋予不同的值。
    • 变量需要在使用前声明,并且需要指定其数据类型。

(3)运算符

  1. 算术运算符

    • +:加法
    • -:减法
    • *:乘法
    • /:除法
    • %:取模(求余)
  2. 关系运算符

    • ==:等于
    • !=:不等于
    • <:小于
    • >:大于
    • <=:小于等于
    • >=:大于等于
  3. 逻辑运算符

    • &&:逻辑与(AND)
    • ||:逻辑或(OR)
    • !:逻辑非(NOT)
  4. 位运算符

    • &:按位与
    • |:按位或
    • ^:按位异或
    • ~:按位取反
    • <<:左移
    • >>:右移
  5. 赋值运算符

    • =:简单赋值
    • +=:加法赋值
    • -=:减法赋值
    • *=:乘法赋值
    • /=:除法赋值
    • %=:取模赋值
    • &=:按位与赋值
    • |=:按位或赋值
    • ^=:按位异或赋值
    • <<=:左移赋值
    • >>=:右移赋值

二、输入输出

  1. 输入函数

    scanf():用于从标准输入(通常是键盘)读取输入数据,并根据指定的格式化字符串将输入数据存储到相应的变量中。
  2. 输出函数

    printf():用于向标准输出(通常是显示屏)打印输出数据,并根据指定的格式化字符串格式化输出内容。
  3. 文件输入输出

    • fscanf():用于从文件中读取数据。
    • fprintf():用于向文件中写入数据。
  4. 字符输入输出

    • getchar():从标准输入中读取一个字符。
    • putchar():向标准输出打印一个字符。
  5. 字符串输入输出

    • gets():从标准输入中读取字符串(不推荐使用,存在安全风险)。
    • fgets():从文件中读取一行字符串。
    • puts():向标准输出打印字符串。

三、控制语句

(1)分支语句

1.if-else

基本语法为:

if (condition)

{ // 当条件为真时执行的代码块 }

else

{ // 当条件为假时执行的代码块 }

其中,condition是一个表达式,可以是任何返回值为真(非零)或假(零)的表达式。如果condition为真,则执行if后面的代码块;如果condition为假,则执行else后面的代码块。

例如:判断一个数是否为正数:

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    
    if (num > 0) {
        printf("输入的数是正数\n");
    } else {
        printf("输入的数不是正数\n");
    }
    
    return 0;
}

2.Switch-case

基本语法为:

switch (expression)
 {
    case constant1:
        // 当表达式等于 constant1 时执行的代码块
        break;
    case constant2:
        // 当表达式等于 constant2 时执行的代码块
        break;
    // 可以有更多的 case 分支
    default:
        // 当表达式不匹配任何 case 时执行的代码块(可选)
}
  • expression 是一个表达式,通常是一个整型或字符型的值。
  • 每个 case 后面跟着一个常量表达式,当 expression 的值等于某个 case 后面的常量表达式时,就会执行该 case 后面的代码块。
  • break 语句用于跳出 switch 语句块,防止继续执行下一个 case 中的代码。如果没有 break,程序会继续执行下一个 case 中的代码,直到遇到 break 或者 switch 语句结束。
  • default 是可选的,用于处理 expression 不匹配任何 case 的情况,类似于 if-else 语句中的 else

例如:根据用户输入的数字输出相应的星期几:

#include <stdio.h>

int main() {
    int day;
    printf("请输入一个数字(1-7):");
    scanf("%d", &day);
    
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("输入无效\n");
            break;
    }
    
    return 0;
}

(2)循环语句

1.do-while

基本语法为:

do 
{
    // 循环体
} while (condition);
  • do 后面跟着花括号包裹的循环体,包含需要重复执行的语句。
  • while 后面跟着条件表达式,用于判断是否继续循环。如果条件为真,则继续执行循环体;如果条件为假,则退出循环。

例如:计算1到10的整数之和:

#include <stdio.h>

int main() {
    int sum = 0;
    int i = 1;
    
    do {
        sum += i;
        i++;
    } while (i <= 10);
    
    printf("1到10的整数之和为:%d\n", sum);
    
    return 0;
}

2.for

基本语法为:

for (initialization; condition; increment/decrement)
{
    // 循环体
}
  • initialization 表达式用于初始化循环控制变量,通常是一个计数器。
  • condition 表达式在每次循环迭代开始时进行检查,如果条件为真,则执行循环体;如果条件为假,则退出循环。
  • increment/decrement 表达式用于每次循环迭代后更新循环控制变量的值。

例如:计算1到10的整数之和:

#include <stdio.h>

int main() {
    int sum = 0;

    for (int i = 1; i <= 10; i++) {
        sum += i;
    }

    printf("1到10的整数之和为:%d\n", sum);

    return 0;
}

四、数组

(1)一维数组

1.初始化

// 声明一个整型数组
int numbers[5];

// 声明并初始化一个整型数组
int numbers[5] = {1, 2, 3, 4, 5};

// 可以只初始化部分元素,其他元素将被自动初始化为0
int numbers[5] = {1, 2}; // numbers数组为 {1, 2, 0, 0, 0}

2.排序法

①冒泡排序法

#include<stdio.h>
void sort(int arr[],int n)
{
	int i,j,temp;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(arr[j]>arr[j+1])
			{
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}

	}
}

int main()
{
	int arr[10];
	int n=10;
	printf("请输入数组:\n");
	for(int k=0;k<n;k++)
	{
		scanf("%d",&arr[k]);
	}
	printf("初始数组:\n");
	for(int i=0;i<n;i++)
	{
		printf("%d\t",arr[i]);
	}
	printf("\n");
	sort(arr,n);
	printf("排序后:\n");
	for(int j=0;j<n;j++)
	{
		printf("%d\t",arr[j]);
	}
	printf("\n");

	return 0;
}

②插入排序法

#include<stdio.h>
void insert(int arr[],int n)
{
	int i,j,k;
	for(i=0;i<n;i++)
	{
		k=arr[i];
		j=i-1;
		while(j>=0&&arr[j]>k)
		{
			arr[j+1]=arr[j];
			j=j-1;
		}
		arr[j+1]=k;
	}
}

int main()
{
	int arr[10]={1,23,45,12,23,42,25,17,26,98};
	int n=10;
	printf("排序前的数组为:\n");
		for(int i=0;i<n;i++)
	{
		printf("%d\t",arr[i]);
	}
	printf("\n");
	insert(arr,10);
	printf("排序后的数组为:\n");
	for(int i=0;i<n;i++)
	{
		printf("%d\t",arr[i]);
	}
	printf("\n");
	return 0;
}

(2)二维数组

维数组是指数组中的元素也是数组的数组,形成了类似表格或矩阵的结构。在 C 语言中,二维数组可以看作是一个数组的数组,每个元素都是一个一维数组。下面是一个简单的二维数组的声明和初始化示例:

#include <stdio.h>

int main() {
    // 声明一个 3x3 的二维数组
    int matrix[3][3];

    // 初始化二维数组
    int rows = 3;
    int cols = 3;
    int count = 1;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = count;
            count++;
        }
    }

    // 访问和输出二维数组中的元素
    printf("二维数组中的元素:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

五、指针

指针实际上是一个变量,它存储的是一个内存地址,而不是一个常规的值。通过指针,我们可以直接访问内存中的数据,这使得在编程中能够更加灵活地操作数据和内存。

在 C 语言中,你可以使用指针来执行以下操作:

  1. 声明指针变量: 你可以通过在变量名前面加上星号 (*) 来声明一个指针变量。例如:int *ptr; 声明了一个指向整数的指针变量。

  2. 获取变量地址: 通过在变量名前面加上取地址符号 (&),你可以获取该变量的内存地址。例如:int num = 10; int *ptr = &num; 这里 &num 就是获取 num 变量的地址,并将该地址赋值给指针变量 ptr

  3. 间接访问(解引用): 通过在指针变量前面加上星号 (*),你可以访问指针所指向的变量的值。例如:int num = 10; int *ptr = &num; printf("%d", *ptr); 这里 *ptr 就是获取指针 ptr 所指向的变量的值,即 num 的值。

  4. 指针算术运算: 在指针上进行算术运算,例如加法和减法,可以让指针指向内存中的其他位置。这在数组和动态内存分配中特别有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值