当前位置: 首页 > news >正文

【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.lryc.cn/news/182546.html

相关文章:

  • UGUI交互组件Toggle
  • 亲,您的假期余额已经严重不足了......
  • 【软件测试】自动化测试selenium(一)
  • Nginx实现动静分离
  • 【算法题】309. 买卖股票的最佳时机含冷冻期
  • 1951-2011年长序列高时空分辨率月尺度温度和降水数据集
  • 十天学完基础数据结构-第六天(树(Tree))
  • RobotFramework流程控制(最新版本)
  • win11 好用的 快捷方式 --chatGPT
  • 在大数据相关技术中,HBase是个分布的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。
  • 910数据结构(2020年真题)
  • MyBatisPlus(八)范围查询
  • 【day10.04】QT实现TCP服务器客户端搭建的代码
  • milvus 结合Thowee 文本转向量 ,新建表,存储,搜索,删除
  • GEO生信数据挖掘(三)芯片探针ID与基因名映射处理
  • 力扣 -- 96. 不同的二叉搜索树
  • 经典算法-枚举法(百钱买百鸡问题)
  • Gurobi设置初始可行解
  • Zabbix配置监控文件系统可用空间小于30GB自动告警
  • 进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)
  • MyBatisPlus(九)模糊查询
  • Spring 原理
  • 基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)
  • try catch 中的finally什么时候运行
  • 力扣 -- 322. 零钱兑换(完全背包问题)
  • [python]pip安装requiements.txt跳过错误包继续安装
  • 1.5 计算机网络的类别
  • Go 基本数据类型和 string 类型介绍
  • Python中print()打印如何不换行?
  • python 学习随笔 4