一、前言
提示:以下是博主自己写的代码,仅供参考,欢迎有兴趣的朋友们留言讨论呀
二、正文
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++;
}
}
}
}
运行结果示例:
手写版: