【C语言入门】 编写简单程序

目录

一、基本的输入输出操作:掌握 scanf 和 printf

1.1. 需求描述

1.2. 代码示例

 1.3. 测试用例和结果

1.3.1. 测试用例1

1.3.2. 测试用例2

1.3.3. 测试用例3(包含空格的输入)

二、简单的数学计算程序

2.1. 需求描述 

2.2. 代码示例 

2.3. 测试用例和结果

2.3.1. 测试用例1

2.3.2. 测试用例2

2.3.3. 测试用例3

2.3.4. 测试用例4

2.3.5. 测试用例5(无效运算符)

2.3.6. 测试用例6(除数为零)

 三、字符串处理程序

3.1. 需求描述

3.2. 代码示例

3.3. 测试用例

3.3.1.  测试用例1(字符串拼接)

3.3.2. 测试用例2(查找子字符串)

3.3.3.测试用例3(字符串替换)

3.4. 运行结果

四、注意事项

4.1. 输入验证

4.2. 错误处理

4.3.代码可读性

五、总结


本篇介绍编写简单程序的基础内容,包括基本的输入输出操作(掌握scanf和printf等函数)、简单的数学计算程序(实现加减乘除等基本运算)以及字符串处理程序(进行字符串拼接、查找、替换等操作)。适合初学者入门学习。

一、基本的输入输出操作:掌握 scanf 和 printf

在编写程序时,与用户进行交互是必不可少的。掌握scanf和printf等标准输入输出函数的使用,是实现这一交互的关键。

1.1. 需求描述

在C语言中,printf 和 scanf 是最常用的标准输入输出函数。printf 用于向标准输出(通常是屏幕)打印格式化的字符串,而 scanf 用于从标准输入(通常是键盘)读取格式化的输入。

  • printf 的基本用法是 printf(format, ...);,其中 format 是一个包含文本和格式说明符的字符串,... 是要打印的变量。
  • scanf 的基本用法是 scanf(format, ...);,其中 format 是一个包含格式说明符的字符串,... 是用于存储输入值的变量地址(通过 & 运算符获取)。

1.2. 代码示例

以下是一个简单的C程序,使用 printf 打印提示信息,然后使用 scanf 读取用户输入的两个整数,并打印它们的和。

#include <stdio.h>  
  
int main() {  
    int num1, num2, sum;  
  
    // 打印提示信息  
    printf("请输入第一个整数: ");  
    // 读取第一个整数  
    scanf("%d", &num1);  
  
    // 打印提示信息  
    printf("请输入第二个整数: ");  
    // 读取第二个整数  
    scanf("%d", &num2);  
  
    // 计算和  
    sum = num1 + num2;  
  
    // 打印结果  
    printf("两个整数的和是: %d\n", sum);  
  
    return 0;  
}

1.3. 测试用例和结果

1.3.1. 测试用例1

  • 输入: 5 和 10
  • 预期输出: 两个整数的和是: 15
  • 实际运行结果:

1.3.2. 测试用例2

  • 输入: -3 和 7
  • 预期输出: 两个整数的和是: 4
  • 实际运行结果:

1.3.3. 测试用例3(包含空格的输入)

  • 输入: 8 和 9(注意输入前的空格)
  • 预期输出: 两个整数的和是: 17(空格被忽略,因为 %d 忽略前导空格)
  • 实际运行结果:

二、简单的数学计算程序

编写能够执行基本数学运算(如加减乘除)的程序,是编程入门的重要一步。通过接收用户输入的两个数字和一个运算符,程序可以计算出结果并输出。

2.1. 需求描述 

需求:实现基本的数学运算,包括加法、减法、乘法和除法。程序将提示用户输入两个数字和一个运算符,然后根据输入的运算符执行相应的计算,并输出结果。

2.2. 代码示例 

#include <stdio.h>  
  
int main() {  
    double num1, num2, result;  
    char operator;  
  
    // 提示用户输入第一个数字  
    printf("请输入第一个数字: ");  
    scanf("%lf", &num1);  
  
    // 提示用户输入运算符  
    printf("请输入运算符 (+, -, *, /): ");  
    scanf(" %c", &operator); // 注意前面的空格,用于忽略前一个输入后的换行符  
  
    // 提示用户输入第二个数字  
    printf("请输入第二个数字: ");  
    scanf("%lf", &num2);  
  
    // 根据运算符执行计算  
    switch (operator) {  
        case '+':  
            result = num1 + num2;  
            break;  
        case '-':  
            result = num1 - num2;  
            break;  
        case '*':  
            result = num1 * num2;  
            break;  
        case '/':  
            // 检查除数是否为零  
            if (num2 != 0) {  
                result = num1 / num2;  
            } else {  
                printf("错误: 除数不能为零。\n");  
                return 1; // 返回非零值表示错误  
            }  
            break;  
        default:  
            printf("错误: 无效的运算符。\n");  
            return 1; // 返回非零值表示错误  
    }  
  
    // 输出结果  
    printf("结果: %.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);  
  
    return 0; // 返回零表示成功  
}

2.3. 测试用例和结果

2.3.1. 测试用例1

  • 输入: 5+3
  • 输出: 结果: 5.00 + 3.00 = 8.00
  • 运行结果:

2.3.2. 测试用例2

  • 输入: 10-4
  • 输出: 结果: 10.00 - 4.00 = 6.00
  • 运行结果:

2.3.3. 测试用例3

  • 输入: 6*7
  • 输出: 结果: 6.00 * 7.00 = 42.00
  • 运行结果:

2.3.4. 测试用例4

  • 输入: 8/2
  • 输出: 结果: 8.00 / 2.00 = 4.00
  • 运行结果:

2.3.5. 测试用例5(无效运算符)

  • 输入: 5%3
  • 输出: 错误: 无效的运算符。
  • 运行结果:

2.3.6. 测试用例6(除数为零)

  • 输入: 10/0
  • 输出: 错误: 除数不能为零。
  • 运行结果:

​​​​​​​

 三、字符串处理程序

字符串是编程中常用的数据类型之一。编写能够处理字符串的程序,如拼接、查找和替换等操作,对于提高编程能力具有重要意义。在实现这些功能时,要特别注意字符串的边界条件和内存管理,以避免出现错误。

3.1. 需求描述

  • 实现基本的字符串操作,包括字符串拼接、查找子字符串和替换子字符串。为了简化,我们将使用标准C库中的字符串函数,如 strcatstrchr, 和自定义的替换函数(因为C标准库没有直接的字符串替换函数)。

3.2. 代码示例

#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
  
// 自定义字符串替换函数  
char* str_replace(const char* str, const char* old_substr, const char* new_substr) {  
    char* result;  
    int i, count = 0;  
    int old_substr_len = strlen(old_substr);  
    int new_substr_len = strlen(new_substr);  
  
    // 计算新字符串的长度  
    for (i = 0; str[i] != '\0'; i++) {  
        if (strstr(&str[i], old_substr) == &str[i]) {  
            count++;  
            i += old_substr_len - 1;  
        }  
    }  
  
    // 分配内存给新字符串  
    result = (char*)malloc(i - count * old_substr_len + count * new_substr_len + 1);  
    if (!result) {  
        perror("内存分配失败");  
        exit(EXIT_FAILURE);  
    }  
  
    i = 0;  
    while (*str) {  
        // 如果找到子字符串,则替换它  
        if (strstr(str, old_substr) == str) {  
            strcpy(&result[i], new_substr);  
            i += new_substr_len;  
            str += old_substr_len;  
        } else {  
            result[i++] = *str++;  
        }  
    }  
    result[i] = '\0';  
  
    return result;  
}  
  
int main() {  
    char str1[100], str2[100], result[200];  
    char old_substr[50], new_substr[50];  
  
    // 字符串拼接示例  
    printf("请输入第一个字符串: ");  
    scanf("%s", str1);  
    printf("请输入第二个字符串: ");  
    scanf("%s", str2);  
    strcat(str1, str2);  
    printf("拼接后的字符串: %s\n", str1);  
  
    // 查找子字符串示例  
    printf("请输入要查找的子字符串: ");  
    scanf("%s", old_substr);  
    char* pos = strchr(str1, old_substr[0]); // 注意:这里只查找子字符串的第一个字符的位置,然后需要手动验证整个子字符串  
    if (pos && strncmp(pos, old_substr, strlen(old_substr)) == 0) {  
        printf("子字符串 '%s' 在位置 %ld 找到。\n", old_substr, pos - str1);  
    } else {  
        printf("子字符串 '%s' 未找到。\n", old_substr);  
    }  
  
    // 字符串替换示例  
    printf("请输入要替换成的子字符串: ");  
    scanf("%s", new_substr);  
    strcpy(result, str1); // 复制原始字符串到结果字符串,因为str_replace会分配新内存  
    char* replaced_str = str_replace(result, old_substr, new_substr);  
    printf("替换后的字符串: %s\n", replaced_str);  
  
    // 释放分配的内存(如果使用了动态内存分配)  
    free(replaced_str); // 注意:如果result和replaced_str指向同一块内存,则不需要再次释放result  
  
    return 0;  
}

注意:上面的 str_replace 函数实现有一个限制,它只处理不重叠的子字符串替换,并且假设输入的字符串和子字符串不包含空字符(\0)。此外,由于 strchr 只能找到子字符串的第一个字符的位置,因此上面的查找子字符串的示例并不完整;它应该使用 strstr 来找到整个子字符串的位置。但是,为了简化示例,这里只展示了基本的思路。

3.3. 测试用例

3.3.1.  测试用例1(字符串拼接)

  • 输入: HelloWorld
  • 输出: 拼接后的字符串: HelloWorld​​​​​​​

3.3.2. 测试用例2(查找子字符串)

  • 输入: HelloWorldWorld
  • 输出: 子字符串 'World' 在位置 5 找到。

3.3.3.测试用例3(字符串替换)

  • 输入: HelloWorldWorldC
  • 输出: 替换后的字符串: HelloC

3.4. 运行结果

根据测试用例输入相应的值,程序将输出相应的结果。

 

(注意:对于字符串替换的测试,需要根据实际的 str_replace 函数实现和输入来调整期望的输出,因为上面的实现有一些限制和简化。)

重要提示:在实际应用中,请务必对输入进行验证,以避免缓冲区溢出、内存泄漏等安全问题。上面的示例代码为了简化而省略了一些错误处理和安全检查。

四、注意事项

在编写简单程序时,除了掌握基本的输入输出操作、数学计算和字符串处理技巧外,还需要注意以下几个关键点:

4.1. 输入验证

  • 在接收用户输入时,务必进行必要的验证。包括检查输入的数据类型是否正确(如数字、字符串等),以及输入的值是否在预期的范围内。
  • 通过输入验证,可以确保程序不会因为无效输入而崩溃或产生错误结果。

4.2. 错误处理

  • 程序在运行过程中可能会遇到各种错误情况,如除数为零、文件无法打开等。
  • 为了提高程序的健壮性,需要编写相应的错误处理代码来应对这些异常情况。可以包括显示错误消息、退出程序或采取其他适当的恢复措施。

4.3.代码可读性

  • 编写清晰、易读的代码对于程序的维护和扩展至关重要。
  • 要注意代码的格式,如缩进、空格和换行等,以使其结构清晰、易于理解。
  • 同时,应遵循命名规范,为变量、函数和类等选择合适的名称,以便他人能够轻松理解代码的含义。
  • 此外,添加适当的注释可以帮助解释代码的功能和目的,进一步提高代码的可读性。

五、总结

本篇详细阐述了编写简单程序的基础知识和方法,包括基本的输入输出操作,如使用scanf和printf等函数进行数据的读取和输出;简单的数学计算程序,能够执行加减乘除等基本数学运算;以及字符串处理程序,涵盖了字符串的拼接、查找和替换等操作。

此外,本篇还提供了详细的代码示例,展示了各个程序的具体实现方式。并附有测试用例及运行结果,帮助读者更好地理解程序的功能和效果,从而更好地掌握编写简单程序的方法和技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byte轻骑兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值