对于大部分人来说这部分都不陌生,我也就不再赘述,只写出一些本书中提到的编写循环结构程序时的需要注意的地方。
1、for循环的格式为:for( 初始化;条件;调整 ) 循环体;
2、尽管for循环反复执行相同的语句,但这些语句每次的执行效果往往不同。
3、编写程序时,要特别留意“当前行”的跳转和变量的改变。
4、不拘一格的使用伪代码来思考和描述算法是一种值得推荐的做法。
5、把伪代码改成代码时,一般先选择较为容易的任务来完成。
6、浮点运算可能存在误差。在进行浮点数比较时,应考虑到浮点误差。
7、while循环的格式为“while( 条件 ) 循环体 ; ”
8、当需要统计某件事物的个数时,可以用一个变量来充当计数器。
9、不要忘记测试。一个看上去正确的程序可能隐含错误。
寻找错误的方法:
(1)利用IDE设置断点,跟踪调试,单步执行
(2)输出中间结果
10、在循环体开始处定义的变量,每次执行循环体时会重新声明并初始化。
11、要计算只含有加法、减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之前对n取余,结果不变。
12、可以使用<ctime>和clock()函数获得程序运行时间。常数CLOCK_PER_SEC和操作系统相关;不要直接使用clock()的返回值,而应总是除以CLOCK_PER_SEC之后得到的值为以“秒”为单位。
13、很多程序的运行时间与规模n存在着近似的简单关系。可以通过计时函数来发现或验证这一关系。
计时函数:c/c++中的<time.h>中的clock();
14、对于输入参数不确定个数的情况:
while( scanf ( " %d ", &x ) == 1 )
//当输入结束时,scanf无法再次读取x,将返回0
{
循环体;
}
while( scanf("%d %d", &a , &b) ==2 )
{
循环体;
}
while( cin>> a>> b )
{
循环体;
}
15、变量在未赋值之前的值是不确定的。特别的,它不一定等于0。
16、int类型是32位整数,long long类型是64位整数。
long long 输出形式:%I64d(gcc) ;%lld (vs2010)
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
long long s;
cin>>s;
<strong><span style="color:#6600cc;">printf("%I64d",s);</span></strong>
return 0;
}
17、 要在C++程序中使用c语言头文件,请去掉拓展名.h,并在最前面加上小写字母c。例如:<stdio.h> 在c++中应该是:<cstdio>
18、标准输入流cin比文件流fin慢很多很多。
7744问题
例:aabb
输出所有形如aabb的四位完全平方数(前两位数字相等、后两位数字相等)。
参考代码:
//7744问题
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int a,b,n;
double m;
for( a=1;a<=9;a++){
for(b=0;b<=9;b++ ){
n=a*1100+b*11;
m=sqrt(n);
//floor(x)函数返回x的整数部分,浮点数的运算可能存在误差
//为了减小误差的影响,改为四舍五入,即floor(x+0.5)
if(floor(m+0.5)==m)
cout<<n<<endl;
}
}
return 0;
}
3n+1问题
考虑一下数列的生成办法.由n开始. 如果 n是偶数除以2. 如果是奇数, 除以3加1. 这样产生一个新的n, 长此以往,直到n = 1. 例如 n = 22:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
历史证明:0~1000 000无所例外
输入n,输出变换的次数。n小于等于10^9。
样例输入:3
样例输出:7
参考代码:
//3n+1问题
#include<iostream>
using namespace std;
int main(){
int n,count=0;
cin>>n;
while(n>1){
if(n%2==1)
n=3*n+1;
else
n/=2;
count++;
}
cout<<count<<endl;
return 0;
}
阶乘之和
输入n,计算s=1!+2!+....+n!的末6位(不含前导0)
参考代码:
#include<iostream>
using namespace std;
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++){
int temp=1;
for(int j=1;j<=i;j++){
temp*=j;
}
sum+=temp;
}
cout<<sum%100000<<endl;
return 0;
}
文件操作:数据统计
#include<cstdio>
#define INF 0xffffff0;
int main(){
FILE *fin,*fout;
fin=fopen("data.in","rb");
fout=fopen("data.out","wb");
int x;
int n=0;
int min=INF;
int max=-INF;
int s=0;
while(fscanf(fin,"%d",&x)==1){
s+=x;
if(x<min) min=x;
if(x>max) max=x;
n++;
}
fprintf(fout, "%d %d %3.1f\n", min, max, (double)s/n);
fclose(fin);
fclose(fout);
return 0;
}