目录
3.16 设计C语言程序,按下面的近似公式计算e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! + ...,使误差小于给定的误差限ε。
3.17 递增的牛群:若一头小母牛从第4个年头开始每年生育一头母牛,按照此规律,第n年时有多少头母牛?
3.19 百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少匹?
3.20 设计C语言程序,验证欧拉公式an = n^2 - n + 41是否是一个在一39~40范围内计算素数n的通项公式。
一、习题
3.6 求两个正整数m和n的最大公约数。
//用辗转相除法求最大公约数
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int tmp = 0;
printf("请输入两个整数: ");
scanf("%d %d", &m, &n);
while (tmp = m % n)
{
m = n;
n = tmp;
}
printf("最大公约数为:%d\n", n);
return 0;
}
3.16 设计C语言程序,按下面的近似公式计算e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! + ...,使误差小于给定的误差限ε。
#include<stdio.h>
#define E 0.0001
int main()
{
int i=1,j=1;
double e=1.0,k;
do{
j=i*j;
k=1.0/j;
e=e+k;
i++;
}while(k >= E);//判断误差是否小于给定的误差限E=0.0001
printf("%lf\n",e);
return 0;
}
3.17 递增的牛群:若一头小母牛从第4个年头开始每年生育一头母牛,按照此规律,第n年时有多少头母牛?
#include<stdio.h>
int main()
{
int i,n;
int thisYear,lastYear1=1,lastYear2=1,lastYear3=1;
scanf("%d",&n);
for(i=4; i<=n; i++)
{
thisYear = lastYear1+lastYear3;
lastYear3 = lastYear2;
lastYear2 = lastYear1;
lastYear1 = thisYear;
}
printf("%d",thisYear);
return 0;
}
3.19 百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少匹?
#include<stdio.h>
int main()
{
int big = 0;
for(big = 0; big <= 33; big++){
int mid = 0;
for(mid = 0; mid <= 50; mid++){
int sma = 100 - big - mid;
if(3 * big + 2 * mid + sma / 2.0 == 100){
printf("大马=%d, 中马=%d, 小马=%d\n", big, mid, sma);
}
}
}
return 0;
}
3.20 设计C语言程序,验证欧拉公式an = n^2 - n + 41是否是一个在一39~40范围内计算素数n的通项公式。
//3.20
#include<stdio.h>
#include<math.h>
int main()
{
int p, i, j, flag = 0;
for(i = -39; i <= 40; i++){
p = i * i - i + 41;
for(j = 2; j < p / 2; j++){
if(p % j == 0){
flag = 1;
break;
}
}
if(flag == 0){
printf("%d -> ", i);
printf("%d is prime.\n", p);
}
}
return 0;
}
二、注意
2.1
#include<stdio.h>
int main(){
int n=0;
while(n++<=1)
printf("%d\n", n);//1 2
printf("%d\n", n); //3
return 0;
}