作业反思

  1. switch(c)中c可以存放整型,包括int,long,short,char(存放的ASCII码),但是不可以存放小数例如float,double
  2. define不是关键字
  3. 自己写的笨代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

// 从大到小输出三个值
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int max = 0;
	int mid =0;
	int mini=0;
	printf("输入三个数:");
	scanf("%d%d%d",&a,&b,&c);
	if(a >= b && a>= c)
	{
		max = a;
		if(b >= c)
		{
			mid = b;
			mini = c;
		}
		else
		{
			mid = c;
			mini = b;
		}
	}else if( b>=a && b>=c)
	{
		max = b;
		if(a >= c)
		{
			mid = a;
			mini = c;
		}
		else
		{
			mid = c;
			mini = a;
		}
	}else
	{
		max = c;
		if(b >= a)
		{
			mid = b;
			mini = a;
		}
		else
		{
			mid = a;
			mini = b;
		}
	}
	printf("您输入的三个数从大到小依次为%d %d %d\n",max,mid,mini);
	return 0;
}

变量设置太多,判断的方式是比较直接但是繁琐的每种可能性都考虑。跟着老师稍微优化了一下,if分支减少了而且不用定义那么多变量。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int a =0;
	int b =0;
	int c =0;
	int temp =0;
	printf("请输入三个数:");
	scanf("%d%d%d",&a,&b,&c);
	//思路是将最大值存入a,最小值存入c
	if(a<b)
	{
		temp = b;
		b = a;
		a = temp;
	}
	if(a<c)
	{
		temp =c;
		c =a;
		a =temp;
	}
	if(b<c)
	{
		temp =c;
		c =b;
		b =temp; 
	}
	printf("从大到小为%d %d %d\n",a,b,c);
	return 0;
}

4.给定两个数,求这两个数的最大公约数,最大公约数怎么求呢

自己写的,思路是将两数较小者从他本身逐个减1减到1为止,判断这过程中有哪些整数与这两个数取余结果为0,由于我们从最大开始,那么第一个满足条件的就是最大公约数。是我第一时间想到的,比较暴力直接的方法感觉

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//求两个数的最大公约数
int main()
{
	int a =0;
	int b =0;
	int temp = 0;
	int i =0;
	printf("请输入两个整数:");
	scanf("%d%d",&a,&b);
	if(a<b)
	{
		temp = a;
		a =b;
		b =temp;
	}
	for(i=b;i>=1;i-- )
	{
		if((b%i)==0 && (a%i)==0)
		{
			printf("最大公约数为%d\n",i);
			break;
		}	
	}
	return 0;
}

跟着老师学习一下辗转相除法:较大值除较小值取余,若余数为0,那么较小值即为最大公约数;若余数不为0,将较小值除余数取余,若第二个余数为0,则第一个余数即为公约数;若第二个余数仍然不为0,则将第一个余数除第二个余数取余。。。如此循环往复的判断,直到取余为0时,那么最后一次取余运算的除数即为所求的最大公约数。

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int m =70;
	int n =56;
	int i = 0;
	//i用于存放每次运算的余数,作为中转变量
	//m用于存放被除数,n存放除数
	while(m%n)
  //注意当m<n时,第一次循环mn交换次序,仍然不影响我们后续正常实现功能
  //因此不需要保住m一定大于
	{
		i = m%n;
		m = n;
		n = i;
	}
	printf("最大公约数为%d\n",n);
}

5.打印1000-2000之间的闰年:首先甚麽的年份称为闰年;

①、普通年能被4整除且不能被100整除的为闰年。否则为平年。(如2004年就是闰年,1900年不是闰年)

②、世纪年能被400整除的是闰年。否则为平年。(如2000年是闰年,1900年不是闰年)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//判断year是否为闰年
	//1.能被4整除并且不能被100整除的是闰年
	//2.能被400整除的是闰年
	int year = 0;
	for(year = 1000;year <= 2000;year++)
	{
		if((year%4)==0 && (year%100)!=0 )
		{
			printf("%d ",year);
		}else if((year%400)==0)
		{
			printf("%d ",year);
		}
	}
	printf("\n");
	return 0;
}

运行结果:

8.2C语言学习日志_最大公约数