【项目1- 阅读程序】阅读下列程序,写出程序的运行结果。上机时运行程序,与你的预期进行对照、理解。如果对运行结果和其背后的原理仍不理解,请通过单步执行的手段跟踪理解。
(1)阅读下面两个有静态局部变量的程序,阅读中画出其中各变量的变化过程,以掌握静态变量的存储特征,对照实际运行结果检验学习成果。必要时记得看书及课件。
#include <iostream> using namespace std; int f(int n); int main() { cout<<f(5)<<" "; cout<<f(8)<<endl; return 0; } int f(int n) { static int a=2; int b=0; a+=n; b+=a; return b; }预计运行结果是:__________________
#include <iostream> using namespace std; int func (int a, int b) { static int m=0, i=2; i+=m+1; m=i+a+b; return m; } int main() { int k=4, m=1, p; p=func(k, m); cout<<p<<endl; p=func(k, m); cout<<p<<endl; return 0; }预计运行结果是:__________________
#include <iostream> using namespace std; int a=3, b=5; int max(int a, int b) { int c; c=a>b? a:b; return c; } int main() { int a=8; //若无这一句,又将如何? cout<<max(a,b)<<endl; return 0; }预计运行结果是:__________________
#include <iostream> using namespace std; void cude(); int main() { extern int x;//去掉extern及本行全删除会怎样? x=5; //去掉这一句呢? cude(); cout<<x<<endl; return 0; } int x=10; void cude() { x=x*x*x; }预计运行结果是:__________________
#include <iostream> using namespace std; void f(int); int main() { int i=1234; f(i); return 0; } void f(int n) { if(n==0) return; else { f(n/10); cout<<n%10; return; } }预计运行结果是:__________________
#include <iostream> using namespace std; int sub(int); int main() { int i=5; cout<<sub(i)<<endl; } int sub(int n) { int a; if (n==1) return 1; a=n+sub(n-1); return a; }预计运行结果是:__________________
#include <iostream> using namespace std; const double pi=3.1415926; float area(float r=6.5);//指定r的默认值为6.5 float volume(float h,float r=6.5); //指定r的默认值为6.5 int main( ) { cout<<area()<<endl; //相当于area(6.5); cout<<area(7.5)<<endl; //形参得到的值为7.5,而不是6.5 cout<<volume(45.6)<<endl; //相当于volume(45.6,6.5) cout<<volume(34.2,10.4)<<endl; //h的值为34.2,r的值为10.4 return 0; } float area(float r) { return pi*r*r; } float volume(float h,float r) { return pi*r*r*h; }① 去掉第4行的“=6.5”试试,出错的原因是____________________;
#include <iostream> using namespace std; template<typename T> //模板声明,其中T为类型参数 T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名 { if(b>a) a=b; if(c>a) a=c; return a; } int main( ) { int i1=185,i2=-76,i3=567; double d1=56.87,d2=90.23,d3=-3214.78; long g1=67854,g2=-912456,g3=673456; cout<<"i_max="<<max(i1,i2,i3)<<endl; //调用模板函数,此时T被int取代 cout<<"f_max="<<max(d1,d2,d3)<<endl; //调用模板函数,此时T被double取代 cout<<"g_max="<<max(g1,g2,g3)<<endl; //调用模板函数,此时T被long取代 cout<<"c_max="<<max('1','a','A')<<endl; //调用模板函数,此时T被long取代 return 0; }
提示1:在单步执行中,采用step into后,可以将T像待观察的变量一样,放在watch窗口中进行察看,如图所示,可以发现T取不同的类型。
提示2:若这个程序编译时出错,原因是命名空间std中已经定义过了max,从而产生了冲突。修改的方法有两种:(1)将程序中的max函数名改为mymax,避免这种冲突;或者(2)取消using namespace std;一行,但需要在程序中,将cout、cin、endl前加上std::,如std::cout<<...<<....<<std::endl;A: 求N组数的最大公约数
Description
计算一组数的最大公约数
Input
第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行
Output
每组的两个整数(a和b)的最大 公约数,每个结果独占一行
Sample Input
3
98 72
80 36
12 144
Sample Output
2
4
12
B:分离正整数中的各位数
Description
输出正整数的各位数
Input
若干个用空格隔开的正整数(输入个数不确定,键盘输入时,以CTRL-Z结束)
Output
每个正整数的各位数字,个位数在前,十位数紧随,最高位在最后,每位数后面有一个空格。每个正整数对应的输出占一行。
Sample Input
123 9523 89
Sample Output
3 2 1
3 2 5 9
9 8
C:刑警的射击成绩
Description
刑警培训结束,进行了射击科检验。教官要对学员射击的成绩进行分析,得出各分数段人数统计。
Input
输入若干个0-10间的整数(最高10环,脱靶为0)表示成绩,人数不确定,输入以一个0-10以外的数作为。
Output
各分数段(A:9环以上,B:7环以上,C:5环以上,D:不足5环)的人数,每项成绩占一行
Sample Input
9 7 3 5 8 5 6 7 9 10 0 6 99
Sample Output
A:3
B:3
C:4
D:2
#include <iostream> using namespace std; int fib(int n); int main(){ cout<<fib(20)<<endl; //输出 return 0; } //返回Fibnacci序列中的第n个数 int fib(int n) { }(5)输入一个整数n,要求输出对应的二进制形式,请用递归函数实现。
#include <iostream> using namespace std; int main() { int n; cout<<"请输入一个整数:"; cin>>n; cout<<n<<"对应的二进制形式为:"; dec2bin(n); //输出n对应的二进制串 cout<<endl; return 0; } void dec2bin(int n) { }提示:二进制整数n转换为二进制的方法是“除2取余法”,即将n除以2后得到的余数,由后到前“串”起来,得到对应的二进制数,如图。
int main() { move(4,'A','B','C'); return 0; } //有n个盘子, void move(int n, char A, char B,char C) { }
任务2——引入函数改善程序结构
1、数据
仍然只支持一位用户,所以用户帐号不必存储。
要用全局变量存储:(1)用户密码(由于支持改密码功能,所以用变量,暂先用整型,声明时赋初值);(2)帐户余额(用浮点数表示,声明时赋初值)
2、在输入密码环节,实现有限次密码输入的限制,如果三次都没有输入正确,程序将直接退出,不允许用户继续操作。
查验密码功能做成一个函数。例如:
bool pass() { int 次数=0; bool 是否密码正确=false; //先假设密码不正确,以便能进入do-while循环 do{ 输入密码; 次数++; if(相符)是否密码正确=true; }while(密码不正确且尝试次数不足3次); return 是否密码正确; //上面密码正确为true,反之…… }3、main()函数的结构将如下所示,work函数用于处理业务。
main() { …… if(pass()) work(); else 输出“请到柜台办理密码查询后再来”。 return 0; }4、办理业务的函数work的结构如下:
void work() { //循环显示功能菜单:1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出 //选择后办理各种业务,再显示菜单,直到选择了0。 }其中,各项业务分别编制一个函数完成。提示功能菜单(1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出)后,由用户输入功能选择,用switch多分支完成对应的功能(有的功能依然只输出一句话提示即可)。图示给出建议(鼓励在合理范围内别出心裁):
任务3——将程序用多文件组织
将任务2中的代码,涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。
============== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |