C语言基础入门:从数据类型到字符串处理

C语言作为一门经典的编程语言,以其简洁高效的特点深受程序员喜爱。本文将从基础数据类型开始,逐步介绍C语言的核心概念,帮助初学者建立扎实的编程基础。

数据类型:程序的基石

基本数据类型

C语言提供了丰富的数据类型,用于存储不同种类的数据:

基本类型

  • char:字符型,占用1个字节,用于存储单个字符
  • int:整型,通常占用4个字节,存储整数
  • float:单精度浮点型,占用4个字节,存储小数
  • double:双精度浮点型,占用8个字节,提供更高精度的小数存储
  • void:无值型,主要用于函数返回值和指针声明

构造类型

  • enum:枚举类型,定义一组命名常量
  • 数组:存储相同类型的多个元素
  • struct:结构体,组合不同类型的数据
  • union:联合体,多个变量共享同一内存空间
  • 指针类型:存储变量的内存地址

类型修饰符

类型修饰符用于改变基本类型的属性:

signed int a = -100;      // 有符号整数
unsigned int b = 100;     // 无符号整数
long int c = 1000000L;    // 长整型
short int d = 100;        // 短整型

字符常量和转义序列

C语言提供了丰富的转义序列来表示特殊字符:

printf("换行符:\n");
printf("制表符:\t水平对齐");
printf("退格符:abc\b删除c");
printf("回车符:\r回到行首");
printf("响铃符:\a");      // 发出警告音
printf("空字符:\0");      // 字符串结束标志
printf("反斜杠:\\");
printf("单引号:\'");
printf("双引号:\"");
printf("问号:\?");

流程控制:程序的逻辑骨架

顺序结构

顺序结构是程序的基本执行方式,代码按照编写顺序依次执行。

输出函数

#include <stdio.h>

int main() {
    char ch = 'A';
    int num = 42;
    float pi = 3.14159;
    char str[] = "Hello World";
    
    putchar(ch);                    // 输出单个字符
    printf("%c\n", ch);             // 格式化输出字符
    printf("%d\n", num);            // 输出整数
    printf("%.2f\n", pi);           // 输出浮点数,保留2位小数
    printf("%s\n", str);            // 输出字符串
    puts(str);                      // 输出字符串并自动换行
    
    return 0;
}

输入函数

#include <stdio.h>

int main() {
    char ch;
    int age;
    char name[50];
    
    printf("请输入一个字符:");
    ch = getchar();                 // 读取单个字符
    
    printf("请输入年龄:");
    scanf("%d", &age);              // 格式化输入
    
    printf("请输入姓名:");
    gets(name);                     // 读取字符串(注意:gets已被弃用)
    
    return 0;
}

数学函数

#include <math.h>

float max_val = fmax(10.5, 8.3);   // 返回较大值
float min_val = fmin(10.5, 8.3);   // 返回较小值

分支结构

分支结构允许程序根据条件选择不同的执行路径。

if-else语句

#include <stdio.h>

int main() {
    int score;
    printf("请输入成绩:");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
    return 0;
}

条件运算符

int max = (a > b) ? a : b;          // 三元运算符,简洁的条件判断

switch语句

#include <stdio.h>

int main() {
    char grade;
    printf("请输入成绩等级:");
    scanf("%c", &grade);
    
    switch (grade) {
        case 'A':
            printf("优秀\n");
            break;
        case 'B':
            printf("良好\n");
            break;
        case 'C':
            printf("及格\n");
            break;
        case 'D':
            printf("不及格\n");
            break;
        default:
            printf("无效等级\n");
    }
    
    return 0;
}

循环结构

循环结构用于重复执行特定的代码块。

while循环

#include <stdio.h>

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

do-while循环

#include <stdio.h>

int main() {
    int num;
    
    do {
        printf("请输入一个正数(输入0退出):");
        scanf("%d", &num);
        printf("您输入的数是:%d\n", num);
    } while (num != 0);
    
    return 0;
}

for循环

#include <stdio.h>

int main() {
    // 打印九九乘法表
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d×%d=%d\t", j, i, i * j);
        }
        printf("\n");
    }
    
    return 0;
}

循环控制语句

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;               // 跳过本次循环
        }
        if (i == 8) {
            break;                  // 跳出循环
        }
        printf("%d ", i);
    }
    
    // goto语句(不推荐使用)
    goto end;
    printf("这行不会执行\n");
    
end:
    printf("\n程序结束\n");
    return 0;
}

数组和字符串处理:数据的集合管理

数组基础

数组是存储相同类型数据的集合,提供了高效的数据管理方式。

一维数组

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};
    
    // 遍历数组
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }
    
    return 0;
}

二维数组

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    // 遍历二维数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

字符串处理

字符串是字符数组的特殊形式,以空字符’\0’结尾。

字符串基本操作

#include <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "Hello";
    char str2[50] = "World";
    char str3[100];
    
    // 字符串输入输出
    printf("请输入一个字符串:");
    fgets(str3, sizeof(str3), stdin);   // 安全的字符串输入
    printf("您输入的字符串是:%s", str3);
    
    return 0;
}

字符串函数详解

#include <stdio.h>
#include <string.h>

int main() {
    char str1[100] = "Hello";
    char str2[50] = "World";
    char str3[100];
    char str4[100] = "Programming";
    
    // 字符串复制
    strcpy(str3, str1);
    printf("复制后:%s\n", str3);
    
    // 字符串连接
    strcat(str1, " ");
    strcat(str1, str2);
    printf("连接后:%s\n", str1);
    
    // 字符串长度
    printf("字符串长度:%lu\n", strlen(str1));
    
    // 字符串比较
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("字符串相等\n");
    } else if (result < 0) {
        printf("第一个字符串小于第二个\n");
    } else {
        printf("第一个字符串大于第二个\n");
    }
    
    // 查找字符
    char *pos = strchr(str4, 'g');
    if (pos != NULL) {
        printf("字符'g'的位置:%ld\n", pos - str4);
    }
    
    // 查找子字符串
    char *substr = strstr(str4, "gram");
    if (substr != NULL) {
        printf("找到子字符串'gram'\n");
    }
    
    // 大小写转换
    strcpy(str3, "Hello World");
    strlwr(str3);                       // 转小写
    printf("小写:%s\n", str3);
    
    strupr(str3);                       // 转大写
    printf("大写:%s\n", str3);
    
    return 0;
}

总结

本文介绍了C语言的基础知识,包括数据类型、流程控制和数组字符串处理。这些概念构成了C语言编程的基石:

  1. 数据类型为程序提供了存储和操作数据的基础
  2. 流程控制使程序能够根据条件做出决策和重复执行任务
  3. 数组和字符串提供了处理批量数据的有效方法

掌握这些基础知识后,就可以编写出功能完整的C程序了。在实际编程中,建议多练习、多实践,逐步提高编程技能。编程是一门实践性强的技能,需要不断的练习才能真正掌握。
之后我将继续深入探讨C语言的高级特性,包括函数、指针、内存管理等内容,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值