當前位置:首頁 » 編程語言 » c語言計算第幾個周期
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言計算第幾個周期

發布時間: 2022-07-04 08:07:46

❶ 高手指導一下,怎樣用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;
}