第02章 CORE C++_控制语句_选择_循环_分支_跳出_函数_声明_形参_返回值_重载_递归
来源:互联网 发布:飞行器设计知乎 编辑:程序博客网 时间:2024/04/29 12:55
1.问题:对不同成绩给予对应评语
思路:1.输入成绩
2.判断是否为有效成绩
3.分类(按成绩),对应输出
代码:#include<iostream>
using namespace std;
int main()
{
int score;
cout<<"input score:";
cin>>score;
if(score<0||score>100)
cout<<"invalid score!"<<endl;
else
{
switch(score/10)
{
case 10:
cout<<'A'<<endl;
cout<<" 恭喜你,满分!"<<endl;
break;
case 9:
cout<<'B'<<endl;
cout<<" 成绩优秀!"<<endl;
break;
case 8:
cout<<'C'<<endl;
cout<<" 成绩良好!"<<endl;
break;
case 7:
cout<<'D'<<endl;
cout<<" 成绩一般!"<<endl;
break;
case 6:
cout<<'E'<<endl;
cout<<" 刚刚及格!"<<endl;
break;
default:
cout<<'F'<<endl;
cout<<" 要加倍努力!"<<endl;
}
}
}
解释:1.控制结构(流程控制)(flort control)
1.顺序
2.选择:if{...};if{...}else{...}
3.分支(多路选择):switch(){case:...}
4.循环:for(){...};while(){...};do{...}while()
2.结构:
1.switch( 结果为整数的表达式):先计算表达式
2.{...case( 整数常数:)...case( 整数常数:)}:case(可为整数、字符、枚举常量)。每个case 后的整数常数各不相同
3....break;(跳出):至少有一个分支;switch 所有的分支必须用{}括起来。
4.default; (习惯上放最后一位):至少有一个分支;switch 所有的分支必须用{}括起来。
2.问题1:以每行数*形式输出
问题2:错误代码,无限循环
思路1:无
思路2:i为字符型,不能i++运算,i的ASCII码值不变,即,一直<128
代码1:#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++)
{
cout<<i<<"*"<<endl;
}
cout<<"bye"<<endl;
}
代码2:#include<iostream>
using namespace std;
int main()
{
for(char i=0;i<128;i++)
cout<<"*"<<endl;
}
解释:for(准备;条件;调整):如果条件总为真的话,这个判断就是多余的,一直执行下去
for(准备;;调整):无条件循环就是无限循环,也就是死循环
for循环的()中任何条件都是可有可无的
for(;;) 无限次执行下面的语句,死循环
3.问题:共讲16天课,依次输出“讲第i天课”
思路:用while{}做,初始化15,减至0
代码:#include<iostream>
using namespace std;
int main()
{
int days=15;
while(days>0)
{
cout<<" 讲第"<<16-days<<" 天课"<<endl;
--days;// 前--比后--性能高些,++也是
}
cout<<" 大家解放了"<<endl;
}
解释:while(true)或者while(1):无限次执行下面的语句,死循环
4.问题:显示存款,取款,转账,查询选项,选中后,输出其代号;额外贴心功能:如果输入错误,重新让你选
思路:1.输入错误循环,即数<1||数>4,所以只能选while(){}或do{}while();
2.显示:用do{},选中:输入代号,是否数<1||数>4?:while(数<1||数>4)
代码:#include<iostream>
using namespace std;
int main()
{
int choice;
do{
cout<<"1--存款"<<endl;
cout<<"2--取款"<<endl;
cout<<"3--转帐"<<endl;
cout<<"4--查询"<<endl;
cout<<" 请选择(1~4)"<<endl;
//int choice;//因为{}后还要用到choice需要把变量放在外面
cin>>choice;
}
while(choice<1||choice>4);// 千万别忘了;号
cout<<" 您选择的是:"<<choice<<endl;
}
解释:如果不是考虑到额外情况,可以先输出选项,输入,然后可以if(){}else{}结构做
5. 问题:循环输入,每次输入都有序号;输入年份为0,则推出程序;输入年份<1600,为非法年份,重新输入;输入年份>=1600,判断是否为闰年还是正常年;不限制输入年份大小
思路:1.for(){}和while(){}都可以
2.属于break和continue语句范畴,但是要跳出输入的这层循环,所以用break
3.必须在循环体内一层有continue,因为还要输入
4.正常闰年算法
5.for(准备;;i++){}和while(1){初始化;...;++i}都可以
代码:#include<iostream>
using namespace std;
int main()
{
int year;
for(int i=1; ;i++)
{
cout<<i<<':'<<"input a year:";
cin>>year;
if(year==0)
break;
if(year<1600)
{
cout<<"invalid year!"<<endl;
continue;
}
if(year%4==0&&year%100!=0||year%400==0)
cout<<"leap year"<<endl;
else
cout<<"common year"<<endl;
}
}
解释:break:终止循环,跳出,只跳出一层循环(不在这层循环体内执行)
continue:用来跳过本轮循环中剩余的循环体,跳到调整部分(还在这层循环体内执行)
C++中:for( 准备;条件;调整){ } 如果和准备和调整去掉就同于while;控制结构可以随意组合,任意多层
6.问题:输入一个范围为100~500之间的整数,并列出这个数所有的约数divisors(不含本身),最后统计出个数count 和sum
思路:1.输入数,if(数<100||数>500),则非法;else{}
输入数,do{输入}while(数<100||数>500)或while(数<100||数>500) {}
2.反复对从1到这个数之前的所有整数能整除就是约数,输出:
int count=0;int sum=0;for(int i=1;i<数;i++){if(数%i==0){cout<<i<<","<<endl;count++;sum++=i;}}
代码:#include<iostream>
using namespace std;
int main()
{
int n;
do
{
cout<<" 请输入一个100~500的整数";
cin>>n;
}while(n<100||n>500);
int count=0;
int sum=0;
for(int i=1;i<n;i++)
{
if(n%i==0)
{
cout<<i<<' ';
++count;
sum+=i;
}
}
cout<<endl;
cout<<count<<" divisors,sum is:"<<sum<<endl;
}
解释:按照自己思路编程,即编程思想
7.问题:对于指定某年某月,输出其天数
思路:1.输入或指定值
2.在main()函数中调计算天数子函数
3.1.考虑31天的月份(反正要进行天数初始化,直接以其中31天或以30天初始化,这样简洁)
3.2.考虑30天的月份
3.3.考虑闰年的2月份
代码:#include<iostream>
using namespace std;
int daysOfMonth(int year,int month);// 函数的声明,名字不起任何作用
int main()
{
cout<<"main function"<<endl;
cout<<daysOfMonth(2002,11)<<endl; //执行函数daysOfMonth(),返回函数值,输出
daysOfMonth(2008, 6); //执行函数daysOfMonth(),返回函数值
}
int daysOfMonth(int year,int month)// 函数名+参数表称为函数头
{//int 为返回类型;year/month 为行参;
cout<<"year="<<year<<",month="<<month<<endl;
int days=31;
if(month==4||month==6||month==9||month==11)
days=30;
else if(month==2)
days=(year%4==0&&year%100!=0||year%400==0)?29:28;
return days;
}//函数体
解释:1.main函数是shell自动调用的,其他的不是
在main函数中调用那个函数
2.函数可以声明,也可在函数头直接写
3.形参中的数据是从那个函数之外传来的,形参本身也是变量,所以它自己会把数据保存一份
形参和函数体中的数据有什么区别:函数的形参在调用的时候才创建,而从函数返回时就释放
4. 实参(值参):跟形参对应的数据
8.问题:对于指定某年某月,输出其下一天的年月日;额外要对非法的数据,重新输入
思路:1.额外的非法输入的矫正应在main(){}中体现:循环判断年,月,日是否有效(这是while(){},do{}while(),for(){}皆可选用)。即,判断日是否在1~当年当月最大天数之间
2.以算出指定年月的各有天数的方法为基础
3.日增加一:
3.1.对于每个月最后一天的判断,推出第二天的日期,++月份(即,如果超过了当年当月最大天数,日归一,月加一)
3.2.在前两步的基础上,最后一个月(即12月)的判断,推出第二天的日期,月份,年份;如果是12月最后一天,推出1月和++年(如果月超过了12,月归一,年增加一)
代码:using namespace std;
int daysOfMonth(int y,int m)
{
if(m==4||m==6||m==9||m==11)
return 30;
if(m==2){// 这里的{}可有可无
if(y%4==0&&y%100!=0||y%400==0)
return 29;
else
return 28;
}
return 31;
}
int main()
{
int y,m,d;
do{
cout<<"input a date:";
cin>>y>>m>>d;
}while(y<1600||m<1||m>12||d<1||d>daysOfMonth(y,m));
if(++d>daysOfMonth(y,m)){ //这条判断语句很经典:两层意思
d=1;
if(++m>12){//这条判断语句很经典:两层意思
m=1;
++y;
}
}
cout<<"the next day:"<<y<<'-'<<m<<'-'<<d<<endl;
}
解释:1.这次没有函数声明(上次有)
2.这次计算每月天数的返回值的方式不同,是直接返回(上次是存到变量,然后返回变量的值)
9.问题:输入数,输出数的平方
思路:计算平方的函数,由main函数调用
代码:#include<iostream>
using namespace std;
int squre(int n)
{
cout<<"n="<<n<<endl;
n=n*n;
cout<<"n="<<n<<endl;
return n;// 千万别忘了
cout<<"---"<<endl;// 此句无效语句因为已经返回了
}
int main()
{
int m=111;
squre(m);
cout<<squre(m)<<endl;
cout<<"m="<<m<<endl;
}
解释:在形参的名字里可以不同,但是类型和个数必须相同
10.问题:列菜单,选菜,输出代号
思路:注意无形参函数调用
代码:#include<iostream>
using namespace std;
int menu()// ()必须带着
{
int choice;
cout<<"---欢迎光临饭店---"<<endl;
cout<<"1-水煮鱼"<<endl;
cout<<"2-毛血旺"<<endl;
cout<<"3-辣子鸡丁"<<endl;
cout<<"4-河水豆花"<<endl;
cout<<" 请点菜:";
cin>>choice;
return choice; // 因为返回类型为int,所以return 数据
}
int main()
{
cout<<menu()<<" 号菜!"<<endl;
}
解释:形参的名字里可以不写,但是类型和个数必须相同
11.问题:输出指定符号的矩阵
思路:双层for循环
代码:void print(int row,int col,char ch)
{
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cout<<' '<<ch;
}
cout<<endl;
}
return;// 因为返回类型为void,所以可以省略,注意不能带0或其他数据,是不带回结果的函数
}
int main()
{
print(3,5,'*');
cout<<"--------------------"<<endl;
print (4,8,'$');
cout<<"===================="<<endl;
}
解释:无返回值函数调用
12.问题:根据性别分别输出
思路:另一种分不同情况输出的方法
代码:#include<iostream>
using namespace std;
void reg(string name,bool gender);
void reg(string name);
int main()
{
reg("陈东");
reg("刘哲");
reg("刘晓梅",false);
reg("杨智");
}
void reg(string name)
{
reg(name,true);
}
void reg(string name,bool gender)
{
cout<<(gender?" 帅哥":"美女")<<name<<" 报名啦!"<<endl;
}
解释:函数的重载:多个函数用同一个名字,必须让编译器能够区分出该调用哪个函数
栈:一种内存空间,系统自动管理
13.问题:有数列1,1,3,5,8,13,21,...1597,2584,4181,6765.用程序写出
思路:f(1)=1;f(2)=1;f(3)=f(3-1)+f(3-2);...f(n)=f(n-1)+f(n-2);...f(20)=f(19)+f(18).
代码:#include<iostream>
using namespace std;
int fib(int m) {
if(m<3)
return 1;
else
return fib(m-1)+fib(m-2);
}
int main()
{
for(int i=1;i<=20;i++)
cout<<fib(i)<<endl;
}
解释:递归:函数(某形参)自己调用自己(另形参)
14.问题:有无存储类static,声明变量的比较
思路:无
代码:#include<iostream>
using namespace std;
int getid()
{ //int id=1000; 每次执行getid()时,运行
static int id=1000;//第一次执行getid()时,运行。直到程序结束
++id;
return id;
}
int main()
{
cout<<getid()<<endl;
cout<<getid()<<endl;
cout<<getid()<<endl;
}
解释:存储类:auto:自动变量,默认变量,无人用
extern
register
static:用于局部变量时有特殊含义,只在第一次遇到时执行,会在程序结束时才回收
volatile:不稳定
15.问题:汉诺塔算法(经典递归算法)(???)
思路:1.输入盘子数
2.hano(int n,char a,char b,char c){
if(n>0){
hano(n-1,a,c,b);
n号从a直接移到b
hano(n-1,c,b,a);
}
}
代码:#include<iostream>
using namespace std;
void hano(int n,char a,char b,char c)
{
if(n>0)
{
hano(n-1,a,c,b);
cout<<n<<" 号"<<a<<"==>"<<b<<endl;
hano(n-1,c,b,a);
}
}
int main()
{
int n;
cout<<" 请输入盘子数:";
cin>>n;
hano(n,'A','B','C');
cout<<" 完毕!"<<endl;
}
解释:无
16.问题:输出一个十进制整数,位与位之间用空格分隔
思路:1.输入数
2.1我们要的结果是数ab...cd以a,b,.....c,d的形式输出
2.2输出a(最高为取余),然后输出',';b(次高位取余),然后输出',';...c,然后输出',';d(???)
代码:#include <iostream>
using namespace std;
void showdigit(int n)
{
if(n>9){
showdigit(n/10);
cout << ',';
}
cout << n%10;
}
int main()
{
int n;
cout << "input n:";
cin >> n;
showdigit(n);
cout << endl;
}
解释:无
- 第02章 CORE C++_控制语句_选择_循环_分支_跳出_函数_声明_形参_返回值_重载_递归
- ^_^
- ^_^
- ^_^
- ^_^
- *_&
- ...!@~....!@#....+_#%.
- ^_^
- ^_^
- ^_^
- ^_^
- *_*
- ^_^
- ^_^
- ~~~~(>_<)~~~~
- ^_^!
- -_-|||
- ^_^
- 使用javamail发送邮件
- SAP模块一览表
- CUDA VS Wizard 2.2 beta发布~~
- DotNetNuke: System.Security.Cryptography.CryptographicException: Bad Data
- java代码优化
- 第02章 CORE C++_控制语句_选择_循环_分支_跳出_函数_声明_形参_返回值_重载_递归
- 35 个你也许不知道的 Google 开源项目
- 正则应用之——逆序环视探索
- 如何配置Enterprise5.4系统自带的php,mysql,Apache?
- XPath, XQuery 以及 XSLT 函数
- 优化MyEclipse
- 法国留学生经历的“甲流十天”
- 挑战启动极速(4)---sreadahead分析
- 发帖的图片,杯具啊。