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 语言编程 — 内存操作

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语言 编程的主要内容,如果未能解决你的问题,请参考以下文章

FORTRAN编程语言与C语言

C语言编程

编程c语言 PTA

2018年秋季学期《c语言程序设计》编程总结

2018年秋季学期《c语言程序设计》编程总结

c语言和c++有啥关系