c语言基础1

给定一个年月日,判断这个日期是否有效,如果有效,请计算出下一天

#include <stdio.h>
#include <stdbool.h>
bool isValidDate(int yea
r,int mon,int day){
    //假设无效的   只需要找出有效的
    int leap = year%4==0 && year%100!=0 || year%400==0; //闰年  leap为1 平年0
    int littel = mon == 4 || mon == 6 || mon == 9 || mon==11;//小月为1 大月为0
    if(mon>0 && mon<=12){
        if(mon == 2){
            if(day>0 && day<=28+leap){//若为闰年则+1
                return true;
            }
        }else{
            if(day>0 && day<=31-littel){
                return true;
            }
        }
    }
    return false;
}

struct Date{
    int year;
    int mon;
    int day;
};


struct Date nextDay(struct Date d){
    //假设有效的日期
    struct Date nd = {d.year,d.mon,d.day+1};
    if(d.day == 31){
        if(d.mon == 12){
            nd.year = d.year+1;
            nd.mon = 1;
        }else{
            nd.mon = d.mon + 1;
        }
        nd.day = 1;
    }else if(d.day == 30){
        if(d.mon == 4 || d.mon == 6 || d.mon == 9 || d.mon == 11){
            nd.mon = d.mon + 1;
            nd.day = 1;
        }
    }else if(d.day == 29){
        if(d.mon == 2){
            nd.mon = 3;
            nd.day = 1;
        }
    }else if(d.day == 28){
        if(d.mon == 2 && !(d.year%4==0&&d.year%100!=0||d.year%400==0)){
            nd.mon = 3;
            nd.day = 1;
        }
    }
    return nd;
}


int main(int argc,char *argv[]){

    return 0;
}

写函数,求一组整数的最大连续子串和

#include <stdio.h>


int maxSubSum(int arr[],size_t n){
    int sum = arr[0];    //记录最大子串和
    int currSum = 0;     //当前累加和
    int i;
    for(i=0;i<n;++i){
        currSum += arr[i];
        if(currSum > sum){
            sum = currSum;
        }

        if(currSum < 0){ 若当前累加和为负数,则抛弃不要,重新计算。
            currSum = 0;
        }

    }
    return sum;
}

int main(){

    return 0;
}

写函数,逆序输出字符串

void nixu(char *arr)
{
    size_t len;
    for(len=0;str[len];++len);
    int i;
    for(i=0;i<len/2;++i)
    {
        char tmp=str[i];
        str[i]=str[len-1-i];
        str[len-1-i]=tmp;
    }
}

写函数,把字符串往左移n

void reverse(char *arr,size_t len) //先逆序字符串
{
    int i;
    for(i=0;i<len/2;++i)
    {
        char tmp=str[i];
        str[i]=str[len-1-i];
        str[len-1-i]=tmp;
    }
}

void momvRight(char *str,size_t n) //再根据左移位数,分别逆序
{
    size_t len=strlen(str);
    n=n%len;//避免位移数大于字符串长度
    if(n>0)
    {
        reverse(str,len);
        reverse(str,len-n);
        reverse(str+len-n,n);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值