首页 > 编程语言 >实验5 循环结构程序设计(while、do-while语句的应用)

实验5 循环结构程序设计(while、do-while语句的应用)

时间:2024-04-22 13:23:47浏览次数:70  
标签:语句 do 巧克力 小明 int while 实验 printf

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

  • 实验项目名称:
  • 实验项目类型:验证性
  • 实验日期:

一、实验目的

二、实验硬、软件环境

Windows计算机、Dev c 6.0

三、实验内容及步骤

实验内容:

编写程序:
(1)用while语句计算自然数列1,2,3……,n的和,n的值在程序执行时输入。
(2)用do-while语句计算n的阶乘
(3)用while语句编写程序求20+21+22+23+24+……+263
(4)用while语句编写程序。输入一行字符,求出其中字母、数字和其他字符的个数。
思考题:小明妈妈给他买了若干块巧克力,小明第一天吃了一半,还不过瘾,又多吃了一块,第二天又将剩下的巧克力吃掉一半,又多吃一块,以后每天都吃了前一天剩下的一半零一块。到第10天再想吃时,只剩下一块了。设计一个程序计算小明妈妈总共给小明买了多少块巧克力?

实验步骤:

项目一:用while语句计算自然数列1,2,3……,n的和,n的值在程序执行时输入。

解题思路

  • 首先,需要用户输入一个正整数 n。
  • 使用一个变量 sum 来保存数列的和,初始值设为 0。
  • 使用一个变量 i 作为循环控制变量,初始值设为 1。
  • 使用 while 循环进行迭代,每次迭代将当前循环变量 i 的值累加到 sum 中,并递增 i。
  • 当 i 的值超过了输入的正整数 n 时,循环结束。
  • 最后输出计算得到的自然数列 1 到 n 的和。

核心代码

#include <stdio.h>

int main() {
    int n, sum = 0;
    
    printf("请输入一个正整数 n:");
    scanf("%d", &n);
    
    int i = 1;
    while (i <= n) {
        sum += i;
        i++;
    }
    
    printf("自然数列 1 到 %d 的和为:%d\n", n, sum);
    
    printf("*****************************************\n\n");
    printf("23080905040502   王永成\n\n");
    printf("*****************************************");
	
    return 0;
}

实验截图
image

项目二:用do-while语句计算n的阶乘

解题思路

  • 使用一个变量 jiecheng 来保存阶乘的结果,初始值为 1。
  • 使用一个变量 n 输入要计算阶乘的数。
  • 使用 do-while 循环来计算阶乘:
  • 循环体内将 jiecheng 乘以 n,然后 n 自减。
  • 当 n 大于 1 时继续循环。
  • 输出计算结果。

核心代码

#include <stdio.h>

int main() {
    int n;
    printf("请输入一个整数 n:");
    scanf("%d", &n);

    int jiecheng = 1;
    int i = n;
    do {
        jiecheng *= i;
        i--;
    } while (i > 0);

    printf("%d 的阶乘是:%d\n", n, jiecheng);


    printf("*****************************************\n\n");
    printf("23080905040502   王永成\n\n");
    printf("*****************************************");

    return 0;
}

实验截图
image

项目三:用while语句编写程序求20+21+22+23+24+……+263

解题思路

  • 使用一个变量 sum 来保存求和的结果,初始值为 0。
  • 使用一个变量 num 从 20 开始递增到 263。
  • 使用 while 循环来累加 num 到 sum 中:
  • 在循环体内,将 num 的值加到 sum 中。
  • num 每次递增 1。
    核心代码
#include <stdio.h>

int main() {
    int num = 20;
    int sum = 0;

    while (num <= 263) {
        sum += num;
        num++;
    }

    printf("20+21+22+23+24+……+263 的和为:%d\n", sum);

    printf("*****************************************\n\n");
    printf("23080905040502   王永成\n\n");
    printf("*****************************************");

    return 0;
}


实验截图
image

项目四:用while语句编写程序。输入一行字符,求出其中字母、数字和其他字符的个数。

解题思路

  • 使用三个变量 wordCountnumCountotherCount 来分别表示字母、数字和其他字符的个数,初始值都为 0。
  • 使用一个 while 循环来逐个检查输入的字符,并统计各类字符的个数:
  • 在循环内,根据字符的类型(字母、数字还是其他字符),分别增加相应的计数器。
  • 输入的结束条件可以是遇到换行符 \n 或者文件结束符 EOF。

核心代码

#include <stdio.h>

int main() {
    char ch;
    int wordCount = 0, numCount = 0, otherCount = 0;

    printf("请输入一行字符:\n");
    while ((ch = getchar()) != '\n') {
        if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
            wordCount++;
        } else if (ch >= '0' && ch <= '9') {
            numCount++;
        } else {
            otherCount++;
        }
    }

    printf("字母个数:%d,数字个数:%d,其他字符个数:%d\n", wordCount, numCount, otherCount);

    printf("*****************************************\n\n");
    printf("23080905040502   王永成\n\n");
    printf("*****************************************");


    return 0;
}

实验截图
image

项目五:思考题:小明妈妈给他买了若干块巧克力,小明第一天吃了一半,还不过瘾,又多吃了一块,第二天又将剩下的巧克力吃掉一半,又多吃一块,以后每天都吃了前一天剩下的一半零一块。到第10天再想吃时,只剩下一块了。设计一个程序计算小明妈妈总共给小明买了多少块巧克力?

解题思路

  • 使用一个变量 chocolates 来表示小明妈妈总共给小明买的巧克力的数量,初始值为未知。
  • 使用一个变量 currentChocolates 来表示当前剩余的巧克力数量,初始值为 1。
  • 使用一个循环来模拟小明每天吃巧克力的过程,从第 10 天倒推到第 1 天:
  • 在循环中,将当前剩余的巧克力数量加上一块(因为小明每天都会多吃一块),然后乘以 2(因为小明每天都会吃掉一半)。
  • 从第 10 天开始向第 1 天逐步推算,就能得到小明妈妈总共给他买了多少块巧克力。

核心代码

#include <stdio.h>

int main() {
    int chocolates = 1;
    for (int day = 9; day >= 1; day--) {
        chocolates = (chocolates + 1) * 2; 
    }
    printf("小明妈妈总共给小明买了 %d 块巧克力\n", chocolates);
	
    printf("*****************************************\n\n");
    printf("23080905040502   王永成\n\n");
    printf("*****************************************");
	
    return 0;
}

实验截图
image

四、实验结果及分析

  • 在思考题中我们可以将问题转化为一个倒推的问题,从第 10 天开始,每一天的巧克力数量都是前一天数量加一后乘以 2。

标签:语句,do,巧克力,小明,int,while,实验,printf
From: https://www.cnblogs.com/juuroppa/p/18150435

相关文章

  • 使用 Docker 部署 FRP
    服务端编写配置文件vim~/.config/frp/frps.tomlbindPort=7000#WebDashboard[webServer]addr="0.0.0.0"port=7500user="xxx"password="xxx"启动Docker容器dockerrun-d--restartalways--networkhost--namefrps-v~/.con......
  • docker安装rabbitmq
    拉取镜像dockerpullrabbitmq:3.12.12运行容器cd/usr/local/dockerdockerrun-d--namerabbitmq3.12.12-p5672:5672-p15672:15672-v`pwd`/data:/var/lib/rabbitmq--hostnamemyRabbit-eRABBITMQ_DEFAULT_VHOST=my_vhost-eRABBITMQ_DEFAULT_USER=admin-e......
  • docker Java 应用堆内存配置
    引言本文主要是讲解InitialRAMPercentage、MinRAMPercentage,MaxRAMPercentage三个JVM参数之间的区别。参数由Java8update191引入,主要是用于配置运行在物理机或者容器中的Java应用堆内存大小。InitialRAMPercentage-XX:InitialRAMPercentage用于配置堆的初始化......
  • C. How Does the Rook Move?
    原题链接题解1.没有棋下也算一种情况!!!!!!!!!2.前k次放置,如果放在对角线上,会把原先n阶矩阵分解成n-1阶矩阵,如果没放在对角线上,会分割成n-2阶矩阵3.不管如何放置,到最后第一列总有且仅有一颗棋子,第一列的第一行只能放白棋,第2到第n行可以放白棋或黑棋,所以第一列的放置有\(2n-1\)种情况......
  • unix /var/run/docker.sock: connect: permission denied
    由于安全整改,root被ssh_config禁用,故使用普通用户执行脚本,执行脚本过程中,使用普通用户运行docker命令时发现权限不够,报错如下GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Gethttp://%2Fvar%2Frun%2Fdocker.soc......
  • 关于 Envoy on Windows
    WindowImageinhub.cocker.comenvoy的镜像位于https://hub.docker.com/u/envoyproxy之下,其中Windows包括如下4个版本。envoy-windowshttps://hub.docker.com/r/envoyproxy/envoy-windowsenvoy-windows-devhttps://hub.docker.com/r/envoyproxy/envoy-windows-deve......
  • debian11安装docker
    在Debian11上安装Docker,你可以按照以下步骤操作:更新软件包索引:sudoaptupdate安装必要的软件包以允许apt通过HTTPS使用仓库:sudoaptinstallca-certificatescurlgnupglsb-release添加Docker的官方GPG密钥:curl-fsSLhttps://download.doc......
  • Windows快速安装Rust
    本文是最简最快最小化安装重点提示:如果不想安装VS消耗时间和6-8G的空间,可以按本文安装。如果系统中已经安装了VS,那么直接运行rustup-init安装Rust,并一路回车即可。前置条件:安装C++环境rust底层是依赖C环境的连接器,所以需要先安装C/C++编译环境,点击下载64位mingw-builds......
  • docker安装mysql
    下载最新的官方镜像dockerpullmysql:latest启动mysqldockerrun-d-p3306:3306\--privileged=true\-v/app/mysql/log:/var/log/mysql\-v/app/mysql/data:/var/lib/mysql\-v/app/mysql/conf:/etc/mysql/conf.d\......
  • delete/声明语句/赋值操作
    deletevarx1={a:1}x1=>{a:1}deletex1=>falsewindow.x2={a:1}x2=>{a:1}deletex2=>truevar声明的全局变量和使用let或const声明的全局变量都不能被delete删除,因为它们都是不可配置的。只有直接在全局对象上设置的属性才可以被delete成功删除。delete运......