c语言刷题系列(二)

本系列仅作为我自己学习时的总结,各位看官点点赞吧!

目录

1.写代码将三个整数数按从大到小输出。

2.写一个代码打印1-100之间所有3的倍数的数字

3.给定两个数,求这两个数的最大公约数

4.打印1000年到2000年之间的闰年

5.写一个代码:打印100~200之间的素数

6.编写程序数一下 1到 100 的所有整数中出现多少个数字9

7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

8.求10 个整数中最大值

9.在屏幕上输出9*9乘法口诀表


1.写代码将三个整数数按从大到小输出。

思路:首先不用多说我们要有三个变量,比如a,b,c,我们最后的结果是从大到小输出,也就是a,b,c的值最后会依次递减,a是最大值,b次之,c最小。我们可以先假设a是最大值(我们的理想条件下a是大的一方但也要包含a是小的一方),于是我们的判断条件可以是if(a<b),当a<b时,将a,b的值对调,这里我们要用到一个tmp变量,来作为一个中间变量。接下来a要和c比,然后接下来以此类推。

#include<stdio.h>


int main()
{
	int a, b, c = 0;
	scanf("%d%d%d", &a, &b, &c);
	if (a < b) 
	{
		int tmp = 0;
		tmp = a;
		a = b;
		b = tmp;
	}
	if (a < c)
	{
		int tmp = 0;
		tmp = a;
		a = c;
		c = tmp;
	}
	if (b < c)
	{
		int tmp = 0;
		tmp = b;
		b = c;
		c = tmp;
	}
	printf("%d %d %d", a, b, c);
	return 0;
}

2.写一个代码打印1-100之间所有3的倍数的数字

思路:

首先我们知道1,2,不可能是3的倍数,那么我们从3开始,依次往后加3不就是3的倍数了吗? 

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

3.给定两个数,求这两个数的最大公约数

例如:

输入:18 24

输出:6

思路(一):

我们可以从上面看出18和24的最大公约数是6,所以我们得出两个数的最大公约数一定不会超过两个数当中较小的那一个,所以要先找到两个数中较小的那一个。于是拿上面两个数举例,我们可以从18开始减,一直减至m可以整除18和24即可。

int main()
{
	int a, b = 0;
	scanf("%d%d", &a, &b);
	int m = (a < b ? a: b);
	while (1)
	{
		if (a % m==0 && b % m==0) 
		{
			break;
		}
		m--;
	}
	printf("%d\n", m);
	return 0;
 }

思路(二)辗转相除法:

还是以18,24为例。a的值是24,b的值是18。a%b的结果是6,赋给m.然后先将18赋给a,再把6赋值给b,再进行a%b的运算,直到结果为0时,此时的b就是要求的最大公约数。

int main()
{
	int a, b = 0;
	scanf("%d%d", &a, &b);
	int m = 0;
	while (m=a%b)
	{
		a = b;
		b = m;
	}
	printf("%d\n", b);
	return 0;
}

4.打印1000年到2000年之间的闰年

思路:

首先我们要了解什么是闰年:1)能被4整除,并且不能被100整除的是闰年。2)能被400整除的是闰年。接下来就是代码实现,我在这里还加入了闰年的个数问题。

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

5.写一个代码:打印100~200之间的素数

还是我们要了解什么是素数。素数:只能被1和它本身整除的数,比如3,7等。

那么如何判断一个数是否为素数呢?

思路(一):

拿2~i-1去试除i,如果可以被整除,i就不是素数,反之,则是。我用了一个flag标记来假设i是素数。

int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//假设i是素数
		int j = 0;
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;//i不是素数
				break;
			}	
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

思路(二):

假设有三个未知数,a,b,m.m=a×b.那么a和b中至少有一个数字是小于等于√m,比如16=2×8,2是小于4的。如果在2~√m-1之间有一个能整除m的因子,那么在√m之后也会有一个因子能整除m.整除时要把√m也算上,这样我们就能够把整除范围缩小了。还有一点偶数不可能是素数,所以 i 可以每次增加2.

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

int main()
{
	int i = 0;
	int count = 0;

	for (i = 101; i <= 200; i+=2)
	{
		int flag = 1;//假设i是素数
		//判断i是否为素数
		int j = 0;
		for (j = 2; j<=sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;//i不是素数
				break;
			}
		}
		if (flag == 1)//说明i是素数
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

6.编写程序数一下 1到 100 的所有整数中出现多少个数字9

思路:

个位数 9 19 29 39 49 59 69 79 89 99
十位数 90 91 92 93 94 95 96 97 98 99

注意啊99是有两个9,所以这题的答案是20.

//9 19 29 39 49 59 69 79 89 99
//90 91 92 93 94 95 96 97 98 99
int main()
{
	int i = 0;
	int count = 0;
	for (i = 9; i <= 100; i++)
	{
		if (i % 10 == 9 || i / 10 == 9)
			count++;
	}
	count += 1;
	printf("%d ", count);
	return 0;
}

7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

 思路一:

首先可以想到我们要用到循环,可以先将1/1+1/2+1/3+1/4+1/5 …… + 1/99 +1/100给写出来

接着用一个flag系数去乘以i,这样就实现了正负交替的过程。

int main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for (i = 1; i <= 100; i++)
	{
		sum = sum + flag*(1.0/i);
		flag = -flag;
	}
	printf("%1f", sum);
	return 0;
}

思路二:

用pow函数,怎么用可以自己去查。

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

int main()
{
	int i = 0;
	float sum = 0.0;
	for (i = 1; i <= 100; i++)
	{
		
		sum += pow(-1, i - 1)*1.0/i;
	}
	printf("%f", sum);
	return 0;
}

8.求10 个整数中最大值

思路:

可以想到用数组来解决。这里就用1,2,3,4,5,6,7,8,9,10来举例。假设最大值max等于1,当数组中的元素比max的值大时,就将它的值赋给max,然后依次往后比较。

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int max = 0;
	for (i = 0; i < 10; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	printf("%d\n", max);
	return 0;
}

9.在屏幕上输出9*9乘法口诀表

在屏幕上输出9*9乘法口诀表
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//...
//9*1=9 9*2-18 ...

思路:

首先我们先用一个for循环控制行数,然后每一行的项数和行数是一样的。此时再用一个for循环来控制项数,最后如果想右对齐的话可以用%2d这样的写法。

int main()
{
	int i = 0;
	for (i = 1; i <= 9; i++)
	{
		//打印一行
		int j = 0;  //打印几项
		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%2d ", i, j, i * j);
		}
		printf("\n");
	}
	return 0;
}


版权声明:本文为m0_63562631原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。