| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:自己练习的~C语言经典编程282例。每天坚持!加油!
只看楼主 加入收藏
CS197
Rank: 1
来 自:上海长宁
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-1-19
结帖率:0
收藏
 问题点数:0 回复次数:1 
自己练习的~C语言经典编程282例。每天坚持!加油!
//实例013 任意次方后的最后三位
/*#include<stdio.h>
void main()
{
    int x,y,a[3];
    printf("请输入两个数,x和y(x^y)\n");
    scanf("%d%d",&x,&y);
    a[2]=(x^y)%10;
    for(int i=1;i>=0;i--)
    {
        a[i]=a[i+1]%10;
    }
    for(i=0;i<3;i++)
    {
        printf("%d",a[i]);
    }

}*/
//第一次程序算法有误。何为正确算法?!
/*#include<stdio.h>
void main()
{
    int i,x,y,z=1;
    printf("请输入两个数,x和y(x^y)\n");
    scanf("%d%d",&x,&y);
    for(i=0;i<y;i++)
    {
        z=z*x%1000;//核心代码
    }
    if(z>=100)
    {
        printf("%d^%d的最后三位为%d\n",x,y,z);
    }
    else if(z>=10&&z<100)
    {
        printf("%d^%d为0%d\n",x,y,z);
    }
    else if(z<10)
    {
        printf("%d^%d为00%d\n",x,y,z);
    }
}*/
//体会:对于对1000求余,产生的结果即为:若小于1000则是本身,若大于1000,则将其商算出后仍余下三位数。这就是不越界而求出后三位的玄妙之处。


//实例014 输入年月日,计算某日是该年的第几天
/*#include<stdio.h>
int leap(int y);
int number(int y,int m,int d);
void main()
{
 unsigned int y,m,d;
 printf("请输入年-月-日:\n");
 scanf("%u-%u-%u",&y,&m,&d);
 printf("该日期为该年的第%d天",number(y,m,d));
}
int leap(int y)//判断年份是否为闰年
{
 if(y%4==0&&y%100!=0||y%400==0)
      return 1;
 else
      return 0;
}
int number(int y,int m,int d)//判断输入日期为该年第几天
{
    int sum=0;
    int 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(y)==0)
    {
        for(int i=0;i<m-1;i++)
        {
            sum+=a[i];
        }
    return    sum=sum+d;
    }
    if(leap(y)==1)   
    {
      for(int i=0;i<m-1;i++)
        {
            sum+=b[i];
        }
    return    sum=sum+d;
    }
}*/
//小结:利用函数进行功能的划分,主函数简洁明了。在计算天数时,利用两个数组结合for循环进行加和,进而求出天数。

//015 婚礼上的谎言
/*#include<stdio.h>
void main()
{
  int a,b,c;
  for(a=1;a<=3;a++)//a=1意为a与x结婚;a=2意为a与y结婚...
      for(b=1;b<=3;b++)
          for(c=1;c<=3;c++)
              if(a!=1&&c!=1&&c!=3&&a!=b&&a!=c&&b!=c)
              {
                  printf("z将嫁给A\n");//其实把经过推理直接算出的结果打印出即可。
                  printf("%c将嫁给B\n",'X'+b-1);//但是这样计算更高端一点。(不太理解??)
                  printf("%c将嫁给C\n",'X'+c-1);
              }
}*/
//小结:本题通过笔算和逻辑推理可以得出结果。但是不知道如何通过计算机进行算法设计。本题核心算法在于通过穷举法a=1意为a与x结婚;a=2意为a与y结婚...进行for循环的嵌套,
//遍历每一种可能性,在满足所有不能条件的基础上,注意同性不能结婚,此时,即可打印出自己的正确推测结果。

//016 百元买百鸡
/*#include<stdio.h>
void main()
{
    int x,y,z;//公鸡数,母鸡数,小鸡数
    for(x=0;x<=20;x++)//钱数最多买20只公鸡
    {
        for(y=0;y<=33;y++)//最多买33只母鸡
        {
            for(z=3;z<=99;z++)//最多买99只小鸡
            {
                if(5*x+3*y+z/3==100)
                {
                    if(x+y+z==100)
                    {
                        if(z%3==0)//小鸡要是3的倍数
                        {
                            printf("公鸡:%d 母鸡:%d 小鸡:%d\n",x,y,z);
                        
                        }
                    }
                }
            }
        }
    }
}*/
//小结:注意范围判断。第一次编写就是忽略了范围判断因此无法进行有效的运算!
//通过范围的限制和穷举一次次计算是否满足条件,满足即输出结果。考察for和if的嵌套使用。

//017 打渔晒网问题
/*#include<stdio.h>
int leap(int y);
int number(int y,int m, int d);
void main()
{
    int y,m,d,days,day;
    printf("请输入2011年1月1日之后的年-月-日:\n");
    scanf("%d-%d-%d",&y,&m,&d);
    days=number(y,m,d);
    day=days%5;
    if(day>=1&&day<=3)
    {
        printf("%d-%d-%d,打渔\n",y,m,d);
    }
    else printf("%d-%d-%d,晒网\n",y,m,d);
}
int leap(int y)//判断是平年还是闰年
{
    if(y%4==0&&y%100!=0||y%400==0)
         return 1;
    else return 0;
}
int number(int y,int m, int d)//判断该日子距2011年1月1日多少天
{
    int i,sum=0,k,n;
    int 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(y)==0)
    {
        for(i=0;i<m-1;i++)
        {
          sum+=a[i];
        }
        sum+=d;
    }
    if(leap(y)==1)
    {
        for(i=0;i<m-1;i++)
        {
          sum+=b[i];
        }
        sum+=d;
    }
    k=y-2011;
    if(k==0)
    {
        printf("该日子距2011年1月1日%d天\n",sum);
    }
    else//感觉这里之下的程序未执行。
    {
        for(n=0;n<k;n++)
        {
            if(leap(y)==0)
            {
                sum+=365;
            }
            else
            {
                sum+=366;
            }
        }
        printf("该日子距2011年1月1日%d天\n",sum);
    }
    return sum;//出现问题:在2011年内的可以正确运算,但在2011年之后的不可以计算出距2011年1月1日多少天!*/
 
    //解决问题:在第一个if之后就返回了sum的值,导致函数结束,而事实上函数还有另一个判断条件。因此,应先进行完if-else的判断,再决定返回值。
    //当未利用指针进行操作时,函数返回值只能有一个。
//}

//018 判断三角形的类型
#include<stdio.h>
#include<math.h>
void main()
{
    printf("Please input a,b,c:\n");
    float a,b,c;
    float l,s;
    scanf("%f,%f,%f",&a,&b,&c);
    if(a+b>c&&a+c>b&&b+c>a)//"任意"两边之和大于第三边才是满足可以构成三角形的条件。要满足任意需要使用&&
    {
    printf("此三边能够组成三角形\n");
    l=(float)(a+b+c)/2;
    s=(float)sqrt/*开方*/(l*(l-a)*(l-b)*(l-c));//学到了关于任意三角形求取面积的公式。
    printf("此三角形面积为%.2f\n",s);
    if(a==b&&a==c)//a==b而且a==c,不就意味着a==b==c么!
    {
        printf("此三角形为等边三角形\n");
    }
    if(a==b||b==c||a==c)//有三种可能性,只要有一种成立。就是等腰三角形。
    {
        printf("此三角形为等腰三角形\n");
    }
    if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))//三种情况中,只要有一种成立(勾股定理),就是直角三角形。
    {
        printf("此三角形为直角三角形\n");
    }
    }
}
//小结:本题中忽略了几个问题。任意两边之和大于第三边才是满足可以构成三角形的条件。在此总条件下才可进行其他详细的判断。注意&&与||的使用。编程逐渐熟练,小错误也少了。很棒!继续加油!
搜索更多相关主题的帖子: include C语言 经典 
2015-01-19 18:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
写博客比较好的

DO IT YOURSELF !
2015-01-20 10:53
快速回复:自己练习的~C语言经典编程282例。每天坚持!加油!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021138 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved