10.30C语言学习记录

本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式 :
输入在一行中按照格式“yyyy / mm / dd”(即“年 / 月 / 日”)给出日期。
注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式 :
在一行输出日期是该年中的第几天。
输入样例1 :
2009 / 03 / 02
输出样例1 :
    61
运行有点问题,没办法打印
#include<stdio.h>
int main() {
    int year = 0, month = 0, day = 0;
    int d_30 = 0, d_31 = 0, d_28 = 0;
    int flag = 0, num = 0;
    scanf("%d/%d/%d\n", &year, &month, &day);
    switch (month) {
    case 1:d_28 = 0, d_30 = 0, d_31 = 1;break;
    case 2:d_28 = 1, d_30 = 0, d_31 = 1;break;
    case 3:d_28 = 1, d_30 = 0, d_31 = 2;break;
    case 4:d_28 = 1, d_30 = 1, d_31 = 2;break;
    case 5:d_28 = 1, d_30 = 1, d_31 = 3;break;
    case 6:d_28 = 1, d_30 = 2, d_31 = 3;break;
    case 7:d_28 = 1, d_30 = 2, d_31 = 4;break;
    case 8:d_28 = 1, d_30 = 2, d_31 = 5;break;
    case 9:d_28 = 1, d_30 = 3, d_31 = 5;break;
    case 10:d_28 = 1, d_30 = 3, d_31 = 6;break;
    case 11:d_28 = 1, d_30 = 4, d_31 = 6;break;
    case 12:d_28 = 1, d_30 = 4, d_31 = 7;break;
    default:break;
    }
    num = 28 * d_28 + 30 * d_30 + 31 * d_31;

    //判断是否是闰年

    if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
        flag = 1;
    }

    //输出是第几天
    if (flag == 1) {
        num += 1;
        printf("%d", num);
    }
    else {
        printf("%d", num);
    }
    return 0;
}
基本正确但并不是全对
#include<stdio.h>
int  main() 
{
    int year = 0, month = 0, day = 0, m = 0;
    int pre = 0;
    scanf("%d/%d/%d\n", &year, &month, &day);
    switch (month) {
    case 1:pre = 0;break;
    case 2:pre = 31;break;
    case 3:pre = 59;break;
    case 4:pre = 90;break;
    case 5:pre = 120;break;
    case 6:pre = 151;break;
    case 7:pre = 181;break;
    case 8:pre = 212;break;
    case 9:pre = 243;break;
    case 10:pre = 273;break;
    case 11:pre = 304;break;
    case 12:pre = 334;break;
    default:break;
    }
    day += pre;
    if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
        day = day + 1;
        printf("%d", day);
    }

//此处有误,要注意是闰二月以后才+1,以前不加;
    else {
        printf("%d", day);
    }
    return 0;
}
改了但还是不能全对
#include<stdio.h>
int  main()
{
    int year = 0, month = 0, day = 0, m = 0;
    int pre = 0;
    int flag = 0;
    scanf("%d/%d/%d\n", &year, &month, &day);
    switch (month) {
    case 1:pre = 0;break;
    case 2:pre = 31;break;
    case 3:pre = 59;break;
    case 4:pre = 90;break;
    case 5:pre = 120;break;
    case 6:pre = 151;break;
    case 7:pre = 181;break;
    case 8:pre = 212;break;
    case 9:pre = 243;break;
    case 10:pre = 273;break;
    case 11:pre = 304;break;
    case 12:pre = 334;break;
    default:break;
    }
    day += pre;

//等等好像这里也有错
    if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
        flag = 1;
    }
    if (flag == 1 && month >= 2) {
        day = day + 1;
    }
    printf("%d", day);
    return 0;
}
网上的
#include <stdio.h>
int main()
{
    int year, month, day;
    int sum = 0, flag = 0;
    scanf("%d/%d/%d", &year, &month, &day);
    switch (month)
    {
    case 1: sum = 0; break;
    case 2: sum = 31; break;
    case 3: sum = 59; break;
    case 4: sum = 90; break;
    case 5: sum = 120; break;
    case 6: sum = 151; break;
    case 7: sum = 181; break;
    case 8: sum = 212; break;
    case 9: sum = 243; break;
    case 10: sum = 273; break;
    case 11: sum = 304; break;
    default: sum = 334; break;
    }
    sum += day;
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        flag = 1;
    if (flag == 1 && month > 2)
        sum++;
    printf("%d", sum);
    return 0;
}
再改一遍,加油马上就要全对了
#include<stdio.h>
int  main()
{
    int year = 0, month = 0, day = 0, m = 0;
    int pre = 0;
    int flag = 0;
    scanf("%d/%d/%d\n", &year, &month, &day);
    switch (month) {
    case 1:pre = 0;break;
    case 2:pre = 31;break;
    case 3:pre = 59;break;
    case 4:pre = 90;break;
    case 5:pre = 120;break;
    case 6:pre = 151;break;
    case 7:pre = 181;break;
    case 8:pre = 212;break;
    case 9:pre = 243;break;
    case 10:pre = 273;break;
    case 11:pre = 304;break;
    case 12:pre = 334;break;
    default:break;
    }
    day += pre;

//应该是这里还有问题
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) && month > 2) {
        day = day + 1;
    }
    
    printf("%d", day);
    return 0;
}
全对(乐
#include<stdio.h>
int  main()
{
    int year = 0, month = 0, day = 0, m = 0;
    int pre = 0;
    int flag = 0;
    scanf("%d/%d/%d\n", &year, &month, &day);
    switch (month) {
    case 1:pre = 0;break;
    case 2:pre = 31;break;
    case 3:pre = 59;break;
    case 4:pre = 90;break;
    case 5:pre = 120;break;
    case 6:pre = 151;break;
    case 7:pre = 181;break;
    case 8:pre = 212;break;
    case 9:pre = 243;break;
    case 10:pre = 273;break;
    case 11:pre = 304;break;
    case 12:pre = 334;break;
    default:break;
    }
    day += pre;
    //果不其然,判断年和月要分开,用()
    if (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && month > 2) {
        day = day + 1;
    }

    printf("%d", day);
    return 0;
}


给定 N 个正整数,要求你从中得到下列三种计算结果:
A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K + 1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K + 2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5
我的想法:按照格式输入,最后输出
答案:输出时先判断,再一个一个输出
 //服了每次都是无法输出光标一直闪烁

#include<stdio.h>
int main() {
    int a1 = 0, a2 = 0, a3 = 0, n = 0, num = 0, i = 0;
    int flag1 = 0, flag2 = 0, flag3 = 0;
    int max = 0,sum=0,count=0;
    double average = 0;
    scanf("%d", &n);
    for (i = 1;i <= n;i++) {
        scanf("%d ", &num);
        while (num > 0 && num <= 100) {
            sum += num;
            判断a1
            if (num % 3 == 1) {
                a2++;
            }
            if (num % 3 == 2) {
                count++;
                a3 = 1.0 * sum / count;
            }
        }
    }
    输出太繁琐,可以单个判断,单个输出
    if (flag1 == 0) {
        if (flag2 == 0) {
            if (flag3 == 0) {
                printf("NONE NONE NONE");
            }
            else {
                printf("NONE NONE %d",a3);
            }
        }
        else {
            if (flag3 == 0) {
                printf("NONE %d NONE",a2);
            }
            else {
                printf("NONE %d %d", a2,a3);
            }
        }
    }
    else {
        if (flag2 == 0) {
            if (flag3 == 0) {
                printf("%d NONE NONE",a1);
            }
            else {
                printf("%d NONE %d",a1, a3);
            }
        }
        else {
            if (flag3 == 0) {
                printf("%d %d NONE",a1, a2);
            }
            else {
                printf("%d %d %d",a1, a2, a3);
            }
        }
    }
    return 0;
}
怒改,但是有问题
#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0, a3 = 0, n = 0,  i = 0;
       int max = 0, sum = 0, count = 0;
       char num,ch;
       scanf("%d", &n);
        //除去输入n之后的\n
        ch = getchar();
        num = getchar();
        while (num!='\n') {
            //判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
            max = num;
            for (i = 1;i <= n;i++) {
                num = getchar();
                if (num > max) {
                    max = num;
                }
            }
            printf("%d ", a1);
            //判断a2
            if (num % 3 == 1) {
                a2++;
            }
            //判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;

//这里有问题,a2应该改成double类型
                a3 = 1.0 * sum / count;
            }
        }
    //单个判断,单个输出
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%d", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}
再次怒改,还是有问题
#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0,  n = 0,  i = 0;
       int max = 0, sum = 0, count = 0;
       double a3 = 0;
       char num,ch1,ch2;
       scanf("%d", &n);
        //除去输入n之后的\n
        ch1 = getchar();
        num = getchar();
        while (num!='\n') {
            //判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
 //找a1有问题,a1应该是用for循环,只要一直输入,一直遍历就可以了,不需要在for里面套for
 因为输入的过程已经是遍历了,直接比较就可以

            max = num;
            for (i = 1;i <= n;i++) {
                num = getchar();
                if (num > max) {
                    max = num;
                }
            }
            printf("%d ", a1);
            //判断a2
            if (num % 3 == 1) {
                a2++;
            }
            //判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;
                a3 = 1.0 * sum / count;
            }
        }
        ch2 = getchar();
    //单个判断,单个输出
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%d", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}
网上的学习一下
#include<stdio.h>
int main()
{
    int n, a2 = 0, a3 = 0, i, x, max = 0, sum = 0;
    scanf("%d", &n);
    for (i = 0;i < n;i++) {
        scanf("%d", &x);
        if (x % 3 == 0 && x > max)    //得到A1数
            max = x;
        if ((x - 1) % 3 == 0)        //成立的个数==A2
            a2++;
        if ((x - 2) % 3 == 0)        //成立的整数和/成立的个数==A3
        {
            a3++;    sum += x;
        }
    }
    if (max == 0)    printf("NONE ");    //按照题目说的a1,a2,a3中某个值不在就输出HONE
    else        printf("%d ", max);
    if (a2 == 0)    printf("NONE ");
    else        printf("%d ", a2);
    if (sum == 0)    printf("NONE");
    else        printf("%.1f", sum * 1.0 / a3);
    return 0;
}
再次怒改,还是不对(泪
#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0,  n = 0,  i = 0;
       int  sum = 0, count = 0;
       double a3 = 0;
       char num,ch;
       scanf("%d", &n);
        除去输入n之后的\n
        ch = getchar();
        num = getchar();
        while (num!='\n') {
            判断a1---遍历输入的每个数,找到最大值并输出
            num = getchar();
            a1 = num;
            if (num % 3 == 0 && num > a1) {
                a1 = num;
            }
            printf("%d ", a1);
            判断a2
            if (num % 3 == 1) {
                a2++;
            }
            判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;
                a3 = 1.0 * sum / count;
            }
        }
    单个判断,单个输出
        if (a1 != 0) {
            printf("%d", a1);
        }
        else {
            printf("NONE");
        }
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%d", a3);//这里输出类型有错误
    }
    else {
        printf("NONE");
    }
    return 0;
}
堂堂正确(喜
#include<stdio.h>
int main() {
    int a1 = 0, a2 = 0, n = 0, i = 0,num=0;
    int  sum = 0, count = 0;
    double a3 = 0;
    scanf("%d", &n);
    for (i = 1;i <= n;i++) {
        scanf("%d", &num);
        //因为a1已经初始化过了,所以不用再假设a1=num
        if (num % 3 == 0 && num > a1) {
            a1 = num;
        }
        if (num % 3 == 1) {
            a2++;
        }
        if (num % 3 == 2) {
            count++;
            sum += num;
            a3 = 1.0 * sum / count;
        }
    }
    //单个判断,单个输出
    if (a1 != 0) {
        printf("%d ", a1);
    }
    else {
        printf("NONE ");
    }
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%.1lf", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值