【C语言】循环结构程序设计(第二部分 -- 习题讲解)

前言:昨天我们学习了C语言中循环结构程序设计,并分析了循环结构的特点和实现方法,有了初步编写循环程序的能力,那么今天我们通过一些例子来进一步掌握循环程序的编写和应用。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!这里是引用

目录

    • 斐波那契数列
    • 判断素数
    • 最大公约数和最小公倍数
    • 统计字符个数
    • 水仙花数
    • 求"1000之内的完数"

斐波那契数列

例题1:求Fibonacci(斐波那契)数列的前40个数。这个数列有以下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13…,用数学方式表示为:
在这里插入图片描述
代码思路:
方法一:用非递归的思路解决

int main()
{int num1 = 1;int num2 = 1;int i = 0;int tmp = 0;int sum = 0;for (i = 0; i < 40; i++){if (i < 3){tmp = 1;printf("%d ", tmp);//前两项是1所以直接输出即可sum = 2;}else{tmp = num1 + num2;//第三项开始后一项是前两项的和num1 = num2;//让后一项赋值给前一项num2 = tmp;//同理printf("%d ", tmp);sum += tmp;//求和}}printf("\n");printf("sum = %d\n", sum);return 0;
}

方法二:用递归

int Fibon1(int num)
{if (num == 1 || num == 2){return 1;}else{return Fibon1(num - 1) + Fibon1(num - 2);//用递归的方式}}int main()
{int n = 0;int ret = 0;scanf("%d", &n);ret = Fibon1(n);printf("ret=%d", ret);return 0;
}

运行结果:
在这里插入图片描述


判断素数

例题2:输入一个大于3的数,判定它是否为素数(prime)

代码分析:

#include <math.h>
int is_prime(int n)
{int i = sqrt(n);//一个数如果是素数可以写成两个数相乘的形式int flag = 1;//判断标志while (i > 1){if (n % i == 0)//如果被整除说明不是素数{int flag = 0;return 0;}i--;}if (flag == 1)//如果flag = 1说明他没有整除{return 1;}
}
int main()
{int num = 0;scanf("%d", &num);if (is_prime(num)){printf("该数:%d是素数\n", num);}else{printf("该数:%d不是素数\n", num);}return 0;
}

运行结果:
在这里插入图片描述


例题3:求100到200之间的素数
代码分析:

#include <math.h>
int is_prime(int n)
{int i = sqrt(n);//一个数如果是素数可以写成两个数相乘的形式int flag = 1;//判断标志while (i > 1){if (n % i == 0)//如果被整除说明不是素数{int flag = 0;return 0;}i--;}if (flag == 1)//如果flag = 1说明他没有整除{return 1;}
}
int main()
{int i = 0;for (i = 100; i <= 200; i++){if(is_prime(i))//判断是否是素数printf("%d ", i);//是素数则打印i的值}return 0;
}

运行结果:
在这里插入图片描述


最大公约数和最小公倍数

例题4:输入两个正整数m和n,求其最大公约数和最小公倍数
代码分析:

int main()
{int m = 0;int n = 0;scanf("%d %d", &m, &n);int min = m < n ? m : n;//找出其中的最小值;while (1){if (m % min == 0 && n % min == 0)//找到能同时能被它们俩整除的数//如果能被整除说明是他们的最大公约数{break;}min -= 2;}int j = 1;while (m * j % n != 0)//两个数的最小公倍数一定是它们俩个的倍数//因此找到其中一个数的倍数,看他的倍数的积是否可以整除另一个数{j++;}printf("最大公约数是: %d  最小公倍数是: %d", min, m * j);printf("\n");return 0;
}

运行结果:
在这里插入图片描述


统计字符个数

例题4:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
代码分析:

int main()
{char arr[100] = { 0 };char ch = 0;int i = 0;int Eng_letter = 0;//英文字符int space = 0;//空格int number = 0;//数字int others = 0;//其其它字符while ((ch = getchar()) != '\n')//输入字符{arr[i++] = ch;}int len = strlen(arr);for (i = 0; i < len; i++){if ((arr[i] >= 'a' && arr[i] <= 'z') || (arr[i] >= 'A' && arr[i] <= 'Z'))//判断是否是英文字符{Eng_letter++;//是的话自增加1}else if (arr[i] >= '0' && arr[i] <= '9')//判断数字{number++;}else if (arr[i] == ' ')//判断空格{space++;}elseothers++;//是否是其它的}printf("Eng_letter = %d number = %d space = %d others = %d", Eng_letter, number, space, others);return 0;
}

运行结果:
在这里插入图片描述


水仙花数

例题5:输出所有的"水仙花数",所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例如153是水仙花数,因为153 = 1 3 + 5 3 + 3 3 1^3 + 5 ^ 3 + 3^3 13+53+33
代码分析:

int Narcissistic_number(int n)
{int sum = 0;int y = n;while (n != 0)//求出该数的 每一位数的3次方{int x = n % 10;//求出每一位数sum += x * x * x;n = n / 10;}if (sum == y)//判断是否等于它本身{return y;}elsereturn 0;
}
int main()
{int i = 0;int sum = 0;for (i = 100; i < 1000; i++){		if (Narcissistic_number(i)){printf("%d ", Narcissistic_number(i));}}return 0;
}

运行结果:
在这里插入图片描述


求"1000之内的完数"

例题6:一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,而6 = 1 + 2 + 3,因此6就是完数。编写程序找出1000以内的完数。
代码分析:

int if_factor(int n)
{int sum = 0;int i = 1;while (i < n){if (n % i == 0)//找出能被它整数的项,即找出因数{sum += i;}i++;}if (sum == n)//判断是否是完数{return sum;}elsereturn 0;
}
void factor(int n)//打印因数
{int i = 1;while (i < n){if (n % i == 0){printf("%d ", i);}i++;}
}
int main()
{int i = 0;for (i = 2; i < 10000; i++){if (if_factor(i)){printf("%d ", if_factor(i));//判断是否是完数printf("因数是:");factor(i);//打印出因数printf("\n");}}return 0;
}

运行结果:
在这里插入图片描述


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🫵🫵🫵 祝各位接下来好运连连 💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中&#xff0c;中断是一种重要的机制&#xff0c;用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器&#xff0c;可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…

解决高分屏DPI缩放PC端百度网盘界面模糊的问题

第一步 更新最新版本 首先&#xff0c;在百度网盘官网下载最新安装包&#xff1a; https://pan.baidu.com/download 进行覆盖安装 第二步 修改兼容性设置 右键百度网盘图标&#xff0c;点击属性&#xff0c;在兼容性选项卡中点击更改所有用户的设置 弹出的选项卡中选择更改高…

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 &#xff08;1&#xff09;修改Makfile.sdk &#xff08;2&#xff09;设置环境变量 &#xff08;3&#xff09;编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1&#xff09;三数取中选key值2&#xff09;小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下&#xff1a; React&#xff1a; V18.2.0Node.js: V16.14.0TypeScript&#xff1a;最新版工具&#xff1a; VsCode 本文将采用图文详解的方式&#xff0c;手把手带你快速完成在React项目中配置husky、prettier、commitLint&#xff0c;实现编码规范的统…

JMeter工具的介绍,安装

一、本文学习目标 1、能知道JMeter的优缺点 2、能掌握JMeter的安装流程 3、能掌握JMeter线程组的设置 4、能掌握JMeter参数化的使用 5、能掌握JMeter直连数据库操作 6、能掌握JMeter的断言. 二、JMeter简介 &#xff08;1&#xff09;Jmeter详细介绍 **JMeter&#xff08;A…

小谈设计模式(18)—适配器模式

小谈设计模式&#xff08;18&#xff09;—适配器模式 专栏介绍专栏地址专栏介绍 适配器模式角色分析目标接口&#xff08;Target&#xff09;源接口&#xff08;Adaptee&#xff09;适配器&#xff08;Adapter&#xff09; 核心思想应用场景Java程序实现输出结果程序分析123 优…

动图gif怎么做?分享一招超简单方法

常见的图片格式有jpg、png以及gif格式&#xff0c;其中gif格式的图片因为其画面内容丰富生动所以深受大家的喜爱。那么&#xff0c;如何将jpg、png格式的图片转换成gif格式动图呢&#xff1f;通过使用GIF中文网的gif制作&#xff08;https://www.gif.cn/&#xff09;功能&#…

Python无废话-办公自动化Excel修改数据

如何修改Excel 符合条件的数据&#xff1f;用Python 几行代码搞定。 需求&#xff1a;将销售明细表的产品名称为PG手机、HW手机、HW电脑的零售价格分别修改为4500、5500、7500&#xff0c;并保存Excel文件。如下图 Python 修改Excel 数据&#xff0c;常见步骤&#xff1a; 1&…

跨境电商测评内幕及自养号技术教学

现在测评行业的水越来越深了。几年前的测评行业都是邮箱联系老外&#xff0c;大多是一些产品的爱好者&#xff0c;评价也很真实公正。而现在&#xff0c;大量人加入&#xff0c;还有一些中介的参与&#xff0c;及骗子中介、黑心测评买家都纷纷的涌入了市场。 我们公司专业做底…

【C语言】转圈报数问题(三种方法--指针,数组)

题目&#xff1a;有n个人围成一圈&#xff0c;顺序排号。从第一个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来第几号的那位。 方法一&#xff1a; #include <stdio.h> #define N 10int main() {int …

力扣 -- 1027. 最长等差数列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int longestArithSeqLength(vector<int>& nums) {int nnums.size();int ret2;unordered_map<int,int> hash;//这里可以先把nums[0]存进哈希表中&#xff0c;方便后面i从1开始遍历hash[num…