1.留心观察取值范围
#include<stdio.h>
int main(){
int n,count=0;
scanf("%d",&n);
long long a=n;//use long long 来保证10^9这个范围
while(a!=1){
if(a%2==0){
a=a/2;
}
else{
a=3*a+1;
}
count++;
}
printf("%d",count);
}
2.取出末六位的方法
printf("%d",a%1000000);
3.当出现输入整数个数未知的时候
while(scnaf("%d",&x)==1){
sum+=x;
count++;
}//scanf返回的值是成功输入的变量的个数
//当然,这样结束输入需要输入EOF,也就是ctrl+z
4.取出一系列输入数的最小值和最大值需要观察数的取值范围
while(scanf("%d",&x)==1){
if(x<min)
min==x;
if(x>max)
max==x;
}//min should be a large number max should be a small number
也可以用读出的第一个整数,让max=min=x来解决这个问题
需要结合取值范围来赋予初值
5.通过输入输出重定向来解决输入输出问题
#include<stdio.h>
int main()
{
int i;
if (freopen ("D:\\output.txt", "w", stdout) == NULL)
fprintf(stderr, "error redirecting stdout\n");
for (i = 0; i < 10; i++)
printf("%3d", i);
printf("\n");
fclose(stdout);
return 0;
}
6.输入流重定向的方法
#include<stdio.h>
int main()
{
int a, b;
freopen("in.txt","r",stdin);
/* 如果in.txt不在连接后的exe的目录,需要指定路径如D:\in.txt */
freopen("out.txt","w",stdout); /*同上*/
while (scanf("%d%d", &a, &b) != EOF)
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}
7.重定向方法被禁止的时候
//if freopen is prohibitted
#define<stdio.h>
#define INF 10000000000
int main(){
FILE *fin,*fout;
fin=fopne("in.text","rb");
fout=fopen("out.text","wb");
int x,n=0,min=INF,max=-INF,s=0;
while(fscnaf(fin,"%d",&x)==1){
s+=x;
if(x<min)min=x;
if(x>max)max=x;
n++;
}
fprintf(fout,"%d %d %.3f",min,max,(double)s/n);
fclose(fin);
fclose(fout);
/*
fin=stdin;//这样可以将输入输出流又转换成为标准输入输出流
fout=stdout;
*/
return 0;
}