C语言题解

 求某一年的某一月有多少天输入一个字符串

首先先输入两个数字,一个年份一个月份

只要判断好 闰年就可以输出正确的月份对应的天数了

先用一行判断是否是闰年 ,是就输出真(1)不是就输出假(0)

这一段里我直接判断了闰年二月份和非闰年二月份的输出,这样什么年份剩下月份的输出就一样了

scanf("%d %d",&a,&b);
    int is_double=(0 == a%400 || 0 ==a%4 && 0 != a%100);
    if(b == 2 &&  a ==is_double){
        printf("double year 29 day for 2 month");
        return 0;
    }
    if(b == 2 &&  a != is_double){
        printf("double year 28 day for 2 month");
        return 0;
    }

接下来不同的月份输出不同的天数用switch判断

    switch (b){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 11:
        printf("simply year 31 day for %d month",b);
        break;
        default:
        printf("simply year 30 day for %d month",b);
        break;
    }

最后展示一下完整代码

#include<stdio.h>

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    int is_double=(0 == a%400 || 0 ==a%4 && 0 != a%100);
    if(b == 2 &&  a ==is_double){
        printf("double year 29 day for 2 month");
        return 0;
    }
    if(b == 2 &&  a != is_double){
        printf("double year 28 day for 2 month");
        return 0;
    }
    switch (b){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 11:
        printf("simply year 31 day for %d month",b);
        break;
        default:
        printf("simply year 30 day for %d month",b);
        break;
    }
    return 0;
}

当然有一个小问题就是月份的输入可以输入错误的值

统计英文字母、空格、数字和其它字符的个数

可以用scanf函数  不过这样可能判断不了空格有几个

所以用这个fgets函数

#include <stdio.h>

int main() {
    char str[100];
    printf("请输入一行文字:");
    fgets(str, sizeof(str), stdin);
    printf("您输入的文字是:%s\n", str);
    return 0;
}

其中,stdin表示标准输入流。fgets函数会将最大读取的字符数减1,以确保在用户输入的字符串末尾加上一个空字符\0,以便让使用该字符串的任何代码知道它已经结束了。

取出数组里的每一个数进行判断  单个字符判断用的ASCII值的大小来进行判断。

ASCII表中,一共有128个字符(0到127),其中包括空格、标点符号、数字、大小写字母、控制字符等。这些字符在计算机内部都有对应的ASCII码。例如,大写字母A对应的ASCII码值为65,小写字母a对应的ASCII码值为97。数字0~9对应的ASCII码分别是48~57;

想看ascii就不具体展开了。有点多这个表

strlen函数要包含string的头文件

for(b=0;b<strlen(a);b++){
        if(a[b] >= '0' && '9' >= a[b]){
            c++;
            continue;
        }
        else if(a[b] >= 'A' && 'z' >= a[b]){
            d++;
            continue;
        }   
        else if(a[b] ==' '){
            e++;
            continue;
        }
        else{}

c d e 分别是对应字符的计数器,要改成for以外的变量要不然就没用 (for以内的局部变量就不能再退出之后输出正确的值了)  这里用了continue 确保每一次都可以跳到下一循环 不过用处不大

有四种类型要判断  最后一种就直接用总长度减去这三个就可以得到了。

    } 
    printf("num  %d\n",c);
    printf("let  %d\n",d);
    printf("blank%d\n",e);
    printf("other%d\n",strlen(a)-e-c-d);
    return 0 ;
}
#include<stdio.h>
#include<string.h>

int main(){
    char a[50];
    int b=0,c=0,d=0,e=0;
    printf("sentences(max<49):");
    

    fgets(a,50,stdin);
    for(b=0;b<strlen(a);b++){
        if(a[b] >= '0' && '9' >= a[b]){
            c++;
            continue;
        }
        else if(a[b] >= 'A' && 'z' >= a[b]){
            d++;
            continue;
        }   
        else if(a[b] ==' '){
            e++;
            continue;
        }
        else{}
    } 
    printf("num  %d\n",c);
    printf("let  %d\n",d);
    printf("blank%d\n",e);
    printf("other%d\n",strlen(a)-e-c-d);
    return 0 ;
}

计算用1分钱、2分钱、5分钱组成1元钱的方式     

这个确实比较难想 ,不过看了题解又觉得很简单这里就直接发答案了     

   

#include <stdio.h>

int main() {
    int a=1 ,b=2,c=5,sum =100,answer=0;
    int a1=0, b1=0,c1=0;
    for ( c1 = 0; c1 <= 20; c1++){
        for ( b1 = 0; b1 <= 50; b1++){
            for ( a1 = 0; a1 <= 100; a1++){
                if (a1*a+b1*b+c1*c ==sum){
                    answer++;
                } 
            } 
        } 
    }
    printf("%d",answer);
    return 0;
}

这里也可以吧所有的答案形式输出出来,这里值输出了次数,当然这题可以用别的解法(下次一定)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值