c语言---002

c语言---002,第1张

题目 一:计算某天时一年的第几天 题目描述

编写一个计算天数的程序,用户从键盘输入年月日,在控制台输出该日期是该年的第几天。

分析

(1)判断闰年
(2)计算天数,可以选择使用switch语句,也可以用两个数组来存储闰年和平年每个月的天数
(3)12月份的满天数不用考虑

代码

使用switch语句

#include 
#include 

int isleapyear(int year)//判断是否是闰年
{
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
        return 1;
    }
    return 0;
}

int main()
{
    int year,month,day;
    scanf("%d/%d/%d",&year,&month,&day);
    int flag=isleapyear(year);
    int sum=day;
    switch(month-1)//计算之前月份天数
    {
    case 11:
        sum+=30;
    case 10:
        sum+=31;
    case 9:
        sum+=30;
    case 8:
        sum+=31;
    case 7:
        sum+=31;
    case 6:
        sum+=30;
    case 5:
        sum+=31;
    case 4:
        sum+=30;
    case 3:
        sum+=31;
    case 2:
        if(flag)
        {
            sum+=29;
        }
        else
        {
            sum+=28;
        }
    case 1:
        sum+=31;
    default:
        break;
    }
    printf("%d\n",sum);
    printf("Hello world!\n");
    return 0;
}

不使用switch语句

#include

int isleapyear(int year)
{
    if((year%4==0&&year%100!=0)||year%400==0)
    {
        return 1;
    }
    return 0;
}
int main()
{
    int num1[12]={0,31,29,31,30,31,30,31,31,30,31,30};//闰年
    int num2[12]={0,31,28,31,30,31,30,31,31,30,31,30};//平年
    int year,month,day;
    scanf("%d/%d/%d",&year,&month,&day);
    int sum=day;
    if(isleapyear(year))
    {
        for(int i=1;i<month;i++)
        {
            sum+=num1[i];
        }
    }
    else
    {
        for(int i=1;i<month;i++)
        {
            sum+=num2[i];
        }
    }
    printf("%d",sum);
}
二:百元买百鸡 题目描述

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

分析:

(1)枚举鸡翁,鸡母,鸡雏的数量
(2)注意到鸡翁不会超过(100 / 5 = )20个,鸡母不会超过(100 / 3 =)33个,这样可以减少枚举数量

代码
//百钱买百鸡


#include

int main()
{
    for(int i=0;i<20;i++)
    {
        for(int j=0;j<33;j++)
        {
            if((100-i-j)%3==0&&(i*5+j*3+(100-i-j)/3==100))
            {
                    printf("%d %d %d\n",i,j,100-i-j);
            }
        }
    }
}
三:打鱼晒网问题 题目描述

题外话:小时后最喜欢晚上的河南卫视的打鱼晒网节目了,可以看到很多稀奇古怪好玩的,当然节目后的都市报道也是我爱看的,不过现在很少看电视了,当然,这是一个真正的打鱼晒网问题
一个渔夫从2011年1月1日开始,三天打鱼,两天晒网,日日年年,编程实现从键盘输入此后的年月日,计算该天渔夫是在打鱼还是在筛网

分析

(1)和计算一年的某一天是该年的第几天类似,除了要计算日期是该年的第几天之外,还要计算是否是否经过了整年。
(2)像判断闰年,计算天数,都可用第一题的代码。
(3)计算从2011年1月1日起经历了多少天,然后模5,注意,结果是0和4时是在晒网,否则打渔

代码
#include

int isleapyear(int year)
{
    if((year%4==0&&year%100!=0)||year%400==0)
    {
        return 1;
    }
    return 0;
}

int main()
{
    int num1[12]={0,31,29,31,30,31,30,31,31,30,31,30};//闰年
    int num2[12]={0,31,28,31,30,31,30,31,31,30,31,30};//平年
    int year,month,day;
    scanf("%d/%d/%d",&year,&month,&day);
    int sum=day;
    if(isleapyear(year)){
        for(int i=1;i<month;i++){
            sum+=num1[i];
        }
    }
    else{
        for(int i=1;i<month;i++){
            sum+=num2[i];
        }
    }
    for(int i=year-1;i>2011;i++)
    {
        if(isleapyear(i)){
                sum+=366;
        }
        else{
            sum+=365;
        }
    }
    if(sum%5==0||sum%5==4)
    {
        printf("晒网");
    }
    else
    {
        printf("打渔");
    }
}
四:1000以内的素数 题目描述

求出一千以内的所有素数

分析

(1)求素数比较简单,这里直接写一个判断素数的函数,然后循环判断输出

代码
#include
#include

int isPrime(int n)
{
    for(int i=2; i<=sqrt(n); i++)
    {
        if(n%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    int count=0;
    for(int i=2; i<=1000; i++)
    {
        if(isPrime(i))
        {
            printf("%5d",i);
            count++;
            if(count%5==0)
                printf("\n");
        }
    }
    return 0;
}
五:输出指定大小的正方形 题目描述

编写程序,用户输入一个数a,表示正方形的边长,打印输出一个边长为a的正方形

分析

(1)方法有很多,可以按坐标轴来,双重for循环

代码
#include
int main()
{
    int a;
    scanf("%d",&a);
    for(int i=0;i<=a;i++)//y轴
    {
        for(int j=0;j<=a;j++)//x轴
        {
            if(i==0||j==0||i==a||j==a)
            {
                printf("#");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}
总结

明天开始更新十大排序

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1330187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存