【C语言】exercise2_打印素数、闰年、最大公约数、最小公倍数、3的倍数

一、单选题

1、当i=0进入for循环,if语句给赋值=5,被打印,i+1=6小于10,再进入循环……此后 i 始终以i+1=6结束,因此死循环打印5
请添加图片描述
2、
A if后面可以用大括号{ }实现跟多条语句
B 不是1表示真,而是非零!=表示真
C 正确
请添加图片描述

3、switch语句不需要顺序
请添加图片描述

4、结果=0,误以为是30,但是这个switch语句中没有break,因此会从case1往下一直进行,直到default:b=0,跳出语句,返回值b=0

请添加图片描述

5、必须是整型
请添加图片描述
6、打印结果:“hello"“third”
误以为只打印“hello”,但是case1的default结束后,case1后没有break,会继续执行case2,直接打印"third"

请添加图片描述

二、编程题

打印1-100中3的倍数

//方法一 判断能否被3整除;

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//打印1-100中3的倍数

//方法一 判断能否被3整除;
int main()
{
	int i = 0;
	
	for (i = 1; i <= 100; i++)
	{
		if (0 == i % 3)
		{
			printf("%d ",i);
		}
	}
	
	return 0;

//方法二 直接加等3,成为3的倍数;

//方法二 直接加等3,成为3的倍数;
int main()
{
	int i = 0;

	for (i = 3; i <= 100; i+=3)
	{
	   printf("%d ", i);
	}

	return 0;
}

求两个数的最大公约数

最小公倍数=两数之积 / 最大公因数
//方法一 最大公约数 不会大于 两个整数中的较小值,因此采用逐次-1来尝试找到

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//求两个数的最大公约数
//方法一 最大公约数 不会大于 两个整数中的较小值,因此采用逐次-1来尝试找到
int main()
{
	int i = 0;
	int j = 0;
	int k = 0;  //令最大公约数=k

	scanf("%d%d",&i,&j);

	//先找两数中的较小值,即最大公约数k的最大值
	int max = i < j ? i: j; //三目操作符 ?:;


	for (k = max; 0 == j % k && 0 == k < i % k; k--)
	{
		printf("最大公约数:%d",k);
	}

	return 0;
}

//方法二 辗转相除法——运行结果不对

int main()
{
	int i = 0;
	int j = 0;
	scanf("%d%d", &i, &j);

	int k = 0;  //令最大公约数=k

	int min = i < j ? i : j; //三目操作符 ?:;
	int max = i < j ? j : i;

	while (min)
	{
		k = max % j;
		max =min;
		min = k;
	}

	printf("最大公约数:%d", k);
	return 0;
}

输出1000-2000之间的闰年

//闰年;能被4整除,但不能被100整除;或者被400整除
//用操作符 &&并且 ||或者

int main()
{
	int y = 0;
	for (y=1000;y<= 2000; y++)
	{
		if (0 == y % 4 && 0 != y % 100 || 0 == y % 400)
		{
		printf("%d ", y);
		}
	}

	return 0;
}



打印100-200之间的素数

// 素数 prime num—质数—只能被1和自身整除的数
// 用2->i之间的数去整除i,如果能被整除说明不是素数
//打印100-200之间的素数

int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		int j = 0;
		for (j = 2; j < i; j++)
		{
			if (0 == i % j)
			{
				break;//跳出这个for循环
			}
		}

		if (i == j) //说明只能被本身整除
		{
			printf("%d ",i);
		}
	}
	return 0;
}

//可以方法优化,引入sqrt( )函数—开平方函数 ,头文件<math.h>
//如果是非素数,可以写成两因数之积,因数其中一个必然小于等于 非素数开平方,因此从1开始试

//还可以源头优化,直接去掉偶数,因为偶数不可能是素数;

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

#include <math.h>
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i+=2)
	{
		int j = 0;
		int flag = 1;  //给一个标记flag,假设i就是素数,flag为真
		for (j = 2; j <= sqrt(i); j++) //对i开平方
		{
			if (0 == i % j)
			{
				int flag = 0; //说明i试素数不成立,跳出循环
				break;//跳出这个for循环
			}
		}

		if (flag = 1) //说明i为素数成立
		{
			printf("%d ", i);
		}
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值