1.scanf()读入字符
在%c前加一个空格,将缓存区中的回车符读走:
printf("are u a boy (M) or a girl (F)?");
scanf(" %c", &sex);
scanf()按指定格式读取输入,非法字符的输入会导致数据无法正确读入,若要增加程序鲁棒性,让用户重新输入数据,之前还要清除留在缓冲区的非法字符:
ret = scanf("%d", &guess);
while(ret != 1) //若输入错误,则重新输入
{
while(getchar() != '\n');
printf("please guess a magic number:");
ret = scanf("%d", &guess);
}
2.涉及到阶乘的程序,注意定义变量为长整型long或者long long,格式符为%ld
3.rand()函数产生随机数
调用rand()生成的是一个在0~32767之间的整数(需要stdlib.h头文件),要改变生成随机数的取值范围:
求余运算rand()%b,变化到[0,b-1]之间
利用rand()%b+a,变化到[a,a+b-1]之间
产生随机数的过程称为“随机化”,是通过调用标准库函数srand()为函数rand()设置随机数种子来实现的:
srand(1);
magic=rand()%100+1;
也可以通过函数time()需包含time.h头文件,读取计算机的时钟值,并把该值设置为随机数种子:
srand(time(NULL));
4.几个算式的循环程序
通过计算累加项通项的方法寻找累加项的构成规律,将累加项通项表示成:term = sign/n。
a+aa+aaa+...+a...a(n个a)
for(i=1;i<=n;i++)
{
term=term*10+a;
sum=sum+term;
}
1-1/2+1/3-1/4+...-1/100+...直到最后一项绝对值小于1e-4
while(fabs(term)>=1e-4)
{
term=sign/n; //计算累加项
sum=sum+term; //累加
sign=-sign; //分子变化规律
n++;
}
sinx≈x-x^3 /3!+x^5 /5!-...直到最后一项绝对值小于1e-5
do{
term=-term*x*x/((n+1)*(n+2));
sum=sum+term;
n=n+2;
count++;
}while(dabs(term)>=1e-5;
π/4=1-1/3+1/5-1/7+...
e=1+1/1!+2/2!+...直到最后一项绝对值小于1e-5
for(n=1;fabs(term)>=1e-5;n++)
{
fac = fac*n;
term = 1.0/fac;
e = e+term;
count++;
}
网友评论