当前位置: 首页 > article >正文

【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

 一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)

2. 循环控制语句(while 循环)

3. 跳转语句(break 语句)

4. 跳转语句(continue 语句)

二、循环嵌套语句

1. 基本概念

2. for 循环嵌套

3. while 循环嵌套

4. do - while 循环嵌套

5. 注意事项

编程要求

测试说明

通关代码

测试结果


任务描述

本关任务:运用枚举法求解硬币等额兑换的程序。


相关知识

为了完成本关任务,你需要掌握:

  1. 循环控制/跳转语句
  2. 循环嵌套语句;

 一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)
  • 基本原理for循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。
  • 示例代码
    #include <stdio.h>
    int main() {
        // 打印1到10的数字
        for (int i = 1; i <= 10; i++) {
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }
    
2. 循环控制语句(while 循环)
  • 基本原理while循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。
  • 示例代码
    #include <stdio.h>
    int main() {
        int i = 1;
        while (i <= 10) {
            printf("%d ", i);
            i++;
        }
        printf("\n");
        return 0;
    }
    
3. 跳转语句(break 语句)
  • 基本原理break语句用于立即跳出当前循环(forwhiledo - while)或switch语句。当程序执行到break语句时,循环或switch语句会立即终止,程序控制流将跳转到循环或switch语句后的下一条语句。
  • 示例代码(在循环中使用 break)
    #include <stdio.h>
    int main() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;
            }
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }
    
4. 跳转语句(continue 语句)
  • 基本原理continue语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue语句时,循环体中continue语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for循环)或循环条件检查(对于whiledo - while循环)。
  • 示例代码(在循环中使用 continue)
    #include <stdio.h>
    int main() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;
            }
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }

二、循环嵌套语句

1. 基本概念

循环嵌套是指在一个循环语句的循环体中又包含另一个循环语句。在 C 语言中,for循环、while循环和do - while循环都可以相互嵌套。它主要用于处理具有多重循环结构的问题,例如二维数组的遍历、打印各种有规律的图案等。

2. for 循环嵌套
  • 语法结构

最常见循环嵌套结构是for循环嵌套for循环。其基本形式如下:

for(初始化表达式1; 条件表达式1; 更新表达式1) {
    // 外层循环体
    for(初始化表达式2; 条件表达式2; 更新表达式2) {
        // 内层循环体
    }
}

下面的代码打印了一个简单的乘法口诀表:

#include <stdio.h>
int main() {
    int i, j;
    for(i = 1; i <= 9; i++) {
        for(j = 1; j <= i; j++) {
            printf("%d*%d=%d\t", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}

其中,外层for循环控制行数(i从 1 到 9),内层for循环控制每行乘法口诀的列数(j从 1 到当前行号i)。每次内层循环结束后,会输出一个换行符,形成了一个完整的乘法口诀表。

3. while 循环嵌套
  • 语法结构

基本形式如下:

while(条件表达式1) {
    // 外层循环体
    while(条件表达式2) {
        // 内层循环体
    }
}

例如,下面的代码用于计算两个数的最大公因数,使用的是辗转相除法(欧几里得算法),可以用while循环嵌套来实现:

#include <stdio.h>
int main() {
    int a, b, temp;
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    while (b!= 0) {
        temp = a % b;
        a = b;
        b = temp;
    }
    printf("最大公因数是:%d\n", a);
    return 0;
}

这里,外层while循环用于不断更新ab的值,直到b变为 0,内层的操作(计算余数并更新ab)在每次外层循环迭代时都会执行。

4. do - while 循环嵌套
  • 语法结构

基本形式如下:

do {
    // 外层循环体
    do {
        // 内层循环体
    } while(条件表达式2);
} while(条件表达式1);

例如,下面的代码可以用于模拟一个简单的游戏关卡选择界面,假设游戏有多个章节,每个章节有多个关卡,用户可以选择章节和关卡:

#include <stdio.h>
int main() {
    int chapter, level;
    do {
        printf("请选择章节(1 - 3):");
        scanf("%d", &chapter);
        if (chapter >= 1 && chapter <= 3) {
            do {
                printf("请选择章节 %d中的关卡(1 - 5):", chapter);
                scanf("%d", &level);
                if (level >= 1 && level <= 5) {
                    printf("你选择了章节 %d的关卡 %d\n", chapter, level);
                } else {
                    printf("无效的关卡选择。\n");
                }
            } while (level < 1 || level > 5);
        } else {
            printf("无效的章节选择。\n");
        }
    } while (chapter < 1 || chapter > 3);
    return 0;
}

其中,外层do - while循环用于确保用户选择了有效的章节(1 - 3),内层do - while循环用于确保用户在选定的章节中选择了有效的关卡(1 - 5)。

5. 注意事项
  • 循环嵌套时,要特别注意内层循环和外层循环的控制变量。它们应该相互独立,避免在内层循环中意外修改外层循环的控制变量,除非这是有意为之并且经过仔细考虑的逻辑。
  • 随着循环嵌套层数的增加,程序的复杂度也会增加。因此,在编写循环嵌套代码时,要确保代码的可读性,必要时添加注释来解释代码的功能和意图。同时,要注意循环嵌套可能带来的性能问题,例如过多的嵌套可能导致程序运行时间过长或者占用过多的内存资源。

编程要求

根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。


测试说明

平台会对你编写的代码进行测试:

预期输出:

1fen:  5 ,2fen: 10 ,5fen: 15
1fen:  5 ,2fen: 35 ,5fen:  5
1fen: 10 ,2fen: 20 ,5fen: 10
1fen: 15 ,2fen:  5 ,5fen: 15
1fen: 15 ,2fen: 30 ,5fen:  5
1fen: 20 ,2fen: 15 ,5fen: 10
1fen: 25 ,2fen: 25 ,5fen:  5
1fen: 30 ,2fen: 10 ,5fen: 10
1fen: 35 ,2fen: 20 ,5fen:  5
1fen: 40 ,2fen:  5 ,5fen: 10
1fen: 45 ,2fen: 15 ,5fen:  5
1fen: 55 ,2fen: 10 ,5fen:  5
1fen: 65 ,2fen:  5 ,5fen:  5
一共有13种

开始你的任务吧,祝你成功!


通关代码

/*6.要将一元钱换成1分、2分和5分的硬币,每种硬币的个数大于0,且为5的倍数,
编写程序计算并输出有多少种换法。*/
#include<stdio.h>
main(){
	int i,j,k,n=0;
	   /************************begin***********************/
    for(i=1;i<100;i++){
        for(j=1;j<=50;j++){
            for(k=1;k<20;k++){
                if(i+2*j+5*k==100 && i%5==0 && j%5==0 && k%5==0){
                    n++;
                    printf("1fen: %2d ,2fen: %2d ,5fen: %2d\n",i,j,k);
                    }
                }
            }
        }  
       /************************end************************/
	printf( "一共有%d种",n);
}

测试结果

在这里插入图片描述


http://www.kler.cn/a/465678.html

相关文章:

  • 深入理解 Java 接口的回调机制
  • JAVA构造方法练习
  • 一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理
  • Spring Boot 的自动配置,以rabbitmq为例,请详细说明
  • Flink源码编译与运行
  • 理解linux内核中的几种地址
  • 【HTTP和gRPC的区别】协议类型/传输效率/性能/语义/跨语言支持/安全性/使用场景/易用性对比
  • Kafka详解 ③ | Kafka集群操作与API操作
  • 常用的聚合函数
  • TCPDump参数详解及示例
  • 组合模式——C++实现
  • UniApp | 从入门到精通:开启全平台开发的大门
  • SpringSpringBoot常用注解总结
  • oceanbase集群访问异常问题处理
  • 高温大面积碳化硅外延生长装置及处理方法
  • 问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系
  • 【论文阅读笔记】SCI算法与代码 | 低照度图像增强 | 2022.4.21
  • 后端java开发路由接口并部署服务器(四)
  • Leetcode打卡:我的日程安排表II
  • Chapter 3 Coding Attention Mechanisms
  • 【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
  • 深入浅出:Java 抽象类与接口
  • PHP 5 6 7 8 9 各重要版本开发特性和选择简要说明
  • TT100K数据集, YOLO格式, COCO格式
  • fastadmin 表格数据导入
  • 打开游戏弹出缺少dll文件怎么解决?