分支与循环刷题

1、

 答案:C

解析:

(1)程序本来是想循环10次,当i==5时打印。

        但是在C语言中,‘=’是赋值,‘==’才是相等。(建议当要比较一个变量和一个常量是否相等,将变量放在‘==’的右边)

(2)在循环体中要尤其注意循环变量的修改。

补充:建议不要再for循环体中修改循环变量,防止for循环失去控制。

2、

答案:C

解析:

(1)if语句后面只能控制一条语句,但不是只能跟一条语句----->也能跟多条语句,注:跟多条语句时 需要用{}括起来

(2)if语句中0表示假,非0表示真。

(3)if语句是一种分支语句,可以实现单分支,也可实现多分支

补充:多分支选择语句:有switch语句和if多分支语句

         但如果分支较多,则if语句的层数多,程序冗长而且可读性降低。

         所以多分支语句,我们常常用switch语句。

(4)else的配匹:else总是与它前面最近的一个尚未匹配的if相匹配。

    3、

答案 :D

解析:

由func(1)可知,在调用函数func时形参a的值是1。

1、switch语句(也可叫开关语句)

(1)switch后的表达式必须为整形表达式(和枚举类型)

char类型虽然叫:字符类型

但是字符的存储是ASCII码值,是整形,所以char也是整形家族的!!!

(2)功能:先算出表达式的值,然后依次与case标签的值进行匹配,匹配成功(相等)就选择这个标签作为入口,执行该case字句后面的语句块,如果语句块没有加break,就会继续执行当前case之后的所有case子句直到程序结束。

注:break在switch语句中的作用:实现真正的分支

(3)当 switch 表达式的值并不匹配所有 case 标签的值时,这个时候结构的所有语句都被跳过,程序并不会终止,也不会报错。但是,如果你不想忽略不匹配所有标签的表达式的值,你可以在语句列表中加一条default子句。

default子句的作用:

当 switch 表达式的值并不匹配所有 case 标签的值时,则执行default子句后面的语句。所以,每个 switch 语句中只能出现一条 default 子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。

(4)编程好习惯
①在每个 switch 语句中都放一条 default 子句是个好习惯,甚至可以在后边再加一个 break 。
②虽然default子句可以凡在任意地方,但建议放在最后(习惯上我们前面处理正确的,后面处理异常的)

(5)switch语句中的关键字:break,case,default,(注:continue只在循环出现)

4、

倍数:一个数能被另一个整数整除(%==0),那么这个整数就是另一整数的倍数。

//代码1

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
		{
			printf("%d ", i);
		}
	}
	return 0;
}
//代码2

#include<stdio.h>
int main()
{
	int i = 0;
	//3的倍数:3,6,9,12....我们发现每次都加3
	for (i = 3; i <= 100; i+=3)
	{
		printf("%d ", i);
	}
	return 0;
}
//代码3

#include<stdio.h>
int main()
{
	int i = 0;
	//3的倍数:3=3*1,6=3*2,9=3*3.....
	for (i = 1; 3 * i <= 100; i++)
	{
		printf("%d ", 3 * i);
	}
	return 0;
}

代码有好坏,代码2、3比代码1的效率更好

5、


#include<stdio.h>
int main()
{
	//1、先定义三个整形变量
	int a = 0;
	int b = 0;
	int c = 0;
	//2、输入
	scanf("%d %d %d",&a,&b,&c);
	//3、调整
	//最大值放a,最小值放c,其余放b
	if (a < b)
	{
		int t = a;
		a = b;
		b = t;
	}//互换
	if (a < c)
	{
		int t = a;
		a = c;
		c = t;
	}
	if (b < c)
	{
		int t = b;
		b = c;
		c = t;
	}
	//输出
	printf("%d %d %d\n", a, b, c);
	return 0;
}

两个数互换:注:要一个中间变量,不能直接互换

就如生活中酱油和醋互换

 6、

质数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

//写一个代码:打印100~200之间的素数
//素数-只能被1和它本身整除的数
//n是否素数 不能被2-n-1整除

//代码1

#include<stdio.h>
int main()
{
	int i = 0;
	//先打印100-200的数
	for (i = 100; i <= 200; i++)
	{
		//判断i是否为素数
		//拿2-(i-1)之间的数试除
		int flag = 1;//假如是素数
		int j = 0;
		for (j = 2; j <= (i - 1); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (1 == flag)
		{
			printf("%d ", i);
		}
	}
	return 0;
}
//代码2

#include<math.h>//math.h是sqrt库函数的头文件
#include<stdio.h>
int main()
{
	int i = 0;
	//先输出100-200的数,质数不可能是偶数
	for (i = 101; i <= 200; i += 2)
	{
		//判断是否是素数
		//i=a*b,a和b至少一个<=开平方i的
		//拿2-开平方i之间的数试除
		int j = 0;
		int flag = 1;//假如是素数
		for (j = 2; j <= sqrt(i); j++)//sqrt是开平方的库函数
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (1 == flag)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

代码2比代码1效率更好

注:偶数不可能是质数,(奇数=奇数+2)

sqrt是开平方的库函数

它的头文件:“math.h”

判断质数:试除法

n是否是质数:n是否能整除2到n-1

优化:m=a*b,a和b至少一个数字是<=开平方m的

n是否能整除2到开平方n

//代码3

#include<stdio.h>
int main()
{
	int i = 0;
	//外层循环用来获取100-200的数,100必不是素数
	for (i = 101; i <= 200; i += 2)
	{
		//判断是否为素数
		//第二大因数<=i/2
		int j = 0;
		int flag = 1;//假如是素数
		for (j = 2; j <= i / 2; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;//注:一个break只能跳出一层循环
			}
		}
		//内层循环结束之后,若flag==1,说明[2,i/2]之间的数都不能被i整除,说明i为素数
		if (1==flag)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

这只是提供了一些方法,也不是最优的

更优的:有兴趣可以去搜《素数求解的N种境界》

 7、

闰年的条件:

1、如果N能够被4整除,并且不能被100整除,则是闰年
2、或者:N能被400整除,也是闰年
即:4年一润并且百年不润,每400年再润一次

//代码1

#include<stdio.h>
int main()
{
	int year = 0;
	//获取1000-2000的数
	for (year = 1000; year <= 2000; year++)
	{
		//判断是否为闰年
		//1、4年一润并且百年不润
		if (year % 4 == 0)
		{
			if (year % 100 != 0)
			{
				printf("%d ", year);
			}
		}
		//2、每400年再润一次
		if (year % 400 == 0)
		{
			printf("%d ", year);
		}
	}
	return 0;
}
//代码2

#include<stdio.h>
int main()
{
	int year;
	//获取1000-2000闰年的数,
	for (year = 1000; year <= 2000; year++)
	{
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		{
			printf("%d ", year);
		}
	}
	return 0;
}

8、

最大公约数:最大能整除它两的数
最大公约数<=这两个数的较小值

//代码1

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	//输入
	scanf("%d %d", &n, &m);//18 24
	//假设最大公约数就是m和n的较小值
	int k = (n < m ? n : m);
	while (1)
	{
		if (n % k == 0 && m % k == 0)
		{
			break;
		}
		k--;
	}
	printf("%d ", k);
	return 0;
}
//代码2

//辗转相除法求最大公约数

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	//输入
	scanf("%d %d", &n, &m);//18 24
	int k = 0;//
	while (k = n % m)
	{
		n = m;
		m = k;
	}
	printf("%d ", m);
	return 0;
}

辗转相除法(体现结果是以相除余数为0则得到)

算法步骤:

1、输入两个正整数n,m

2、计算n除以m的余数k

3、n=m,m=k

4、若k=0,则m和n的最大公约数等于m;否则转到第2步

5.输出最大公约数m

 最小公倍数:

n和m的最小公倍数=n*m/最大公约数

//最小公倍数

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d %d", &n, &m);//18 24
	//求最大公约数
	int c = n * m;
	int k = 0;//n%m=k
	while (k = n % m)
	{
		n = m;
		m = k;
	}
	//最小公倍数=c/m
	printf("%d\n", c / m);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值