c语言程序设计——实验报告六

c语言程序设计——实验报告六

  • 实验项目名称:实验6 循环结构程序设计(for语句的应用)
  • 实验项目类型:验证性
  • 实验日期:2024年4月15日

一、实验目的

  1. 熟练掌握三种循环语句并能正确运用;
  2. 能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;
  3. 进一步学习程序调试;
  4. 了解中国算法,百钱买百鸡。

二、实验硬、软件环境

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;
}

实验截图
image

项目二:(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;
}

实验截图
image

项目三:(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;
}

实验截图
image

项目四:某黑夜一司机碰伤行人后逃逸,经警方调查,有三个目击证人。甲说:车牌号的前两位相同;乙说:车牌号的后两位加起来等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;
}

实验截图
image

项目五:思考题:百钱买百鸡。

解题思路

  • 我们可以使用三个循环分别表示鸡翁、鸡母和鸡雏的数量,范围分别从 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运算获取,再用/=符号舍去最后一位
posted @ 2024-04-21 21:29  juuroppa  阅读(203)  评论(0)    收藏  举报