C语言 编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 编程相关的知识,希望对你有一定的参考价值。
输入年份 再屏幕上输出该年的 年历 已知1900年第一天也是星期一。
呵呵,竟然用了40分钟,大多时间花费在了控制显示方面。思路是:计算输入年份的1.1日距离1900年1.1过去了多少天。
然后计算过去这个天数是星期几,然后依次控制显示出去。
显示的时候,显示一二三四五六日,知道1.1是周几,那么再过去1天,2天...都知道了。
跑下程序你会发现,没有问题~~
#include<stdio.h>
#include<time.h>
int main(int argc,char** argv)
int year = 0;
int leap_year_num = 0;//经历过多少个闰年
int leap =0;//输入年是否为闰年
long days = 0 ;//1900.1.1到输入年1月1日过去的天数
int curdays = 0;//当前月的天数
int i = 0;
int j = 0;
int k = 0;
int weak = 0;//每月的第一日是周几
printf("pls input year(xxxx):\n");
scanf("%d",&year);
if(((year%4==0) && (year%100 != 0))||(year%400 == 0))//判断闰年
leap =1 ;
for(i =year;i>1900-1; i--)//判读1900年至year有多少个瑞年
if(((i%4==0) && (i%100 != 0))||(i%400 == 0))
leap_year_num++;
days = 366*leap_year_num + 365*(year - 1900);
//printf("day:(%ld)\n",days);
printf("\t%d\n",year);
for(i =1;i<13;i++)
printf("\n\t%d Month\n",i);
printf("Mon Tue Wed Tur Fri Sat Sun\n");
if(i==2)
if(leap == 0)
curdays=28;
else
curdays=29;
else if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)|| (i==12))
curdays=31;
else
curdays=30;
if(i>1)//每过一个月,要把过去的日子+到总过去天数上。
days +=curdays;
weak = (days+1) % 7 ;//计算过去这么多天后是周几
if( weak == 1)//控制显示格式,如果是1则换行,如果是其他星期则对应位置输出空格
printf("\n");
else
for( j=1;j<weak;j++)
printf(" ");
for(k=1;k<=curdays;k++)
printf("%4d",k);
j++;
if(j==7)
j=0;
printf("\n");//每7天一个换行
printf("\n");//月之间的换行
以上,对你有帮助的话,请给分哦,谢谢!
另外,看到你另一个年月的程序的问题,也搞了~~ 参考技术A 给你一个思路吧
首先判断年份是否被4整除。如果是,1年用366天,2月用29天;如果不是1年用365天,2月用28天。
编译一个函数,传递进来的参数是月份,当月天数和当月第一天的星期数,传递出去的是当月最后一天的星期数,并且在函数体中直接打印当月的月份,所有天数和对应的星期数。你每个月调用这个函数即可(有输出了)类似i=daypri(1,31,1)。
这个程序不难,希望你能自己做,自己的,才是学到手的知识! 参考技术B #include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0
const int BASEYEAR = 1990;
const int DAYSOFONEYEAR = 365;
typedef unsigned short boolean;
const int MONTHS[12] = 31, 28, 31,
30, 31, 30,
31, 31, 30,
31, 30, 31;
/*判断是否是闰年*/
boolean isLeepYear(int year);
void prompt(int *year);
int crossLeepYears(int year);
int crossDays(int year, int month);
int startWith(int year, int month);
void printMonth(int year, int month);
void printMonths(int month);
void printBlack();
void printTitle(int month);
int main(int argc, char *argv[])
int year = 0;
prompt(&year);
printMonths(year);
return 0;
int crossLeepYears(int year)
int i = -1;
int count = 0;
for (i = BASEYEAR; i < year; ++i)
if (isLeepYear(i))
++count;
return count;
int crossDays(int year, int month)
int days = 0;
int i = 0;
days = (year - BASEYEAR)*DAYSOFONEYEAR + crossLeepYears(year);
if (month > 2 && isLeepYear(year))
++days;
for (i = 0; i < month-1; ++i)
days += MONTHS[i];
return days;
int startWith(int year, int month)
return ((crossDays(year, month)+1))%7;
void prompt(int *year)
printf("Please inpu the year: ");
scanf("%d", year);
boolean isLeepYear(int year)
if ( (year%4==0)&&(year%100 != 0) || year%400==0)
return true;
return false;
void printMonths(int year)
int i = 0;
for (i = 0; i < 12; ++i)
printMonth(year, i+1);
void printMonth(int year, int month)
int i = 0;
int day = 1;
int startDay = startWith(year, month);
int daysOfMonth = MONTHS[month-1]+startWith(year, month);
if (isLeepYear(year))
++daysOfMonth;
printTitle(month);
for (i = 0; i < daysOfMonth; ++i)
if (i<startDay)
printf(" ");
continue;
printf ("%2d", day++);
printBlack();
if ((i+1)%7==0)
putchar('\n');
putchar('\n');
void printBlack()
printf(" ");
void printTitle(int month)
printf("\n\t");
switch (month)
case 1:
puts("一月");
break;
case 2:
puts("二月");
break;
case 3:
puts("三月");
break;
case 4:
puts("四月");
break;
case 5:
puts("五月");
break;
case 6:
puts("六月");
break;
case 7:
puts("七月");
break;
case 8:
puts("八月");
break;
case 9:
puts("九");
break;
case 10:
puts("十月");
break;
case 11:
puts("十一月");
break;
case 12:
puts("十二月");
break;
default:
break;
puts("日 一 二 三 四 五 六");
没时间写注释,gcc,vc6均成功编译。 参考技术C # include <stdio.h>
# include <math.h>
void printmonth(int m);
void printhead(int m);
int daysofmonth(int m);
int firstday(int y);
int year,weekday;
void main()
int i;
printf("请输入年份:");
scanf("%d",& year);
weekday=firstday(year);
printf("\n\n");
printf(" %d年\n",year);
for(i=1;i<=12;i++)
printmonth(i);
printf("\n");
printf("\n\n");
void printmonth(int m) //打印每月日历
int i,days;
printhead(m);
days=daysofmonth(m);
for(i=1;i<=days;i++)
printf("%5d",i);
weekday=(weekday+1)%7;
if (weekday==0) printf("\n ");
void printhead(int m) //打印每月的日历头(判定起始位置)
int i;
printf("\n%d月 日 一 二 三 四 五 六\n",m);
printf(" ");
for(i=0;i<weekday;i++)
printf(" ");
int daysofmonth(int m) //每月的天数
switch (m)
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;
case 4:
case 6:
case 9:
case 11:return 30;
case 2:if (((year%4==0 && year%100!=0)||year%400==0))
return 29;
else
return 28;
default: return 0;
int firstday(int y) //判断某年元旦是星期几
double s ;
s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1);
return (int)s%7;
参考技术D 这个网上很多
再就是1900年第一天应该不是星期一
从公元一年一月一日是星期一开始,400年一循环,2000年一月一日是星期一 第5个回答 2011-11-11 不懂你把完整的拢上来嘛
C 语言编程系列
目录
文章目录
语法入门
《C 语言编程 — 发展历史概览》
《C 语言编程 — 配置开发环境》
《C 语言编程 — HelloWorld》
《C 语言编程 — 数据类型概览》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 指针类型 — 指针(pointer)》
《C 语言编程 — 构造数据类型 — 数组(array)》
《C 语言编程 — 构造数据类型 — 字符串(string)》
《C 语言编程 — 构造数据类型 — 结构体(struct)》
《C 语言编程 — 构造数据类型 — 位域(bit field)》
《C 语言编程 — 构造数据类型 — 枚举(enum)》
《C 语言编程 — 构造数据类型 — 共用体(union)》
《C 语言编程 — 空类型 — void 类型》
《C 语言编程 — 自定义类型 — typedef》
《C 语言编程 — 数据类型转换》
《C 语言编程 — 变量、常量与作用域》
《C 语言编程 — 函数》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 预处理指令与宏定义》
《C 语言编程 — 头文件》
《C 语言编程 — 代码规范》
《C 语言编程 — 基本语法练习》
应用进阶
《C 语言编程 — 指令行操作》
《C 语言编程 — 输入输出操作》
《C 语言编程 — errno 错误操作》
《C 语言编程 — assert 断言操作》
《C 语言编程 — stat 文件操作》
《C 语言编程 — semaphore 信号量操作》
《C 语言编程 — fork 进程操作》
《C 语言编程 — pthread 线程操作》
《C 语言编程 — 线程池设计与实现》
深入理解
《C 语言编程 — GCC 程序编译原理》
《C 语言编程 — GCC 程序汇编原理》
《C 语言编程 — GCC Attribute 语法扩展》
《C 语言编程 — GCC 内存对齐问题》
《C 语言编程 — GCC 大端小端问题》
《C 语言编程 — GDB 程序调试》
《C 语言编程 — Makefile》
用 C 语言开发一门编程语言
《用 C 语言开发一门编程语言 — Lispy 功能演示》
《用 C 语言开发一门编程语言 — 交互式解析器》
《用 C 语言开发一门编程语言 — 语法解析器运行原理》
《用 C 语言开发一门编程语言 — 波兰表达式解析器》
《用 C 语言开发一门编程语言 — 表达式存储器》
《用 C 语言开发一门编程语言 — 符号表达式解析器》
《用 C 语言开发一门编程语言 — 引用表达式解析器》
《用 C 语言开发一门编程语言 — 变量的设计与实现》
《用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计与实现》
《用 C 语言开发一门编程语言 — 条件分支的设计与实现》
《用 C 语言开发一门编程语言 — 字符串的设计与实现》
《用 C 语言开发一门编程语言 — 更好的语言》
C 语言网络编程
《互联网协议 — TCP — 报文格式》
《互联网协议 — TCP — TCP 连接(三次握手、四次挥手)》
《互联网协议 — TCP — 确认与重传》
《互联网协议 — TCP — 滑动窗口》
《互联网协议 — TCP — 流量控制》
《互联网协议 — TCP — 拥塞控制》
《C 语言网络编程 — BSD Socket API》
《C 语言网络编程 — PF_INETv4v6 sockets》
《C 语言网络编程 — Socket I/O 模式》
《C 语言网络编程 — Linux I/O 处理流程与优化》
《C 语言网络编程 — 高并发 TCP 网络服务器》
《互联网协议 — HTTP 协议与 Web 服务器》
《互联网协议 — HTTP/1.1 版本》
《互联网协议 — HTTP/2 版本》
《C 语言网络编程 — 轻量级 HTTP 服务器设计与实现》
以上是关于C语言 编程的主要内容,如果未能解决你的问题,请参考以下文章