c语言程序设计——实验报告六
c语言程序设计——实验报告六
- 实验项目名称:实验6 循环结构程序设计(for语句的应用)
- 实验项目类型:验证性
- 实验日期:2024年4月15日
一、实验目的
- 熟练掌握三种循环语句并能正确运用;
- 能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;
- 进一步学习程序调试;
- 了解中国算法,百钱买百鸡。
二、实验硬、软件环境
Windows计算机、Dev c 6.0
三、实验内容及步骤
实验内容:
编写程序:
(1)编写程序,计算1-3+5-7+9……-99+101的值。
(2)编写程序,用*输出一个等腰三角型。
(3)编写程序,打印1000-9999范围内所有的玫瑰花数。玫瑰花数是指一个四位数,它的各位数字的4次方之和等于该数本身。
(4)某黑夜一司机碰伤行人后逃逸,经警方调查,有三个目击证人。甲说:车牌号的前两位相同;乙说:车牌号的后两位加起来等6;丙说:车牌号是一个四位数并且能被2整除。根据上述线索,编程列出可能的车牌号。
(5)思考题:百钱买百鸡。
我国古代数学家张丘键在《算经》中出了一道题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请编程并输出答案。
实验步骤:
项目一:编写程序,计算1-3+5-7+9……-99+101的值。
解题思路
- 使用一个变量 sum 来保存表达式的结果,初始值为 0。
- 使用一个变量 flag 来控制每一项的符号,初始值为 1。
- 使用一个循环来遍历表达式中的每一项:
- 循环从 1 开始,以步长为 2 递增,直到 101(奇数项)。
- 对于每一项,根据 flag 的值将其加到 sum 中,然后将 flag 取反,以实现交替加减。
- 循环结束后,sum 中保存的就是表达式的结果。
- 输出计算结果。
核心代码
//计算 1-3+5-7+.....-99+101
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int sum = 0;
int flag = 1;
for(int i = 1;i <= 101; i+=2){
sum = sum + i*flag;
flag = -flag;
}
printf("计算 1-3+5-7+.....-99+101 = ");
printf("%d\n\n",sum);
puts("=============================================");
puts("王永成 23080905040502");
puts("=============================================");
return 0;
}
实验截图

项目二:(2)编写程序,用*输出一个等腰三角型。
解题思路
- 使用两个变量 xing_num 和 kong_num 分别表示每一行中星号的数量和空格的数量,初始值分别为 1 和 1。
- 使用两个嵌套的循环来控制行和列的打印:
- 外部循环控制行数,从 0 到 d-1(d 为等腰三角形的高度)。
- 内部循环控制每行中空格和星号的打印:
- 打印空格,其数量从 d 递减到 kong_num。
- 打印星号,其数量从 1 递增到 xing_num。
核心代码
//*号打印 等腰三角形
#include <stdio.h>
#include <stdlib.h>
#define d 11
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int xing_num = 1;
int kong_num = 1;
for (int i = 0; i < d; i ++ ){
for(int j = d; j > kong_num;j--) printf(" ");
kong_num += 1;
for(int z = 1; z <= xing_num; z++) printf("*");
xing_num += 2;
puts(" ");
}
puts("=============================================");
puts("王永成 23080905040502");
puts("=============================================");
return 0;
}
实验截图

项目三:(3)编写程序,打印1000-9999范围内所有的玫瑰花数。玫瑰花数是指一个四位数,它的各位数字的4次方之和等于该数本身。
解题思路
- 使用一个循环来遍历所有可能的四位数,从 1000 到 9999。
- 对于每个数字,将其拆分成千位、百位、十位和个位数字。
- 计算每个数字的每个数位的四次方,并将它们相加。
- 检查相加的结果是否等于原始数字。
- 如果相等,则输出该数字,即它是一个玫瑰花数。
核心代码
//玫瑰花数 四位数的每个数的四次方之和都是它本身
#include <stdio.h>
#include <stdlib.h>
#define MAX 9999
#define MIN 1000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int Bit,Ten_Bits,Hundred,kilobit;
printf("1000 - 9999 之间的玫瑰花数有:");
for(int i = MIN;i <= MAX;i++){
int num = i;
Bit = num % 10;
num /= 10;
//printf("%d\n",Bit);
Ten_Bits = num % 10;
num /= 10;
//printf("%d\n",Ten_Bits);
Hundred = num % 10;
num /= 10;
//printf("%d\n",Hundred);
kilobit = num % 10;
num /= 10;
//printf("%d\n",kilobit);
if( i == (Bit*Bit*Bit*Bit + Ten_Bits*Ten_Bits*Ten_Bits*Ten_Bits + Hundred*Hundred*Hundred*Hundred + kilobit*kilobit*kilobit*kilobit)) {
printf("%d ",i);
}
}
puts("");
puts("=============================================");
puts("王永成 23080905040502");
puts("=============================================");
return 0;
}
实验截图

项目四:某黑夜一司机碰伤行人后逃逸,经警方调查,有三个目击证人。甲说:车牌号的前两位相同;乙说:车牌号的后两位加起来等6;丙说:车牌号是一个四位数并且能被2整除。根据上述线索,编程列出可能的车牌号。
解题思路
- 使用一个循环来遍历所有可能的车牌号,从 1000 到 9999。
- 对于每个数字,将其拆分成千位、百位、十位和个位数字。
- 检查是否满足条件:千位数字等于百位数字、个位数字和十位数字之和为 6、车牌号为偶数。
- 如果满足条件,则输出该车牌号。
核心代码
//车牌号
#include <stdio.h>
#include <stdlib.h>
#define MAX 9999
#define MIN 1000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int Bit,Ten_Bits,Hundred,kilobit;
int col = 1;
printf("可能的车牌号:\n");
for(int i = MIN;i < MAX;i++){
int num = i;
Bit = num % 10;
num /= 10;
//printf("%d\n",Bit);
Ten_Bits = num % 10;
num /= 10;
//printf("%d\n",Ten_Bits);
Hundred = num % 10;
num /= 10;
//printf("%d\n",Hundred);
kilobit = num % 10;
num /= 10;
//printf("%d\n",kilobit);
if(kilobit == Hundred && Bit + Ten_Bits == 6 && i % 2 == 0){
col % 4 == 0 ? puts(""):printf("%d ",i);
col++;
}
}
puts("");
puts("=============================================");
puts("王永成 23080905040502");
puts("=============================================");
return 0;
}
实验截图

项目五:思考题:百钱买百鸡。
解题思路
- 我们可以使用三个循环分别表示鸡翁、鸡母和鸡雏的数量,范围分别从 0 到 100。
- 对于每种情况,我们计算总价值是否等于 100,并且鸡雏的数量必须是 3 的倍数。
- 如果满足条件,则输出该组解。
核心代码
#include <stdio.h>
int main() {
int x, y, z; // 鸡翁数量,鸡母数量,鸡雏数量
for (x = 0; x <= 20; x++) {
for (y = 0; y <= 33; y++) {
z = 100 - x - y;
if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0) {
printf("鸡翁:%d 只,鸡母:%d 只,鸡雏:%d 只\n", x, y, z);
}
}
}
puts("=============================================");
puts("王永成 23080905040502");
puts("=============================================");
return 0;
}
实验截图

四、实验结果及分析
- 对于获取一个数的每个位的数值,可以通过
%符号对10运算获取,再用/=符号舍去最后一位
浙公网安备 33010602011771号