C语言经典编程282例02

012 任意次方的最后三位

求一个整数任意次方后的三位数 ,即求x^y的最后3位数,

//官方
#include<stdio.h>

main()
{
   int x, y, z = 1, i;
   
   printf("请输入两个数,x和y(x^y):\n");
   
   scanf(" %d%d \n" , &x, &y);
   
   for(i = 1; i <= y; i++)
   {
   	   z =z * x % 1000;         //每次乘完都取其后三位。
   }
	
	if(z >= 100)
	{
		printf("  %d%d的最后3位是:%d  \n",  x, y, z );
	}
	else
	{
		printf("  %d%d的最后3位是:0%d  \n",  x, y, z );
	}

   
 } 
//ME
#include<stdio.h>

main()
{
   int x, y, num = 1, i, ref;  //x,y键盘输入,num总和,ref最后3位数。
   
   scanf(" %d  %d \n" , &x, &y);
   
   for(i = 0; i < y; i++)       //计算总和
   {
   	   num *=x;
   }
  
   //此部分为了完成总和的最后3位。
    ref = num %10 ;
    num = num /10;
    
    ref = (num % 10) * 10 + ref;
    num = num / 10;
   
    ref = (num % 10) * 100 + ref;
	
	printf("  %d  \n",  ref );
   
 } 

013 计算某日是该年的第几天

编写一个计算天数的程序,用户从键盘中输入年,月,日,在屏幕中输入此日期是该年的第几天?

//————————————————————官方——————————————————
好处:把功能模块化:
#include<stdio.h>

//判断闰年
int leap(int a)
{
	if ((a % 4 == 0) && (a % 100 != 0) ||
		(a % 400 == 0))
	{
		return 1;
	}
	else 
	{
		return 0;
	}
}

//计算天数
int number(int year, int m, int d)
{
//存放平年每月天数
	int num = 0, i, j, k, a[12] = 
	{
		31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
	};
	
	//存放闰年每月天数
	int b[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	if(leap(year) == 1)
	{
		for(i = 0; i < (m - 1); i++)
     	{
   	    	num += b[i] ;
   		}
	}
	else
	{
		for(i = 0; i < (m - 1); i++)
     	{
   	    	num += a[i] ;
   		}
	}
	
	num += d;
	return num;
	
}

  main()
{
   int year, mon, day, n;
   
   printf("请输入年月日\n");
   scanf(" %d%d%d \n" , &year, &mon, &day);

   n += number(year, mon, day);
	
	printf(" 第%d天  \n",  n );

 } 

//--------Me-----------
#include<stdio.h>

static int day_of_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  // 每个月的天数

main()
{
   int year, mon, day, total, i;
  
   scanf(" %d%d%d \n" , &year, &mon, &day);

//判断是否闰年
    if ((year % 4 == 0) && (year % 100 != 0) ||
		(year % 400 == 0))
	{
		day_of_month[1] = 29;
	}
	else 
	{
		day_of_month[1] = 28;
	}
   
   //计算除当月以外的天数
   for(i = 0; i < (mon - 1); i++)
   {
   	    total += day_of_month[i] ;
   }
   
   //添加当月天数
   total += day;
   	
	
	printf(" %d  \n",  total );


   
 } 
  • 核心:闰年:能被4整除但不能被100整除,或能被400整除
  • 月份为m时,累加存储着每月天数的数组的前(m -1)个元素,将累加结果输入day 。

014 婚礼上的谎言

3对情侣参加婚礼,3个新郎A,B,C 3个新娘X,Y,Z。
不知谁和谁结婚:询问:A说将和X,X却说她的未婚夫是C,C说他将和Z结婚,发现他们都在开玩笑。全部都是假话,那么谁和谁结婚?

通过枚举法,将所有可能列举出来,使用if语句进行条件判断,
在这里插入图片描述

//——————————————  官方————————————————————
#include<stdio.h>


  main()
{
   int a, b, c;
   
   for(a = 1; a <= 3; a++)
   {
   	  for(b = 1; b <= 3; b++)
   	  {
   	  	 for(c = 1; c <= 3; c++)
   	  	 {
   	  	 	if(a !=1 && c != 1 && c != 3 && a != b  && a != c && c != b)
   	  	 	{
   	  	 	     printf(" a 将和 %c 结婚 \n",  'X'+ a - 1);
   	  	 	     printf(" b 将和 %c 结婚 \n",  'X'+ b - 1);
   	  	 	     printf(" c 将和 %c  结婚\n",  'X'+ c - 1);
		    }
		 }
	  }
	   
   }
   
 } 

//—————— ME  ————————
#include<stdio.h>


  main()
{
   int a, b, c;
   
   for(a = 0; a < 3; a++)
   {
   	  for(b = 0; b < 3; b++)
   	  {
   	  	 for(c = 0; c < 3; c++)
   	  	 {
   	  	 //判断条件
   	  	 	if(a !=0 && c != 0 && c != 2 && a != b  && a != c && c != b)
   	  	 	{
   	  	 	     printf(" a he %c  \n",  'X'+ a );
   	  	 	     printf(" b he %c  \n",  'X'+ b );
   	  	 	     printf(" c he %c  \n",  'X'+ c );
		    }
		 }
	  }
	   
   }
   
 } 

015 百元买百鸡

百钱买百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问雏,母,翁各几何?

//官方: 
#include<stdio.h>


  main()
{
   int cock, hen, chick;
   
   for(cock = 0; cock <= 20; cock++)
   {
   	  for(hen = 0; hen <= 33; hen++)
   	  {
   	  	 for(chick = 3; chick <= 99  ; chick ++)
   	  	 {
   	  	 	if((cock * 5 + hen * 3 + chick / 3 )  == 100 && (cock + hen + chick == 100) && chick % 3 ==0)
   	  	 	{
   	  	 	     printf(" 翁鸡:%d  母鸡:%d  小鸡%d \n",  cock, hen, chick);
		    }
		 }
	  }
	   
   }
   
 } 
//———————————————— ME ————————————————————————————
#include<stdio.h>


  main()
{
   int a, b, c;
   
   for(a = 0; a < (100 / 5); a++)
   {
   	  for(b = 0; b < (100 / 3); b++)
   	  {
   	  	 for(c = 0; c < (100 / 1)  ; c ++)   //把三只鸡当成一个整体
   	  	 {
   	  	 	if((a * 5 + b * 3 + c / 3 )  == 100 && (a + b + c == 100) && c % 3 ==0)
   	  	 	{
   	  	 	     printf(" 翁:%d  母:%d  小%d \n",  a, b, c);
		    }
		 }
	  }
	   
   }
   
 } 

判断条件:

  • 所买鸡钱数总和100.
  • 3种鸡数量总和100
  • 所买小鸡数目必须为3的整数倍。

016 打渔晒网问题

一个渔夫从2011年1月1日开始每3天打一次🐟,2天晒一次网,输入2011年1月1日以后任意一天,输出该渔夫是打🐟还是晒网

//官方:

#include<stdio.h>

//判断闰年
int leap(int a)
{
	if ((a % 4 == 0) && (a % 100 != 0) ||
		(a % 400 == 0))
	{
		return 1;
	}
	else 
	{
		return 0;
	}
}

//计算天数
int number(int year, int m, int d)
{
//存放平年每月天数
	int sum = 0, i, j, k, a[12] = 
	{
		31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
	};
	
	//存放闰年每月天数
	int b[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	if(leap(year) == 1)
	{
		for(i = 0; i < (m - 1); i++)
     	{
   	    	sum += b[i] ;
   		}
	}
	else
	{
		for(i = 0; i < (m - 1); i++)
     	{
   	    	sum += a[i] ;
   		}
	}
	
	//以2011开始算,不可忽略,me的忽略了这个,会造成错误。
	for(j = 2011;j < year; j++)
	{
		if(leap(j) == 1)
		{
			sum +=366;
		}
		else
		{
			sum += 365;
		}
	
	}

    sum += d;
	
	return sum;
	
}

  main()
{
   int year, mon, day, n;
   
   printf("请输入年月日\n");
   scanf(" %d%d%d \n" , &year, &mon, &day);

   n += number(year, mon, day);
   
   if(((n % 5 ) < 4) && ((n % 5) > 0))
   {
   	 	printf(" 捕鱼\n");
   }
   else
   {
   		printf(" 晒网\n");
   }
	


 } 

/ME
#include<stdio.h>

static int day_of_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  // 每个月的天数

main()
{
   int year, mon, day, total, i;
  
   scanf(" %d%d%d \n" , &year, &mon, &day);

//判断是否闰年
    if ((year % 4 == 0) && (year % 100 != 0) ||
		(year % 400 == 0))
	{
		day_of_month[1] = 29;
	}
	else 
	{
		day_of_month[1] = 28;
	}
   
   //计算除当月以外的天数
   for(i = 0; i < (mon - 1); i++)
   {
   	    total += day_of_month[i] ;
   }
   
   //添加当月天数
   total += day;
   	
   	//当余数为1或2 或3时说明在打渔,否则在晒网。
   	if(((day % 5) < 4) && ((day % 5) >0))
   	{
   		printf("捕鱼 \n" );

	}
	else
	{
		printf("晒网 \n" );
	}
   
 } 

注意点:

  • 判断输入的年份(2011以后包括2011)是否闰年,
  • 输入日期距离2011年1月1日多少天,2011年后是平年(365)还是闰年(366),还要加上选择的日月。

017 判断三角形类型

根据输入的三角形的三边判断三角形的类型,并输出其的面积和类型。

三角形面积公式:
在这里插入图片描述
在这里插入图片描述

//官方
#include<stdio.h>
#include<math.h>

  main()
{
   float a, b, c,  n;
   float s, area;
   
   
   scanf(" %f%f%f \n" , &a, &b, &c);

   
   if(a + b >c && b + c > a && c + a > b )//直接在此处判断是否满足三角形条件。
   {
   	
   	  s = (a + b + c) / 2;
   	 area=(float) sqrt(s * (s - a) * (s - b) * (s - c));
   	  
   	  printf(" S = %.06f \n", area);
   	  
	  if(a == b == c) 
   	  {
   	  	 printf(" 等边三角形\n");
	  }
	  else  if(a == b || a == c || b == c ) 
   	  {
   	  	 printf(" 等腰三角形\n");
	  }
	  else if ( pow(a, 2) + pow(b, 2) == pow(c, 2) || pow(b, 2) + pow(c, 2) == pow(a, 2) || pow(a, 2) + pow(c, 2) == pow(b, 2) ) 
   	  {
   	  	 printf(" 直角三角形\n");
	  }
	  else 
	  {
	  	 printf(" 普通三角形\n");
	  }
   }
   else
   {
   	 printf(" 不能构成为三角形\n");
   }
   	
	


 } 
///   me: 
#include<stdio.h>
#include<math.h>

int judge(int a, int b, int c)//判断是否为三角形
{
	if(a + b <= c || a +c  <= b || b +c  <= c)
	{
		return 0;
	}
	{
		return 1;
	}
}

  main()
{
   int a, b, c,  n;
   float S;
   
   
   scanf(" %d%d%d \n" , &a, &b, &c);

   n = judge(a, b, c);
   
   if(n == 0)
   {
   	 	printf(" 不能构成为三角形\n");//无法成为三角形
   }
   else
   {
   	//计算面积公司
   	  S = (a + b + c) / 2;
   	  S =(float) sqrt(S * (S - a) * (S - b) * (S - c));
   	  
   	  printf(" S = %.06f \n", S);
   	  
   	  //判断什么三角形
	  if(a == b == c) 
   	  {
   	  	 printf(" 等边三角形\n");
	  }
	  else  if(a == b || a == c || b == c ) 
   	  {
   	  	 printf(" 等腰三角形\n");
	  }
	  else if ( pow(a, 2) + pow(b, 2) == pow(c, 2) || pow(b, 2) + pow(c, 2) == pow(a, 2) || pow(a, 2) + pow(c, 2) == pow(b, 2) ) 
   	  {
   	  	 printf(" 直角三角形\n");
	  }
	  else 
	  {
	  	 printf(" 普通三角形\n");
	  }
   }
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值