C语言分支循环题(求9的个数、分数求和、打印素数、九九乘法表、求最大值)

本文展示了五个C语言编程问题的解决方案,包括统计1~100间数字9的个数、计算分数序列的和、找出100~200间的素数、打印九九乘法表以及寻找10个整数中的最大值。这些示例涵盖了基本的循环、条件判断和数学运算,是学习算法和程序设计的良好实践。
摘要由CSDN通过智能技术生成

1.求1~100之间所有整数内出现多少个数字9

思路:
1.遍历循环1~99个数字
2.个位数字上的9用%10的余数计算,然后让计数器count统计
3.十位数字上的9用/10的商计算,然后让计算器count统计

#include<stdio.h>
#include<math.h>

int main()
{
	
	int num=0;
	int count=0;
	for (num = 1; num <= 99; num++)
	{
		if (num % 10 == 9)
			count++;
		if (num / 10 == 9)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

2.分数求和

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
1.该题我们要使用双精度计算
2.设置flag赋值为1来控制正数和负数的变化

#include<stdio.h>
#include<math.h>

int main()
{
	int i = 0;
	int flag = 1;
	double sum = 0.0;//注意双精度使用,后面初始化的数字要加.0
	for (i = 1; i <= 100; i++)
	{
		//因为i和flag都是整型,我们要算出双精度,则需要在除数或被除数上乘上1.0
		sum += flag * 1.0 / i;
		flag = -flag;//控制flag让符号变成负号或正号
	}
	printf("%lf\n",sum);//注意占位符使用
	return 0;
}

3.打印100~200之间的素数

思路:
1.素数是只能被1和本身整除的数字。因为偶数中只有2是素数,所以素数是奇素数和偶素数2组成。
2.循环101~200的数字i
3.我们要找到有没有其他数字 j 整除 i ,所以要循环2~多少个数字呢?难道只能是i吗?不是,更优解是循环2 ~ sqrt(i) ,为什么呢?
(sqrt是开平方根,记得引用math.h头文件)

举例:假如我们想知道16是不是素数,就要举例数字看能不能整除,如果我们能找到 [2,sqrt[i]] 整除它,就不用再举例其他数字,优化代码。16=28 16=44,则找[2,sqrt[16]]之间的数字

如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。

#include<stdio.h>
#include<math.h>

int main()
{
	int i = 0;
	int j = 0;
	
	for (i = 101; i <= 200; i++)
	{
		int flag = 1;
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;//不是素数则flag被赋值0
				break;//跳出循环
			}
		}
		if (flag == 1)//flag仍然为1,则i是素数
		{
			printf("%d ", i);
		}
	}
	return 0;
}

4.打印九九乘法表

思路:
1.先循环打出行数,再循环打出每行表达式和表达式的内容
2.使用水平制表符让每个表达式对齐

#include<stdio.h>
#include<math.h>

int main()
{
	int i = 0;
	int j = 0;
	int num = 0;
	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= i; j++)
		{
			num = j * i;
			printf("%d*%d=%d\t", j, i, num);
		}
		printf("\n");
	}
}

5.求最大值

求10 个整数中最大值
思路:
1.循环输入10个整数
2.数组arr[10]有存10个整数的空间
3.设第一个数字为最大值max,循环比较大小,若循环比较到有更大的值,则将值又赋给max,若没有则再循环直到跳出

#include<stdio.h>
#include<math.h>

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int max = 0;
	for (i = 0; i <10; i++)
	{
		scanf("%d", &arr[i]);//注意数组要有取地址符&
	}
	max = arr[0];
	for (i = 1; i < 10; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	printf("max = %d\n", max);
	return 0;
}

若有不足地方,望各位指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值