C语言算法教学

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

例4:完数查找

编写程序找出1000以内的所有完数。完数是指一个数恰好等于它的因子之和(不包括自身)。例如6=1+2+3。

算法解析:

  • 使用外层循环遍历1到1000之间的所有数字
  • 对于每个数字,使用内层循环找出它的所有因子
  • 计算这些因子的和
  • 如果和等于原始数字,则该数字是完数

C语言实现代码

#include <stdio.h>

int main() {
    int i, j, sum;
    
    printf("1000以内的完数有:\n");
    
    for (i = 1; _______1________; i++) {
        sum = 0;
        
        // 找出i的所有因子并求和
        for (j = 1; _______2________; j++) {
            if (i % j == 0) {
                _______3________;
            }
        }
        
        // 如果因子和等于i本身,则是完数
        if (_______3________) {
            printf("%d ", i);
        }
    }
    
    printf("\n");
    return 0;
}

示例输出

1000以内的完数有: 6 28 496

例5:斐波那契数列

编写程序输出斐波那契数列的前20项。本题要求前两项为1,从第三项开始,每一项都是前两项之和。

算法解析:

  • 初始化前两个斐波那契数
  • 使用循环计算后续的斐波那契数
  • 每个新项都是前两项之和
  • 每行输出一定数量的项,使输出更美观

C语言实现代码

#include <stdio.h>

int main() {
    int n ;
    _______1________; // 输出前20项
    long long first = 1, second = _______2________, next;
    int i, count = 0;
    
    printf("斐波那契数列前%d项:\n", n);
    
    for ( i = 1; i <= n; i++) {
        if (i == 1) {
            printf("%ld ", first);
            count++;
        } else if (i == 2) {
            printf("%ld ", second);
            count++;
        } else {
            next = _______3________;
            printf("%ld ", next);
            count++;
            first = _______4________;
            second = next;
        }
        
        // 每行输出5个数字
        if (_______5________) {
            printf("\n");
            count = 0;
        }
    }
    
    printf("\n");
    return 0;
}

示例输出

斐波那契数列前20项:

1 1 2 3 5

8 13 21 34 55

89 144 233 377 610

987 1597 2584 4181 6765

例6:数组求和

编写程序计算一个整型数组中所有元素的和。

算法解析:

  • 定义一个整型数组并初始化
  • 使用循环遍历数组中的所有元素
  • 将每个元素累加到一个总和变量中
  • 输出最终的总和结果

C语言实现代码

#include <stdio.h>

int main() {
    int arr[] = {12, 45, 23, 67, 34, 89, 56, 91, 72, 38},i;
    int size = sizeof(arr) / sizeof(arr[0]);
    int _______1________;
    
    printf("数组元素: ");
    for ( i = 0; i < _______2________; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    // 计算数组元素的和
    for ( _______3________; i < size; i++) {
       _______4________
    }
    
    printf("数组元素总和: %d\n", sum);
    return 0;
}

示例输出

数组元素: 12 45 23 67 34 89 56 91 72 38

数组元素总和: 527

例7:倒三角形

编写程序输出一个由星号组成的倒三角形图案。

算法解析:

  • 使用外层循环控制行数
  • 使用内层循环控制每行输出的星号数量
  • 随着行数增加,每行的星号数量递减
  • 使用空格来保持图案居中

C语言实现代码

#include <stdio.h>

int main() {
    int rows = 7;
    
    printf("倒三角形图案:\n\n");
    
    for (int i = _______1________; i >= 1; i--) {
       
        // 打印星号
        for (int j = 1; _______4________; j++) {
            printf("*");
        }
        
        printf("\n");
    }
    
    return 0;
}

示例输出

倒三角形图案:

*************

***********

*********

*******

*****

***

*