C语言算法教学

知识点5:利用循环设计算法解决具体问题

知识点5:利用循环设计算法解决具体问题

循环结构是编程中解决重复性任务的核心工具。本知识点通过8个具体案例,展示如何使用循环结构解决实际编程问题。

循环结构使我们能够:

  • 处理重复性任务
  • 遍历数组或集合
  • 实现数学计算
  • 创建特定模式输出
  • 解决复杂算法问题

在C语言中,主要有三种循环结构:

  1. while循环 - 在条件为真时重复执行
  2. for循环 - 在指定次数内重复执行
  3. do-while循环 - 至少执行一次后再检查条件

循环结构基础语法

// while循环示例
int count = 0;
while (count < 5) {
    printf("Count: %d\n", count);
    count++;
}

// for循环示例
for (int i = 0; i < 5; i++) {
    printf("Iteration: %d\n", i);
}

// do-while循环示例
int num = 5;
do {
    printf("Number: %d\n", num);
    num--;
} while (num > 0);

例1:数字反转

输入一串数字,反转这个数字并输出(例如输入12345,输出54321)。

算法解析:

该程序使用while循环对数字进行反转操作。在每次循环中:

  • 使用模运算(%)获取当前数的最低位数字
  • 将获取的数字添加到反转后的数字的末尾
  • 将原数除以10,去掉其最低位数字

C语言实现代码

#include <stdio.h>

int main() {
    int num, reversed_num = 0;
    printf("请输入一个正整数:");
    scanf("%d", &num);
    
    while (num > 0) {
        int digit = _______1________;
        reversed_num = _______2________;
        _______3________;
    }
    
    printf("反转后的数字为: %d\n", reversed_num);
    return 0;
}

示例输出

输入: 12345

输出: 54321

例2:数组最大值和最小值

给定一个整型数组,编写程序找到其中的最大值和最小值。

算法解析:

  • 将最大值和最小值初始化为数组的第一个元素
  • 使用for循环遍历数组中的所有元素
  • 比较每个元素与当前最大值和最小值
  • 根据比较结果更新最大值和最小值

C语言实现代码

#include <stdio.h>

int main() {
    int nums[] = {3, 7, 2, 5, 8, 4};
    int num_count = _______1________;
    int max_num = nums[0], min_num = nums[0],i;
    
    for ( i = 1; i < num_count; i++) {
        if (_______2________) {
            max_num = nums[i];
        }
        if (nums[i] < min_num) {
            _______3________;
        }
    }
    
    printf("最大值为: %d\n", max_num);
    printf("最小值为: %d\n", min_num);
    return 0;
}

示例输出

数组: {3, 7, 2, 5, 8, 4}

最大值: 8

最小值: 2

例3:数组平均值

给定一个整型数组,编写程序求平均值。

算法解析:

  • 元素累加
  • 除以个数
  • 个数怎么来的?

C语言实现代码

#include <stdio.h>

int main() {
    float nums[] = {3, 7, 2, 5, 8, 4};
    int num_count = _______1________;
    float ave =0;int i;
    
    for ( i = 1; i < _______2________; i++) {
        ave+=nums[i];
    }
    _______3________;
    printf("平均值: %d\n", ave);
   
    return 0;
}

示例输出

数组: {3, 7, 2, 5, 8, 4}

最大值: 8

最小值: 2