c语言---002

题目

一:计算某天时一年的第几天

题目描述

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

分析

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

代码

使用switch语句

#include <stdio.h>
#include <stdlib.h>

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<stdio.h>

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<stdio.h>

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<stdio.h>

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<stdio.h>
#include<math.h>

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<stdio.h>
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");
    }
}

总结

明天开始更新冒泡排序排序,选择排序,插入排序,希尔排序,计数排序,基数排序

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惜日短

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值