C++基本编程语句|第一部分_基础编程(2)|c++程序设计(第二版)钱能
第二章 基本编程语句
不完全整理,只用于作者自己的查漏补缺!
2.1 说明语句 Declarative Statements
1、变量:C++内部数据类型定义而产生
对象:先由程序员定义类,然后再据此创建(定义)实体而产生的
本质没有差别,都是占据空间的数据描述体。
2、说明语句分为定义语句和声明语句。
定义不但声明了名称,还给名称分配了存储空间,使之成为一个能存放数据的实体。
大多数情况下,代表数据的名称使用定义语句,只有在复杂的程序结构中为了说明一个名称可以在各处共享,而又要避免多处定义所造成的空间冲突,才使用声明。
2.1.2 函数声明和定义 Function Declaration & Definition
#include<iostream> using namespace std; //---------------------- void sphere(); //---------------------- int main(){ sphere(); }//---------------------- void sphere(){ double radius; cout<<"please input radius: "; cin>>radius; if(radius<0) return; cout<<"the result is"<<radius*radius*3.14*4<<"\n"; }
函数使用前要先声明。
2.2 条件语句 Conditional Statements
1、条件不能写成0<x<50,而要写成0<x&&x<50
2、switch括号中的表达式只能是整形、字符型或枚举型
switch (ch){ case'-': b=-b; case'+': a=a+b; break; case'1': case'2': case'3':a=1; break; default: a=0; }
3、
for(int i=1;i=1;++i){
cout<<char('A'+i-1);
}
//或者
for (char ch='A';ch<'A'+n;++ch){
cout<<ch;
}
2.5.2 流状态Stream States
与<<连用的设置方式,要包含头文件iomanip
setw(int)
setfill(char)
setprecision(int)
//输出M的倒三角 #include<iostream> #include<iomanip> using namespace std; int main(){ for(int n=1;n<=10;++n) cout<<setfill(' ')<<setw(n)<<" "<<setfill('M')<<setw(21-2*n)<<"M"<<endl; } //============== //或者用string类型定义重复n次字符的字串 for (int n=1;n<=10;++n) cout<<string(n,' ')+string(21-2*n,'M')+"\n";
2.5.3 文件流 File Streams
//复制文件 //============ #include<fstream> using namespace std; int main(){ ifstream in("a.in"); ofstream out("a.out"); for(string str;getline(in,str); ) out<<str<<endl; }
使用筛法判断素数
2.7 再做循环设计
//级数逼近 Progressing Approximation //====================== #include<iostream> #include<iomanip> #include<cmath> using namespace std; int main(){ double sum=0,item=1; for(int i=1;abs(item)>1e-6;++n){ item*=(-1.0)*(2*n-3)/(2*n-1); sum+=item; } cout<<"Pi = "<<setiosflags(ios::fixed)<<setprecision(6)<<sum*4<<endl; }
2.9 练习
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main(){ int param=0; cin>>param; double sum=1+param,item=param; for (int n=2;abs(item)>1e-8;n++){ item *= (-1.0) * param /n; sum+=item; } cout<<setiosflags(ios::fixed)<<setprecision(8)<<sum<<endl; }
#include <iostream> using namespace std; int main(){ int param;
int sum=0,item=1; for (int i=1;i<=12;i++){ item*=i; sum+=item; } cout<<sum; }
3、编程求所有“水仙花数(narcissus number)”。所谓“水仙花数”是指一个三位数,其各个数字立方和等于该数本身。例如,153是水仙花数,因为153=1^3+5^3+3^3。
#include <iostream> #include<cmath> using namespace std; int main(){ int num,sum; for(int i=1;i<=9;i++){ for (int j=0;j<=9;j++){ for(int k=0;k<=9;k++){ num=i*100+j*10+k; sum=pow(i,3)+pow(j,3)+pow(k,3); if(num==sum){ cout<<sum<<endl; } } } } }
4、编程求1000之内的所有“完数”。所谓“完数”是指一个数恰好等于它的包括1在内的所有不同因子之和。例如,6是完数,因为6=1+2+3。
#include <iostream> #include<cmath> using namespace std; int main(){ cout<<1<<endl; int sum; for(int num=4;num<1000;num++){ sum=1; if(float(int(sqrt(num)))==sqrt(num)){ sum+=int(sqrt(num)); } for (int i=2;i<sqrt(num);i++){ if(num%i==0){ sum+=i; sum+=(num/i); } } if(sum==num){ cout<<num<<endl; } } }
#include <iostream> #include<cmath> using namespace std; int main(){ int num,flag; for(int i=1;i<=9;i++){ for(int j=0;j<=9;j++){ flag=1; num=i*100+j*10+i; for(int k=2;k<=int(sqrt(num));k++){ if(num%k==0){ flag=0; } } if(flag) cout<<num<<endl; } } }
#include <iostream> #include<cmath> using namespace std; int main(){ int peaches=1; for (int i=0;i<9;i++){ peaches+=1; peaches*=2; } cout<<peaches; }
#include <iostream> using namespace std; int main(){ int num_star=0; int num_space=0; for (int i=1;i<=19;i++){ if(i*2-1>19){ num_star=(19-i)*2+1; num_space=i-9; }else{ num_star=i*2-1; num_space=11-i; } for (int j=0;j<num_space;j++){ cout<<" "; } for (int j=0;j<num_star;j++){ cout<<"%"; } for (int j=0;j<num_space;j++){ cout<<" "; } cout<<"\n"; } }
#include <iostream> #include<iomanip> using namespace std; int main(){ for(int i=1;i<=10;i++){ cout<<setfill(' ')<<setw(11-i)<<" " <<setfill('#')<<setw(i)<<"#"<<setfill(' ')<<setw(4)<<" " <<setfill('$')<<setw(i)<<"$"<<endl; } }