❶ 高手指导一下,怎样用c语言编写一个计算单双周的程序,并能显示这是第几周,输入一个日期定为单周,然后自
#include <stdio.h>
const char WEEK_DAYS_NAME[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
/*
设定一个最小的系统日期,并且指定改天是星期几
*/
/*最小的系统日期年份,默认是 2000 年*/
const int START_YEAR = 2000;
/*日最小的系统日期月份,默认是 1 月*/
const int START_MONTH = 1;
/*最小的系统日期,默认是 1 号*/
const int START_DAY = 1;
/*最小的系统日期所在的星期,默认是星期六(2000年1月1日是星期六)*/
const int START_WEEK_DAY = 6;
/*
功能:
计算指定的 year 年 month 月的天数
*/
int getDaysOfMonth(int year ,int month)
{
const int daysOfMonth[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
// 闰年的二月份
if( month == 2 && ( (year%4==0 && year%100!=0) || year %400==0 ))
{
return daysOfMonth[month] +1;
}
else
{
return daysOfMonth[month];
}
}
/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
的天数
*/
int getDiffDays(int year ,int month , int day)
{
int diffDays = 0 ;
int y,m,d;
if(year == START_YEAR)
{
if(month == START_MONTH)
{
diffDays = day - START_DAY;
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1;
/*加上整月的天数*/
for(m = START_MONTH + 1 ; m < month ; m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m);
}
/*加上当月剩余天数*/
diffDays += day -1;
}
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1;
/*加上整月的天数*/
for(m = START_MONTH + 1 ; m <= 12 ; m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m);
}
/*加上整年的天数*/
for(y = START_YEAR+1 ; y < year ; y ++)
{
/*如果是闰年*/
if((y%4==0%y%100!=0) || y%400==0)
{
diffDays += 366;
}
else
{
diffDays += 365;
}
}
/*加上整月的天数*/
for(m = 1 ; m < month ; m ++)
{
diffDays += getDaysOfMonth(year,m);
}
/*加上当月的天数*/
diffDays += ( day - 1 );
}
return diffDays;
}
/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
已经过了多少周
*/
int getDiffWeeks(int year ,int month , int day)
{
int diffDays ,diffWeeks;
// 距离系统最小时间已经过去的天
diffDays= getDiffDays(year,month,day);
diffWeeks = diffDays/7;
// 修正已经过去的周
if((START_WEEK_DAY + diffDays % 7 )> 7)
{
diffWeeks++;
}
// debug
//printf("%d %d %d\n",diffDays,diffWeeks,(START_WEEK_DAY + diffDays % 7 ) % 7);
return diffWeeks;
}
/*
功能:
计算 year 年 month 月 day 日 是星期几
星期一 = 1
星期二 = 2
...
星期六 = 6
星期天 = 0
*/
int getWeekDay(int year ,int month , int day)
{
int diffDays= getDiffDays(year,month,day);
return (START_WEEK_DAY + diffDays % 7 ) % 7;
}
int main(int argc, char *argv[])
{
// 设定的开始计算单双周的第一天
int firstWeekYear,firstWeekMonth,firstWeekDay;
// 要查询天
int queryYear,queryMonth,queryDay;
// 相差的天数
int diffDays;
// 相差的周数
int diffWeeks;
printf("输入要设为第一周的日期:");
scanf("%d-%d-%d",&firstWeekYear,&firstWeekMonth,&firstWeekDay);
// 输入要查询的天,按 ctrl + z 退出
printf("输入要查询所在周的日期:");
while(scanf("%d-%d-%d",&queryYear,&queryMonth,&queryDay)!=EOF)
{
diffDays = getDiffDays(queryYear,queryMonth,queryDay) - getDiffDays(firstWeekYear,firstWeekMonth,firstWeekDay);
diffWeeks = getDiffWeeks(queryYear,queryMonth,queryDay) - getDiffWeeks(firstWeekYear,firstWeekMonth,firstWeekDay) + 1;
printf("%4d-%02d-%02d【%s】 是【%s周,第%3d周】。距离 %4d-%02d-%02d【%s】 已经过去了【%3d天】!\n",
queryYear,queryMonth,queryDay,
WEEK_DAYS_NAME[getWeekDay(queryYear,queryMonth,queryDay)],
(diffWeeks%2==1)?"单":"双",
diffWeeks,
firstWeekYear,firstWeekMonth,firstWeekDay,
WEEK_DAYS_NAME[getWeekDay(firstWeekYear,firstWeekMonth,firstWeekDay)],
diffDays
);
}
return 0;
}
/*
输入要设为第一周的日期:2011-9-1
输入要查询所在周的日期:2011-9-1
2011-09-01【星期四】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 0天】!
输入要查询所在周的日期:2011-9-2
2011-09-02【星期五】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 1天】!
输入要查询所在周的日期:2011-9-3
2011-09-03【星期六】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 2天】!
输入要查询所在周的日期:2011-9-4
2011-09-04【星期日】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 3天】!
输入要查询所在周的日期:2011-9-5
2011-09-05【星期一】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 4天】!
输入要查询所在周的日期:2011-9-11
2011-09-11【星期日】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 10天】!
输入要查询所在周的日期:2011-9-15
2011-09-15【星期四】 是【单周,第 3周】。距离 2011-09-01【星期四】 已经过去了【 14天】!
输入要查询所在周的日期:2011-10-1
2011-10-01【星期六】 是【单周,第 5周】。距离 2011-09-01【星期四】 已经过去了【 30天】!
输入要查询所在周的日期:2011-10-15
2011-10-15【星期六】 是【单周,第 7周】。距离 2011-09-01【星期四】 已经过去了【 44天】!
输入要查询所在周的日期:2011-10-30
2011-10-30【星期日】 是【单周,第 9周】。距离 2011-09-01【星期四】 已经过去了【 59天】!
输入要查询所在周的日期:2011-11-1
2011-11-01【星期二】 是【双周,第 10周】。距离 2011-09-01【星期四】 已经过去了【 61天】!
输入要查询所在周的日期:2011-12-1
2011-12-01【星期四】 是【双周,第 14周】。距离 2011-09-01【星期四】 已经过去了【 91天】!
*/
❷ C语言的for循环中执行一次需多少机器周期
机器循环,当然只是在单片机中,不同的单片机使用不同的编译软件,最终都转换成汇编,把机器代码烧录成单片机。
不同的编译软件可以用不同的方式编译语句。以keil为例。(我= 0;我< 1;N + +我+ +);(I, n是char或unsigned char)
赋值语句(I=0)有两个机械循环,
一个判断语句(I <1) 4个机械循环,
一个自加语句(n++) 1机械循环,
另一个自我递增语句(i++)1机械循环,
另一个判断语句(I <1) 4个机械循环,结束。
(2)c语言计算第几个周期扩展阅读:
指令周期:
每次CPU获取一条指令并执行它,它就完成一系列操作,通常称为指令周期。换句话说,指令周期就是获取一条指令并执行它所花费的时间。由于每条指令的操作功能不同,每条指令的指令周期也不同。
例如加法指令的指令周期与乘法指令的指令周期是不同的。指令周期通常以CPU周期的数量表示,也称为机器周期。所需的机器周期数随指令的不同而变化。对于一些简单的单字节指令。
在指令取出周期中,将指令取出到指令寄存器后,立即对其进行解码并执行,不需要其他机器周期。对于更复杂的指令,例如转换和乘法指令,需要两个或更多的机器周期。
具有一个机器周期的指令通常称为单周期指令,具有两个机器周期的指令称为双周期指令。
❸ C语言:求星期几(求讲解)
如何求某一天是星期几? 请注意这样一个事实,即从公元元年一月一日开始到现在,每一天都是连续的,而每个星期有7天,也是连续的,也就是说日期和星期是一对一的,没有断档现象。我的基本思想是计算出当前天是从公元元年一月一日开始的第几天,再利用星期的周期性来计算公元任何一天是星期几。 假设当前年份为y,并忽略闰年,则从公元元年一月一日到y-1年共有365*(y-1)天,加上闰年多出来的天数,即加上1*((y-1)/4-(y-1)/100+(y-1)/400),"/"为整除,得:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。我们再补上从当前1月1日开始到当前天的天数e,即为所求。即:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e。它的值即为当前天是从公元元年一月一日开始算起的第几天。补上一个x(x是与公元元年一月一日是星期几有关的一个0~6的整数),并将这个表达式赋给变量t,即:t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e再用t除以7,余几即为星期几(余0为星期日)。 下面讨论x的求法,如果知道公元元年一月一日是星期几,就可以直接得到x的值,但现在公式还没有求出来,不知道公元元年一月一日是星期几。不过没关系,毕竟知道最近的日期是星期几。不妨看一下2001年1月1日是星期几,结果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余数是1,则为了保证2001年1月1日是星期一,取x 为0,所以公元元年一月一日也是星期一。至此,得到了完整的公式: t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 再将它做一下改进,我们将公式变形为: t=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 利用星期的周期性,将52*7+1从公式中删除,得: t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 在我网络到的那个帖子找到了答案~~ http://..com/question/3696267.html
❹ 用C语言编程:输入某年某月某日,判断这一天是这一年的第几个星期中的星期几
#include <stdio.h>
void main()
{
int year,month,day;
int tempmonth,yearday;
int week,weekday;
unsigned int sum=0;
int tag=0;
printf("输入年、月、日:\n");
scanf("%d %d %d",&year,&month,&day);
tag =( year - 1980 )/4;
sum=(year-1984)*365 + tag;
tempmonth = month - 1;
yearday = 0;
switch(tempmonth)
{
case 12:yearday+=31;
case 11:yearday+=30;
case 10:yearday+=31;
case 9:yearday+=30;
case 8:yearday+=31;
case 7:yearday+=31;
case 6:yearday+=30;
case 5:yearday+=31;
case 4:yearday+=30;
case 3:yearday+=31;
case 2:yearday+=28;
case 1:yearday+=31;
}
yearday = yearday+day;
if ((year-1984)%4==0 && month > 2)
{
yearday+=1;
}
sum=sum+yearday;
if (year==1984)
{
sum-=1;
}
printf("距1984年1月1日一共有%d天\n",sum);
/*上面是计算输入的日期距1984年1月1日一共经历了多少天*/
weekday = (sum-1) % 7;
week = yearday / 7;
printf("今天是第%d个星期,星期%d",week,weekday);
return ;
}
才给这么点分。能多加点嘛?你看都没人给你做
❺ 用C语言计算这是第几周
#include<stdio.h>
int main()
{
int d91,month,day,week,n=0;
scanf("%d%d%d",&d91,&month,&day);//依次输入9月1日周几,今天几号
switch(month){
case 10:n+=30;break;
case 11:n+=61;break;
case 12:n+=91;break;
case 1:n+=122;break;
case 2:n+=153;break;
case 3:n+=183;break;
case 4:n+=214;break;
}
n=n+day-d91;
week=n/7;
printf("%d\n",week+1);
}
❻ 单片机C语言中的执行for语句需要几个机械周期
确切的本人目前也不知道,现分析如下,不知道有没有道理:1、for ( ;i>0;i--;)中执行的主要有三部分,i>0,i++以及一条空指令。2、执行一次for循环的时间为三条指令所消耗的总时间;3、在i=100的情况下,delay执行的指令数目约为300条。 另外能不能做一个测试,在执行delay之间,读取系统时间,执行delay后读取时间,两个时间差,以及i,就可以判断延时大小与i的关系。
❼ 用C语言编程 输入日期 输出这一天属于该年的第几周
#include<stdio.h>
void
main()
{
int
nian,yue,ri,leap,sum;
printf("\n
请输入年月日:
\n");
scanf("%d%d%d",&nian,&yue,&ri);
switch(yue)
{
case
1:sum=0;
break;
case
2:sum=31;
break;
case
3:sum=59;
break;
case
4:sum=90;
break;
case
5:sum=120;
break;
case
6:sum=151;
break;
case
7:sum=181;
break;
case
8:sum=212;
break;
case
9:sum=243;
break;
case
10:sum=273;
break;
case
11:sum=304;
break;
case
12:sum=334;
break;
default:
printf("\n
数据错误
\n");
}
sum=sum+ri;
if((nian%400==0)
||(nian%4==0
&&
nian%100!=0
))
leap=1;
else
leap=0;
if(leap==1
&&
nian>3)
sum++;
printf("\n
这一天是这一年的第
%d
天
\n",sum);
}
❽ 怎么用C语言求周期字符串最小周期
这个方法很简单啊,从头开始存子字符串,每存一个就验证一次它是不是一个周期,第一次验证成功就直接把字符串返回(这个就是最小周期)。如果还要问怎么验证。要么多学学,要么。。还是问我吧。
❾ C语言程序问题-一个关于周期的问题
这样吧,如果是浮点型的话用%来计算会出错,我的方法是这样:
//i从1循环到1000,每次增加0.5,输出值只在1-60之间
#include<stdio.h>
void
main()
{
float
i;
for
(i=1;i<=1000;i=i+0.5)
{
printf("%f,",i-(int)((i-1)/60)*60);
}
}
❿ c语言输入秒数输出是第几个月第几天
一个月按30天算,一天算60*60*24秒
#include<stdio.h>
int main()
{
int second,month,day;
printf("输入秒数:");
scanf("%d",&second);
printf("\n");
month=second/(60*60*24*30);
day=(second/(60*60*24))%30;
printf("第%d个月第%d天\n",month+1,day+1);
return 0;
}