程序设计基础课后答案 第五章
程序设计基础(C语言)智慧树知到课后章节答案2023年下温州理工学院
程序设计基础(C语言)智慧树知到课后章节答案2023年下温州理工学院温州理工学院第一章测试1.以下哪个叙述是不正确的编程风格()。
答案:程序中的注释可有可无2.C语言程序的执行,总是起始于()。
答案:main函数3.以下叙述中正确的是()答案:用C程序实现的算法可以既没有输入也没有输出4.下面对C语言特点,不正确描述的是()。
答案:C语言的可移植性较差5.以下叙述正确的是()答案:C语言本身没有输入输出语句6.C语言中规定:在一个源程序中main函数的位置()。
答案:可以任意7.a,b均为整数,且b!=0,则表达式a/b*b+a%b的值是()答案:a8.设有以下语句:int x=10;x+=3+x%(-3),则x的值是()答案:149.设x为int型变量,则执行语句x=10和x+=x-=x-x后,x的值为( )答案:2010.main(){int a=12, b=12;printf("%d,%d\n",--a,++b);}以上程序的输出结果是:( )答案:11,1311.阅读下面的程序main(){int i,j;scanf("%3d%2d",&i,&j);printf("i=%d,j=%d\n",i,j);}如果从键盘上输入1234567<回车>,则程序的运行结果是( )答案:i=123,j=4512.表达式pow(2.8,srt(double ())值的数据类型为int ( )答案:错13.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是8 ( )答案:对14.’aBS’是非法常量 ( )答案:对15.C语言中运行’a’+1,所显示的值为97 ( )答案:错16.C语言中%c用于输出字符型数据( )答案:对第二章测试1.#include<stdio.h>int main(){int sum = 0;printf("符号在后自增:%d\n",sum++);printf("符号在前自增:%d\n",++sum);return 0; }程序代码中包含了选择结构()答案:错2.经过以下语句定义后,表达式z+=x>y?++x:++y()。
C++程序设计基础课后答案 第五章
5.1 阅读下列程序,写出执行结果1.#include < iostream.h >struct data{ int n ;float score ;} ;void main(){ data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ; cout << (p++)->n << endl ;cout << (p++)->n << endl ;cout << p->n++ << endl ;cout << (*p).n++ << endl ;}2.#include < iostream.h >struct employee{ char name[ 20 ] ;char sex ;} ;void fun( employee *p ){ if( (*p).sex == 'm' )cout << (*p).name << endl ;}void main(){ employee emp[5] = { "Liming", 'm', "Wangxiaoping", 'f', "Luwei", 'm' } ; int i ;for( i=0; i<3; i++ )fun( emp+i ) ;}3. #include < iostream.h >struct node{ char * s ;node * q ;} ;void main(){ node a[ ] = { { "Mary", a+1 }, { "Jack", a+2 }, { "Jim", a } } ;node *p = a ;cout << p->s << endl ;cout << p->q->s << endl ;cout << p->q->q->s << endl ;cout << p->q->q->q->s << endl ;}4.#include < iostream.h >class A{ public :int f1();int f2();void setx( int m ) { x = m ; cout << x << endl; } void sety( int n ) { y = n ; cout << y << endl; } int getx() { return x ; }int gety() { return y ; }private :int x, y ;};int A::f1() { return x + y ; }int A::f2() { return x - y ; }void main(){ A a ;a.setx( 10 ) ; a.sety( 5 ) ;cout << a.getx() << '\t' << a.gety() << endl ;cout << a.f1() << '\t' << a.f2() << endl ;}5. #include < iostream.h >class T{ public :T( int x, int y ){ a = x ; b = y ;cout << "调用构造函数1." << endl ;cout << a << '\t' << b << endl ;}T( T &d ){ cout << "调用构造函数2." << endl ;cout << d.a << '\t' << d.b << endl ;}~T() { cout << "调用析构函数."<<endl; }int add( int x, int y = 10 ) { return x + y ; } private :int a, b ;};void main(){ T d1( 4, 8 ) ;T d2( d1 ) ;cout << d2.add( 10 ) << endl ;}6. #include < iostream.h >class T{ public:T(int x){ a=x; b+=x;};static void display(T c){ cout<<"a="<<c.a<<'\t'<<"b="<<c.b<<endl; }private:int a;static int b;} ;int T::b=5;void main(){ T A(3),B(5);T::display(A);T::display(B);}7. #include < iostream.h >#include < math.h >class point{ public :point( float x, float y ){ a = x; b = y;? cout << "点( " << a << ", " << b << " )" ; }friend double d( point &A , point &B ){ return sqrt((A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b)) ; } private:double a, b ;};void main(){ point p1( 2, 3 ) ;cout << " 到 " ;point p2( 4, 5 ) ;cout << "的距离是:" << d( p1,p2 ) << endl ;}8. #include < iostream.h >class A{ public :A() { a = 5 ; }void printa() { cout << "A:a = " << a << endl ; }private :int a ;friend class B ;} ;class B{ public:void display1( A t ){ t.a ++ ; cout << "display1:a = " << t.a << endl ; } ; void display2( A t ){ t.a -- ; cout << "display2:a = " << t.a << endl ; } ; };void main(){ A obj1 ;B obj2 ;obj1.printa() ;obj2.display1( obj1 ) ;obj2.display2( obj1 ) ;obj1.printa() ;}5.2 思考题1.结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?2.分析以下说明结构的语句struct node{ int data;node error; //错误node * ok; //正确};error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?3.有说明class A{ int a;double x;public:funMember();};A a1, a2, a3 ;编译器为对象a1,a2,a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C++通过什么机制调用类的成员函数?4.C++提供了默认版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。
Python语言程序设计基础(第2版)第五章答案
第5章函数和代码复用5.1 函数的基本使用[5.1]: A[5.2]: D[5.3]: 错误。
[5.4]: 合法,因为Python语言是解释执行,即只要在真正调用函数之前定义函数,都可以进行合法调用。
5.2 函数的参数传递[5.5]: 在函数定义时,直接为可选参数指定默认值。
可选参数必须定义在非可选参数后面,可选参数可以有多个。
[5.6]: 在函数定义时,可变参数通过在参数前增加星号(*)实现。
可变数量参数只能在参数列表最后,即它只能有一个。
[5.7]: 返回值是元组类型。
[5.8]: 位置传递:支持可变数量参数,但容易忘记实参的含义;名称传递:不易忘记实参的含义,但不支持可变数量参数。
[5.9]: 如果函数里没有创建同名变量,则可以直接使用,不需global声明。
5.3 模块3:datetime库的使用[5.10]:print( "现在是{0:%Y}年{0:%m}月{0:%d}日{0:%I}:{0:%M}".format(datetime.now()))[5.11]: 答案不限。
举一个例子,输出美式日期格式:print("{0:%I}:{0:%M} {0:%b} {0:%d} {0:%Y}".format(datetime.now()))[5.12]: datetime对象可以直接做加减运算,所以可以用这样的方式给程序计时:1 2 Start = datetime.now() ... # 要计时的代码4 5 6 End = datetime.now() Cost = End – Start Print(Cost)5.4 实例7:七段数码管绘制[5.13]: 相当于C语言中的三目运算符。
[5.14]: 隐藏画笔的turtle形状。
[5.15]: 对应相应的年月日文字输出。
5.5 代码复用和模块化设计[5.16]: 错误,因为”使用函数“是“模块化设计“的必要条件。
第五章程序设计基础习题及参考答案
第五章程序设计基础一、选择题1.在各类程序设计语言中,相比较而言,(D)程序的执行效率最高。
A.汇编语言B.面向对象的语言C.面向过程的语言D.机器语言2.下列关于程序设计语言的说法中正确的是(C)。
A.高级语言程序的执行速度比低级语言程序快B.高级语言就是自然语言C.高级语言与机器无关D.计算机可以直接识别和执行用高级语言编写的源程序3.在算法分析中,评判算法的好坏不必考虑(D)。
A.正确性B.需要占用的计算机资源C.易理解D.编程人员的爱好4. 一般认为,计算机算法的基本性质有(A)。
A.确定性、有穷性、可行性、输入、输出B.可移植性、可扩充性、可行性、输入、输出C.确定性、稳定性、可行性、输入、输出D.确定性、有穷性、稳定性、输入、输出5.计算机硬件唯一能直接理解的语言是(A)。
A.机器语言B.汇编语言C.高级语言D.面向过程语言6.结构化程序设计方法的3种基本结构是(C)。
A.程序、返回、处理B.输入、输出、处理C.顺序、选择、循环D.I/O、转移、循环7.在面向对象方法中,一个对象请求另一个对象为其服务的方式是发送(D)。
A.调用语句B.命令C.口令D.消息8.以下不是面向对象思想中的主要特征的是(D)。
A.多态B.继承C.封装D.垃圾回收9.(C)不是程序的3种翻译方式之一。
A.汇编B.编译C.结构化D.解释10.软件工程中的各种方法是完成软件工程项目的技术手段,它们支持软件工程的(A)阶段。
A.各个B.前期C.中期D.后期11.在软件生命周期中,工作量所占比例最大的阶段是(D)阶段。
A.需求分析B.设计C.测试D.维护12.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象是(C)的一种表现。
A.软件工程B.软件周期C.软件危机D.软件产生二、填空题1.C++语言运行性能高,且与C语言兼容,已成为当前主流的面向(对象)的程序设计语言之一。
2.对象的基本特点包括(唯一性)、分类性、多态性、封装性和模块独立性5个特点。
程序设计基础课后答案 习题答案
}
}
5、编写输出如图所示的图案
*
**
********
********
********
**
*
#include<iostream>
using namespace std;
#define M 7
#define N 9
int main()
{
int a[M][N]={
cin>>a;
cout<<"Please enter b=";
cin>>b;
cout<<"Please enter c=";
cin>>c;
if(a==0)
{
double x0;
x0=(-c)/b*1.0;有问题??
cout<<"此时为一元一次方程有唯一解"<<x0<<endl;
return;
}
double temp=b*b-4.0*a*c;
算法与程序设计中的递归技术是指将问题分为不同层次的子问题解决每一层问题的难度随层次的降低而减小这些不同层次的问题有极大的相似性可以解决在某层次问题的算法中调用同一算法解决低层次问题这种嵌套的算法调用运行知道最低层次问题的解决
第一章:
一、简答
1、说明计算机系统字符集与计算机语言字符集之间的关系。
答:能够出现在高级语言程序文本中的所有字符(注释除外)构成了计算机高级语言字符集。它们是计算机系统字符集的子集。
cin>>a;
《Java程序设计》教材第五章练习题答案
习题一、选择题1. 面向对象程序设计的基本特征是(BCD)。
(多选)A.抽象B.封装C.继承D.多态2.下面关于类的说法正确的是(ACD)。
(多选)A.类是Java 语言中的一种复合数据类型。
B.类中包含数据变量和方法。
C.类是对所有具有一定共性的对象的抽象。
D.Java 语言的类只支持单继承。
上机指导1.设计银行项目中的注册银行用户基本信息的类,包括账户卡号、姓名、身份证号、联系电话、家庭住址。
要求是一个标准Java类(数据私有,提供seter/getter),然后提供一个toString方法打印该银行用户的信息。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\BankUser.java”2.设计银行项目中的帐户信息,包括帐户卡号、密码、存款,要求如“练习题1”。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Account.java”3.设计银行项目中的管理员类,包括用户名和密码。
要求如“练习题1”。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Manager.java”4.创建一个Rectangle类。
添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。
测试输出一个矩形的周长和面积。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Rectangle.java”5.猜数字游戏:一个类A有一个成员变量v,有一个初值100。
定义一个类,对A类的成员变量v进行猜。
如果大了则提示大了,小了则提示小了。
等于则提示猜测成功。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Guess.java”6.编写一个Java程序,模拟一个简单的计算器。
定义名为Computer的类,其中两个整型数据成员num1和num1,编写构造方法,赋予num1和num2初始值,再为该类定义加、减、乘、除等公有方法,分别对两个成员变量执行加减乘除的运算。
C语言程序设计教程 第五章 课后习题参考答案
k++;
if(k%5==0)
printf("\n");
f1=f2;
f2=f;
}
printf("\n");
return 0;
}
P124 3统计一个整数的位数
#include<stdio.h>
int main()
{
int n,k=0;
printf("请输入n的值:");
int main()
{
int x,y,z,i=0;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z=z+3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))
i++;
}
}
}
printf("共有%d种买法:\n",i);
c语言程序设计教程第五章课后习题参考答案
P1242古典问题:兔子总数(斐波那契数列)
#include<stdio.h>
int main()
{
int f1=1,f2=1,f,i,k=0;
printf("%d\t %d\t",f1,f2);
k=k+2;
for(i=3;i<=20;i++)
{
f=f1+f2;
do
{
printf("请输入第%d个整数x=",i);
C++程序设计基础课后答案--第五章教学提纲
C++程序设计基础课后答案--第五章5.1 阅读下列程序,写出执行结果1.#include < iostream.h >struct data{ int n ;float score ;} ;void main(){ data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ;cout << (p++)->n << endl ;cout << (p++)->n << endl ;cout << p->n++ << endl ;cout << (*p).n++ << endl ;}2.#include < iostream.h >struct employee{ char name[ 20 ] ;char sex ;} ;void fun( employee *p ){ if( (*p).sex == 'm' )cout << (*p).name << endl ;}void main(){ employee emp[5] = { "Liming", 'm', "Wangxiaoping", 'f', "Luwei", 'm' } ;int i ;for( i=0; i<3; i++ )fun( emp+i ) ;}3. #include < iostream.h >struct node{ char * s ;node * q ;} ;void main(){ node a[ ] = { { "Mary", a+1 }, { "Jack", a+2 }, { "Jim", a } } ;node *p = a ;cout << p->s << endl ;cout << p->q->s << endl ;cout << p->q->q->s << endl ;cout << p->q->q->q->s << endl ;}4.#include < iostream.h >class A{ public :int f1();int f2();void setx( int m ) { x = m ; cout << x << endl; }void sety( int n ) { y = n ; cout << y << endl; }int getx() { return x ; }int gety() { return y ; }private :int x, y ;};int A::f1() { return x + y ; }int A::f2() { return x - y ; }void main(){ A a ;a.setx( 10 ) ; a.sety( 5 ) ;cout << a.getx() << '\t' << a.gety() << endl ;cout << a.f1() << '\t' << a.f2() << endl ;}5. #include < iostream.h >class T{ public :T( int x, int y ){ a = x ; b = y ;cout << "调用构造函数1." << endl ;cout << a << '\t' << b << endl ;}T( T &d ){ cout << "调用构造函数2." << endl ;cout << d.a << '\t' << d.b << endl ;}~T() { cout << "调用析构函数."<<endl; }int add( int x, int y = 10 ) { return x + y ; } private :int a, b ;};void main(){ T d1( 4, 8 ) ;T d2( d1 ) ;cout << d2.add( 10 ) << endl ;}6. #include < iostream.h >class T{ public:T(int x){ a=x; b+=x;};static void display(T c){ cout<<"a="<<c.a<<'\t'<<"b="<<c.b<<endl; } private:int a;static int b;} ;int T::b=5;void main(){ T A(3),B(5);T::display(A);T::display(B);}7. #include < iostream.h >#include < math.h >class point{ public :point( float x, float y ){ a = x; b = y;? cout << "点( " << a << ", " << b << " )" ; } friend double d( point &A , point &B ){ return sqrt((A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b)) ; } private:double a, b ;};void main(){ point p1( 2, 3 ) ;cout << " 到 " ;point p2( 4, 5 ) ;cout << "的距离是:" << d( p1,p2 ) << endl ;}8. #include < iostream.h >class A{ public :A() { a = 5 ; }void printa() { cout << "A:a = " << a << endl ; } private :int a ;friend class B ;} ;class B{ public:void display1( A t ){ t.a ++ ; cout << "display1:a = " << t.a << endl ; } ;void display2( A t ){ t.a -- ; cout << "display2:a = " << t.a << endl ; } ;};void main(){ A obj1 ;B obj2 ;obj1.printa() ;obj2.display1( obj1 ) ;obj2.display2( obj1 ) ;obj1.printa() ;}5.2 思考题1.结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?2.分析以下说明结构的语句struct node{ int data;node error; //错误node * ok; //正确};error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?3.有说明class A{ int a;double x;public:funMember();};A a1, a2, a3 ;编译器为对象a1,a2,a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C++通过什么机制调用类的成员函数?4.C++提供了默认版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。
《程序设计基础教程》-高等教育出版社-课后习题参考答案
习题第一章程序与编程环境一、填空题1. 工程,Form_Load2. 事件(触发)3. 空缺,空缺4. CurrentX, CurrentY5. maxButton, BorderStyle = 1 or 3 or 4 or 56. Alignment, 空缺,空缺7. Style, LoadPicture8. Line, Shape9. 重画10. FillStyle, maxLength, Locked 12. 空缺13. sub, 对象名,事件名14. 方法,Object.Method, text1.setfocus()15. Name, minButtom, CurrentX(Y), Caption16. Interval, Enable 17. timer, Interval, ms(毫秒)18. Mouse Down, Click, LoastFocus19. .Frm, .Frx, .bas. cls. Vbp 20. Rem, Rem 语句二、简答题(略)第二章数据的类型、表示以及运算一、请指出下列哪些是VB的合法常量,并说明原因(1)√(2)X 常量不能加类型说明符号改成123.4 (3)X与上题类似,如果是常量,则类型说明符放在后面(4)√等价于2E3 (5) √(6)√等于十进制的4113(7)X 如果是16进制要写&符号(8)X 指数不能为小数(9)X 月份超过12,日超过31 (10)√(11)√(12)√等价于上一题(13)X 8进制数每一位不能超过8 (14)√(15)X 变量,常量要为基本数据类型的值(16)√二、找出合法变量(1)√(2)√如果与控件Label1同在一个应用程序里面,该变量会屏蔽掉控件Label1(3) X 保留字(4)√(5)X 变量不能以数字开头(6)变量不能有小数点(7)√(8)√数组变量(9)X保留字(10)√可以,但rnd()不可以,rnd()是函数 (11) √(12)√(13)√(14)X ’符号表示注释(15)X 这是表达式,不是变量(16)X 同上,是表达式三、指出下列数据x,y,z的声明是否正确,如果正确请指明其类型(1)√ x--long, y—variant, z—integer(2) √ x—long, y—long, z—integer(3) √ x—double, y—double, z—integer(4) X 变量x &中间不能有空格(5)√自动转换成字符串(6)X 变量声明不能直接赋值(7)√(8)√自动转换成字符串(9)X 常量不能把函数写上去(10)√四、写出下列表达式的结果(1)1 (2) 1 (3)false (4) ab12 (5)123 (6)出错,加法表达式中如果有一个是数值类型,则“+”表示加号,而不是字符的链接符号(7)False (8)true (9)true (10) false 默认转换成相同类型(数值),建议这里把2改成D试试(P.S.布尔类型TRUE = -1, FALSE = 0;优先顺序:^(乘方)→-(求负)→*、/→\(整除)→MOD→+、-)五、写出下列函数的结果(1)3 (2)2 (3)-2 (4)0 (5)2 (6)23 (7)23 (8)1 (9)1 (10)21 日期差分函数,参数“m”为两年月份之差六、写出满足以下条件的表达式(1)fix(rnd()*90)+10 (2)chr(fix(rnd()*26)+65) (3) (A mod 100)\10(4) A mod B<>0 (5)A>“A”and A<“Z”(6) A<B OR A<C (7)A>C AND B>C(8) (A>C AND B<C) OR (A<C AND B>C) (9) A+B>C AND B+C>A AND C+A>B(10)A=“及格”XOR B=“及格”(11)Round(A/B,2) (12) Len(A)<>0 或 Len(A)>0 (13) “A10?”(14) Len(A)>=3七、填空题1. “”, # #2. x>=10 and x<203. (y mod 3=0) or (y mod 7 =0)4. sin(x)^2 + (1/2)*sqr(x^2-y^2)5. 166. T, F7. SIN(ATN(1))8. Randomize9. (c>chr(97) and c<chr(122)) or (c<chr(48) and c>chr(57))10. vbCrLf 11. CInt(), 012. 从第12个月开始,循环一年12个月13. ab, cd0 14. Variant, String, Integer15. Now() 16. DateDif(#2011-5-1#,now(), “m”)八、请指明下列程序运行后,各个变量的值(1) 3 5(2) 120(3) False(4) -3九、分析下面程序中的错误并修改,使其能够完成指定的功能(1)Print 20000+0&+20000或 Print 20000&+20000&(2) 改1:A=xA= a+aB=xB=2*b改2:A=a+x+xB=2*(x+b)十. 简答题(略)第三章程序界面与基本输入输出一、填空题1.Textbox, Inputbox, Label, Textbox, Msgbox, Print2. “,” , “;” , CurrentX, CurrentY3. Print4. AutoSize, Stretch5. Textbox, Label, Textbox, True6. Text1=””, Picture1.cls7. Integer, String8. Textbox, Check , Option, Combo, List9. .setFocus, 失去焦点10. Min, Max, Scroll, Change11. TabIndex12. Enabled, Visible二、简答题(略)三、编程题(略)第四章控制结构一、判断题1.X2. X3. √4. X 循环体中改变其值5.√二、填空题1. 顺序,选择,循环2. “A”,”E”, chr(97), “A” to “Z”, Is>0, Else3. 死循环4. 设置计数器5. True/False, 0/16. 0, ListCount-1三、读程序填空1. 88 及格2. Print x; “是偶数”Print x; “是奇数”3.i= Instr(st, “”)right(st, len(st)-i)I = Instr(st, “The”)Left(st, i-1) & right(st, len(st)-i-3)不用填任何东西(这里是旧版书的过程返回)4.is < 0 “无定义”0 to 1 (log(x)/log(2))^2Is >1 sqr(log(x)/log(2))5.40 ,176.*fAbs(x2-x1)<0.000017. while m<>nPrint m (或n)四、编程题(略)第五章数组和自定义类型一、简答题1.Option Base 1, 只能取0或12.很多情况3.动态数组可重定义,静态数组不可以;动态数组可以用变量,静态数组不可以用变量4.不能,Preserve关键字保留数组原有的内容,但是只能够改变数组的最后一维5.将用引号分隔的字符串塞进数组;UBound(), LBound()在不确定数组上下界情况下可使用或写出的程序更通用6.8字节7.6个元素;[0,2] [3,4]8.这里较为特殊的是List框的Text属性,就是List框所选的内容9.组合框=文本框+列表框;组合框可以输入,列表框不可以;组合框无多选,列表框可以10.自定义类型还没有在内存中分配变量,而自定义变量则是在内存中分配了变量。
C程序设计第五章课后习题答案
循环结构程序设计P115 5.1 用while计算1至100的合.#include<stdio.h>int main(){int i=1,sum=0;while(i<=100) //对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.{sum=sum+i;i++;}printf("The sum is %d .\n",sum);return 0;}P117 5.2 用do-while来做1至100的合.#include<stdio.h>int main(){int i=1,sum=0;do// do-while可以做的事,用while都可以做到.{ //do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.sum=sum+i;i++;}while(i<=100);printf("The sum is %d .\n",sum);return 0;}P118 5.3 比较do-while与while的差别.#include<stdio.h>{int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,正常,11的话,则sum仍然是0.while(i<=10){sum=sum+i;i++;}printf("The sum of 1-10 is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,结果一样.输入11的话,先做操作,所以sum=11.do{sum=sum+i;i++;}while(i<=10); //此重点在于理解二者的差别.printf("The sum of 1-10 is %d .\n",sum);return 0;}P126 5.4 break的例子.#include<stdio.h>int main(){int i,b=0,a,c;for(i=0;i<=1000;i++){printf("Please input amount :"); //循环体内套有输出语句以及跳出语句.scanf("%d",&a);b=b+a;if(b>=100)break; //break是用于跳出循环,对if无效,对while for switch 这一类.}}c=b/i;printf("conut is %d , aver is %d ",i+1,c); //注意%号后的形式,否则可能输出错误.return 0;}P127 5.5 continue的例子.#include<stdio.h>int main(){int i;for(i=1;i<20;i++){if(i%3!=0){continue; //跳过本次I,执行下一个i.}printf("%d ",i);}printf("\n");return 0;}P128 5.6 形成一个4*5的矩阵.#include<stdio.h>int main(){int i,j,a=0; //没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;i<=4;i++){for(j=1;j<=5;j++,a++) // a用来控制换行.{if(a%5==0){printf("\n");}printf("%d\t",i*j);}}printf("\n");return 0;}P131 5.7 用一个交错的式子求哌的近似值.#include<stdio.h>#include<math.h>int main() //四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).{float s=1,n=1,m,sum=0,t;for(m=1;;m=m+2) //不确定哪项才会小于等于十的负六次方,所以不指定,无限下去.{ //不指定第二项,执行语句中应该有控制跳出的句子,否则死循环.t=(s)*(n/m); //这是第一项,s是符号,if(fabs(t)<=1e-6) //应该写在这里,题目要求这一项不累加进去.{break;}sum=sum+t; //因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); //变号一次.}printf("四分之一哌的值是%f.\n",sum);printf("一个完整哌的值是%f.\n",sum*4);return 0;}//下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行.//如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题.//#include <stdio.h> //这是关于int float double三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白来.////int main() //在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告 1 warning C4305: “=”: 从“double”到“float”截断.//{// float m,a,b,c; //一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的m=1,其实得到的是m=1.0.// int d,e,f;// m=1;// a=1.0/3;// b=1/3;// c=m/3;// d=1.0;// e=1/4;// f=1.0/4;// printf("%lf(float用double的%lf来输出是可以的.)\n%f\n%f\n%f\n",m,a,b,c); //不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出.// printf("%d\n%d\n%d\n",d,e,f); //但是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!!!!// return 0;//}#include<stdio.h>int main() //这个就是著名的Fibonacci(费波那契数列问题){int f1=1,f2=1,f3,i;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++) //注意,这是个基础问题,(i=1;i<=5;i++)这里其实进行了次运算,因为有f1,f2,要求有个,所以要有个.要么写<=38,要么写<39,边界问题一定要注意,不可以太随意!!!!{f3=f1+f2;printf("%12d\n",f3); //这个问题同样适用于"一对兔子一个月生一对"的问题.,f1=f2; //f1=f1+f2;此时它们各是,所以,现在的f1是.f2=f3; //f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3.}return 0;}#include<stdio.h>#include<math.h>int main(){double num;int i;printf("Please input a number :");scanf("%lf",&num); //因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;i<=sqrt(num);i++) //这边是<=号没错.{if((int)num%i==0) //如果在这期间有任何一个可以为零的话,则不是素数.{break; //当然跳出.}} //执行到这里的时候,i=5,已经变成了!!if(i<=sqrt(num)){printf("Not %d",(int)num);}else//如上所述,i=5,超出了求根的值,所以是素数.{printf("Yes %d",(int)num);}return 0;}P137 5.10 求100至200间的素数.#include<stdio.h>//不解释,HOHO>>>>...#include<math.h>int main(){double j;int i,k=0;for(j=100;j<=200;j++){for(i=2;i<=sqrt(j);i++){if((int)j%i==0){break;}}k=k+1; //这里是布局的开头.学习一下,有助逻辑.if(i<=sqrt(j)){printf("Not %d ",(int)j);if(k%5==0) //5个换一次行.{printf("\n");}}else{printf("Yes %d ",(int)j);if(k%5==0){printf("\n");}}}return 0;}P139 5.11 密码转换.#include<stdio.h>int main(){char c;c=getchar();while(c!='\n') //这也可以用数组来实现.{if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){if((c>='w'&&c<='z')||(c>='W'&&c<='Z')){c=c-22;}else{c=c+4;}printf("%c",c);c=getchar(); //套在循环里,依次得到字母,而while中判断回车为结束.}}printf("\n"); //这是布局问题.return 0;}P140 0.3 最大公约数和最小公倍数.#include<stdio.h>//最大公约数用累除法,除到无余数时的被除数是最大公约数.main (){int m, n, c, d;int gcd(); //这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); //这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf("Please input two number :\n");scanf("%d %d",&m,&n);c=gcd(m,n); //c获取最大公约数d=lcm(m,n); //d获取最小公倍数printf("The GCD of %d and %d is : %d !\n", m, n, c);printf("The LCM of %d and %d is : %d !\n", m, n, d);return 0;}int gcd(int x, int y) //最大公约数Greatest Common Divisor{int temp;while(x%y!=0){temp=y; //y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.y=x%y; //x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; //刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.}return y; //这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. }int lcm(int x, int y) //最小公倍数Lowest Common Multiple{int i, temp;if(x<y) //此段代码结果是保证二者大的数在X上,小的数在Y上.即小于号降序.{ //以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;}for(i=1; i<=y; i++) //设定一个区间,从1至大的数之间的循环.{if(!((x*i)%y)) //此式子如有余数,加上"!"号,会是假,则不返回,进行下一轮.{ //如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.return x*i;}}}P140 0.4 判断一串输入的字符.#include<stdio.h>int main(){char ch;int a=0,b=0,c=0,d=0,e=0;printf("Please input the string\n");while((ch=getchar())!='\n') //直到回车.{if(ch<='z'&&ch>='a'){a++;}else if(ch==' '){c++;}else if(ch<58&&ch>47){d++;}else if(ch<='Z'&&ch>='A'){b++;}else{e++;}}printf("大写%d 小写%d 空格%d 数字%d 其它%d\n",a,b,c,d,e);}#include<stdio.h>//不理解时可以百度或是谷歌更多的信息.int main() //想办法既快速做完,又要消化理解!!!{int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.temp=a; //先把第一阶的值存起来.for(i=0;i<n;i++){sum=sum+a;printf("%d + ",a); //事关布局.a=a*10+temp; //重点是每次乘,然后加上上一个数.}printf("= %d .",sum);return 0;}P140 0.6 1!+2!+3!+4!.....的值. #include<stdio.h>int main() //1!+2!+3!+4!.....{int i,j,k,sum=0,m=1;scanf("%d",&k); //比如设定为,值为.for(i=1;i<=k;i++) //第一层循环,指定到.{for(j=1;j<=i;j++) //第二层循环,指定至当前数.{m=m*j;} //到此是阶乘的结构.sum=sum+m;m=1;}printf("%d",sum); //完全不理解时,搜索并参考.return 0; //尝试自己做,第一次做出来就是自己的东西了. }#include<stdio.h>int main(){int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a<=100;a++) //三个块分别注释验证结果.{asum=asum+a;}for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言.{bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c.}for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中.{csum=csum+1/c;}printf("%lf",asum+bsum+csum);return 0;}PP#include<stdio.h>#include<math.h>int main(){int j,k,s[6],x=100,y,sum=0;for(j=153;j<=154;j++){for(k=2;k>=0;k--){s[k]=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(s[k],3);sum+=y;printf("%d-%d--%d\t",k,s[k],j);}printf("%d\n",sum);}return 0;}P140 0.8 水仙花数.//#include <stdio.h> //一步步的发现问题.////int main() //在%和/号之间,以前pow.以后再做.//{// int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了.// for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟.// {// for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑. // {// for(k=0;k<=i;k++)// {// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);// }// if(sum==j)// {// printf("%d 是水仙花数!\n",j);// }// sum=0;// }// }// return 0;//} //为什么还是无法实现?!#include<stdio.h>#include<math.h>int main(){int a,b,c,i,sum=0; //这里只计算三位数的.for(i=100;i<1000;i++){a=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum==i){printf("%d 是水仙花数.\n",i);}sum=0;}return 0;}P141 0.9 完数.#include<stdio.h>int main(){int i,j,r;for(i=1;i<=1000;i++) //零是个临界值,不能包括它.{r=0; //每次清零重来.类似水仙中的sum.for(j=1;j<i;j++){if(i%j==0) //除得尽即是因子.{r=r+j; //然后累加进去.}}if(r==i) //若相等.{printf("%d 是完数.\n",i);}}return 0;}P141 0.10 2/1+3/2+5/3+8/5+13/8…#include<stdio.h>int main() //10.007051{double i,a=2,b=1,c,s=0; //a是分子,b是分母.for(i=0;i<6;i++) //二十可以用户指定.{s+=a/b; //中间储值变量.c=a+b;b=a;a=c;}printf("%lf\n",s);return 0;}#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{double sum=100,high=100,up,donw,i;for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百.{up=high/2;donw=up;high=donw; //自咬尾巴问题.sum+=donw*2;}printf("%lf %lf\n",donw,sum);return 0;}P141 0.12 猴子吃桃子.#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{int i,sum=1;for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配.{printf("倒数第%d天还剩有%d个桃子.\n",i,sum);sum=(sum+1)*2;}//printf("%d\n",sum);return 0;}#include<stdio.h>#include<conio.h>main() //只关注左半部分.右半部分无视空格.{int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶.for(i=1;i<=m;i++) //上半部分.其实也是正三角.{for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格.printf(" ");for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五... printf("*");printf("\n");}for(i=m-1;i>0;i--) //下半部分.其实也是倒三角.{ //减一是因为行数问题.这是中心行以下的.for(j=m-1;j>=i;j--)printf(" ");for(k=1;k<2*i;k++)printf("*");printf("\n");}getch(); //用户反应后结束.但,没必要.}。
程序设计基础教材1-5章答案
《程序设计基础》习题参考答案与部分解析第1章C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个main函数。
c) 在C语言中,输出操作是有库函数printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个 C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S△= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A16、B 17 D解析:1. 答案:C。
解析JAVA程序设计第五章课后答案
第5章习题解答1.流的主要特征有哪些,用流来实现JAVA中的输入输出有什么优点?答: 一是单向性,即数据只能从数据源流向数据宿;二是顺序性,先从数据源流出的数据一定比后流出的数据先到达数据宿;三是数据流必须而且只能和一个数据源与一个数据宿相连。
优点是体现了面向对象程序设计的概念,通过流可以把对不同类型的输入/输出设备的操作统一为用流来实现。
2.对字节流和字符流进行读写操作的一般步骤是什么?答:声明流对象,创建流对象,通过流对象进行读(写)操作,关闭流对象。
3. 有哪些常用的字节流和字符流,他们的主要区别是什么?答: InputStream/OutputStrem:普通字节流,所有字节流的基类。
FileInputStream/ FileOutputStream:用于从文件中读写数据。
BufferedInputStream/ BufferedOutputStream:用于从缓冲区输入流中读写数据。
采用缓冲区流可减少实际上从外部输入设备上读写数据的次数,从而提高效率。
DataInputStream/ DataOutputStream:按读写数据对象的大小从字节流中读写数据,而不是象其它字节流那样以字节为基本单位。
PipedInputStream/ PipedOutputStream:管道输流用于从另一个线程中读写数据。
4.么是异常?说明Java中的异常处理机制?试述JAVA中异常的抛出和传递过程?答: 异常是程序设计语言提供的一种机制,它用于在程序运行中的非常规情况下,控制程序对非常规情况进合理的处理。
Java提供了try-catch-finally语句来对异常进行处理。
先按照正常顺序执行try子句中的语句,若在执行过程中出现异常,则try子句中还未被执行的语句将再也不会被执行。
而程序控制立即转移到catch子句,将发生的异常与catch子句中的异常进行匹配,若找到一个匹配,就执行该catch子句中的语句。
python程序设计基础课后习题答案(第五章)
第五章答案5.2:实现i s o d d()函数,参数为整数,如果参数为奇数,返回t r u e,否则返回f a l s e。
def isodd(s):x=eval(s)if(x%2==0):return Falseelse:return Truex=input("请输入一个整数:")print(isodd(x))请输入一个整数:5True5.3:实现i s n u m()函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回t r u e,否则返回f a l s e。
def isnum(s):try:x=eval(s)if((type(x)==int)|(type(x)==float)|(type(x)==complex)):return Trueelse:return Falseexcept NameError:return Falsex=input("请输入一个字符串:")print(isnum(x))请输入一个字符串:5True题5.4:实现m u l t i()函数,参数个数不限,返回所有参数的乘积。
def multi(x):xlist=x.split(",")xlist = [int(xlist[i]) for i in range(len(xlist))] #for循环,把每个字符转成int值num=1for i in xlist:num=num*iprint(num)s=input("请输入数字,并用,号隔开:")multi(s)请输入数字,并用,号隔开:5,420题5.5:实现i s p r i m e()函数,参数为整数,要有异常处理,如果整数是质数返回t u r e,否则返回f a l s e。
try:def isprime(s):i=2m=0for i in range(2,s-1):if(s%i==0):i+=1m+=1else:i+=1if(m>0):return Falseelse:return Trueexcept NameError:print("请输入一个整数!")s=eval(input("请输入任意一个整数:")) print(isprime(s))请输入任意一个整数:9False。
《C语言程序设计》教材习题答案第5章
《C语言程序设计》教材习题答案第5章一、选择题1.设有程序段”int k=10;while(k=0)k=k-1;”,则下面叙述正确的是D 循环体语句一次也不执行2.设有程序段”int x=0,s=0;while(!x!=0)s+=++x;printf(“%d”,s);”则A 运行程序段后输出13.若有语句”int x=3;do{printf(“%d\n”,x-=2);}while(!(--x));”,则该程序段C 输出的是1和-24.下面循环语句中,错误的是D int a=1,b=2;do b--while(b= =0);5.已知”int i=5;”,下列do…while循环语句的循环次数为C 5do{printf(“%d\n”,i--);}while(i!=0);6.循环语句”for(int i=0,j=10;i=j=10;i++,j--)”的循环次数是D 无限7.循环语句”while(int i=0;)i--;”的循环次数是A 08.下述有关break语句的描述中,不正确的是C break语句用于if 语句的内嵌语句内,它结束该if语句9.下面关于循环语句的描述中,错误的是B 循环体内必须同时出现break语句和continue语句10.以下不是死循环的是 D for(;(c=getchar()!=’\n’);)printf(“%c”,c);11.执行语句”for(i=0;i++<3;);”后,变量i的值为C 412.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C 循环4次13.与语句”while(!x);”等价的语句是A while(x= =0);14.执行下列程序段后a的值为B 2int a=1,b=10;do{b-=a;a++;}while(b--<0)二、编程题1.读入用户输入的6个整数并显示其平均值。
#includemain(){float sum=0;int tmp;int i;for(i=0;i<6;i++){printf("输入第%d个数:",i+1);scanf("%d",&tmp);sum=sum+tmp;}printf("平均值是:%f",sum/6);}2.先读入一个正整数n,然后计算并显示前n个偶数的和。
visual basic 程序设计课后习题参考答案
Visual basic 程序设计习题参考答案第一章Visual basic 程序设计一、选择题二、填空题三、简答题1、简述visual basic 的特点。
(1)具有可视化的设计平台(2)面向对象的设计方法(3)事件驱动的编程机制(4)结构化程序设计语言(5)开放的数据库功能与网络支持2、什么是对象、类、属性、事件和方法?在可视化编程语言中,对象是代码和数据的集合,它可以是窗体和控件,也可以是菜单和数据库等。
描述一个对象有三个基本要素:属性、方法和事件。
类是一组用来定义对象的相关过程和数据的集合,即同类对象的集合和抽象。
属性是描述对象的一组特性。
方法是对象能够执行的动作,它是对象本身内含的函数或过程,用于完成某种特定的功能。
事件是发生在对象上并且能够被对象识别的动作,即由系统预先设置好的、能被对象识别的动作,如Click(单击)、DblClick(双击)、Load(窗体的装载)、KeyPress(按键)、Change(改变)、MouseMove (鼠标的移动)等,每一种对象能识别的事件是不同的5、什么是事件驱动的编程机制?当某个事件(一般由用户操作来触发) 发生时,系统就会自动执行此事件的事件过程。
由事件控制整个程序的执行流程。
事件过程要经过事件的触发才能被执行,这种工作模式称为事件驱动方式。
第二章Visual basic 程序设计基础一、选择题二、填空题第三章数据输入输出一、选择题二、填空题3第四章选择结构和循环结构程序设计一、选择题二、填空题第五章数组一、选择题二、填空题第六章过程一、选择题二、填空题三、简答题1、简述事件过程和通用过程的含义和联系。
5VB应用程序是由过程组成的,过程是完成某种特殊功能的一组独立的程序代码。
VB中的过程有两大类:事件过程和通用过程事件过程是当发生某个事件时,对该事件作出响应的程序段。
事件过程由VB自行声明,用户不能增加或删除。
事件过程是VB 应用程序的主体。
C语言程序设计教程 第五章 课后习题参考答案
C语言程序设计教程第五章课后习题参考答案一、选择题1. B2. A3. C4. B5. D二、填空题1. while2. binary3. 164. 35. continue6. global三、判断题1. 错误2. 正确3. 错误4. 错误5. 正确四、编程题1.```c#include<stdio.h>int main() {int num;printf("请输入一个整数:"); scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数\n", num); } else {printf("%d是奇数\n", num); }return 0;}```2.```c#include<stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("%d与%d的和为%d\n", num1, num2, num1 + num2); return 0;}```3.```c#include<stdio.h>int isPrime(int num) {int i;if (num <= 1)return 0;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```4.```c#include<stdio.h>int factorial(int num) {int i, result = 1;for (i = 1; i <= num; i++) {result *= i;}return result;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘为%d\n", num, factorial(num)); return 0;}```五、简答题1. C语言逻辑与运算符(&&)短路特性是什么?答:C语言逻辑与运算符(&&)具有短路特性,即在进行逻辑与运算时,如果前一个表达式的值为假(0),则后面的表达式将不会被计算,整个逻辑与表达式的值直接为假(0)。
C++语言程序设计(清华大学出版社)课后习题及答案 第 五 章 程序的结构
void TelepathicFunction(); int main() { const int MaxCats = 5; Cat *CatHouse[MaxCats]; int i; for (i = 0; i<MaxCats; i++) { CatHouse[i] = new Cat(i); TelepathicFunction(); } for ( i = 0; i<MaxCats; i++) { delete CatHouse[i]; TelepathicFunction(); } return 0; } void TelepathicFunction() { cout << "There are " << Cat::GetHowMany() << " cats alive!\n"; } 程序运行输出: There are 1 cats alive! There are 2 cats alive! There are 3 cats alive! There are 4 cats alive! There are 5 cats alive! There are 4 cats alive! There are 3 cats alive! There are 2 cats alive! There are 1 cats alive! There are 0 cats alive!
5-8 什么叫做友元函数?什么叫做友元类?
解: 友元函数是使用 friend 关键字声明的函数,它可以访问相应类的保护成员和私有成员。友元 类是使用 friend 关键字声明的类,它的所有成员函数都是相应类的友元函数。
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2009,版权所有, 仅供试用。
python语言程序设计基础课后答案-第五章(嵩天)
python语⾔程序设计基础课后答案-第五章(嵩天)教材: 1.七段数码管绘制 2.函数的递归 3.科赫曲线绘制习题:1. 输出⽥字格。
2. 实现isOdd()函数。
3. 实现isNum()函数。
4. 实现multi()函数。
5. 实现isPrime()函数。
6. 使⽤datetime库,对⾃⼰的⽣⽇输出不少于10种⽇期格式。
7. 输⼊汉诺塔层数,输出整个移动流程。
1.七段数码管绘制import turtle, datetimedef drawLine(draw): #绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.fd(40)turtle.right(90)def drawDigit(d):drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)def drawDate(date): #获得要输出的数字for i in date:drawDigit(eval(i)) #注意: 通过eval()函数将数字变为整数def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(datetime.datetime.now().strftime('%Y%m%d'))turtle.hideturtle()main()import turtle, datetimedef drawGap():#绘制数码管间隔turtle.penup()turtle.fd(5)def drawLine(draw): #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)def drawDigit(d):drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)def drawDate(date): #获得要输出的数字turtle.pencolor("red")for i in date:if i=='-':turtle.write('年',font=("Arial",18,"normal"))turtle.pencolor("green")turtle.fd(40)elif i=='=':turtle.write('⽉',font=("Arial",18,"normal"))turtle.pencolor("blue")turtle.fd(40)elif i=='+':turtle.write('⽇',font=("Arial",18,"normal"))else:drawDigit(eval(i)) #注意: 通过eval()函数将数字变为整数def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(datetime.datetime.now().strftime('%Y-%m=%d+'))turtle.hideturtle()main()(数码管绘制10进制变为16进制,作为字符串输⼊)import turtle, datetimea=input('')def drawGap():#绘制数码管间隔turtle.penup()turtle.fd(5)def drawLine(draw): #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)def drawDigit(d):drawLine(True) if d in ['2','3','4','5','6','8','9','a','b','d','e','f'] else drawLine(False) drawLine(True) if d in ['0','1','3','4','5','6','7','8','9','a','b','d'] else drawLine(False) drawLine(True) if d in ['0','2','3','5','6','8','9','b','c','d','e'] else drawLine(False) drawLine(True) if d in ['0','2','6','8','a','b','c','d','e','f'] else drawLine(False)turtle.left(90)drawLine(True) if d in ['0','4','5','6','8','9','a','b','c','e','f'] else drawLine(False)drawLine(True) if d in ['0','2','3','5','6','7','8','9','a','c','e','f'] else drawLine(False) drawLine(True) if d in ['0','1','2','3','4','7','8','9','a','d'] else drawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)def drawDate(date): #获得要输出的数字turtle.pencolor("red")for i in date:drawDigit(i)def drawDate1(date): #获得要输出的数字turtle.pencolor("red")count=0for i in date:count+=1if count>2:drawDigit(i)def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(a)turtle.fd(20)turtle.pendown()turtle.fd(145)turtle.penup()turtle.fd(20)b=hex(int(a))print(b)drawDate1(str(b))turtle.hideturtle()main()2.科赫曲线绘制import turtledef koch(size,n):if n==0:turtle.fd(size)else:for angle in [0,60,-120,60]:turtle.left(angle)koch(size/3,n-1)def main():turtle.setup(800,400)turtle.speed(0)#控制绘制速度turtle.penup()turtle.goto(-300,-50)turtle.pendown()turtle.pensize(2)koch(600,3)#0阶科赫曲线长度,阶数 turtle.hideturtle()main()import turtledef koch(size,n):if n==0:turtle.fd(size)else:for angle in [0,60,-120,60]:turtle.left(angle)koch(size/3,n-1)def main():turtle.setup(400,400)turtle.speed(0)#控制绘制速度turtle.penup()turtle.goto(-200,-100)turtle.pendown()turtle.pensize(2)turtle.pencolor("green")level=5koch(300,4)turtle.right(120)turtle.pencolor("blue")koch(300,4)turtle.right(120)turtle.pencolor("red")koch(300,4)turtle.hideturtle()main()输出⽥字格。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int i,m,n;
m=strlen(dest);
n=strlen(a)-m;
try//用于抛出错误
{
for(i=0;i<=n;i++)
{
int k=i;/r(int j=0;j<=m-1;j++)
{
if(a[k]==dest[j])
cout<<"values after function"<<big<<"and"<<small<<endl;
}
分析:输出结果:Values before function 2002 and 0
Values after function 2002 and 0
在函数调用中,可以通过值传递方式在函数间传递数据。但是,这种传递无法改变实参的值。只是因为在进入被调用函数时,变量进行了复制。被调用函数的任何更改和实参没有任何联系。所以,在主程序中打印它的局部变量时,变量值没有任何改变。
double add(double,double);
void main()
{
cout<<add(5,10)<<endl;
cout<<add(5.0,10.6)<<endl;
}
int add(int x,int y)
{
return x+y;
}
double add(double a, double b)
四、编程题
2、编写一个函数,在一个字符串数组中查找"Hello",如果找回返回指向“Hello”开始出的指针;否则抛出一个异常“Not Found”.
#include<iostream.h>
#include<stdio.h>
#include<string.h>
char*findstring(char*a,char*dest)
#include<stdio.h>
void Display(int idata)
{printf("A int:%d\n",idata);}
void Display(double ddata)
{printf("A double:%16f\n",ddata);}
void Display(char cdata)
Display(d);
Display(e);
}
}
3、编写一个程序其中包括3个重载函数Display()用于显示数值。这些函数根据实参类型,将数值显示在屏幕上。第一个函数输出一个double值,前面用字符串“A double:”引导;第二个数值输出一个int值,前面用“A int:”引导;第三个函数输出一个char字符,前面用“A char:”引导。在主函数中,分别用double,float,int,char和short型变量去调用Display()函数。
}
void main(void)
{
char str1[]="This is a test char array.Hello is here.";
char dest[]="Hello";
char*result=NULL;
result=findstring(str1,dest);
cout<<"The string is:"<<result<<endl;
函数类型是指函数返回值的数据类型,函数的返回值可以是指针、值或者引用。并不是所有的函数都有返回值,有的函数可以没有返回值,函数无返回值,要根据函数实现的功能来决定。如:
函数add()
int add (int a ,int b)
{
return a+b;
}
用来实现两个整数的求和,那么就需要返回值来返回求和结果,而print()只向屏幕上输出一些信息,就不需返回值,所以返回类型为void。
函数重载要求编译器能唯一确定调用一个函数时应执行哪个函数代码,即采取哪个函数实现。确定函数的实现时,要从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同命名的函数的参数个数或参数类型不同;否则,无法实现重载。
举例:
#include<iostream.h>
int add(int,int);
{printf("A char:%c\n",cdata);}
void main(void)
{
int a=3;
double b=3.33;
float c=1.2;
char d='a';
short e=34;
Display(a);
Display(b);
Display(c);
{
int temp;
temp=a;a=b;b=temp;
}
void main(void)
{
int big=2002,small=0;
cout<<"values before function"<<big<<"and"<<small<<endl;
swap_values(big,small);
k++;//如果当前字符相等进行下一个字符比较
else
break;
if(j==m-1)
return &a[i];
}
}
throw "Not found!";
}
catch(char*str)
{cout<<"there is a exception is:"<<str<<endl;}
void print(char *str)
{
cout<<str;
}
所有的函数都有返回类型,如果没有显示指出函数的返回值类型,默认返回类型为int型
二、选择题
2、B
8、B
三、分析题
4、#include<iostream.h>
void swap_values(int a,int b)
一、问答题
1、什么是函数重载?如何进行函数重载?
答:函数重载指同一函数名可以对应多个函数的实现。eg:函数名add(),功能是求和即两个操作的和。其中,一个函数实现两个整型数的和,另一个函数实现两个浮点型数的和,再一个函数实现两个复数的和。每种函数实现对应一个函数体,函数名字相同,但函数的参数类型不同。这就是函数的重载。函数重载在类和对象的应用中尤为重要。
{
return a+b;
}
4、下列两个函数是否为重载?
void func(int a,int b);
int func(int a,int b);
答:不是重载。因为它们参数个数和类型都相同,只有返回值不同,返回值不足以区分两个函数。
7、什么是函数的类型和值?是否所有函数都有返回值?是否所有函数都有类型?