烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
返回:贺老师课程教学链接 项目要求 【项目5-年龄几何】张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。提示:设数列的首项为n,公差为a,则前4项之和为"4*n+6*a",前4 项之积为"n*(n+a)*(n+a+a)*(n+a+a+a)"。同时"1<=a<=4","1<=n<=6"。可采
返回:贺老师课程教学链接 项目要求 【项目4-换分币】用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。提示:根据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j*2+k*5=100,根据取值范围构造循环解题即可。 [参考解答]#include <stdio.h> int main() { in
返回:贺老师课程教学链接 项目要求 【项目3-鸡兔共笼】鸡兔共有30只,脚共有90只,问鸡兔各有多少? [参考解答]设鸡i只,则兔30-i只,则脚有2*i+4*(30-i)只… #include <stdio.h> int main() { int i; //i代表鸡,则兔为30-i只 for(i=0; i<=15; i++) if(2
返回:贺老师课程教学链接 项目要求 【项目2-水仙花数】对于三位数字,若各位数字立方和等于该数,该数就是水仙花数。如153:153=1^3+5^3+3^3 [参考解答] 解法1:穷举三位数的各位数,将他们组合在一起后判断#include <stdio.h> int main () { int i,j,k,n; for(i=1; i<10; i++)//i
返回:贺老师课程教学链接 项目要求 【项目1-小明借书】小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?提示:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。 [参考解答] #
返回:贺老师课程教学链接 说明:穷举法在有些时候,并不是一种最有效率的解决方案,但却是最直观的。初学者依靠这一组问题的解决,将获得程序设计的最直接体验,以及会想问题的头脑。 【项目1-小明借书】小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?提示:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后
返回:贺老师课程教学链接 项目要求 【项目6-回文日】很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。[参考解答] 当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是月,02部分是日。显
返回:贺老师课程教学链接 项目要求 【项目4-回文数】(1)输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数,正着看、倒着看,是同一个数)。[参考解答] #include <stdio.h> int main() { int n,m,k; scanf("%d", &n); k=n; m=0; //m将为n的反
返回:贺老师课程教学链接 项目要求 【项目5-阿姆斯特朗数】如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。如 407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。[参考解答] #include <stdio.h> int main() { int i,m,k,n; for(n=1; n&
返回:贺老师课程教学链接 项目要求 【项目3-反序数】(1)输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数) [参考解答] #include <stdio.h> int main() { int n,m,k; scanf("%d", &n); k=n; m=0; while(k&g
返回:贺老师课程教学链接 项目要求 【项目2 - n=a!+b!+c!】求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。[参考解答] 解法1:n为3位数,n由100循环到999,每次循环,分离出百、十、个位数,以此判断 #include <stdio.h> int main() { int n,a,b,c,sum; int
返回:贺老师课程教学链接 项目要求 【项目1-完数】一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。(1)输入一个数n,判断n是否是完数[参考解答] 解1: #include <stdio.h> int main( ) { int n,s,m; printf("输入n:"); s
返回:贺老师课程教学链接 说明:这里给出的题目比较多,可以耐心地做下去。初学者一旦通过这样一些小的程序,走出了循环的困局,程序设计的感觉,也便逐渐好了起来。循环作为初学者必须迈过去的一道坎,这样的训练自有价值。 【项目1-完数】一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。(1)输入一个数n,判断n是否是完数(2)输出
返回:贺老师课程教学链接 项目要求 【项目2:打豆豆】设计一个程序,能重复地在显示下面的信息:* 1. 吃饭* 2. 睡觉* 3. 打豆豆* 0. 退出* 请选择(0-3):根据用户输入的选项,输出一句提示性的话语(将来会对应实现某个功能)。输入0,则退出。请在下面的程序段基础上完成 #include <stdio.h> int main( ) { char
返回:贺老师课程教学链接 项目要求 【项目1:大奖赛计分(续一)】在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。请在大奖赛计分程序基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确。 [参考解答] #include <stdio.h> #define n 10 int main( ) { int i; double av
返回:贺老师课程教学链接 【项目1:大奖赛计分(续一)】在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。请在大奖赛计分程序基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确。[参考解答]【项目2:打豆豆】设计一个程序,能重复地在显示下面的信息:* 1. 吃饭* 2. 睡觉* 3. 打豆豆* 0. 退出* 请选择(0-3):根据用户输入的选项,输
返回:贺老师课程教学链接 (1)#include <stdio.h> int main( ) { int a,b; for (a=1,b=1 ; a<=100 ; a++) { if (b>=20) break; if (b%3==1) { b+=3 ;
返回:贺老师课程教学链接 项目要求 【项目4:大奖赛计分】 (1)基本要求:在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。 #include <stdio.h> #define n 10 int main( ) { int i=1; double ave
返回:贺老师课程教学链接 项目要求 【项目3:单位转换对照表】 编程序生成一张从英尺到米的转换表(1米大约等于3.28英尺),以方便工厂里工人师傅使用。输出形式如下图所示,罗列了从0英尺到99英尺对应的米数,即第i行第j列的值vij代表i*10+j英尺对应的米数。例如,通过下图所示,我们可以方便地查到17英尺相当于5.18米。只输出内容即可,不用考虑表格线。 提示:每输出10英尺的转换表后
返回:贺老师课程教学链接 项目要求 【项目2:乘法口诀表】 编程序,输出一个乘法口诀表,形如 提示:一共要输出9行,每一行…… [参考解答] #include <stdio.h> int main( ) { int i,j; for(i=1; i<=9; ++i) { for(j=1; j<=i; ++j)
返回:贺老师课程教学链接 项目要求 【项目1:位乘大于位和】 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请将空白处缺少的成份补齐。 #include <stdio.h> int main( ) { int n,k=1,s=0,m ; for (n=1 ; n<=100 ; n++) { k=1 ;
返回:贺老师课程教学链接 【项目1:位乘大于位和】 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请将空白处缺少的成份补齐。 #include <stdio.h> int main( ) { int n,k=1,s=0,m ; for (n=1 ; n<=100 ; n++) { k=1 ;
贺老师的教学链接 本课讲解 //类型转换函数应用 #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i) {
贺老师的教学链接 本课讲解 //MyVector类的设计 #include <iostream> using namespace std; class MyVector //定义向量类 { public: MyVector(int m); //构造函数,共有m个元素的向量,元素值预置为0 MyVector(const MyVector &v);
贺老师的教学链接 本课讲解 #include <iostream> using namespace std; class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒
贺老师的教学链接 本课讲解 重载流插入运算符“<<” #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i)
贺老师的教学链接 本课讲解 示例1:分数类对象的相反数 class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1):nume(nu),deno(de) {} CFraction operator-(const CFrac
贺老师的教学链接 本课讲解 String类运算符重载函数 #include<iostream> #include<cstring> using namespace std; class String { public: String( ){p=NULL;} String(char *str); friend bool operator&g
贺老师的教学链接 本课讲解 以复数的加法为例:用成员函数实现复数加法 #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i
先说问题: Description 设圆半径r,圆柱高h 求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 PI=3.14 Input 两个浮点数,r和h Output 圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。保留两位小数,每个结果后换行。 Sample I
贺老师的教学链接 本课讲解 引用作为形参 #include<iostream> using namespace std; class Sample { int x; public: Sample(int a): x(a) {cout<<"A";} Sample(Sample &a): x(a.x) {cout<<"B"
贺老师的教学链接 本课讲解 Time类的初步实现与测试 #include <iostream> using namespace std; class Time { public: Time(): hour(0), minute(0), sec(0){} Time(int h, int m, int s):hour(h), minute(m), sec(s){
【来信】 老师,你好。我看过你的博客,觉得你不仅是一位计算机高手,更是一位真的能为学生解答疑惑的好老师。我是一名大三的学生,我也有些问题想要问你,希望你能解答。 首先,我先说明一下自己,我学过c与c++,也学过linux下的系统编程。自己觉得c比c++更熟。 我看你博客上说,在c++基础学完后,就应该开发真正的项目,运用c++。我就是想问一下,怎么运用c++。比如做服务端的话,看什么书
返回:贺老师课程教学链接 【项目6-复数模板类】 阅读教材例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型。 (1)要求类成员函数在类外定义。 (2)在此基础上,再实现减法、乘法和除法 你可以使用的main()函数如下。int
【项目-成员函数、友元函数和一般函数有区别】(1)阅读下面的程序,体会注释中的说明。//例:使用成员函数、友元函数和一般函数的区别 #include <iostream> using namespace std; class Time { public: Time(int h,int m,int s):hour(h),minute(m),sec(s) {} vo
返回:贺老师课程教学链接 【项目5-友元类】定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)class Date; //对Date类的提前引用声明 class Time { public: Time(int,int,int); void add_a_second(Date &);
返回:贺老师课程教学链接 【项目-人数不定的工资类】设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出。提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用。将salary声明为指针类型的成员,通过动态分配空间,分配正好大小
返回:贺老师课程教学链接 【项目2-我的数组类】下面的程序,因为存在指针类型的数据成员,需要能完成深复制的构造函数。请补充完整构造函数和析构函数(其他不必动)。其中,构造函数要完成下面三个任务:(1)为各成员函数赋值,按照深复制原则,其中arrayAddr应该是为保存数据新分配的连续空间的首地址;(2)MyArray(int *a, int n)中,要将a指向的数组中的数值,逐个地复制到新
返回:贺老师课程教学链接 【项目-深复制体验】(1)阅读下面的程序,补足未完成的注释#include<iostream> #include<cstring> using namespace std; class A { private: char *a; public: A(char *aa) { a = new char[st
返回:贺老师课程教学链接 【项目1-深复制体验】(1)阅读下面的程序,补足未完成的注释#include<iostream> #include<cstring> using namespace std; class A { private: char *a; public: A(char *aa) { a = new char[s
返回:贺老师课程教学链接 (1) #include <iostream> using namespace std; class A { public: A() { cout<<"A"; } ~A() { cout<<"~A"; } }; class B { A *p
贺老师的教学链接 本课讲解 类模板的使用——参数化类 #include <iostream> using namespace std; template<class numtype> class Compare { public: Compare(numtype a,numtype b) { x=a; y=b;
贺老师的教学链接 本课讲解 普通的友元函数 #include <iostream> using namespace std; class Time { public: Time(int,int,int); friend void display(Time &); private: int hour; int minute; int
贺老师的教学链接 本课讲解 浅复制 #include <iostream> using namespace std; class Test { private: int x; public: Test(int n) {x=n; } Test(const Test& c){x=c.x; } void show (){cout<&l
贺老师的教学链接 本课讲解 对象的动态建立和释放 #include<iostream> using namespace std; class Box { public: Box(int w,int l,int h); ~Box(); int width; int length; int height; }; Box::Box(int w,
【项目-静态成员应用】 设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。 class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //
返回:贺老师课程教学链接 【项目3-用多文件组织多个类的程序】将项目2用“一个项目多个文件”的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。 [参考解答]Geometry.h #ifndef GEOMETRY_H_INCLUDED #define GEOMETRY_H_INCLUDED class CPoi
返回:贺老师课程教学链接 【项目2 - 对象作为数据成员】回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类。通过这种方式,将某些类组合到另外的类中,当作其中的一个“部件”使用。本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入
返回:贺老师课程教学链接 【项目1-体验常成员函数】设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改。 class CPoint { private: double x; // 横坐标 double y; // 纵坐标 p
贺老师的教学链接 本课讲解 问题的提出现状:n个同类的对象,每一个对象都分别有自己的数据成员,各自有值,互不相干。期望:希望有某一个或几个数据成员为某类所有对象所共有,以实现数据共享。方案:用全局变量#include<iostream> using namespace std; int N = 0; class Class { private: int a; publi