php中for循环制作年历
php中文九九乘法表的代码
php中文九九乘法表的代码PHP中文九九乘法表的代码在PHP中,我们可以通过简单的代码来生成九九乘法表。
九九乘法表是我们在小学时就开始学习的数学表格,它由1到9的数字进行相乘得到的结果组成。
下面是一段PHP代码来生成九九乘法表:```php<?phpfor ($i = 1; $i <= 9; $i++) {for ($j = 1; $j <= $i; $j++) {echo $j . " x " . $i . " = " . ($j * $i) . "\t";}echo "\n";}>```我们使用for循环来遍历九个数字(1到9),变量$i表示被乘数。
然后,在内部的for循环中,我们使用变量$j表示乘数,并输出乘法表达式和计算结果。
通过在每次循环结束后添加一个制表符(\t),我们可以使输出的表格保持整齐。
最后,通过在每行结束后添加一个换行符(\n),我们可以确保每行乘法表达式都在新的一行显示。
通过运行这段代码,我们可以得到一张完整的九九乘法表。
下面是代码运行的结果:```1 x 1 = 11 x2 = 2 2 x 2 = 41 x 3 = 32 x3 = 6 3 x 3 = 91 x 4 = 42 x 4 = 83 x4 = 12 4 x 4 = 161 x 5 = 52 x 5 = 103 x 5 = 154 x5 = 20 5 x 5 = 251 x 6 = 62 x 6 = 123 x 6 = 184 x 6 = 245 x6 = 30 6 x 6 = 361 x 7 = 72 x 7 = 143 x 7 = 214 x 7 = 285 x 7 = 356 x7 = 42 7 x 7 = 491 x 8 = 82 x 8 = 163 x 8 = 24 4 x 8 = 325 x 8 = 406 x 8 = 487 x8 = 56 8 x 8 = 641 x 9 = 92 x 9 = 183 x 9 = 274 x 9 = 365 x 9 = 456 x 9 = 547 x 9 = 638 x9 = 72 9 x 9 = 81```通过上面的九九乘法表,我们可以看到每个数字都和其他数字进行了相乘,并得到了相应的结果。
1582年日历图片
1582年日历图片2.1实训说明2.1.1 实验背景日历是一种记载日期等相关信息的出版物,通常每页显示一日信息的叫日历,每页显示一个月信息的叫月历,每页显示全年信息的叫年历。
从日历的诞生至今,它有多种的呈现形式,如挂历、台历、年历卡、电子日历、万年历等。
2.1.2 功能描述在生活中,日历对于人们的旅程规划、行程安排和工作计划等有着重要的作用。
下面将使用现阶段学习过的知识来实现年历的制作。
具体需求如下所示:?根据用户输入的年份输出对应的年历?用户可输入年份的取值范围是1582~9999?判断31天的月份(1月、3月、5月、7月、8月、10月、12月)?判断30天的月份(4月、6月、9月、11月)?实现闰年2月29天,平年2月28天的功能?将日期按照对应的星期输出展示?按照3行4列的方式展示给定年份的年历?确定年历中每月的星期输出顺序为“日、一、二、三、四、五、六”接下来对本阶段案例的实现思路进行系统的分析,将一个复杂的案例分解成多个阶段,逐一进行实现,具体如下图所示。
31天or30天or28天or29天平年普通年世纪年or闰年or判断判断③②判断①④假设完成非周日的XX月1号前填充空白XX年1月1日对应的星期XX月1日为周日,用0表示计算⑤填充空白⑥制作年历实现思路图从上图可以清晰的看到,实现年历的制作流程共分为6个阶段,第1阶段和第2阶段的判断是为了确定第3阶段2月份的天数,闰年2月份29天,平年28天。
接着在第4阶段将每月的1日设置为周天,使用0表示,周一到周六分别使用1~6表示,循环输出年历。
然后利用蔡勒公式计算用户给定年份的1月1日对应的星期。
最后对每月1号不是周日的月份日期,在输出前进行空白填充。
.2.1.3 必备技术(一)网页技术(HTML+CSS)1.HTML网页构建的基本设计;2.HTML网页样式的基本设计;(二)PHP开发语言1.变量2.运算符3.if语句4.for语句2.1.4 学时分配实训课程学时安排可参考下表。
for循环有趣案例
for循环有趣案例
for循环的有趣案例有很多,以下是一些例子:
1.猜数字游戏:可以使用for循环来生成随机数,然后让用户猜测这个数字是多少。
每次
用户猜测后,程序会告诉用户猜对了还是猜错了,并提示用户继续猜测,直到猜对为止。
2.打印九九乘法表:可以使用for循环来打印九九乘法表,让用户学习基本的数学运算。
3.模拟时钟:可以使用for循环来模拟时钟的走动,让用户了解时间的流逝。
4.生成密码:可以使用for循环来生成随机字符,组成密码。
5.计算阶乘:可以使用for循环来计算一个数的阶乘,了解递归的思想。
6.打印图案:可以使用for循环来打印各种图案,比如三角形、正方形、菱形等等。
7.模拟抽奖:可以使用for循环来模拟抽奖程序,让用户参与抽奖活动。
8.文件拷贝:可以使用for循环来拷贝大文件,提高效率。
以上是一些有趣的for循环案例,通过这些案例可以更好地理解for循环的原理和应用。
formitem循环表单
formitem循环表单
表单循环(formitem循环)是指在表单中重复显示相同类型的
表单项或字段。
这种循环通常用于处理需要多次输入相似数据的情况,例如多个联系人的信息、多个产品的属性等。
在前端开发中,
表单循环可以通过循环生成表单项的方式来实现,这样可以减少重
复的代码编写,提高开发效率。
在实现表单循环时,通常会使用循环结构(如for循环或map
函数)来遍历数据,并根据数据的数量动态生成对应数量的表单项。
这样可以使用户在填写表单时只需关注每个表单项对应的具体数据,而不需要关心表单项的数量和排列。
另外,表单循环还需要考虑到动态增加或删除表单项的情况,
例如用户可以通过按钮动态添加或删除某个表单项,这就需要在前
端实现相应的逻辑来处理表单项的动态变化。
在后端处理方面,需要考虑如何接收和处理动态生成的表单数据,通常会使用数组或对象来存储动态生成的表单数据,并在后端
进行相应的处理和存储。
总的来说,表单循环是一种在前端开发中常见的技术,通过动
态生成表单项来简化表单的填写和处理,提高用户体验和开发效率。
在实现表单循环时需要考虑前后端的数据传递和处理逻辑,以及用
户交互的动态变化。
thinkphp date_format 写法
thinkphp date_format 写法date_format是 PHP 中的一个函数,用于格式化日期。
在 ThinkPHP 框架中,你也可以使用这个函数来格式化从数据库或其他来源获取的日期数据。
下面将详细介绍如何在 ThinkPHP 中使用date_format函数,并给出一些示例。
ThinkPHP 中的date_format使用在 ThinkPHP 中,你通常会从数据库查询中获取包含日期时间的数据。
这些日期时间数据可能是一个DateTime对象,或者是一个日期时间字符串。
为了将这些日期时间数据显示为用户友好的格式,你可以使用date_format函数。
示例 1:在模板中格式化日期假设你有一个包含create_time字段的数据库表,该字段存储了记录的创建时间。
你可以在查询数据库时获取这个字段,并在模板中使用date_format函数来格式化它。
// 控制器中的代码public function index{$data = Db:: table( 'your_table')-> select$this-> assign( 'data', $data);return $this-> fetch}<!-- 模板中的代码 --><volist name="data" id="item"><p>{$item.create_time|date_format:'Y-m-d H:i:s',###}</p></volist>注意:上面的模板代码中的date_format函数用法可能不正确,因为ThinkPHP 的模板引擎并不直接支持 PHP 的date_format函数。
实际上,你应该在控制器中格式化日期,然后将格式化后的日期传递给模板。
或者,你可以使用 ThinkPHP 模板引擎提供的日期格式化功能。
for循环案例100例
for循环案例100例当然,下面是一些使用for循环的案例:1.打印从1到10的数字。
for i in range(1, 11):print(i)2.打印一个列表中的所有元素。
my_list = [1, 2, 3, 4, 5]for num in my_list:print(num)3.打印一个字符串中的所有字符。
my_string = "Hello, World!"for char in my_string:print(char)4.计算一个列表中所有数字的总和。
my_list = [1, 2, 3, 4, 5]sum = 0for num in my_list:sum += numprint(sum)5.打印九九乘法表。
for i in range(1, 10):for j in range(1, i + 1):print(f"{j} * {i} = {i * j}", end="\t")print()6.打印一个字典中的所有键和值。
my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"} for key, value in my_dict.items():print(key, value)7.打印一个范围内的所有偶数。
for i in range(2, 21, 2):print(i)8.打印一个列表中的所有奇数。
my_list = [1, 2, 3, 4, 5]for num in my_list:if num % 2 != 0:print(num)9.打印一个字符串中的所有大写字母。
my_string = "Hello, World!"for char in my_string:if char.isupper():print(char)10.打印一个列表中的索引和对应的元素。
php——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等
php——⽤for循环打印半⾦字塔、⾦字塔、正⽅形、倒⾦字塔、菱形、空⼼图形等1、半⾦字塔$n=5;//控制层数for($i=1;$i<=$n;$i++){//控制每层的 “*” 数for($j=1;$j<=$i;$j++){echo "*";}echo "<br/>";}2、⾦字塔$n=5;for($i=1;$i<=$n;$i++){for($k=1;$k<=$n-$i;$k++){echo " "; //输出空格}for($j=1;$j<=($i-1)*2+1;$j++){echo "*";}echo "<br/>";}3、正⽅形$n=5;for($i=1;$i<=$n;$i++){for($k=$n;$k>=0;$k- -){echo "* ";}echo "<br/>";}4/倒⾦字塔$n=5;for($i=$n;$i>=1;$i--){for($k=1;$k<=$n-$i;$k++){echo " ";}for($j=1;$j<=($i-1)*2+1;$j++){echo "*";}echo "<br/>";}5、菱形$n=20;for($i=1;$i<=$n;$i++){for($k=1;$k<=$n-$i;$k++){echo " ";}for($j=1;$j<=($i-1)*2+1;$j++){echo "*";}echo "<br/>";}for($i=$n;$i<=$n;$i--){for($k=1;$k<=$n-$i;$k++){echo " ";}for($j=1;$j<=($i-1)*2+1;$j++){echo "*";}echo "<br/>";}6、空⼼菱形$n=5;for($i=1;$i<=5;$i++){//打印空格for($j=1;$j<=5-$i;$j++){echo " ";}//打印*号for($k=1;$k<=2*$i-1;$k++){//打印第⼀⾏后最后⼀⾏都打*连接($i==1 || $i==5) if($i==1){ //去掉$i==5 把中间抛空echo "*";}else{//怎么打空格和*号的问题if($k==1 || $k==2*$i-1){echo "*";}else{echo " ";}}}echo "<br/>";}//倒转抛空for($i=5;$i>=0;$i--){//打印空格for($j=0;$j<=5-$i;$j++){echo " ";}//打印*号for($k=1;$k<=2*$i-3;$k++){//怎么打空格和*号的问题if($k==2*$i-3 || $k==1){echo "*";}else{echo " ";}}echo "<br/>";}7、空⼼⾦字塔$n=5;for($i=1;$i<=5;$i++){//打印空格for($j=1;$j<=5-$i;$j++){echo " ";}//打印*号for($k=1;$k<=2*$i-1;$k++){//打印第⼀⾏后最后⼀⾏都打*连接 if($i==1 || $i==5){echo "*";}else{//怎么打空格和*号的问题if($k==1 || $k==2*$i-1){echo "*";}else{echo " ";}}}echo "<br/>";}8、倒转空⼼⾦字塔$n=5;for($i=1;$i<=5;$i++){//打印空格for($j=1;$j<=5-$i;$j++){echo " ";}//打印*号for($k=1;$k<=2*$i-1;$k++){//打印第⼀⾏后最后⼀⾏都打*连接 if($i==1 || $i==5){echo "*";}else{//怎么打空格和*号的问题if($k==1 || $k==2*$i-1){echo "*";}else{echo " ";}}}echo "<br/>";}//倒转for($i=5;$i>=0;$i--){//打印空格for($j=0;$j<=5-$i;$j++){echo " ";}//打印*号for($k=1;$k<=2*$i-3;$k++){echo "*";}echo "<br/>";}。
c语言for循环倒序遍历
c语言for循环倒序遍历全文共四篇示例,供读者参考第一篇示例:在C语言中,for循环是一种常用的循环结构,可以用来遍历数组、执行一定次数的操作等。
通常来说,我们使用for循环来递增地遍历数组或执行一系列操作,但有时也会需要倒序遍历数组或执行递减操作。
本文将介绍如何在C语言中使用for循环实现倒序遍历的方法。
让我们回顾一下for循环的基本结构。
通常情况下,for循环由三部分组成:初始化表达式、循环条件和增量表达式。
其基本语法如下所示:```cfor (初始化表达式; 循环条件; 增量表达式) {// 循环体}```在正序遍历数组时,通常我们会采用以下的方式:```cint array[5] = {1, 2, 3, 4, 5};int i;上述代码会输出数组中的元素1,2,3,4,5。
但是有时候我们需要倒序遍历数组,输出元素5,4,3,2,1。
下面是如何通过调整for循环的条件和增量表达式来实现倒序遍历:在这段代码中,我们将循环变量i的初始值设置为数组长度减一,即i=4。
循环条件设置为i大于等于0,即i>=0。
增量表达式设置为i--,也就是每次迭代结束后,i减1。
通过这样的设置,我们就可以从数组的最后一个元素开始,逐步向前遍历数组,直到第一个元素。
这样就实现了数组的倒序遍历。
除了数组的倒序遍历外,有时候我们也会需要倒序执行一系列操作。
需要倒序打印输出一系列数字,我们可以通过类似的方法实现:```cint i;for (i = 10; i >= 1; i--) {printf("%d ", i);}```这段代码将会输出数字10到1,实现了按倒序的方式打印输出数字。
同样的,我们只需要将初始值和增量表达式调整即可实现倒序遍历。
使用for循环实现倒序遍历并不难,只需要稍微调整循环条件和增量表达式即可。
这种技巧在实际编程中经常会用到,特别是在涉及到数组操作或其他需要逆序处理的情况下。
PHP:双层for循环的执行过程
PHP:双层for循环的执⾏过程先看代码1 <?php2for ($i = 0; $i<3; $i++) {3for ($x = 0; $x<3; $x++) {4// code...5 }6 }7 ?>看下它的执⾏过程1.⾸先执⾏最外层的for循环,此时$i = 0;2.然后开始执⾏内循环,这⾥值得⼀提的是:for循环嵌套的话将优先执⾏内循环,再执⾏外循环,所以说它会把$x由0递增到2;执⾏3遍内循环后,退出外循环, $i++,$i = 1 ,再次执⾏外循环...直到$i = 2的时候循环结束如果说的不对希望看到的⼈来指正!这样不难理解下⾯的的例⼦:1 <?php2$array = array(3array("dongxiaoxin","22","male"),4array("yexiaoyang","21","male")5 );67// 利⽤for循环遍历这个例⼦89for ($row = 0; $row<2; $row++) {10for($molumn = 0; $molumn<3; $molumn++) {11echo$array[$row][$molumn]." ";12 }13echo "<br>";14 }1516 ?>我们再来看⼀下上⾯的例⼦的执⾏顺序以此结束这篇博客!⾸先执⾏最外层的for循环此时:$row = 0;在执⾏内循环0,00,10,2内循环执⾏3次后 $row++,再次执⾏外循环此时$row = 1;1,01,11,2然后循环结束:打印结果如下dongxiaoxin 22 maleyexiaoyang 21 male。
C语言程序设计 输出任意年份的日历
printf("");
printf("");
i2=0;flag2=0;
for(day2=p-(W+t[month-1])%7;day2<=t[month]&&flag2==0;day2++)
{i2++;printf("%4d",day2);
{
if(month<3)
{c=((int)(year-1)/100);
Y=(year-1)-((int)((year-1)/100))*100;
w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+13)/5));
W=(w+70)%7;
}
else if(month>=3)
if(i2%7==0) flag2=1;}
printf("\n");
}
}
}
{c=((int)(year/100));
Y=year-((int)(year/100))*100;
w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+1)/5));
W=(w+70)%7;
}
printf("\n\n%d%d\n",month,month+1);printf("日一二三四五六日一二三四五六\n");i1=W;/*一行一行的输出*/
php中for循环嵌套笔记(例:九九乘法表)
<?php/*理解for循环以及for循环的嵌套,以及for循环当中的递归* for($i=1;$i<=9;$i++){--由于本人只是初步了解for循环的只用方法,虽有当老师留作业让做一个久久乘法表的时候滞留了一段时间。
经过个人的摸索已经浏览的其他的资料,对于for循环的有了粗浅的见解。
--这个for循环当中的i是为下面的循环当中的j做限制条件当i=1的时候 j只可是一个值当i=2的时候 j只可是两个值 // *关键* 这两个是下面的for循环出来的值1、2当i=3的时候 j只可是三个值 // *关键* 这两个是下面的for循环出来的值1、2 、3其他的以此类推。
然后将i的值与j的每个值分别相乘for($j=1;$j<=$i;$j++){ //的嵌套echo $j."*".$i."=".$i*$j." ";}echo "<br>";//这个是打印整体循环当中 i与j的值echo "<br>-------------------------------------------<br>";for($i=1;$i<=9;$i++){echo "i=".$i;for($j=1;$j<=$i;$j++){echo "j=".$j;}echo "<br>";}*/echo "-------------------------------------------<br>";for($k=1;$k<10;$k++){//for循环的简单应用echo $k."<br>";}echo "-------------------------------------------<br>";for($i=1;$i<=9;$i++){for($j=1;$j<=$i;$j++){echo $j."*".$i."=".$i*$j." ";}//echo "<br>";}echo "<br>-------------------------------------------<br>"; for($i=1;$i<=9;$i++){for($j=1;$j<=$i;$j++){echo $i."*".$j."=".$i*$j." ";}echo "<br>";}echo "<br>-------------------------------------------<br>"; for($i=1;$i<=9;$i++){echo "i=".$i;for($j=1;$j<=$i;$j++){echo "j=".$j;}echo "<br>";}echo "明悟!";?>注释:以上内容需粘贴至php工具当中使用。
万年历程序(不要嫌程序长,功能很齐全,而且对初学者很有帮助)
#include <REG51.H>#include <intrins.h>#define uint unsigned int#define uchar unsigned charvoid Stopwatch(); //声明秒表函数void Clock(); //声明闹钟函数void Output(); //声明输出函数void important(); //声明重要函数(相当于mian()函数)void TLimit(); //声明调节温度上下限函数sbit DS1302_CLK = P1^7; //实时时钟时钟线引脚sbit DS1302_IO = P1^6; //实时时钟数据线引脚sbit DS1302_RST = P1^5; //实时时钟复位线引脚sbit wireless_1 = P3^0; //温度过上限标志sbit wireless_2 = P3^1; //温度适中标志sbit wireless_3 = P3^2; //温度过下限标志sbit fan = P3^4; //开风扇标志sbit clock=P3^5; //开关闹钟sbit setclock = P3^6; //闹钟开启控制sbit stopwatch = P3^7; //秒表开启控制sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数sbit Set = P2^0; //模式切换键sbit Up = P2^1; //加法按钮sbit Down = P2^2; //减法按钮sbit out = P2^3; //立刻跳出调整模式按钮sbit DQ = P1^0; //温度传送数据IO口char c3,c2=0;char c=0,LowerBonud=20,UpperLimit=30;char a1=0,a2=0,a3=0,a4=0;char k[8]={'0','0',':','0','0',':','0','0'};void InitTimer0(void)//产生10ms时间间隔{TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式TH0 = (65536 - 8000)/256;TL0 = (65536 - 8000)%256;TR0 =1; ET0 =1;//开启定时器和中断EA = 1;}char done,count,temp,flag,up_flag,down_flag; //uchar temp_value; //温度值uchar TempBuffer[5],week_value[2],h[8]; //unsigned char NL[5];void show_time(); //液晶显示程序/***********1602液晶显示部分子程序****************///Port Definitions**********************************************************sbit LcdRs = P2^5;sbit LcdRw = P2^6;sbit LcdEn = P2^7;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数************************************************************************** unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0;return DBPort;}//向LCD写入命令或数据************************************************************#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************ #define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//液晶字符输入的位置************************void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0')//while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}/***********DS1302时钟部分子程序******************/typedef struct SYSTEMTIME{unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char YearH;unsigned char YearL;unsigned char day;unsigned char month;unsigned char year;unsigned char DateString[11];unsigned char NLDateString[12];unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型SYSTEMTIME CurrentTime; //#define AM(X) X#define PM(X) (X+12) // 转成24小时制#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#define DS1302_YEARH 0xC0void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) {unsigned char i;ACC = d;for(i=8; i>0; i--){DS1302_IO = ACC0; //相当于汇编中的RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;}}unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数){unsigned char i;for(i=8; i>0; i--){ACC = ACC >>1; //相当于汇编中的RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;}return(ACC);}void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); // 地址,命令DS1302InputByte(ucDa); // 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;}unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); // 地址,命令ucData = DS1302OutputByte(); // 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);}void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组{unsigned char ReadV alue;ReadValue = Read1302(DS1302_SECOND);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = ((ReadV alue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = ((ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F);Time->YearH = 20;}void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]{ if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为2007/07/22{Time->DateString[0] = Time->YearH/10 + '0';Time->DateString[1] = Time->YearH%10 + '0';Time->DateString[2] = Time->Year/10 + '0';Time->DateString[3] = Time->Year%10 + '0';}else{Time->DateString[0] = ' ';Time->DateString[1] = ' ';Time->DateString[2] = ' ';Time->DateString[3] = ' ';}Time->DateString[4] = '/';if(hide_month<2){Time->DateString[5] = Time->Month/10 + '0';Time->DateString[6] = Time->Month%10 + '0';}else{Time->DateString[5] = ' ';Time->DateString[6] = ' ';}Time->DateString[7] = '/';if(hide_day<2){Time->DateString[8] = Time->Day/10 + '0';Time->DateString[9] = Time->Day%10 + '0';}else{Time->DateString[8] = ' ';Time->DateString[9] = ' ';}if(hide_week<2){week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示}else{week_value[0] = ' ';}week_value[1] = '\0';Time->DateString[10] = '\0'; //字符串末尾加'\0' ,判断结束字符}void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组TimeString[];{ if(hide_hour<2){Time->TimeString[0] = Time->Hour/10 + '0';Time->TimeString[1] = Time->Hour%10 + '0';h[0]=Time->TimeString[0];h[1]=Time->TimeString[1];}else{Time->TimeString[0] = ' ';Time->TimeString[1] = ' ';}Time->TimeString[2] = ':';h[2]=Time->TimeString[2];if(hide_min<2){Time->TimeString[3] = Time->Minute/10 + '0';Time->TimeString[4] = Time->Minute%10 + '0';h[3]=Time->TimeString[3];h[4]=Time->TimeString[4];}else{Time->TimeString[3] = ' ';Time->TimeString[4] = ' ';}Time->TimeString[5] = ':';h[5]=Time->TimeString[5];if(hide_sec<2){Time->TimeString[6] = Time->Second/10 + '0';Time->TimeString[7] = Time->Second%10 + '0';h[6]=Time->TimeString[6];h[7]=Time->TimeString[7];}else{Time->TimeString[6] = ' ';Time->TimeString[7] = ' ';}Time->DateString[8] = '\0';if ((a1==h[4])&&(a2==h[3])&&(a3<=h[7])&&((a4==h[6])||(a4==h[6]-1))) {clock=0;c=10;}}void Initial_DS1302(void) //时钟芯片初始化{unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) //判断时钟芯片是否关闭{Write1302(0x8e,0x00); //写入允许Write1302(0xC0,0x20);Write1302(0x8c,0x09); //以下写入初始化时间日期:2007/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x06);Write1302(0x86,0x05);Write1302(0x8a,0x07); //xingqiWrite1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); //禁止写入}}/***********ds18b20子程序*************************//***********ds18b20延迟子函数(晶振12MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1; //数据右移一位DQ = 1; // 给脉冲信号if(DQ)dat|=0x80; //按位或,取最高位delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01; //取最低位delay_18B20(5);DQ = 1; //上升沿将数据送入dat>>=1;}}/**************读取ds18b20当前温度************/void ReadTemp(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp_value=b<<4; //左移四位,扩大16倍,变为一个字节的高四位temp_value+=(a&0xf0)>>4;//取温度值的地位的高四位,右移四位后与温度的高四位相加得到温度值if (temp_value>=UpperLimit) {wireless_1 =0;fan=1;}else {wireless_1 =1;fan=0;}if ((temp_value>LowerBonud)&&(temp_value<UpperLimit)) wireless_2 =0;else wireless_2 =1;if (temp_value<=LowerBonud) wireless_3 =0;else wireless_3 =1;}void temp_to_str() //温度数据转换成液晶字符显示{TempBuffer[0]=temp_value/10+'0'; //十位TempBuffer[1]=temp_value%10+'0'; //个位TempBuffer[2]=0xdf; //温度符号TempBuffer[3]='C';TempBuffer[4]='\0';}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++){if (!stopwatch) {c++;Stopwatch();}if (!setclock) {c2++;Clock();}if ((!out)&&(!Set)) {TLimit();}if (!out) clock=1; //关闭闹钟}}/*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--)for(i=0;i<32;i++); //1ms延时.}/*****************************阳历转换阴历***********************************/ code unsigned char year_code[597]={0x04,0xAe,0x53, //1901 00x0A,0x57,0x48, //1902 30x55,0x26,0xBd, //1903 60x0d,0x26,0x50, //1904 90x0d,0x95,0x44, //1905 120x46,0xAA,0xB9, //1906 150x05,0x6A,0x4d, //1907 180x09,0xAd,0x42, //1908 210x24,0xAe,0xB6, //19090x04,0xAe,0x4A, //19100x6A,0x4d,0xBe, //19110x0A,0x4d,0x52, //19120x0d,0x25,0x46, //19130x5d,0x52,0xBA, //19140x0B,0x54,0x4e, //19150x0d,0x6A,0x43, //19160x29,0x6d,0x37, //19170x09,0x5B,0x4B, //19180x74,0x9B,0xC1, //19190x04,0x97,0x54, //19200x0A,0x4B,0x48, //19210x5B,0x25,0xBC, //19220x06,0xA5,0x50, //19230x06,0xd4,0x45, //19240x4A,0xdA,0xB8, //19250x02,0xB6,0x4d, //19260x09,0x57,0x42, //19270x24,0x97,0xB7, //19280x04,0x97,0x4A, //19290x66,0x4B,0x3e, //19300x0d,0x4A,0x51, //19310x0e,0xA5,0x46, //19320x56,0xd4,0xBA, //19330x05,0xAd,0x4e, //19340x02,0xB6,0x44, //19350x39,0x37,0x38, //19360x09,0x2e,0x4B, //19370x0C,0x95,0x53, //1939 0x0d,0x4A,0x48, //1940 0x6d,0xA5,0x3B, //1941 0x0B,0x55,0x4f, //1942 0x05,0x6A,0x45, //1943 0x4A,0xAd,0xB9, //1944 0x02,0x5d,0x4d, //1945 0x09,0x2d,0x42, //1946 0x2C,0x95,0xB6, //1947 0x0A,0x95,0x4A, //1948 0x7B,0x4A,0xBd, //1949 0x06,0xCA,0x51, //1950 0x0B,0x55,0x46, //1951 0x55,0x5A,0xBB, //1952 0x04,0xdA,0x4e, //1953 0x0A,0x5B,0x43, //1954 0x35,0x2B,0xB8, //1955 0x05,0x2B,0x4C, //1956 0x8A,0x95,0x3f, //1957 0x0e,0x95,0x52, //1958 0x06,0xAA,0x48, //1959 0x7A,0xd5,0x3C, //1960 0x0A,0xB5,0x4f, //1961 0x04,0xB6,0x45, //1962 0x4A,0x57,0x39, //1963 0x0A,0x57,0x4d, //1964 0x05,0x26,0x42, //1965 0x3e,0x93,0x35, //1966 0x0d,0x95,0x49, //1967 0x75,0xAA,0xBe, //1968 0x05,0x6A,0x51, //1969 0x09,0x6d,0x46, //1970 0x54,0xAe,0xBB, //1971 0x04,0xAd,0x4f, //1972 0x0A,0x4d,0x43, //1973 0x4d,0x26,0xB7, //1974 0x0d,0x25,0x4B, //1975 0x8d,0x52,0xBf, //1976 0x0B,0x54,0x52, //1977 0x0B,0x6A,0x47, //1978 0x69,0x6d,0x3C, //1979 0x09,0x5B,0x50, //1980 0x04,0x9B,0x45, //19810x0A,0x4B,0x4d, //19830xAB,0x25,0xC2, //19840x06,0xA5,0x54, //19850x06,0xd4,0x49, //19860x6A,0xdA,0x3d, //19870x0A,0xB6,0x51, //19880x09,0x37,0x46, //19890x54,0x97,0xBB, //19900x04,0x97,0x4f, //19910x06,0x4B,0x44, //19920x36,0xA5,0x37, //19930x0e,0xA5,0x4A, //19940x86,0xB2,0xBf, //19950x05,0xAC,0x53, //19960x0A,0xB6,0x47, //19970x59,0x36,0xBC, //19980x09,0x2e,0x50, //1999 294 0x0C,0x96,0x45, //2000 297 0x4d,0x4A,0xB8, //20010x0d,0x4A,0x4C, //20020x0d,0xA5,0x41, //20030x25,0xAA,0xB6, //20040x05,0x6A,0x49, //20050x7A,0xAd,0xBd, //20060x02,0x5d,0x52, //20070x09,0x2d,0x47, //20080x5C,0x95,0xBA, //20090x0A,0x95,0x4e, //20100x0B,0x4A,0x43, //20110x4B,0x55,0x37, //20120x0A,0xd5,0x4A, //20130x95,0x5A,0xBf, //20140x04,0xBA,0x53, //20150x0A,0x5B,0x48, //20160x65,0x2B,0xBC, //20170x05,0x2B,0x50, //20180x0A,0x93,0x45, //20190x47,0x4A,0xB9, //20200x06,0xAA,0x4C, //20210x0A,0xd5,0x41, //20220x24,0xdA,0xB6, //20230x04,0xB6,0x4A, //20240x69,0x57,0x3d, //20250x0d,0x26,0x46, //2027 0x5e,0x93,0x3A, //2028 0x0d,0x53,0x4d, //2029 0x05,0xAA,0x43, //2030 0x36,0xB5,0x37, //2031 0x09,0x6d,0x4B, //2032 0xB4,0xAe,0xBf, //2033 0x04,0xAd,0x53, //2034 0x0A,0x4d,0x48, //2035 0x6d,0x25,0xBC, //2036 0x0d,0x25,0x4f, //2037 0x0d,0x52,0x44, //2038 0x5d,0xAA,0x38, //2039 0x0B,0x5A,0x4C, //2040 0x05,0x6d,0x41, //2041 0x24,0xAd,0xB6, //2042 0x04,0x9B,0x4A, //2043 0x7A,0x4B,0xBe, //2044 0x0A,0x4B,0x51, //2045 0x0A,0xA5,0x46, //2046 0x5B,0x52,0xBA, //2047 0x06,0xd2,0x4e, //2048 0x0A,0xdA,0x42, //2049 0x35,0x5B,0x37, //2050 0x09,0x37,0x4B, //2051 0x84,0x97,0xC1, //2052 0x04,0x97,0x53, //2053 0x06,0x4B,0x48, //2054 0x66,0xA5,0x3C, //2055 0x0e,0xA5,0x4f, //2056 0x06,0xB2,0x44, //2057 0x4A,0xB6,0x38, //2058 0x0A,0xAe,0x4C, //2059 0x09,0x2e,0x42, //2060 0x3C,0x97,0x35, //2061 0x0C,0x96,0x49, //2062 0x7d,0x4A,0xBd, //2063 0x0d,0x4A,0x51, //2064 0x0d,0xA5,0x45, //2065 0x55,0xAA,0xBA, //2066 0x05,0x6A,0x4e, //2067 0x0A,0x6d,0x43, //2068 0x45,0x2e,0xB7, //20690x8A,0x95,0xBf, //20710x0A,0x95,0x53, //20720x0B,0x4A,0x47, //20730x6B,0x55,0x3B, //20740x0A,0xd5,0x4f, //20750x05,0x5A,0x45, //20760x4A,0x5d,0x38, //20770x0A,0x5B,0x4C, //20780x05,0x2B,0x42, //20790x3A,0x93,0xB6, //20800x06,0x93,0x49, //20810x77,0x29,0xBd, //20820x06,0xAA,0x51, //20830x0A,0xd5,0x46, //20840x54,0xdA,0xBA, //20850x04,0xB6,0x4e, //20860x0A,0x57,0x43, //20870x45,0x27,0x38, //20880x0d,0x26,0x4A, //20890x8e,0x93,0x3e, //20900x0d,0x52,0x52, //20910x0d,0xAA,0x47, //20920x66,0xB5,0x3B, //20930x05,0x6d,0x4f, //20940x04,0xAe,0x45, //20950x4A,0x4e,0xB9, //20960x0A,0x4d,0x4C, //20970x0d,0x15,0x41, //20980x2d,0x92,0xB5, //2099};//月份数据表code unsigned char day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};code unsigned int day_code2[3]={0x111,0x130,0x14e};/**************************************************************************** * 子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0****************************************************************************/ bit GetMoonDay(unsigned char month_p,unsigned short table_addr){switch (month_p){case 1:if((year_code[table_addr]&0x08)==0) return(0);else return(1);case 2:if((year_code[table_addr]&0x04)==0) return(0);else return(1);case 3:if((year_code[table_addr]&0x02)==0) return(0);else return(1);case 4:if((year_code[table_addr]&0x01)==0) return(0);else return(1);case 5:if((year_code[table_addr+1]&0x80)==0) return(0);else return(1);case 6:if((year_code[table_addr+1]&0x40)==0) return(0);else return(1);case 7:if((year_code[table_addr+1]&0x20)==0) return(0);else return(1);case 8:if((year_code[table_addr+1]&0x10)==0) return(0);else return(1);case 9:if((year_code[table_addr+1]&0x08)==0) return(0);else return(1);case 10:if((year_code[table_addr+1]&0x04)==0) return(0);else return(1);case 11:if((year_code[table_addr+1]&0x02)==0) return(0);else return(1);case 12:if((year_code[table_addr+1]&0x01)==0) return(0);else return(1);case 13:if((year_code[table_addr+2]&0x80)==0) return(0);else return(1);}return(0);}/****************************************************************************** ***************************** 函数名称:GetChinaCalendar** 功能描述:公农历转换(只允许1901-2099年)** 输入: year 公历年** month 公历月** day 公历日** p 储存农历日期地址** 输出: 1 成功** 0 失败** 作者: Campo** 修改: 赖皮** 日期: 2007年02月06日**-------------------------------------------------------------------------------------------------------** 修改人:** 日期:**------------------------------------------------------------------------------------------------------******************************************************************************* *************************/unsigned char GetChinaCalendar(unsigned int year,unsigned char month,unsigned char day){unsigned char temp1,temp2,temp3,month_p,yearH,yearL;unsigned char flag_y;unsigned short temp4,table_addr;yearH=year/100; yearL=year%100;if((yearH!=19)&&(yearH!=20)) return(0);// 定位数据表地址if(yearH==20) table_addr=(yearL+100-1)*3;else table_addr=(yearL-1)*3;// 取当年春节所在的公历月份temp1=year_code[table_addr+2]&0x60;temp1>>=5;// 取当年春节所在的公历日temp2=year_code[table_addr+2]&31;// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月if(temp1==1) t emp3=temp2-1;else temp3=temp2+31-1;// 计算公历日离当年元旦的天数if (month<10) temp4=day_code1[month-1]+day-1;else temp4=day_code2[month-10]+day-1;// 如果公历月大于2月并且该年的2月为闰月,天数加1if ((month>2)&&(yearL%4==0)) temp4++;// 判断公历日在春节前还是春节后if (temp4>=temp3){temp4-=temp3;month=1;month_p=1;flag_y=0;if(GetMoonDay(month_p,table_addr)==0) temp1=29; //小月29天else temp1=30; //大小30天// 从数据表中取该年的闰月月份,如为0则该年无闰月temp2=year_code[table_addr]/16;while(temp4>=temp1){temp4-=temp1;month_p++;if(month==temp2){NL[4]='R';flag_y=~flag_y;if(flag_y==0) {month++;NL[4]=' ';}}else {month++;NL[4]=' ';}if(GetMoonDay(month_p,table_addr)==0) temp1=29;else temp1=30;}day=temp4+1;}// 公历日在春节前使用下面代码进行运算else{temp3-=temp4;if (yearL==0){yearL=100-1;yearH=19;}else yearL--;table_addr-=3;month=12;temp2=year_code[table_addr]/16;if (temp2==0) {month_p=12;NL[4]=' ';}else {month_p=13;NL[4]='R';}flag_y=0;if(GetMoonDay(month_p,table_addr)==0) temp1=29;else temp1=30;while(temp3>temp1){temp3-=temp1;month_p--;if(flag_y==0) month--;if(month==temp2) flag_y=~flag_y;if(GetMoonDay(month_p,table_addr)==0) temp1=29;else temp1=30;}day=temp1-temp3+1;}/////////////////////////NL[0]=yearH;NL[1]=yearL;NL[2]=month;NL[3]=day;return(1);}void zhuan(SYSTEMTIME *Time){GetChinaCalendar(Time->YearH*100+Time->Year,Time->Month,Time->Day);Time->day = NL[3];Time->month =NL[2];//将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为2007/07/22{Time->NLDateString[0] = NL[0]/10 + '0';Time->NLDateString[1] = NL[0]%10 + '0';Time->NLDateString[2] = NL[1]/10 + '0';Time->NLDateString[3] = NL[1]%10 + '0';}else{Time->NLDateString[0] = ' ';Time->NLDateString[1] = ' ';Time->NLDateString[2] = ' ';Time->NLDateString[3] = ' ';}Time->NLDateString[4] = '/';if(hide_month<2){Time->NLDateString[5] =NL[4] ;Time->NLDateString[6] = Time->month/10 + '0';Time->NLDateString[7] = Time->month%10 + '0';}else{Time->NLDateString[6] = ' ';Time->NLDateString[7] = ' ';}Time->NLDateString[8] = '/';if(hide_day<2){Time->NLDateString[9] = Time->day/10 + '0';Time->NLDateString[10] = Time->day%10 + '0';}else{Time->NLDateString[9] = ' ';Time->NLDateString[10] = ' ';}Time->NLDateString[11] = '\0'; //字符串末尾加'\0' ,判断结束字符//////////////////////}//显示天干生肖void lcd_digan(){temp = NL[1]%12;switch(temp){case 0: GotoXY(3,0); Print("Chen LongYear");//龙break;case 1: GotoXY(3,0); Print("Si She ear");//蛇break;case 2: GotoXY(3,0); Print("Wu Ma Year");//马break;case 3: GotoXY(3,0); Print("Wei YangYear"); //羊break;case 4: GotoXY(3,0); Print("Chen Hou Year"); //猴break;case 5: GotoXY(3,0); Print("You Ji Year"); //鸡break;case 6: GotoXY(3,0); Print("Xu Gou Year"); //狗break;case 7: GotoXY(3,0); Print("Hai Zhu Year"); //猪break;case 8: GotoXY(3,0); Print("Zi Shu Year"); //鼠break;case 9: GotoXY(3,0); Print("Chou Niu Year"); //牛break;case 10:GotoXY(3,0); Print("Yin Hu Year"); //虎break;case 11:GotoXY(3,0); Print("Mao Tu Year"); //兔break;}}//显示天支void lcd_tianzhi(){temp = NL[1]%10;switch(temp){case 0: GotoXY(0,0); Print("Gen");//庚break;case 1: GotoXY(0,0); Print("Xin");//辛break;case 2: GotoXY(0,0); Print("Ren");//壬break;case 3: GotoXY(0,0); Print("Gui"); //癸?break;case 4: GotoXY(0,0); Print("Jia"); //甲break;case 5: GotoXY(0,0); Print("Yi"); //乙break;case 6: GotoXY(0,0); Print("Bin"); //丙break;case 7: GotoXY(0,0); Print("Din"); //丁break;case 8: GotoXY(0,0); Print("Wu"); //戊break;case 9: GotoXY(0,0); Print("Ji");//己break;}}void outkey() //跳出调整模式,返回默认显示{ uchar Second;if(out==0)//if(out==0||wireless_1==1) //{ mdelay(4);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;while(out==0);//while(wireless_1==1);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Upkey()//升序按键{Up=1;if(Up==0)//if(Up==0||wireless_2==1){mdelay(4);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp+1; //秒数加1up_flag=1; //数据调整后更新标志if((temp&0x7f)>0x59) //超过59秒,清零temp=0;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp+1; //分数加1up_flag=1;if(temp>0x59) //超过59分,清零temp=0;break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp+1; //小时数加1up_flag=1;if(temp>0x23) //超过23小时,清零temp=0;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp+1; //星期数加1up_flag=1;if(temp>0x7)temp=1;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp+1; //日数加1up_flag=1;if(temp>0x31)temp=1;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp+1; //月数加1up_flag=1;if(temp>0x12)temp=1;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp+1; //年数加1up_flag=1;if(temp>0x85)temp=0;break;default:break;}while(Up==0);//while(wireless_2==1);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Downkey()//降序按键{Down=1;if(Down==0)//if(Down==0||wireless_3==1){mdelay(4);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp-1; //秒数减1down_flag=1; //数据调整后更新标志if(temp==0x7f) //小于0秒,返回59秒temp=0x59;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp-1; //分数减1down_flag=1;if(temp==-1)temp=0x59; //小于0秒,返回59秒break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp-1; //小时数减1down_flag=1;if(temp==-1)temp=0x23;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp-1; //星期数减1down_flag=1;if(temp==0)temp=0x7;;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp-1; //日数减1down_flag=1;if(temp==0)temp=31;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp-1; //月数减1down_flag=1;if(temp==0)temp=12;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp-1; //年数减1down_flag=1;if(temp==-1)temp=0x85;break;default:break;}while(Down==0);//while(wireless_3==1);}}void Setkey()//模式选择按键{Set=1;if(Set==0)//if(Set==0||wireless_4==1){mdelay(4);count=count+1; //Setkey按一次,count就加1done=1; //进入调整模式while(Set==0);//while(wireless_4==1);}}void keydone()//按键功能执行{ uchar Second;if(flag==0) //关闭时钟,停止计时{ Write1302(0x8e,0x00); //写入允许temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); //禁止写入flag=1;。
利用for循环遍历数组arr的语法格式
利用for循环遍历数组arr的语法格式在程序设计中,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据。
为了对数组进行操作和处理,我们通常会使用循环来遍历数组中的元素。
而在循环的种类中,for循环是最常用的一种。
下面将介绍利用for循环遍历数组arr的语法格式。
1. for循环的语法格式for循环是一种控制流程的结构,它允许我们多次执行相同的代码。
在遍历数组时,for循环可以帮助我们逐个访问数组中的元素。
for循环的语法格式如下:```c++for (初始化; 条件; 更新) {// 执行的代码}```其中,初始化在循环开始前只执行一次,通常用来初始化计数器或设置循环的起始条件。
条件是一个布尔表达式,当条件为真时循环继续执行,当条件为假时循环结束。
更新用于每次循环迭代后更新计数器或者循环的控制条件。
2. 遍历数组arr的语法格式在使用for循环遍历数组时,我们需要知道数组的长度,以便确定循环的次数。
利用数组的下标来访问元素,可以写出遍历数组arr的语法格式如下:```c++int arr[] = {1, 2, 3, 4, 5};int len = sizeof(arr) / sizeof(arr[0]); // 计算数组arr的长度for (int i = 0; i < len; i++) {cout << arr[i] << " "; // 输出数组arr中的元素}```上面的代码中,我们首先定义了一个整型数组arr,并初始化了数组的元素。
然后通过sizeof操作符计算数组的长度,将其除以数组元素的大小得到数组的长度len。
我们使用for循环遍历数组arr,并通过下标i访问数组中的元素,最后输出数组arr中的元素。
3. 实例分析现在,我们来看一个具体的实例,说明如何利用for循环遍历数组arr的语法格式。
假设我们有一个数组arr,其中存储了一些学生的成绩,我们需要对这些成绩进行加分操作,然后输出新的成绩。
PHP递归解决兔子问题,面试必备
PHP递归解决兔⼦问题,⾯试必备接到⾯试通知辗转反侧,⼀直在默念明天改如何介绍⾃⼰的项⽬经验等。
早早的起床,洗漱,把⾃⼰的总结的问题⾃问⾃答了⼀些。
匆匆吃了早饭,挤进让⼈⾯⽬狰狞的地铁,此时什么都不顾,只盼着赶紧下地铁。
终于提前半⼩时到了⾯试地点,再次拿出准备的问题看了⼏眼,还剩15分钟上去。
跟着⼈⼒填了表格,然后给了我⼀个算法题。
如下:有⼀对兔⼦,从出⽣后第3个⽉起每个⽉都⽣⼀对兔⼦,⼩兔⼦长到第三个⽉后每个⽉⼜⽣⼀对兔⼦,假如兔⼦都不死,请编程输出两年内每个⽉的兔⼦总数为多少?忽然记起来,这道题之前跟⼀个朋友谈论过,思路是⼀样的。
第⼀种⽅法(for循环实现):<?phpfunction getResult($month){$one = 1; //第⼀个⽉兔⼦的对数$two = 1; //第⼆个⽉兔⼦的对数$sum = 0; //第$month个⽉兔⼦的对数if($month < 3){return ;}for($i = 2;$i < $month; $i++){$sum = $one + $two;$one = $two;$two = $sum;}echo $month.'个⽉后共有'.$sum.'对兔⼦';}第⼆种⽅法(递归):<?phpfunction fun($n){if($n == 1 || $n == 2){return 1;}else{return fun($n-1)+fun($n-2);}}事后,也去⽹上查了⼀下,但是⼤多数代码⽰例都是C语⾔、c++、java等等语⾔的。
并没有太多PHP相关的代码⽰例,这两种⽅法,希望可以帮到⼤家。
其实整个⾯试过程挺紧张,好在最后完成的挺漂亮。
这不,复试通知来了。
PHP实现公历日期与农历日期的互转换
PHP实现公历⽇期与农历⽇期的互转换PHP 实现公历⽇期与农历⽇期的互转换前⾔:今天根据客户的需求对时间进⾏了转换,就是客户要求增加农历⽇期的显⽰,在⽹上抄袭了⼀段,稍微修改了⼀下运⾏成功了,不难的,改动的很少的.⽰例代码:<?php/*** 陈海波新⼆级页⾯农历转换成公历** */// lunar.php 新建这个php⽂件,所有的代码⽆需改,需要改的是下⾯teacher.php 的⼏⾏class Lunar{private $_SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//定义公历⽉分天数private $_LStart = 1950 ;//农历从1950年开始private $_LMDay = array(//差:该年的农历正⽉初⼀到该年公历1⽉1⽇的天数;1~12:农历⽉份天数;闰:如有闰⽉,记录该⽉平⽉天数// 差 1 2 3 4 5 6 7 8 9 10 11 12 闰array(47,29,30,30,29,30,30,29,29,30,29,30,29),array(36,30,29,30,30,29,30,29,30,29,30,29,30),array(6,29,30,29,30,59,29,30,30,29,30,29,30,29), //五⽉29 闰五⽉30array(44,29,30,29,29,30,30,29,30,30,29,30,29),array(33,30,29,30,29,29,30,29,30,30,29,30,30),array(23,29,30,59,29,29,30,29,30,29,30,30,30,29), //三⽉29 闰三⽉30array(42,29,30,29,30,29,29,30,29,30,29,30,30),array(30,30,29,30,29,30,29,29,59,30,29,30,29,30), //⼋⽉30 闰⼋⽉29array(48,30,30,30,29,30,29,29,30,29,30,29,30),array(38,29,30,30,29,30,29,30,29,30,29,30,29),array(27,30,29,30,29,30,59,30,29,30,29,30,29,30), //六⽉30 闰六⽉29array(45,30,29,30,29,30,29,30,30,29,30,29,30),array(35,29,30,29,29,30,29,30,30,29,30,30,29),array(24,30,29,30,58,30,29,30,29,30,30,30,29,29), //四⽉29 闰四⽉29array(43,30,29,30,29,29,30,29,30,29,30,30,30),array(32,29,30,29,30,29,29,30,29,29,30,30,29),array(20,30,30,59,30,29,29,30,29,29,30,30,29,30), //三⽉30 闰三⽉29array(39,30,30,29,30,30,29,29,30,29,30,29,30),array(29,29,30,29,30,30,29,59,30,29,30,29,30,30), //七⽉30 闰七⽉29array(47,29,30,29,30,29,30,30,29,30,29,30,29),array(36,30,29,29,30,29,30,30,29,30,30,29,30),array(26,29,30,29,29,59,30,29,30,30,30,29,30,30), //五⽉30 闰五⽉29array(45,29,30,29,29,30,29,30,29,30,30,29,30),array(33,30,29,30,29,29,30,29,29,30,30,29,30),array(22,30,30,29,59,29,30,29,29,30,30,29,30,30), //四⽉30 闰四⽉29array(41,30,30,29,30,29,29,30,29,29,30,29,30),array(30,30,30,29,30,29,30,29,59,29,30,29,30,30), //⼋⽉30 闰⼋⽉29array(48,30,29,30,30,29,30,29,30,29,30,29,29),array(37,30,29,30,30,29,30,30,29,30,29,30,29),array(27,30,29,29,30,29,60,29,30,30,29,30,29,30), //六⽉30 闰六⽉30array(46,30,29,29,30,29,30,29,30,30,29,30,30),array(35,29,30,29,29,30,29,29,30,30,29,30,30),array(24,30,29,30,58,30,29,29,30,29,30,30,30,29), //四⽉29 闰四⽉29array(43,30,29,30,29,29,30,29,29,30,29,30,30),array(32,30,29,30,30,29,29,30,29,29,59,30,30,30), //⼗⽉30 闰⼗⽉29array(50,29,30,30,29,30,29,30,29,29,30,29,30),array(39,29,30,30,29,30,30,29,30,29,30,29,29),array(28,30,29,30,29,30,59,30,30,29,30,29,29,30), //六⽉30 闰六⽉29array(47,30,29,30,29,30,29,30,30,29,30,30,29),array(36,30,29,29,30,29,30,29,30,29,30,30,30),array(26,29,30,29,29,59,29,30,29,30,30,30,30,30), //五⽉30 闰五⽉29array(45,29,30,29,29,30,29,29,30,29,30,30,30),array(34,29,30,30,29,29,30,29,29,30,29,30,30),array(22,29,30,59,30,29,30,29,29,30,29,30,29,30), //三⽉30 闰三⽉29array(40,30,30,30,29,30,29,30,29,29,30,29,30),array(30,29,30,30,29,30,29,30,59,29,30,29,30,30), //⼋⽉30 闰⼋⽉29array(46,30,29,29,30,29,29,30,29,30,30,30,29),array(35,30,30,29,29,30,29,29,30,29,30,30,29),array(23,30,30,29,59,30,29,29,30,29,30,29,30,30), //四⽉30 闰四⽉29array(42,30,30,29,30,29,30,29,29,30,29,30,29),array(31,30,30,29,30,30,29,30,29,29,30,29,30),array(21,29,59,30,30,29,30,29,30,29,30,29,30,30), //⼆⽉30 闰⼆⽉29array(39,29,30,29,30,29,30,30,29,30,29,30,29),array(28,30,29,30,29,30,29,59,30,30,29,30,30,30), //七⽉30 闰七⽉29array(48,29,29,30,29,29,30,29,30,30,30,29,30),array(37,30,29,29,30,29,29,30,29,30,30,29,30),array(25,30,30,29,29,59,29,30,29,30,29,30,30,30), //五⽉30 闰五⽉29array(44,30,29,30,29,30,29,29,30,29,30,29,30),array(33,30,29,30,30,29,30,29,29,30,29,30,29),array(22,30,29,30,59,30,29,30,29,30,29,30,29,30), //四⽉30 闰四⽉29array(40,30,29,30,29,30,30,29,30,29,30,29,30),array(30,29,30,29,30,29,30,29,30,59,30,29,30,30), //九⽉30 闰九⽉29array(49,29,30,29,29,30,29,30,30,30,29,30,29),array(38,30,29,30,29,29,30,29,30,30,29,30,30),array(27,29,30,29,30,29,59,29,30,29,30,30,30,29), //六⽉29 闰六⽉30array(46,29,30,29,30,29,29,30,29,30,29,30,30),array(35,30,29,30,29,30,29,29,30,29,29,30,30),array(24,29,30,30,59,30,29,29,30,29,30,29,30,30), //四⽉30 闰四⽉29array(42,29,30,30,29,30,29,30,29,30,29,30,29),array(31,30,29,30,29,30,30,29,30,29,30,29,30),array(21,29,59,29,30,30,29,30,30,29,30,29,30,30), //⼆⽉30 闰⼆⽉29array(40,29,30,29,29,30,29,30,30,29,30,30,29),array(28,30,29,30,29,29,59,30,29,30,30,30,29,30), //六⽉30 闰六⽉29array(47,30,29,30,29,29,30,29,29,30,30,30,29),array(36,30,30,29,30,29,29,30,29,29,30,30,29),array(25,30,30,30,29,59,29,30,29,29,30,30,29,30), //五⽉30 闰五⽉29array(43,30,30,29,30,29,30,29,30,29,29,30,30),array(33,29,30,29,30,30,29,30,29,30,29,30,29),array(22,29,30,59,30,29,30,30,29,30,29,30,29,30), //三⽉30 闰三⽉29array(41,30,29,29,30,29,30,30,29,30,30,29,30),array(30,29,30,29,29,30,29,30,29,30,30,59,30,30), //⼗⼀⽉30 闰⼗⼀⽉29array(49,29,30,29,29,30,29,30,29,30,30,29,30),array(38,30,29,30,29,29,30,29,29,30,30,29,30),array(27,30,30,29,30,29,59,29,29,30,29,30,30,29), //六⽉29 闰六⽉30array(45,30,30,29,30,29,29,30,29,29,30,29,30),array(34,30,30,29,30,29,30,29,30,29,29,30,29),array(23,30,30,29,30,59,30,29,30,29,30,29,29,30), //五⽉30 闰五⽉29array(42,30,29,30,30,29,30,29,30,30,29,30,29),array(31,29,30,29,30,29,30,30,29,30,30,29,30),array(21,29,59,29,30,29,30,29,30,30,29,30,30,30), //⼆⽉30 闰⼆⽉29array(40,29,30,29,29,30,29,29,30,30,29,30,30),array(29,30,29,30,29,29,30,58,30,29,30,30,30,29), //七⽉29 闰七⽉29array(47,30,29,30,29,29,30,29,29,30,29,30,30),array(36,30,29,30,29,30,29,30,29,29,30,29,30),array(25,30,29,30,30,59,29,30,29,29,30,29,30,29), //五⽉29 闰五⽉30array(44,29,30,30,29,30,30,29,30,29,29,30,29),array(32,30,29,30,29,30,30,29,30,30,29,30,29),array(22,29,30,59,29,30,29,30,30,29,30,30,29,29), //三⽉29 闰三⽉30 );//是否闰年private function IsLeapYear($AYear){return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0)); }//公历该⽉的天数(year:年份; month:⽉份)private function GetSMon($year,$month){if($this->IsLeapYear($year) && $month == 2)return 29;elsereturn $this->_SMDay[$month];}//农历名称转换private function LYearName($year){$Name = array("零","⼀","⼆","三","四","五","六","七","⼋","九");for($i=0;$i<4;$i++)for($k=0;$k<10;$k++)if($year[$i]==$k)$tmp.=$Name[$k];private function LMonName($month){if($month >=1 && $month <=12 ){$Name = array( 1=>"正","⼆","三","四","五","六","七","⼋","九","⼗","⼗⼀","⼗⼆");return $Name[$month];}return $month;}private function LDayName($day){if($day >=1 && $day <=30 ){$Name = array( 1 =>"初⼀","初⼆","初三","初四","初五","初六","初七","初⼋","初九","初⼗","⼗⼀","⼗⼆","⼗三","⼗四","⼗五","⼗六","⼗七","⼗⼋","⼗九","⼆⼗","廿⼀","廿⼆","廿三","廿四","廿五","廿六","廿七","廿⼋","廿九","三⼗");return $Name[$day];}return $day;}//公历转农历(Sdate:公历⽇期)public function S2L($date){list($year, $month, $day) = explode("-", $date);if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;//获取查询⽇期到当年1⽉1⽇的天数$date1 = strtotime($year."-01-01");//当年1⽉1⽇$date2 = strtotime($year."-".$month."-".$day);$days=round(($date2-$date1)/3600/24);$days += 1;//获取相应年度农历数据,化成数组Larray$Larray = $this->_LMDay[$year - $this->_LStart];if($days <= $Larray[0]){$Lyear = $year - 1;$days = $Larray[0] - $days;$Larray = $this->_LMDay[$Lyear - $this->_LStart];if($days < $Larray[12]){$Lmonth = 12;$Lday = $Larray[12] - $days;}else{$Lmonth = 11;$days = $days - $Larray[12];$Lday = $Larray[11] - $days;}}else{$Lyear = $year;$days = $days - $Larray[0];for($i = 1;$i <= 12;$i++){if($days > $Larray[$i]) $days = $days - $Larray[$i];else{if ($days > 30){$days = $days - $Larray[13];$Ltype = 1;}$Lmonth = $i;$Lday = $days;break;}}}return mktime(0, 0, 0, $Lmonth, $Lday, $Lyear);//$Ldate = $Lyear."-".$Lmonth."-".$Lday;//$Ldate = $this->LYearName($Lyear)."年".$this->LMonName($Lmonth)."⽉".$this->LDayName($Lday); //if($Ltype) $Ldate.="(闰)";//农历转公历(date:农历⽇期; type:是否闰⽉)public function L2S($date,$type = 0){list($year, $month, $day) = split("-",$date);if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;$Larray = $this->_LMDay[$year - $this->_LStart];if($type == 1 && count($Larray)<=12 ) return false;//要求查询闰,但查⽆闰⽉//如果查询的农历是闰⽉并该年度农历数组存在闰⽉数据就获取if($Larray[$month]>30 && $type == 1 && count($Larray) >=13) $day = $Larray[13] + $day;//获取该年农历⽇期到公历1⽉1⽇的天数$days = $day;for($i=0;$i<=$month-1;$i++)$days += $Larray[$i];//当查询农历⽇期距离公历1⽉1⽇超过⼀年时if($days > 366 || ($this->GetSMon($month,2)!=29 && $days>365 )){$Syear = $year +1;if($this->GetSMon($month,2)!=29)$days-=366;else$days-=365;if($days > $this->_SMDay[1]){$Smonth = 2;$Sday = $days - $this->_SMDay[1];}else{$Smonth = 1;$Sday = $days;}}else{$Syear =$year;for($i=1;$i<=12;$i++){if($days > $this->GetSMon($Syear,$i))$days-=$this->GetSMon($Syear,$i);else{$Smonth = $i;$Sday = $days;break;}}}return mktime(0, 0, 0, $Smonth, $Sday, $Syear);//$Sdate = $Syear."-".$Smonth."-".$Sday;//return $Sdate;}}>teacher.php//公历转农历require_once(CORE_."Lunar.php"); // 加载lunar.php⽂件$today = date("Y-m-d");$lunar = new Lunar(); // 实例化类$nonglitime = array();$nl = date("Y-n-d",$lunar->S2L($today));echo $nl;exit; // 转为农历是:2012-05-25如有疑问请留⾔或者到本站社区交流讨论,感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
PHP基础循环语句之打印99乘法表
PHP基础循环语句之打印99乘法表 PHP打印数学的99乘法表要⽤到两个For循环,for循环是php流程控制语句中较常⽤到的⼀种,流程控制语句中的结构⼤体分为三种:顺序结构、分⽀结构与循环结构。
循环结构最常⽤的有while循环、do……while循环、for循环,这些循环都有着⾃⼰的特点。
其中,while 适合条件循环,for适合次数循环,99乘法表最能反映for循环语句的特性: 另外,纯⾯向对象的java中不能⽤go to,⽽C语⾔中与php中可以⽤go to,goto操作符可以⽤来跳转到程序中的某⼀指定位置。
该⽬标位置可以⽤⽬标名称加上冒号来标记。
PHP中的goto有⼀定限制,只能在同⼀个⽂件和作⽤域中跳转,也就是说你⽆法跳出⼀个函数或类⽅法,也⽆法跳⼊到另⼀个函数。
你也⽆法跳⼊到任何循环或者switch 结构中。
常见的⽤法是⽤来跳出循环或者switch,可以代替多层的break。
<?phpgoto a;echo 'Foo';a:echo 'Bar';> go to的特性使得有⼈⽀持,⼜有⼈反对php中加⼊goto,原因如下: ⽀持者:代码跳转快,⽅便 反对者:goto语句的⼤量使⽤是个灾难,尤其是在后续的代码维护之中,goto语句使得程序结构混乱(虽然它能够正确执⾏),但是读起来很难懂。
由于goto语句可以灵活跳转,如果不限制,它的确会破坏结构化的设计风格。
其次,goto语句经常带来错误或隐患,它可能跳过了某些对象的构造(破坏⾯向对象的原则)、变量的初始化、重要的计算等语句。
但实事求是的说,这样的错误是程序员⾃⼰造成的,不是goto的错。
php中对object对象使用foreach循环操作
php中对object对象使⽤foreach循环操作抛出疑问php的对象是可以使⽤诸如foreach进⾏循环的。
对象的循环,其实就是对像的开放属性进⾏的循环。
但是在某些框架中,⽐如laravel中的对象循环,我们发现它并不是对属性进⾏遍历。
普通对象:class abc{public $a = 'a';public $b = 'b';protected $c = 'c';private $d = 'd';public function index(){return 'func';}}$abc = new abc();foreach($abc as $item){dump($item);}打印结果如下:"a""b"laravel集合:这是使⽤laravel查询的分页对象$list = Article::paginate(15);Illuminate\Pagination\LengthAwarePaginator {#504 ▼#total: 2#lastPage: 1#items: Illuminate\Database\Eloquent\Collection {#510 ▼#items: array:2 [▼0 => App\Models\Article {#505 ▶}1 => App\Models\Article {#497 ▶}]}#perPage: 15#currentPage: 1#path: "/category/2"#query: []#fragment: null#pageName: "page"+onEachSide: 3#options: array:2 [▶]}提⽰# 表⽰保护属性+ 表⽰公开属性- 表⽰私有属性但是,对该循环的结果分析发现,它遍历的并不该对象本⾝。
for循环编写九九乘法表
for循环编写九九乘法表
for循环是一种常见的控制语句,可以在编程中被广泛使用。
下面是用for循环编写九九乘法表的方法:
在编写九九乘法表之前,需要了解嵌套循环的概念。
嵌套循环是指在一个循环语句内部再嵌套一个循环语句,通常用于多维数组的遍历或者矩阵的操作。
在编写九九乘法表时,我们可以用两个for循环来实现。
外层循环控制行数,内层循环控制列数,每次内层循环结束后要换行输出下一行。
下面是用for循环编写九九乘法表的示例代码:
```python
for i in range(1, 10):
for j in range(1, i+1):
print("{}*{}={}\t".format(j, i, i*j), end='')
print()
```
在这个代码中,第一个for循环用于控制行数,取值范围是1到9,即乘法表中的行数。
第二个for循环用于控制列数,取值范围是1到当前行数,即乘法表中
的列数。
在每一次内层循环中,我们使用print函数输出乘积,并且用制表符\t 分隔每个乘积,使得输出的乘法表更加美观。
需要注意的是,为了在同一行输出多个乘积,我们使用了end=''参数来指定print 函数输出后不换行。
另外,每行输出完毕后需要使用print函数来输出一个空行,以实现换行的效果。
通过以上代码,我们就可以用for循环编写出一份简单的九九乘法表了。
js使用for循环写html表
js使⽤for循环写html表以前使⽤php写,代码如下:1<h3>查询结果是:</h3>2<table border="1">3<tr>4<th>序号</th>5<th>商品型号P</th>6<th>商品型号N</th>7<th>M参考型号</th>8<th>Y参考型号</th>9<th>商品类别</th>10<th>商品名称</th>11<th>商品型式</th>12<th>是否完全录⼊</th>13<th>供应商⼀</th>14<th>供应商⼆</th>15<th>供应商三</th>16<th>供应商四</th>17<th>供应商五</th>18<th>供应商六</th>1920</tr>2122<?php23$i = 0;24foreach( $rows as $row ){25?>26<!-- 查看留⾔ -->27<tr>28<td><?php echo $i;?></td>29<td><?php echo $row['商品型号P'];?></td>30<td><?php echo $row['商品型号N'];?></td>31<td><?php echo $row['M参考型号'];?></td>32<td><?php echo $row['Y参考型号'];?></td>33<td><?php echo $row['商品类别'];?></td>34<td><?php echo $row['商品名称'];?></td>35<td><?php echo $row['商品型式'];?></td>36<td><?php echo $row['是否完全录⼊'];?></td>37<td><?php echo $row['供应商⼀'];?></td>38<td><?php echo $row['供应商⼆'];?></td>39<td><?php echo $row['供应商三'];?></td>40<td><?php echo $row['供应商四'];?></td>41<td><?php echo $row['供应商五'];?></td>42<td><?php echo $row['供应商六'];?></td>43</tr>44<?php45$i++;46}47?>48</table>现在正在学JS,使⽤js写,如下:1<body>2<p id="hang"></p>3<script>4 arr = [["1","2","3"],["4","5","6"],["7","8","9"]];56var str = "";7 str += '<table border="1">';8 str += '<tr><th>aa</th><th>bb</th><th>cc</th></tr>'91011for (x in arr)12 {13 str += "<tr>";14for (y in arr[x])15 {16 str += "<td>" + arr[x][y] + "</td>";17 }18 str += "</tr>";19 }2021 document.getElementById("hang").innerHTML=str;22</script>23</body>JS效果如图:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
制作年历
2.1实训说明
2.1.1 实验背景
日历是一种记载日期等相关信息的出版物,通常每页显示一日信息的叫日历,每页显示一个月信息的叫月历,每页显示全年信息的叫年历。
从日历的诞生至今,它有多种的呈现形式,如挂历、台历、年历卡、电子日历、万年历等。
2.1.2 功能描述
在生活中,日历对于人们的旅程规划、行程安排和工作计划等有着重要的作用。
下面将使用现阶段学习过的知识来实现年历的制作。
具体需求如下所示:
●根据用户输入的年份输出对应的年历
●用户可输入年份的取值范围是1582~9999
●判断31天的月份(1月、3月、5月、7月、8月、10月、12月)
●判断30天的月份(4月、6月、9月、11月)
●实现闰年2月29天,平年2月28天的功能
●将日期按照对应的星期输出展示
●按照3行4列的方式展示给定年份的年历
●确定年历中每月的星期输出顺序为“日、一、二、三、四、五、六”
接下来对本阶段案例的实现思路进行系统的分析,将一个复杂的案例分解成多个阶段,逐一进行实现,具体如下图所示。
年历实现思路图
从上图可以清晰的看到,实现年历的制作流程共分为6个阶段,第1阶段和第2阶段的判断是为了确定第3阶段2月份的天数,闰年2月份29天,平年28天。
接着在第4阶段将每月的1日设置为周天,使用0表示,周一到周六分别使用1~6表示,循环输出年历。
然后利用蔡勒公式计算用户给定年份的1月1日对应的星期。
最后对每月1号不是周日的月份日期,在输出前进行空白填充。
2.1.3 必备技术
(一)网页技术(HTML+CSS)
1.HTML网页构建的基本设计;
2.HTML网页样式的基本设计;
(二)PHP开发语言
1.变量
2.运算符
3.if语句
4.for语句
2.1.4 学时分配
实训课程学时安排可参考下表。
2.1.5 实训目标
1.熟练掌握if、for、逻辑运算符的使用。
2.掌握编程实现网页年历的生成。
2.2准备开发环境
本项目支持如下软件版本的运行环境:
●Apache 2.2~2.4
●PHP 5.3~7.1
●支持WampServer、XAMPP等集成环境
2.3实训任务描述
任务一:判断世纪年和普通年
【任务描述】
通常来讲,一百年是一个世纪,因此,只要用户给定的年份除以100,余数为0则表示该年份为世纪年,否则为普通年。
编写PHP文件calendar.php,具体代码如下所示。
在上述代码中,变量$year用于保存用户给出的4位数字表示的年份,如2008表示2008年,1998表示1998年。
当$year是世纪年时,表达式“$year % 100”的结果为0,与0相等结果为真,则if语句判断为真,输出第5行提示语句,否则输出第7行的提示语句。
值得一提的是,第4行的判断语句中,表达式“$year % 100”的结果有两种情况,分别是0和任意正整数,而任意正整数在条件判断语句中会自动转换成布尔类型值true,0转换成false。
因此,可以将第4~8行代码修改成如下形式。
在程序开发中,若在不考虑程序运行的复杂程度,两种方式都可以。
但若是要减少程序运行的复杂度,则建议使用第2种编写方式。
任务二:判断闰年和平年
【任务描述】
闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。
补上时间差的年份为闰年。
其中,对于世纪年和普通年的闰年算法有所不同,具体如下:
●普通年闰年的判断条件,需要同时满足除以4余数为0且除以100余数不为0的
两种情况
●世纪年闰年的判断条件,需要同时满足除以400余数为0且除以3200余数不为0
的两种情况
接下来,去掉上面输出的提示信息,添加确定是闰年还是平年的判断,继续编写PHP
文件calendar.php,具体代码如下。
上述第3~5行代码用于判断普通年是否为闰年,第7~9行代码用于判断世纪年是否为闰年。
当为闰年时将变量$leap的值设置1,方便后面的判断。
此外,if判断后若只有一条执行语句,则可以去掉“{}”,因此可以将上述第3~5行和第7~9行代码修改成以下形式。
任务三:判断每月最大的日期
【任务描述】
继续编写calendar.php文件,实现每月最大日期的判断。
具体代码如下所示。
上述第3行代码用于判断1月、3月、5月、7月、8月、10月或12月时每月最大的日期为31,第5~6行用于判断2月在闰年时最大的日期为29,普通年时为28,其余的月份最大的日期则是30。
接着可以通过for循环进行测试查看,在上述第9行代码后添加以下代码,具体如下。
在浏览器中运行calendar.php文件,效果如下图所示。
从图中可以清晰的看出每个月共有多少天,以及各个月份天数的差别。
任务四:输出年月日对应的日期
【任务描述】
1.分行输出年历
获取到每月共多少天后,接下来将每个月的日期按照星期的设置格式在表格中输出展示。
其中,关于如何实现7个日期一行的设计思路如下所示。
(1)根据需求分析,得到星期输出顺序为“日、一、二、三、四、五、六”。
(2)设定星期使用0~6之间的7位数字进行表示,0表示星期日,1表示星期一,依次类推。
(3)将用户给定年份的每月1日对应的星期变量$w这里先假设为0
(4)在循环每月的日期时,动态为星期变量$w加1,并判断$w的值是否大于6,若大于6,重置为0。
(5)当星期变量$w等于6且不是最后一天时,设置换行
按照上面的设计思路,修改calendar.php文件,并去掉测试查看代码。
在确定每月的最大日期后添加日期变量$w,用于保存假设的某年某月1日对应的星期。
具体代码如下。
上述第7~8行用于输出日历的标题和星期,第10行用于循环每月的日期,第11行用于在表格中输出日期,第12行用于在表格中实现换行,即结束当前行,并开始下一行。
第15行用于设置星期的变动。
修改完成后,在浏览器中进行预览,效果如下图所示。
分行展示年历
从上述的预览效果中可以看出,每月的日期按照星期的格式展示,但是每个日期对应的星期并不符合日期的算法。
因此,接下来我们利用蔡勒公式计算出年月日对应的星期。
2.按星期输出年历
在完成对应星期的计算前,首先具体看一下蔡勒公式以及其涉及到的具体变量含义,具体如下。
w = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 – y / 100 + y / 400) % 7 在上述给出的蔡勒公式中,共出现了4个变量,分别为w、y、m和d。
这些变量的具体含义如下所示。
●w:表示星期,其值取值范围是0~6,0表示星期日,1表示星期一,依次类推。
●y:4位数字表示的年份,其有效可以计算的范围是从1582年10月起。
如2020表
示2020年。
●m:表示月份,其取值范围是3~14,3表示3月,4表示4月,依次类推。
值得注
意的是,在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算。
如2020
年1月10日将要看作2019年的13月1日来计算。
●d:表示日,其取值范围是1~31
了解蔡勒公式的规定后,删除calendar.php文件中设置的星期变量$w,在判断每月的日期前添加以下代码,具体如下:
在上述代码中,在利用蔡勒公式计算年月日对应的星期时,对于执行除法(/)的运算要利用强制类型转换取整,防止出现小数的情况。
其中,当某月的1号不是星期日时,我们需要在1号输出前填充空白占位。
继续编写calendar.php文件,添加填充空白的代码。
具体实现如下。
上述第4行代码用于判断当前日期为1号,且对应的星期不是星期日时,执行第5行代码填充空白。
这里是通过合并单元格的方式实现,当然还可以采用其他方式,如添加空白占位符。
为了让年历的展示更加的精美,可按照个人喜好设置CSS样式,参考效果如图所示。