C++实验时间加减乘
- 格式:doc
- 大小:24.50 KB
- 文档页数:2
c语言加减乘除简单程序语言是一种广泛应用于计算机编程的高级程序设计语言,它是一种通用的、面向过程的编程语言,因其简洁、高效、易于学习和使用的特点而备受程序员们的青睐。
在这篇文章中,我们将介绍一些基本的C 语言加减乘除的简单程序。
首先,我们需要了解C语言中的基本运算符。
C语言中的基本运算符包括算术运算符、关系运算符、逻辑运算符和位运算符等。
其中,算术运算符包括加、减、乘、除和求余等运算符,它们用于对数值进行基本的算术运算。
下面我们将分别介绍这些算术运算符的使用方法。
加法运算符(+):加法运算符用于将两个数相加,例如:int a = 10;int b = 20;int c = a + b;这段代码的意思是将变量a和变量b的值相加,并将结果赋值给变量c。
在这个例子中,变量a的值为10,变量b的值为20,所以变量c的值将为30。
减法运算符(-):减法运算符用于将第一个数减去第二个数,例如:int a = 10;int b = 20;int c = b - a;这段代码的意思是将变量b的值减去变量a的值,并将结果赋值给变量c。
在这个例子中,变量a的值为10,变量b的值为20,所乘法运算符(*):乘法运算符用于将两个数相乘,例如:int a = 10;int b = 20;int c = a * b;这段代码的意思是将变量a和变量b的值相乘,并将结果赋值给变量c。
在这个例子中,变量a的值为10,变量b的值为20,所以变量c的值将为200。
除法运算符(/):除法运算符用于将第一个数除以第二个数,例如:int a = 10;int b = 20;int c = b / a;这段代码的意思是将变量b的值除以变量a的值,并将结果赋值给变量c。
在这个例子中,变量a的值为10,变量b的值为20,所以变量c的值将为2。
求余运算符(%):求余运算符用于求两个数相除的余数,例如: int a = 10;int b = 20;int c = b % a;这段代码的意思是将变量b的值除以变量a的值,并将余数赋值给变量c。
c++ 加减乘除的运行时间
C++中加减乘除运算的运行时间取决于多个因素,包括硬件性能、编译
器优化、代码结构等。
下面将就不同的情况进行简要分析:
1. 加法运算:加法是一种基本的算术运算,其运行时间通常非常短暂,几乎可以忽略不计。
在大多数情况下,加法运算所需的时间与操作数
的数据类型无关,因为硬件级别上存在专门的加法器能够高速地完成
加法操作。
2. 减法运算:减法运算和加法运算类似,其运行时间也通常非常短暂,可以忽略不计。
同样地,硬件上的减法器也能够高效地完成减法操作。
3. 乘法运算:乘法运算的运行时间相对于加法和减法运算来说较长。
乘法操作通常需要进行多次的位运算和累加操作,因此其运行时间较长。
在大多数情况下,乘法运算所需的时间与操作数的位数成正比。
4. 除法运算:除法运算相对于加法、减法和乘法运算来说是较慢的。
除法操作通常需要进行多次的位运算、比较和位移操作,因此其运行
时间较长。
除法运算所需的时间通常取决于操作数的位数以及被除数
和除数的大小关系。
需要注意的是,以上所述的运行时间只是一般情况下的估计,并不适
用于所有情况。
实际的运行时间可能受到硬件性能、编译器优化等多
个因素的复杂影响。
因此,在具体项目中,若对运行时间有严格的要求,建议使用专门的性能分析工具进行具体测试和测量。
用C语言设计一个多功能计算器实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。
依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。
结果可以作为下一个运算的第一运算数。
按‘C’清屏,按‘X’退出。
例如:输入:2+5输出:72)实现单运算符表达式计算的功能。
输入的操作数可以包含整数或浮点数。
如果遇到错误的表达式,应输出错误提示信息。
输入表达式如下:例如:输入:2+5输出:7目录摘要 (1)第一章引言 (3)1.1 计算器概述 (3)第二章设计任务及要求 (5)2.1 设计任务 (5)2.2 设计要求 (6)第三章计算器硬件设计 (7)3.1 方案说明 (7)3.2 设计单片机主体电路图 (8)第四章软件设计 (9)4.1 模块介绍 (9)4.2 程序流程图 (10)4.3 程序部分 (11)第五章总结 (16)参考文献 (17)摘要:[目录]一、课程设计题目及任务要求二、设计思路三、部分程序介绍四、程序框图五、汇编程序六、参考资料[原文]一、课程设计题目及任务要求请设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
二、设计思路1、操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键0~9 共十个,接下来依次是加号键、减号键、等于号、清除键。
操作设备是两行八列共16键的简单键盘。
第一行从左至右分别为0、1、2、3、4、5、6、7,第二行分别为8、9、A(+)、B(-)、C(=)、D(清除键)、E (清除键)、F(清除键),“清除键”表示程序初始化,为下次输入准备。
2、程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果;(2)计算机复位功能:DEF均为清零重启,任何时候按下DEF中一个将重新开始;三、部分程序介绍(1)主程序(START)程序开始运行初始化程序,设置输入输出口PA、PB、PC,扫描键盘,输入两个待求数据和运算符,存入寄存器,等待输入等号同时显示第二个数,运行计算程序,并将计算结果分离,输出到显示器;(2)读键子程序(RD_KB)程序分别扫描两行键盘,若有键按下则通过移位的方式计算键码;若无键按下,则将键码缓存设置为10H,判断后进行相应的跳转。
实验内容:(1)使用C#的结构化程序设计方法;(2)能够进行加、减、乘、除运算测试;(3)每次只能进行一种运算的测试;(4)两个参加运算的整数由随机数来产生;(5)每测试一道题目给出正确和错误的显示,并提示是否继续测试;(6)用户结束测试要给出本次测试的统计信息,包括一共测试多少题,答对多少,分数是多少;(7)使用方法来实现主界面、加法运算测试、减法运算测试、乘法元算测试、除法运算测试和测试结果的显示。
using System;using System.Collections.Generic;using System.Text;namespace Count{//定义枚举类型存储运算方式enum sign : byte{加 = 1,减 = 2,乘 = 3,除 = 4,}//定义一个算术结构(因为用于计算的变量只存储一些数据,用结构更好)struct count{public double value1; //定义变量保存数字public double value2;public sign mySign;}class Program{private static count myCount;static void Main(string[] args){string answer; //定义变量存放是否继续计算int input, count, count1,count3;double result=0, result1;count = 0;count1 = 0;//定义变量存放用户的选择Console.WriteLine("--------欢迎使用运算程序--------\n");do{Random radnom = new Random();Console.WriteLine("欢迎进入四则运算");myCount.value1 = Convert.ToDouble(radnom.Next(101).ToString());myCount.value2 = Convert.ToDouble(radnom.Next(101).ToString());Console.WriteLine("请选择运算方式: 1.加法 2.减法 3.乘法 4.除法\n");input = Convert.ToInt32(Console.ReadLine());myCount.mySign = (sign)input;if (myCount.mySign <= (sign)4 && myCount.mySign >= (sign)1) //如果运算类型是“四则运算”{switch (myCount.mySign){case (sign)1:result = myCount.value1 + myCount.value2;break;case (sign)2:result = myCount.value1 - myCount.value2;break;case (sign)3:result = myCount.value1 * myCount.value2;break;case (sign)4:result = myCount.value1 / myCount.value2;break;}Console.WriteLine("{0}{1}{2}的结果是", myCount.value1,(sign)myCount.mySign, myCount.value2);result1 = Convert.ToDouble(Console.ReadLine());if (result1 == result){Console.WriteLine("正确的结果是{0}", result);Console.WriteLine("计算的数值是{0}", result1);Console.WriteLine("结果正确"); count++;}else{Console.WriteLine("正确的结果是{0}", result);Console.WriteLine("计算的数值是{0}", result1);Console.WriteLine("结果错误"); count1++;}}else{Console.WriteLine("请正确选择运算方式: 1.加法 2.减法 3.乘法 4.除法"); }Console.WriteLine("\n继续运算吗?(y/n)");answer = Console.ReadLine();} while (answer.ToLower() == "y");Console.WriteLine("正确次数为{0}" ,count);Console.WriteLine("错误次数为{0}" , count1);count3 = count + count1;Console.WriteLine("总共次数为{0}", count3);Console.ReadLine();}}}。
c语言函数加减乘除运算编程1.介绍在计算机科学中,函数是大多数编程语言中的基本组件之一,它是一段被封装起来的可重用代码。
在C语言中,函数的定义形式如下:返回类型函数名(参数列表){函数体}其中,返回类型指定函数返回值的类型,函数名用于调用函数,参数列表传递给函数的值用于函数计算中。
本文将介绍如何在C语言中实现基本的加减乘除运算函数。
2.实现加法函数加法是最基本的运算之一,在C语言中,我们可以定义一个函数来执行两个参数的加法。
下面是一个基本的加法函数:int add(int a, int b) {return a + b;}在此函数中,我们通过返回a和b的和来实现加法运算。
我们可以通过调用函数来获得相加的结果。
例如,下面的代码将调用add函数并将其结果打印到屏幕上:int main() {int num1 = 2;int num2 = 4;int sum = add(num1, num2);printf("The sum of %d and %d is %d\n", num1, num2, sum);return 0;}3.实现减法函数减法是另一个基本运算,我们可以通过类似的方法定义减法函数。
下面是一个基本的减法函数:int subtract(int a, int b) {return a - b;}在此函数中,我们通过a和b的差值返回减法结果。
的代码将调用subtract函数并将其结果打印到屏幕上:int main() {int num1 = 10;int num2 = 5;int difference = subtract(num1, num2);printf("The difference between %d and %d is %d\n",num1, num2, difference);return 0;}4.实现乘法函数乘法是另一个基本运算,我们可以通过类似的方法定义乘法函数。
c语言用库函数计算两日期相差的天数c语言用库函数计算两日期相差的天数#include <stdio.h>struct date{int year;int month;int day;};int main(void){int isPrime(int year);int dateDiff(struct date mindate,struct date maxdate);struct date mindate,maxdate;int days;printf("please input the one date:");scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindat e.day);printf("please input other day:");scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdat e.day);days=dateDiff(mindate,maxdate);printf("the day is:%d\n",days);return 0;}/************************************************************** **********//* 判断闰年函数(4年一润,100年不润,400年再润) *//************************************************************************/int isPrime(int year){if ((year%4==0&&year%100!=0)||(year%400==0)){return 1;}else{return 0;}}int dateDiff(struct date mindate,struct date maxdate){int days=0, flag=1;const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};const int notPrimeMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};/************************************************************** **********//* 交换两个日期函数,将小的日期给mindate,将大的日期给maxdate *//************************************************************** **********/struct date tmp;if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.mo nth)||(mindate.year==maxdate.year&&mindate.month==maxda te.month&&mindate.day>maxdate.day))tmp=mindate;mindate=maxdate;maxdate=tmp;}int maxmonth,minmonth;/************************************************************** **********//* 主要思路:拿2002-8-8 2005-2-22来说 *//* 将2004-8-8---2005-2-22----2005-7-8 *//*一前一后刚好N年,算出2005-2-22到2005-7-8的天数,然后用总年*36(5|6)减掉) *//* 2002-9-8 2005-11-22 *//* 2002-9-8-----2005-9-8-----2005-11-22(这次是加上后面天数) *//*如何判断是加还是减呢?年大而月小的,则是减,程序中用flag标示 *//************************************************************** **********/if (maxdate.month<mindate.month){maxmonth=mindate.month;minmonth=maxdate.month;flag=-1;}else{maxmonth=maxdate.month;minmonth=mindate.month;flag=1;/************************************************************** **********//* 从mindate.year开始累加到maxdate.year *//************************************************************** **********/for(int j=mindate.year;j<maxdate.year;++j){if (isPrime(j)==1){days+=366;}elsedays+=365;}/************************************************************** **********//* 从minmonth累加到maxmonth,分闰年和平年 *//************************************************************** **********/int day;if(isPrime(maxdate.year)==1){for(int i=minmonth;i<maxmonth;i++){day=primeMonth[i-1]*flag;days=days+day;}days=days+maxdate.day-mindate.day;}else{for (int i=minmonth;i<maxmonth;i++){day=notPrimeMonth[i-1]*flag;days=days+day;}days=days+maxdate.day-mindate.day;}return days;}C语言求两个日期相差的天数计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
c语言各个运算占用的时间
C语言中的各种运算操作所占用的时间是由多个因素决定的,包括硬件平台、编译器优化、代码结构和算法复杂度等。
下面是一些常见的C语言运算操作及其大致的时间复杂度:
1. 算术运算符(如加减乘除):通常为O(1),即常数时间复杂度,因为这些操作在大多数硬件平台上都能以固定的时钟周期完成。
2. 逻辑运算符(如与、或、非):同样为O(1),因为逻辑运算符可以直接映射到硬件电路中的逻辑门。
3. 关系运算符(如等于、不等于、大于、小于等):也是O(1),因为关系运算符的计算通常只涉及一个或少数几个比较操作。
4. 位运算符(如位与、位或、位异或):同样为O(1),因为位运算操作可以直接映射到硬件电路中的位操作。
5. 条件表达式(如if-else语句):时间复杂度取决于条件判断的复杂度,通常为O(1)到O(n),其中n表示条件表达式中变量的数量。
6. 循环语句(如for循环、while循环):时间复杂度取决于循环体的复杂度和迭代次数,通常为O(1)到O(n),其中n表示循环迭代的次数。
需要注意的是,以上只是大致的时间复杂度估计,实际的运行时间还受到编译器优化、硬件架构和代码实现等因素的影响。
对于特定的应用场景,可以通过实际测试和性能分析来获取更准确的运行时间信息。
1。
C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。
C++实验5运算符重载
实验5 运算符重载
一、实验目的
1.理解运算符重载概念;
2.学会使用运算符重载;
3.练习类和对象的使用。
二、实验内容
设计一个日期类Date,包括年、月、日等私有数据成员。
要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
三、实验要求
在Date类中设计如下重载运算符函数:
Date operator+(int days):返回某日期加上天数得到的日期
Date operator-(int days):返回某日期减去天数得到的日期int operator-(Date&b):返回两日期相差的天数
在实现这些重载运算符函数时调用以下私有成员函数:
leap(int):判断指定的年份是否为闰年
dton(Date &):将指定日期转换成从0年O月O日起的天数
ntod(int):将指定的0年O月O日起的天数转换成对应的日期
提示:可定义一个二维数组,存放闰年和非闰年每个月的天数,用于后面的计算,int day_tab[2][12]={{31,28,31,30,3l,30,3l,3l,30,31,30,31),
{31,29,31,30,31,30,31,31,30,31,30,31}};
// day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年。
面向对象组装技术中的构造法时间加减乘除四则运算面向对象组装技术中的构造法时间加减乘除四则运算随着信息化的发展,各行各业都在追求更高效,更方便的管理方式。
作为一种广泛应用的编程思想和方法,面向对象编程已经成为众多企业软件开发的标准。
组装技术作为一种面向对象编程模式的延伸,其以构造方法为核心,对对象的调用进行组装,实现原有对象的功能扩展或修改。
其中最基础、最常见的组装方式之一就是时间加减乘除四则运算,下面我们将会分别进行讲解。
一、时间类加减乘除四则运算时间是各种软件或系统中经常用到的数据类型之一,尤其是涉及到时序、推理等问题时,时间的运算意义更加突显。
在组装技术中,我们可以通过构造法来实现时间的加减乘除四则运算。
例如,我们可以通过对时间类的构造方法进行调用,来实现时间的加法运算。
假设现在我们有一个时间形如“2022-01-01 00:00:00”,我们想要将其加一天,可以通过在构造方法中获取现有时间值,再进行加减计算来实现。
这种时间加法运算方式不仅能够快速、精确地实现时间的计算,而且还具有良好的可维护性和可扩展性。
二、复合类加减乘除四则运算复合类是指由多种基本数据类型组合而成的自定义数据类型,它既可以理解为一种交叉类型,也可以理解为一种组合类型。
在组装技术中,我们可以通过构造方法来实现复合类的加减乘除四则运算。
例如,我们可以定义一个复合类X,包括两个基本数据类型,如下所示:```public class X {int a;int b;public X(int a, int b) {this.a = a;this.b = b;}}```以复合类X为例,在组装技术中,我们可以通过在构造方法中获取复合数据类型X中的a、b值,再进行加减乘除计算来实现四则运算。
这种方式利用了面向对象编程中的封装思想,使代码更加具有可读性和可维护性。
三、公共接口加减乘除四则运算除了时间类型和复合类型,还有一种数据类型,就是公共接口类型。
编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。
要求将小时范围限制在大于等于0,分钟范围限制在0~59,秒钟范围限制在0~59秒。
#include<iostream>
#include<string>
using namespace std;
class Time
{
public:
Time(int h=0,int m=0,int s=0);
Time operator+(Time&);
void disptime(string);
private:
int hourse;
int minutes;
int seconds;
};
Time::Time(int h,int m,int s)
{
hourse = h;
minutes = m;
seconds = s;
}
Time Time::operator+(Time & t)
{
int h,m,s;
s = (t.seconds+seconds)%60;
m = (minutes + t.minutes + (t.seconds+seconds)/60)%60;
h = hourse + t.hourse + (minutes + t.minutes + (t.seconds+seconds)/60)/60;
hourse = h;
minutes = m;
seconds = s;
return *this;
}
void Time::disptime(string str)
{
cout << str;
cout << hourse << ":" << minutes << ":" << seconds << " ." << endl;
}
void Input(int &h,int &m,int &s)
{
cout << " 输入时间: ";
cin >> h ;
cin >> m ;
cin >> s ;
while ( m < 0 ||m > 59 || s < 0 || s > 59)
{
cout << "******时间输入错误!请重新输!******\n";
cout << " 输入时间: ";
cin >> h ;
cin >> m ;
cin >> s ;
}
}
int main()
{
int h1,m1,s1,h2,m2,s2;
Input(h1,m1,s1);
Input(h2,m2,s2);
Time A(h1,m1,s1), B(h2,m2,s2);
A = A +
B ;
A.disptime("\n时间相加后的结果为:");
return 0;
}。