万年历课程设计报告

时间:2024.4.5

面向对象课程设计

      题 目          万年历程序设计          

      系 部              商学系              

      专 业         信息管理与信息系统       

      班 级             信息N122            

      学 号                                   

      学生姓名                                

      指导教师                                

      编写日期           2015.01.15           


第一章  需求分析......................................................................................... 3

第二章  概要设计......................................................................................... 4

第三章  详细设计与编码.............................................................................. 6

第四章 调试分析........................................................................................... 9

第五章 用户使用说明.................................................................................. 12

第六章 设计心得......................................................................................... 13


            

         第一章  需求分析 

                      

如今的社会是一个信息的时代,随着电脑等科技产品在人们生活中占据着越来越重要的地位,人们就会越加的善加利用,这为我们的生活带来了极大的效率,同时计算机的普及更可以看出它所占的地位。        

    万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便

 ,是一种比较实用的小工具。我们每个人都可以在自己的个人电脑上进行制作,一方面不仅可以加强巩固我们对C#语言的学习,还可以通过自主的编程找到自身的缺点。这对培养我们自身的创新能力和动手能力具有很大的作用。

          第二章  概要设计        

1.设计要求

程序完成运行时,能过正确的表达出所输入年份的万年历。

2.总体设计

   <1>实现操作流程图

圆角矩形:  运行万年历程序
        

             

 

   

 


  

   <2>程序设计流程图

圆角矩形:  万年历设计         

 

                

 

      第三章  详细设计与编码

<1>源代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Linq;

using System.Windows.Forms;

using System.Globalization;

namespace AllAgesCalendar

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

      

        private void Form1_Load(object sender, EventArgs e)

        {

            string intmonth = monthCalendar1.TodayDate.Month.ToString();

            string intdaty = monthCalendar1.TodayDate.Day.ToString();

            if (monthCalendar1.TodayDate.Month < 10)

            {

                intmonth = "0" + monthCalendar1.TodayDate.Month.ToString();

            }

            if (monthCalendar1.TodayDate.Day < 10)

            {

                intdaty = "0" + monthCalendar1.TodayDate.Day.ToString();

            }

            string s = String.Format("{0}年{1}月{2}", GetStemBranch(monthCalendar1.TodayDate),

                    GetMonth(monthCalendar1.TodayDate),

                        GetDay(monthCalendar1.TodayDate));

            label1.Text = monthCalendar1.TodayDate.Year + "年" + intmonth + "月" + intdaty + "日" + "     " + s + " " + getReturnYear(monthCalendar1.TodayDate) + "年";

            label1.ForeColor = Color.Green;

      

        }

        private void label1_Click(object sender, EventArgs e)

        {

        }

  

        ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();

        public string GetYear(DateTime time)

        {

            StringBuilder sb = new StringBuilder();

            int year = calendar.GetYear(time);

            int d;

            do

            {

                d = year % 10;

                sb.Insert(0, ChineseNumber[d]);

                year = year / 10;

            } while (year > 0);

            return sb.ToString();

        }

        private static string ChineseNumber = "〇一二三四五六七八九";

        public string GetMonth(DateTime time)

        {

            int month = calendar.GetMonth(time);

            int year = calendar.GetYear(time);

            int leap = 0;

          

            for (int i = 3; i <= month; i++)

            {

                if (calendar.IsLeapMonth(year, i))

                {

                    leap = i;

                    break; 

                }

            }

            if (leap > 0) month--;

            return (leap == month + 1 ? "闰" : "") + ChineseMonthName[month - 1];

        }

        public static readonly string[] ChineseMonthName = new string[] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };

       

        public string GetDay(DateTime time)

        {

            return ChineseDayName[calendar.GetDayOfMonth(time) - 1];

        }

        public static readonly string[] ChineseDayName = new string[] {

            "初一","初二","初三","初四","初五","初六¨´","初七","初八?","初九","初十",

            "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",

            "廿一","廿二","廿三","廿四","廿五","廿六¨´","廿七","廿八","廿九","三十"};

        public string GetStemBranch(DateTime time)

        {

            int sexagenaryYear = calendar.GetSexagenaryYear(time);

            string stemBranch = CelestialStem.Substring(calendar.GetCelestialStem(sexagenaryYear) - 1, 1) + TerrestrialBranch.Substring(calendar.GetTerrestrialBranch(sexagenaryYear) - 1, 1);

            return stemBranch;

        }

        public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸

";

        public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";

        public string getReturnYear(DateTime time)

        {

            int sexagenaryYear = calendar.GetSexagenaryYear(time);

            string Tree = TreeYear.Substring(calendar.GetTerrestrialBranch(sexagenaryYear) - 1, 1);

            return Tree;

        }

        public const string TreeYear = "鼠牛虎兔龙蛇马羊猴鸡狗猪";

       

      

     

        private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)

        {

   

            string strYesr = String.Format("{0}年{1}月{2}", GetStemBranch(monthCalendar1.SelectionStart),

                GetMonth(monthCalendar1.SelectionStart),

                GetDay(monthCalendar1.SelectionStart));

            toolTip1.ToolTipTitle = monthCalendar1.SelectionStart.ToShortDateString();

            toolTip1.Show(strYesr + " " + getReturnYear(monthCalendar1.SelectionStart) + "年", monthCalendar1, monthCalendar1.Location, 5000);

           

        }

    }

}

        第四章 调试分析

  <1>程序运行测试

     ①进入程序界面:

           (进入程序的第一步) 

         ②输入所查年份:

           (例上输入所查年月20##-2019)

  ③现实所查年份万年历:

              (以上就是完整的输出结果)

      第五章 用户使用说明

    

     这是一个简单的万年历编程,用户可以通过键入所查的年份,便可以轻松快速的查询这一年的万年历,使用用户在运行程序后,可以通过界面的指示键入所查的年份。

   

       第六章 设计心得

通过几天的不懈努力,这一份面向对象的课程设计终于在自己的努力与同学的帮助下顺利的完成了。前期可能是自己的一些方面薄弱,并没有完全的理解一些代码,从而设计出来的程序编译出错,还好在一些知识能力强的同学下进行了合理的改正才有了现在的这个完整的程序。

设计一个万年历的程序之前,可能都是有自己大概的一点想法,也许看上去简单,但通过实际的操作我便发现,各种细小的错误都可能会出现,这便让我意识到个人平时的动手操作还是有欠缺的。所以还是如老师讲的那般,以电脑软件的检验来通过不断的练习完善自己的薄弱点。

         


第二篇:C语言课程设计报告——万年历


每百年共100*(208周+5天)-1天=5217周+5天 ——注意这

个“5天”(整百年暂设为平年)

每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注

意这个“0天”和

“1天”(4个整百年只有一个闰年)

即400年一轮回!(原来万年历400年前是一家)

【二】根据万年历以上特点进行编写:

首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0当为闰年时可得1加上该程序便可得到每月的天数。 具体程序见(五、万年历程序)

再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期

三,可以用万年3月1日星期算法(特别是那个三)

由于其公式为:

某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%

7

某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7 或 某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

闰4百年3月1日星期算法(百年%4=0)

其公式为:

某年3月1日星期几=(年+年/4+月星期表+日+2天)%7

例:0000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

20xx年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

20xx年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四

20xx年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一

20xx年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六

20xx年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六

平4百年3月1日星期算法(百年%4<>0)

其公式为:

某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注

意:1700年是平年)

1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注

意:1800年是平年)

19xx年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注

意:19xx年是平年)

19xx年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五 19xx年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%

7=40%7=星期五

19xx年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)

%7=90%7=星期六

19xx年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0

+3)%7=128%7=星期二

19xx年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3

+3)%7=141%7=星期一

2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7

=8%7=星期一(注意:2100年是平年)

2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7

=9%7=星期二

2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7

=10%7=星期三

2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7

=11%7=星期四

2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7

=9%7=星期二(注意:2104年是闰年)

9999年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3

+3)%7=141%7=星期一

注:按400年一轮回!(400年前是一家)的说法

1600年,20xx年是一样的;

1700年,2100年是一样的;

1800年,2200年是一样的;

19xx年,2300年是一样的。

其中万年某日星期算法

其公式为:

某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

通同星期偏差表

闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

天数 31 29 31 30 31 30 31 31 30 31 30 31 星期 3 6 0 3 5 1 3 6 2 4 0 2

平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

天数 31 28 31 30 31 30 31 31 30 31 30 31 星期 4 0 0 3 5 1 3 6 2 4 0 2

为对以上的万年历星期的算法是正确的对其进行了以下的计算:

⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:

19xx年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4

1月表=4(平年) 故 4+4=1 即19xx年元旦是星期一

19xx年国庆 1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2

10月表=4(平年) 故 4+2=6 即19xx年国庆是星期六

19xx年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3 12月表=2(平年) 故 2+3=5 即19xx年12月31日是星

期五

⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+

日+2天)%7以下就是根据上面对其进行的计算:

20xx年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3

1月表=3(闰年) 故 3+3->6 即20xx年元旦是星期六

20xx年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5

2月表=0(平年) 故 0+5=5 即20xx年春节是星期五

20xx年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2 12月表=2(平年) 故 2+2=4 即20xx年12月31日是星

期四

对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写

具体编写程序见(五 、万年历程序)中。

五 、万年历源程序

#include"stdio.h"

#include"dos.h"

#include"conio.h"

#include"stdlib.h"

#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0 /*判断闰年*/

int numofMonth(int y,int m){

int day,t=28;

if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

day=31; /*定义以上月份为31天*/

else if(m==4||m==6||m==9||m==11)

day=30; /*定义以上月份为30天*/

else{t+=Year(y);

day=t;} /*闰年二月29天,平年28天*/

return day;}

int numofYear(int y){

int t=365; /*平年365天*/

t+=Year(y);/*闰年366天*/

return t;}

int numofbeforeDays(int y,int m,int d){

int sum=d,i;

for(i=1;i<m;i++)

sum+=numofMonth(y,i);

return sum;}

int numofafterDays(int y,int m,int d){

int sum=0,i;

for(i=m;i<=12;i++)

sum+=numofMonth(y,i);

sum-=d;

return sum;}

int isDay(int y,int m,int d){

int year=1900,month=1,week=1,i; /*定义万年历是从19xx年开始*/

long sum=0;

for(i=year;i<y;i++)

sum+=numofYear(i);

for(i=1;i<m;i++)

sum+=numofMonth(y,i);

/* ++sum;*/

i=sum%7;

week=(week+i)%7;

return week;}

void empty(int n){

int i;

for(i=0;i<n;i++)

printf("%*c",6,' ');}

void OutPutCalender(int y,int m,int d)/*计算x年x月x是星期几*/{

int week,i,num,t;

week=isDay(y,m,1);

printf("%6d/%02d/%02d\n",y,m,d);

printf("%6s%6s%6s%6s%6s%6s%6s\n","Sun","Mon","Tue","Wed","Thu","Fri",

"Sat");

empty(week);

num=numofMonth(y,m);

for(i=1;i<=num;i++){

printf("%6d",i);

t=(week+i)%7;

if(t==0)

printf("\n");} /*光标移到下一行*/

printf("\n");}

long numBTDays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不

同日期*/{

int i;

long sum=0;

for(i=y1+1;i<y2;i++)

sum+=numofYear(i);

if(y1==y2){ sum-=d1;

for(i=m1;i<m2;i++)

sum+=numofMonth(y1,i);

sum+=d2;}

else{sum+=numofafterDays(y1,m1,d1);

sum+=numofbeforeDays(y2,m2,d2);}

return sum;}

int Select_mean(){

int sm;

printf("1. OutPut Calender\n"); /*输出当前月份的日历*/

printf("2. Help\n"); /*帮助*/

printf("0. Quit\n"); /*退出*/

printf("Please enter choose(0--2):"); /*从0-2中选择*/

do

scanf("%d",&sm); /*输入sm*/

while(sm<0||sm>3);

return sm;}

void Help()/*输出帮助栏的内容*/{

printf(" 1. OutPut Calender\n");

printf(" 2. System Help\n");

printf(" 0. Quit\n");

printf("Page Up: Up year\n"); /*上一年*/

printf("Page Down: next year\n"); /*下一年*/

printf(" --> : next month\n"); /*上一月*/

printf(" <-- : Up month\n");/*下一月*/}

main(){

int year=2006,year1=2006,month,day,y1,m1,d1,y2,m2,d2,c,t; /*定义运行

后的日期是20xx年*/

int inkeySCAN,inkey; /*输入键盘操作信息*/

union REGS inregs,outregs;

inregs.h.ah=0x2a;

intdos(&inregs,&outregs);

/* year=outregs.xcx; */

month=outregs.h.dh;

day=outregs.h.dl;

year1=year;

printf("%d/%02d/%02d\n",year,month,day); while(1)/*当选择为1时,执行以下语句*/{

switch(Select_mean()){

case 1:

OutPutCalender(year,month,day);

while(1){

inkey=bioskey(0);

inkeySCAN=(inkey&0xFF00)>>8;

if(inkeySCAN==77){

if(month==12){month=1;year1++;

OutPutCalender(year1,month,day);/*输出日历*/}

else{month++;

OutPutCalender(year1,month,day);

}}

if(inkeySCAN==75){

if(month==1){month=12;year1--;

OutPutCalender(year1,month,day);}

else{month--;OutPutCalender(year1,month,day);}}

if(inkeySCAN==73){

if(year1==1900) year1=year;

else{year1--;OutPutCalender(year1,month,day);}}

if(inkeySCAN==81){

year1++;OutPutCalender(year1,month,day);}

if(inkeySCAN==28)break;}

break; /*终止循环*/

case 2:

Help();

break;

case 0:

exit(0);

default:

printf("Enter ERROR!\n");

break;} }

}

六 运行过程

1.双击TC

1. 当对上面的程序进行了调试后运行会出现下面所示:

第一行所显示的就是系统时间!满足了第一条要求“显示年、月、日”。

而当改变系统时间后!再运行该程序上面的日期也随系统时间改变,所以满足第

四条“当系统时间变动时,能自动跳到相应的时间。”

2. 在光标处按下“1”后回车,将会显示:

以上的显示也证明了条件的第2条可以“显示星期!”

3. 在光标处按下“2”后回车,将会显示:

按着帮助所讲进行了运行可知:按“ Page Up ”键其下面接着会显示上一年该月的万年历,按“ Page Down ”键其下面会接着显示下一年该月的万年历;按“ ← ”键下面将会接着显示当年上一个月的万年历,按“ → ”键将会接着在

下面显示去下一个月的万年历。

4.

由上所显示键入“0”后将会退去该程序。

由以上运行的结果可知该c语言所设计的万年历满足设计要求!

七、在C语言编程中常见错误

C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我

通过这次编程,也积累了一些C编程时常犯的错误:

1. 书写标识符时,忽略了大小写字母的区别。

编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,

变量名用小写表示,以增加可读性。

2.忽略了变量的类型,进行了不合法的运算。

%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型

变量则不允许进行“求余”运算。

3.将字符常量与字符串常量混淆。

混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,

它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而

把它赋给一个字符变量是不行的。

4.忽略了“=”与“==”的区别。

在C语言中,“=”是赋值运算符,“==”是关系运算符。如:

if (a==3) a=b;

前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。

由于习惯问题,初学者往往会犯这样的错误。

5.忘记加分号。

分号是C语句中不可缺少的一部分,语句末尾必须有分号。

a=1 b=2

编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未

发现错误,就需要看一下上一行是否漏掉了分号。

{ z=x+y;

t=z/100;

printf("%f",t);

}

对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL

不同的)。

6.多加分号。

对于一个复合语句,如:

{ z=x+y;

t=z/100;

printf("%f",t);

};

复合语句的花括号后不应再加分号,否则将会画蛇添足。

又如:

if (a%3==0);

I++;

本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此

结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。

再如:

for (I=0;I<5;I++);

{scanf("%d",&x);

printf("%d",x);}

本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个

分号,使循环体变为空语句,此时只能输入一个数并输出它。

7.输入变量时忘记加地址运算符“&”。

int a,b;

scanf("%d%d",a,b);

这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进

去。“&a”指a在内存中的地址。

8.输入数据的方式与要求不符。scanf("%d%d",&a,&b);输入时,不能用逗号作两

个数据间的分隔符,如下面输入不合法:

3,4

输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键t

ab。

scanf("%d,%d",&a,&b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合

法的:

3,4

此时不用逗号而用空格或其它字符是不对的。

3 4 3:4

又如:

scanf("a=%d,b=%d",&a,&b);

输入应如以下形式:

a=3,b=4

9.输入字符的格式与要求不一致。

在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输

入。

scanf("%c%c%c",&c1,&c2,&c3);

如输入a b c

字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读

入一个字符,后面不需要用空格作为两个字符的间隔。

10.输入输出的数据类型与所用格式说明符不一致。

例如,a已定义为整型,b定义为实型

a=3;b=4.5;

printf("%f%d\n",a,b);

语法错

逻辑错 运行错

0.忘记定义变量:

main()

{x=3;y=6;

printf(“%d\n”,x+y);

11.C语言的变量一定要先定义才能使用;

12.输入输出的数据的类型与所用格式说明符不一致

int a=3;float b=4.5;printf(“%f%d\n”,a,b);

它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单

元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据

按%d,作为整数输出)

13.未注意int型数据的数值范围

int型数据的数值范围(-32768~32768)

int num=89101;

printf(“%d”,num);

会将超过低16位的数截去从而得到23563

注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误

14.输入变量时忘记使用地址符

scanf(“%d%d”,a,b);

15.输入时数据的组织与要求不符

对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入

16.误把”=“作为”等于”比较符

“=“为附值运算符

“==“为比较运算符

17.语句后面漏分号

{

t=a;

a=b;

b=t

}

它是pascal的语法

18.不该加分号的地方加了分号

if(a>b);

printf(“a is larger than b\n”);

for(i=0;i<10;i++);

{

scanf(“%d”,&x);

printf(“%d\n”,x*x);

}

19.对应该有花括弧的复合语句,忘记加花括弧

sum=0;

i=1;

while(i<=100)

sum=sum+1;

i++;

20.括弧不配对

while((c=getchar()!=?#?)

putchar(c);

11.在用标识时,忘记了大写字母和小写字母的区别

{

int a,b,c;

a=2;

b=3;

C=A+B;

printf(“%d+%d=%D”,A,B,C);

}

12.引用数组元素时误用发圆括弧

{

int i,a(10);

for(i=0;i<10;i++)

scanf(“%d”,&a(i));

}

13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值

{

int a[10]={1,2,3,4,5,6,7,8,9,10};

int i;

for(i=1;i<=10;i++)

printf(“%d”,a[i]);

}

14.对二维或多维数组的定义和引用的方法不对

{

int a[5,4];

printf(“%d”,a[1+2,2+2]);

}

15.误以为数组名代表数组中全部元素

{int a[4]={1,2,3,4};

printf(“%d%d%d%d”,a);

}

16.混淆字符数组与字符指针的区别

main()

{

char str[40];

str=“Computer and c”;

printf(“%s\n”,str);

}

17.在引用指针变量之前没有对它赋予确定的值

{

char *p;

scanf(“%s”,p);

}

{

char *p,c[20];

p=c;

scanf(“%s”,p);

}

18.switch语句的各分支中漏写 break语句

混淆字符和字符串的表示形式

char sex;

sex=“M”;

19.使用自加(++)和自减(--)运算符时出的错误

{

int *p,a[5]={1,3,5,7,9};

p=a;

printf(“%d”,*p++);

}

注意于*(++p)的区别;

20.所调用的函数在调用语句之后才定义,而又在调用前未加说明

main()

{float x,y,z;

x=3.5;y=-7.6;

z=max(x,y);

printf(“%f”,z);

}

编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。

八、心得体会

1. 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在19xx年至20xx年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。

2. 经过上一个学期对《C程序设计》的学习,我们学习了理论知识,了解了C

语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己

的不足之处和薄弱环节,加以弥补和加强。

3. 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利

于更好的掌握c语言!

4. 在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了

要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的

必要性和重要性!

5. 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与

实践相结合的难关!

6. 由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰

富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c

语言程序设计更加了解了c语言的好处和其可用性!

7. 在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设

计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还

可能会获得成功吗?

8. 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导

致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提

高自己的能力!为以后的工作打下良好的知识基础和技能基础!

九、参考文献

⒈谭浩强编著.C程序设计第二版[M].北京:清华大学出版社,1999

⒉陈朔鹰,陈英编著.C语言趣味程序百例精解[M].北京:北京理工大学出版社,1

994

⒊电脑知识与技术学术交流版[J]2005.2 (备注:来自网络资源)

⒋Herbert Schildit著. 戴健鹏译. C语言大全 (第二版)[M].北京:电子工

业出版社,1994

⒌谭浩强,张基温,唐永炎编著. C语言程序设计教程.[M]北京: 高等教育

出版社,1992

⒍秦友淑,曹化工编著. C语言程序设计教程. [M]武汉:华中理工大学出版社,

1996

⒎曹衍龙,林瑞仲,徐慧 编著.C语言实例解析精粹 [M]北京:人民邮电出

版社,2005.3

⒏黄明等编著.21世纪进阶辅导C语言程序设计. [M]大连理工大学出版

更多相关推荐:
C++万年历课程设计报告

武汉纺织大学课程设计报告书武汉纺织大学课程名称题目专业班级指导教师设计报告书C程序设计课程设计万年历李敏20xx年6月11日第1页共24页目录课程设计报告书1第一章需求分析3第二章概要设计4第三章详细设计与编码...

万年历综合课程设计报告

目录目录1第一章设计目的与要求311设计目的312设计要求3第二章课程设计分析421设计背景422程序开发环境423课程设计主要内容4第三章总体设计531整体流程图532功能模块图633各模块功能详细说明633...

51单片机万年历课程设计报告

一设计任务1设计任务设计并制作一个数字钟2设计要求显示年月日时分秒及星期信息具有可调整日期和时间功能增加闰年计算功能显示部分由LCD1602完成二方案论证1显示部分显示部分是本次设计的重要部分一般有以下两种方案...

电子万年历设计报告

单片机课程设计课题:电子万年历设计系别:电气与电子工程系专业:电子信息工程姓名:**学号:**河南城建学院20**年12月28日摘要ⅠAbstract.Ⅰ1绪论(课题背景、概述、目的)..12设计要求与方案论述…

万年历课程设计报告

西安文理学院软件学院课程设计报告设计名称设计题目万年历学生学号1402110147专业班级软件工程一班学生姓名罗强强学生成绩指导教师职称课题工作时间20xx1115至20xx1129软件学院课程设计任务书指导教...

电子万年历课程设计报告

课程创新与综合课程设计电子与电气工程系实践教学环节说明书题目名称电子万年历院系电子与电气工程学院专业电子信息工程班级学号1109635010学生姓名11指导教师q1起止日期13周周一14周周五1电子万年历一设计...

万年历C++课程设计报告

徐州师范大学科文学院本科生课程设计课程名称计算机程序设计实训题目万年历的设计专业班级电子信息工程08电信学生姓名学生学号日期20xx1220指导教师姜芳艽科文学院教务部印制2指导教师签字年月日3徐州师范大学物理...

数字万年历课程设计报告

电子万年历设计课程设计报告课程名称微控制器原理与接口技术课程设计系部计算机科学系专业班级计算机科学与技术专业B0905班学生姓名完成时间报告成绩摘要本设计是一种基于AT89C51单片机控制的数字万年历设计它具有...

单片机课程设计—万年历[1]

郑州轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目电子万年历学生姓名系别专业班级学号指导教师20xx年12月16日123设计题目电子万年历设计任务与要求1显示年月日时分秒及星期信息2具有可调整日期和...

单片机万年历系统设报告C语言编写优秀文档95分

XXXXX大学学生实习实训总结报告学院电气与信息工程学院专业班级XXXXXXXX学生姓名XXXX学号XXXXXXXX实习实训地点XXXXXXXXX报告题目单片机万年历系统设报告报告日期201X年X月XX日指导教...

万年历课程设计报告_实例模版

课程设计报告课程名称C语言课程设计课题名称万年历班级学号姓名指导教师杨泽华20xx年7月信息学院教务处监制万年历设计报告格式一目的根据所学知识编写指定题目的C语言程序并规范地完成课程设计报告通过课程设计加深对C...

万年历课程设计

漳州职业技术学院应用电子专业课程设计报告电子课程设计报告课程名称设计内容实验时间专业班级姓名学号同组人指导老师09电子2班廖传柱施众20xx年12月29日0漳州职业技术学院应用电子专业课程设计报告目录摘要2第一...

万年历课程设计报告(28篇)