C考试.docx

上传人:b****1 文档编号:2523135 上传时间:2023-05-03 格式:DOCX 页数:74 大小:179.60KB
下载 相关 举报
C考试.docx_第1页
第1页 / 共74页
C考试.docx_第2页
第2页 / 共74页
C考试.docx_第3页
第3页 / 共74页
C考试.docx_第4页
第4页 / 共74页
C考试.docx_第5页
第5页 / 共74页
C考试.docx_第6页
第6页 / 共74页
C考试.docx_第7页
第7页 / 共74页
C考试.docx_第8页
第8页 / 共74页
C考试.docx_第9页
第9页 / 共74页
C考试.docx_第10页
第10页 / 共74页
C考试.docx_第11页
第11页 / 共74页
C考试.docx_第12页
第12页 / 共74页
C考试.docx_第13页
第13页 / 共74页
C考试.docx_第14页
第14页 / 共74页
C考试.docx_第15页
第15页 / 共74页
C考试.docx_第16页
第16页 / 共74页
C考试.docx_第17页
第17页 / 共74页
C考试.docx_第18页
第18页 / 共74页
C考试.docx_第19页
第19页 / 共74页
C考试.docx_第20页
第20页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C考试.docx

《C考试.docx》由会员分享,可在线阅读,更多相关《C考试.docx(74页珍藏版)》请在冰点文库上搜索。

C考试.docx

C考试

世界因为女性的诞生,显得分外美丽!

只是一个小小的问候,却是一个浓浓的真意!

女人节

2.2实验项目1C++运行环境及基础语法

实验目的:

1.熟悉C++的开发运行环境

2.掌握C++的基本语法

3.熟悉结构化程序设计

2.2.1实验内容:

最简单的C++程序运行调试

实验步骤:

输入下面程序并运行,记录运行结果

#include

usingnamespacestd;

intmain(){

cout<<”myfirstcppprogram”<

return0;

}

问题:

1、main函数的返回值有什么含义?

程序中main可以定义为void类型吗?

可以去掉最后的return0语句吗?

修改程序,并编译,注意屏幕提示,解释结果

返回的值的意思是程序的结束标志。

当返回值为VOID时,此时无须加上返回值。

也可以去掉最后的0,此时的返回类型为VOID。

修改后的程序:

#include

intmain(){

std:

:

cout<<"myfirstcppprogram"<

:

endl;

return0;

}

答:

运行的结果:

//myfirstcppprogram

//Pressanykeytocontinue

2、程序中的usingnamespacestd;有什么作用?

如果不要计算机会有和提示?

修改程序,删除usingnamespacestd;并让程序能运行

作用:

命名空间是为了防止名字(符号)冲突而把一系列的类型、变量、函数放在一起的一种方式,命名控件要和变量作用域放在一起来理解,在作用域范围内使用命名空间就可以访问该命名空间内定义的符号。

提示如下:

compiling...

1.cpp

E:

\first\1.cpp(3):

errorC2065:

'cout':

undeclaredidentifier

E:

\first\1.cpp(3):

errorC2297:

'<<':

illegal,rightoperandhastype'char[21]'

E:

\first\1.cpp(3):

errorC2065:

'endl':

undeclaredidentifier

执行cl.exe时出错.

1.obj-1error(s),0warning(s)

提示:

使用std:

:

cout

Std:

:

cout<<"returntook!

"<

2.2.2实验内容.结构化程序

设计基础

下面程序是从键盘输入一个数,并求其阶乘:

注意:

重新建一个工程,不要在一个工程中有多个main函数出现

#include

usingnamespacestd;

intmain(){

intn,fact;

cin>>”inputanum:

”>>n;//这条语句有错,应怎么改?

注意cin和cout的区别

for(inti=1;i

fact=fact*i;}

cout<

="<

return0;}

验证:

输入5,应该是120,那么20的阶乘呢?

怎么解释结果?

注意初始化和变量的范围提示:

从变量的作用域上考虑

问题:

修改程序,在程序最后输出循环变量i的值

注意程序中的语句:

for(inti=1;i

说明这种把变量定义在()中的含义及其局限

#include

usingnamespacestd;

intmain(){

DOUBLEn,fact;

cout<<"inputanum";//改正过后结果;

cin>>n;

fact=1;

for(inti=1;i

fact=fact*i;

}

cout<

="<

return0;

}

答:

就是将FACT的初定义为1;

将CIN的输入直接接要输入的变量;

INT的范围在65353的范围这内因此当输入阶乘为20时它的结果远远大于它的长度

此时需要修改它的类型长度即将它修改为DOUBLE类型即可。

将INT放在括号里面的作用与在外面定义的作用是不同的

INT放在里面表示它只

引用和函数

修改如下程序,使其能调用swap函数对参数进行交换:

#include

usingnamespacestd;

voidswap(inta,intb){//在此将此语句改为:

voidswap(int&a,int&b)

intt;

t=a;a=b;b=t;

}

intmain(){

inta=1,b=6;

cout<<"beforeswap:

\n"<<"ais:

"<

"<

swap(a,b);

cout<<"afterswap:

\n"<<"ais:

"<

"<

return0;

}

提示:

使用引用

改正过后的结果是:

函数的重载和默认参数

从键盘上输入年龄(实数)和性别(用字符M和F表示),输出对应信息.要求如下

键盘输入如:

18.6F,则输出19yearsold,female

19.4M,则输出19yearsold,male

年龄采用四舍五入,如果不会,可以不实现,只取整即可

编写print函数来处理(输出),要求函数可以用任意顺序的参数调用,程序结构如下

intmain(){

floatyear;charsex;

输入

print(year,sex)

print(sex,year)

print();//这里输出0yearsold,male,即默认是0岁,male

return0;

}

程序不要改变main函数结构,编写printf函数(思考需要编写几个?

提示:

如何实现四舍五入?

可以采用变量+0.5取整

#include

#usingnamespacestd;

#include

#include

usingnamespacestd;

//这里输出years和sex顺序不同,但方法体是相同的。

voidprint(floatyear,charsex){

inty=0;

y=(int)year;

if(sex=='m'||sex=='M')cout<

elsecout<

}

//出参数顺序不同意外,其它都是相同的。

voidprint(charsex,floatyear){

inty=0;

y=(int)year;

if(sex=='m'||sex=='M')cout<

elsecout<

}

//这里输出0yearsold,male,即默认是0岁,male

voidprint(){

cout<<"0yearsold,male"<

}

intmain(){

floatyear;//变量year存放年龄变量。

charsex;//变量sex存放性别变量。

charinput[20];//存放输入字符串。

charyears[20];//存放输入字符串中年龄字符数组。

chardot[20];//存放输入字符数组中小数点以后的小数部分数组。

char*p;//存放小数点后第一位数值,用于判断是否进行四舍五入。

若大于5则总体值+1。

p=dot;

cout<<"pleaseinputyournameandsex(.eg.22M)"<

cin>>input;//输入字符数组。

//字符串数组最后一位一定是性别,首先提取出来存放在sex变量中。

sex=input[strlen(input)-1];

//将输入数组除最后一个字符以外的字符串传入年龄数组。

for(inti=0;i

years[i]=input[i];

}

//在年龄数组中获取小数点最近的数值,放入p中。

for(intj=0;j

if(years[j]=='.'){

*p=years[j+1];

}

}

//判断,若atoi(p)大于5,则年龄整体+1,若小于5,则年龄整体不变。

if(atoi(p)>=5)year=(float)(atoi(years)+1);

elseyear=(float)atoi(years);

//调用print函数。

Pring函数要进行重载。

print(year,sex);

print(sex,year);

print();//这里输出0yearsold,male,即默认是0岁,male

return0;

}

 

2.3实验项目2运用类和对象进行程序设计

实验目的

掌握类的定义

掌握对象的成员变量,成员函数的使用

掌握对象成员访问控制的设定

2.3.1实验内容类基本语法练习

#include

usingnamespacestd;

classTime//定义Time类

{public:

//数据成员为公用的

inthour;

intminute;

intsec;

};

intmain()

{Timet1;//定义t1为Time类对象

cin>>t1.hour;//输入设定的时间

cin>>t1.minute;

cin>>t1.sec;

cout<

”<

”<

return0:

}

改写程序,要求:

改写后的程序:

#include"stdafx.h"

#include"iostream"

usingnamespacestd;

classTime

{

public:

Time();

voidprinttime();//实现输出时间函数

voidsettime(int,int,int);//实现时间的的格式设置

private:

//将成员函数改为私有的

inthour;

intminute;

intsec;

};

Time:

:

Time()

{

hour=minute=sec=0;

}

voidTime:

:

settime(inth,intm,ints)

{

hour=(h>=0&&h<24)?

h:

0;

minute=(m>=0&&m<60)?

m:

0;

sec=(s>=0&&s<60)?

s:

0;

}

voidTime:

:

printtime()

{cout<

"<

"<

intmain()

{inti;

Timet1;

t1.settime(2,8,8);

cout<<"时骸?

间?

是?

:

";

t1.printtime();

cout<

cin>>i;

printf("pause");

return0;}

//①将数据成员改为私有的;

在上面已经实现了

//②将输入和输出的功能改为由成员函数实现;

在上面已经实现了

//③在类体内定义成员函数

在上面已经实现了

然后编译和运行程序。

请分析什么成员应指定为公用的?

什么成员应指定为私有的?

什么函数最好放在类中定义?

什么函数最好在类外定义?

外部成员就应该定义为公有的,属性成员应该定义为私有的。

函数声明应该放在类中,方便用户调用的函数应该放在类的外部

 

下面程序设计了一个日期类如下,通过成员函数init来初始化,print输出

classDate{

inty,m,d;

voidinit(){

y=year;m=month;d=day;

}

voidprint(){

cout<

}

}

intmain(){

Dated;

d.init();

d.print();

return0;

}

程序问题1:

程序有3处错误,试改正

提示:

类定义格式,注意最后的分号

在类定义完之后需要加分号

init函数是否要参数

需要带参数

注意成员函数的访问属性,公有还是私有

是公有的PUBLI

改正后的程序:

#include"stdafx.h"

#include"iostream"

usingnamespacestd;

classDate{

public:

voidinit(int,int,int);

voidprint();

private:

intyear,month,date;

};

voidDate:

:

init(inty,intm,intd){

year=y;

month=m;

date=d;

}

voidDate:

:

print(){

cout<<"date:

"<

}

intmain(){

Dated;

inti;

d.init(1990,8,9);

d.print();

cin>>i;

return0;

}

4把程序分成3个部分(文件),main函数所在的文件main.cpp,类的声明time.h,类的定义time.cpp。

三个文件在同一个工程中。

注意:

哪些要包含头文件。

5//选做:

(在头文件中使用头文件卫士(#ifndef……)来保护头文件可以被多次包含

程序:

问题2.根据上面修改的类,继续添加成员函数,要求能进行日期相减得到相差的天数,日期可以加上一个数,得到新的日期.为简化程序,设每个月都是30天.

#include

usingnamespacestd;

classDate{

inty,m,d;

public:

voidinit(intyear,intmonth,intday){

y=year;m=month;d=day;

}

voidprint(){

cout<

}

intsubDate(Date&d){

intdy;

intdm;

intdd;

if(this->y>d.y)dy=(this->y-d.y)*360;//把年求出并计算出它的天数

elsedy=(d.y-this->y)*360;

if(this->m>d.m)dm=(this->m-d.m)*30;//取出它的月份并用天数表示

elsedm=(d.m-this->m)*30;

if(this->d>d.d)dd=(this->d-d.d);//取出它的天数

elsedd=(d.d-this->d)*1;

returndy+dm+dd;

}

DateaddNum(intnum){

intdy,dm,dd;

dy=num/360;//传递一个数并计算出它的年份

dm=(num-(360*dy))/30;//传递一个数并计算出它的月份

dd=(num-dy*360-dm*30)/1;//传递一个数并计算出它的天数

this->y=this->y+dy;//当前年与它进行相加

this->m=this->m+dm;//当前月与它进行相加

this->d=this->d+dd;//当前日对它进行相加

return*this;

}

};

intmain(){

Dated1,d2,d3;

d1.init(1900,2,1);

d2.init(1900,1,1);

cout<<"thedatetotal:

"<

d3=d1.addNum(5);//计算出它加后的年月日

d3.print();

return0;

}提示:

增加成员函数intsubDate(Dated){……}//返回一个值

DateaddNum(intnum){……}//返回一

在main函数中验证如下

Dated1,d2,d3;

d1.init(1900,2,1);

d2.init(1900,1,1);

cout<

d3=d1.add(5);

d3.print();//d1是1900,2,6

思考:

addNum(intnum)函数的返回值是否可以定义为void?

即这样使用:

d1.add(5);

d1.print();

d1自身的日期加5,如果要这么做,addNum函数要如何修改?

提示:

注意区分当前对象,如果需要返回当前对象自己,可以使用return*this;

this是指向当前对象的指针,*this表示当前对象

改正过后的程序:

#include

usingnamespacestd;

classDate{

inty,m,d;

public:

voidinit(intyear,intmonth,intday){

if(month>12||day>30){

cout<<"dataerror"<

exit(0);}

else{y=year;m=month;d=day;}

}

voidprint(){

cout<

}

DateaddNum(intnum){

intdy,dm,dd;

dy=num/360;//传递一个数并计算出它的年份

dm=(num-(360*dy))/30;//传递一个数并计算出它的月份

dd=(num-dy*360-dm*30)/1;//传递一个数并计算出它的天数

this->y=this->y+dy;//当前年与它进行相加

this->m=this->m+dm;//当前月与它进行相加

this->d=this->d+dd;//当前日对它进行相加

return*this;

}

intsubDate(Date&d){

intdata=(this->y*12*30+(this->m-1)*30+this->d)-(d.y*12*30+(d.m-1)*30+d.d);

returndata;

}

};

intmain(){

Dated1,d2,d3;

d1.init(1900,25,1);

d2.init(1900,1,1);

cout<<"thedatetotal:

"<

d3=d1.addNum(5);//计算出它加后的年月日

d3.print();

d3.print();

return0;

}

程序:

问题3.修改前面的程序,初始化一个错误的日期,如Dated1;d1.init(1900,13,45);

程序可以运行么?

怎么修改程序保证程序不会输出一个错误的日期

voiderror(){

if(y>24||y<0||m>60||m<0||d>60||d<0){

cout<<"Timeerror"<

exit(0);

}

提示:

如果初始化出错了后面的就没必要运行下去了,可以用函数exit(0)结束程序

通过这个例子程序思考对象的安全性,如何保证对象是正常的,能不能把日期的年月日开放给使用者等

程序:

问题4:

(选作)使用下面公式增加求星期几的成员函数

计算星期可以用蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形)

*w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

*公式中的符号含义如下:

*c:

世纪(年的高两位数);

*y:

年(年的低两位数);

*m:

月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2005年1月1日要看作2004年的13月1日来计算);

*d:

日;

*[]代表取整,即只要整数部分

可以考虑增加如下一个weekDay()函数

weekDay(){//下面的y,m,d分别代表年月日

y=y%100;

if(m==1){m=13;y=y-1;}

else

if(m==2){m=14;y=y-1;}

intweek=(26*(m+1)/10+y+y/4-2*y/100+y/400+d-1)%7;

//week是一个整数,1表示是星期一,2是星期二,……0则是星期天

……

}

算算今天星期几,看看公式是否准确

程序:

问题5.参照日期类,自己设计一个时间类,能初始化,可以输出,进行时间相减等操作

说明:

时间的表示可以自行拟定,一般是”时分秒”形式,可以增加毫秒,采用12或24小时制都可以。

设计好了后大家可以互相交换“使用”一下,看看谁设计的类最好用

//

2.3.2实验内容运算符重载

问题1:

以下有类Point,请添加适当成员函数以便Point对象可以进行运算

classPoint{

intx,y;

public:

voidinit(inta,intb){

x=a;y=b;

}

voiddisp(){

cout<

}

} ;

intmain(){

Pointa,b,c ;

a.init(1,2) ;b.init(3,4)

c=a+b ;

c.disp() ;

}

#in

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2