本关任务:运用枚举法求解硬币等额兑换的程序。
为了完成本关任务,你需要掌握:
基本原理:for
循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)
。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。
示例代码
#include <stdio.h>
int main() {
// 打印1到10的数字
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
基本原理:while
循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)
。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。
示例代码
#include <stdio.h>
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
printf("\n");
return 0;
}
基本原理:break
语句用于立即跳出当前循环(for
、while
、do - 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;
}
基本原理:continue
语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue
语句时,循环体中continue
语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for
循环)或循环条件检查(对于while
和do - 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;
}
循环嵌套是指在一个循环语句的循环体中又包含另一个循环语句。在 C 语言中,for
循环、while
循环和do - while
循环都可以相互嵌套。它主要用于处理具有多重循环结构的问题,例如二维数组的遍历、打印各种有规律的图案等。
最常见循环嵌套结构是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
)。每次内层循环结束后,会输出一个换行符,形成了一个完整的乘法口诀表。
基本形式如下:
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
循环用于不断更新a
和b
的值,直到b
变为 0,内层的操作(计算余数并更新a
和b
)在每次外层循环迭代时都会执行。
基本形式如下:
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)。
根据提示在右侧编辑器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);
}