【沈阳航空航天大学】 <循环结构课题>

沈阳航空航天大学 <循环结构课题>

目录

  • 判断闰年
  • 完数判断程序
  • 计算两个日期所差的天数
  • 判断回文数据
  • 求最大公约数gcd和最小公倍数lcm
  • 求多项式 1+2+3+…+n 的前n项之和
  • 某序列求和
  • 求n位数中的后n-1位

1.判断闰年

【问题描述】写一程序,从键盘上输入年份year(大于400),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。

【输入形式】输入一个大于400的正整数,以回车结束。
【输出形式】输出判断结果。

【样例输入】2000
【样例输出】2000 is

【样例输入】2015
【样例输出】2015 not

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int year;
    scanf("%d", &year);
    if (year > 400)
    {
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        {
            printf("%d is", year);
        }
        else
        {
            printf("%d not", year);
        }
    }
    else
        printf("请输入大于400的年份");

    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

2.完数判断程序

【问题描述】一个数如果恰好等于它的真因子之和,这个数就称为"完数"。例如,6的真因子有1、2、3,而6=1+2+3,因此6是"完数"。从键盘输入一个正整数m,判断其是否是完数,并按下面格式输出判断结果:
1、m是完数:6=1+2+3
2、m不是完数,真因子之和小于m:4>1+2
2、m不是完数,真因子之和大于m:12<1+2+3+4+6

【输入形式】输入正整数m。
【输出形式】判断m是否为完数并输出可能的结果。

【样例输入】6
【样例输出】6=1+2+3

【样例输入】4
【样例输出】4>1+2

【样例输入】12
【样例输出】12<1+2+3+4+6

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int n, i, sum = 0;
    scanf("%d", &n);
    for (i = 1; i < n; i++)
    {
        if (n % i == 0)
            sum += i;
    }
    if (n == sum)
    {
        printf("%d=1", n);
        for (i = 2; i < n; i++)
        {
            if (n % i == 0)
                printf("+%d",i);
        }
    }
    else if (n > sum)
    {
        printf("%d>1", n);
        for (i = 2; i < n; i++)
        {
            if (n % i == 0)
                printf("+%d", i);
        }
    }
    else if(n<sum)
    {
        printf("%d<1", n);
        for (i = 2; i < n; i++)
        {
            if (n % i == 0)
                printf("+%d", i);
        }
    }
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

3.计算两个日期所差的天数

【问题描述】输入两个完整日期,包括年月日,编程实现求两者之间所差的天数。
【输入形式】
第1个日期的年份|第1个日期的月份|第1个日期的具体哪一天
第2个日期的年份|第2个日期的月份|第2个日期的具体哪一天

【输出形式】1个整数(两个日期的天数差)
【样例输入】
2000 1 1

2001 1 1
【样例输出】366
【样例说明】输入非法日期的情况不予考虑,比如2025年2月29日

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>  
int main() 
{
    int days(int year1, int month1, int day1, int year2, int month2, int day2);
    int past(int year, int month, int day);
    int year1,month1,day1;//起始日期的年月日
    int year2,month2,day2;//目标日期的年月日
    int t;
    scanf("%d%d%d", &year1, &month1, &day1);
    scanf("%d%d%d", &year2, &month2, &day2);
    days(year1, month1, day1, year2, month2, day2);
    return 0;
}

int past(int year, int month, int day)//用来计算没有过完的年已经过去的天数
{
    int sum = day, p;
    int month_1[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    //通过定义数组来储存各个月份有多少天
    if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
        month_1[1] += 1;
    //如果检测到闰年,2月对应的数组元素值+1
    for (p = 0; p + 1 < month; p++)
    {
        sum = sum + month_1[p];
    }
    return sum;
    //计算天数
}

int days(int year1, int month1, int day1, int year2,int month2,int day2)//负责计算天数
{
    int sum = 0;
    int m = 0, n = 0, a;
    if (year1 == year2)//当起始日期和终止日期同年
    {
        sum = past(year2, month2, day2) - past(year1, month1, day1);
    }
    if (year1 + 1 == year2)//当起始日期和终止日期相差1年
    {
        if (year1 % 400 == 0 || year1 % 4 == 0 && year1 % 100 != 0)
        {
            sum = 366 + past(year2, month2, day2) - past(year1, month1, day1);
        }
        else
        {
            sum = 365 + past(year2, month2, day2) - past(year1, month1, day1);
        }
    }
    if (year2 > year1 + 1)//相差1年以上
    {
        for (a = year1 + 1; a < year2; a++)
//计算除去起始日期和目标日期那两年,它们之间总共有多少个闰年,当检测到闰年时,计数器n就+1
        {
            if (a % 400 == 0 || a % 4 == 0 && a % 100 != 0)
            {
                n++;
            }
        }
        if (year1 % 400 == 0 || year1 % 4 == 0 && year1 % 100 != 0)//计算起始日期和目标日期总共隔了多少天
        {
            sum = (year2 - year1 - 1) * 365 + n + 366 + past(year2, month2, day2) - past(year1, month1, day1);
        }
        else
        {
            sum = (year2 - year1 - 1) * 365 + n + 365 + past(year2, month2, day2) - past(year1, month1, day1);
        }
    }
    printf("%d", sum);
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

4.判断回文数据

【问题描述】从从键盘任意输入一个正整数,编程判断该数是否是回文数。所谓回文数就是从左到右读这个数和从右到左读一样,如12321。

【输入形式】正整数,以回车结束。
【输出形式】是或不是回文数的判断结果。

【样例输入】12321
【样例输出】12321 is palindromic number

【样例输入】1231
【样例输出】1231 is not palindromic number

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a, b, sum = 0;
	scanf("%d", &a);
	b = a;
	while (b != 0) {
		sum = sum * 10 + b % 10;
		b = b / 10;
	}
	if (sum == a && a > 0)   //新数和原数相等并且原数不为负数的时候才为回文
	{
		printf("%d is palindromic number\n", a);
	}
	else
	{
		printf("%d is not palindromic number\n", a);
	}
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

5.求最大公约数gcd和最小公倍数lcm

【问题描述】输入两个正整数m和n,求其最大公约数gcd和最小公倍数lcm。

【输入形式】输入两个正整数m和n。
【输出形式】输出m和n的最大公约数和最小公倍数,空格分隔。

【样例输入】2 6
【样例输出】2 6

【样例输入】3 5
【样例输出】1 15

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int m, n, gcd, lcm;
    scanf("%d %d", &m, &n);
    lcm = m * n;
    gcd = m % n;
    while (gcd != 0)
    {
        m = n;
        n = gcd;
        gcd = m % n;
    }
    gcd = n;
    lcm /= gcd;
    printf("%d %d", gcd, lcm);
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

6.求多项式 1+2+3+…+n 的前n项之和

【问题描述】求多项式 1+2+3+…+n 的前n项之和。n值由键盘输入(n不大于100)。

【输入形式】1个整数
【输出形式】1个整数

【样例输入】3
【样例输出】6

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int i, n, sum = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        sum += i;
    printf("和是%d", sum);
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

7.某序列求和

【问题描述】从键盘输入正整数 n,编程实现序列 2/1,3/2,5/3,8/5,13/8,21/13 … 的前 n 项之和。

【输入形式】输入正整数 n。
【输出形式】输出求和结果,保留小数点后两位。

【样例输入】1
【样例输出】2.00

【样例输入】25
【样例输出】40.75

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n,i;
    double sum = 0,x = 2, y = 1, t;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        sum += x / y;
        t = x;          //把分子的值赋给t
        x = y + x;      //把x+y的值赋给分母x 
        y = t;          //把t的值赋给分子
    }
    printf("%.2lf", sum);
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

8.求n位数中的后n-1位

【问题描述】输入任意一个整数num,如果有n位,则输出其后n-1位整数;若是1位数,则输出0。

【输入形式】输入1个正整数,需用long类型表示。
【输出形式】输出其后n-1位整数

【样例输入】9
【样例输出】0

【样例输入】6734
【样例输出】734

【样例输入】1000
【样例输出】0

【样例输入】10101
【样例输出】101

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    long num, num_num, temp;//输入num,输出num_num
    int i = 1;
    scanf("%ld", &num);
    temp = num;
    if (num == 0 || num < 10)
        printf("\0");
    else {
        do {
            i *= 10;
            num /= 10;
        } while (num);
        i = i / 10;
        num_num = temp % i;
    }
    printf("%ld", num_num);
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

今天的内容就分享这么多

求三连!!!

求关注!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NineSense

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

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

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

打赏作者

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

抵扣说明:

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

余额充值