2015年江苏大学885代码题(含答案)

一、前言

提示:以下是博主自己写的代码,仅供参考,欢迎有兴趣的朋友们留言讨论呀

二、正文

1.第一题

在这里插入图片描述

#include<stdio.h>

// 求斐波那契数列第n项
int fab(int n);

int main()
{
	int i, s = 0;
	FILE* fp;
	// 打开或创建文件
	if (!(fp = fopen("fab.txt", "a+")))
	{
		printf("cannot open the file!\n");
		return 0;
	}
	for (i = 1; i <= 20; i++)
	{
		s += fab(i);
		fprintf(fp, "%d ", fab(i));
	}
	printf("前20项和为:%d\n", s);
	// 关闭文件
	if (fclose(fp))
	{
		printf("cannot close file!\n");
	}
	return 0;
}

int fab(int n)
{
	if (n == 1|| n==2)
	{
		return 1;
	}
	if (n > 2)
	{
		return fab(n - 1) + fab(n - 2);
	}
}

运行结果示例:
在这里插入图片描述
在这里插入图片描述
手写版:

2. 第二题

在这里插入图片描述

#include <stdio.h>

// 判断一个整数的平方(四位数)是否前两位相等且后两位相等
int X(int n);

int main()
{
	int i;
	// 4位数,最小是1000(大于32的平方,即1024),最多是9999(小于100的平方,即10000)
	for (i = 32; i < 100; i++)
	{
		if (X(i * i))
		{
			printf("%d",i*i);
		}
	}
	return 0;
}

int X(int n)
{
	int aa[4], i;
	for ( i = 0; i < 4; i++)
	{
		aa[i] = n % 10;
		n /= 10;
	}
	if ((aa[0]==aa[1])&&(aa[2]==aa[3]))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

运行结果示例:
在这里插入图片描述
手写版:

3.第三题

在这里插入图片描述

#include<stdio.h>
struct
{
	int y, m, d;
}D;
int c_d();//检查日期合法性
int c_y();//判断是否是闰年
void add(int days);//增加days后的日期

int main()
{
	int days;
	while (1)
	{
		printf("请输入起始年、月、日及天数:(输入后按回车)\n");
		scanf_s("%d%d%d%d", &D.y, &D.m, &D.d, &days);//VS2017
		if (c_d())
		{
			break;
		}
		printf("日期不合法,请重新输入\n");

	}
	add(days);
	if (c_d())
	{
		printf("\nenddate=%d年%d月%d日\n", D.y, D.m, D.d);
	}
	else
	{
		printf("\nerror!\n");//增加days后的日期超出范围!
	}
	main();
	return 0;
}

int c_d() {
	if (D.y <= 0 || D.y >= 10000)//年份:1~9999
	{
		return 0;
	}
	if (D.m <= 0 || D.m >= 13)//月份:1~12
	{
		return 0;
	}
	if (D.m == 2 && c_y())//闰年2月:29天
	{
		if (D.d <= 0 || D.d >= 30)
		{
			return 0;
		}
	}
	if (D.m == 2 && !c_y())//一般2月:28天
	{
		if (D.d <= 0 || D.d >= 29)
		{
			return 0;
		}
	}
	switch (D.m) {//如果一个case语句后面没有加break,则当前条件满足时,后面的case语句不需要进行判断就可以继续执行。所以每次判断后最好都加上break
	case 1:case 3:case 5:case 7:case 8:case 10:case 12://1、3、5、7、8、10、12月:31天
		if (D.d <= 0 || D.d >= 32)
		{
			return 0;
		}break;
	case 4:case 6:case 9:case 11://4、6、9、11月:30天
		if (D.d <= 0 || D.d >= 31)
		{
			return 0;
		}break;
	}
	return 1;
}
int c_y() {
	if ((D.y % 4 == 0 && D.y % 100 != 0) || D.y % 400 == 0)//判断闰年
	{
		return 1;
	}
	return 0;
}
void add(int days) {
	int a[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	for (int i = 0; i < days; i++)
	{
		if (c_y())
		{
			a[2] = 29;
		}
		else
		{
			a[2] = 28;
		}
		D.d = D.d%a[D.m] + 1;
		if (D.d == 1)//月份加1
		{
			D.m = D.m % 12 + 1;
			if (D.m == 1)//年份加1
			{
				D.y++;
			}
		}
	}
}

运行结果示例:
在这里插入图片描述
手写版:

→返回总目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值