目录
P19 7.编写一个C程序,计算上底为a, 下底为b, 高为h的梯形的面积。其中a, b和h的值由用户从键盘上输入。
P68 9. 利用三角形的三条边求其面积的公式是 f = sqrt(s*(s-a)*(s-b)*(s-c),s = (a+b+c)/2; 计算并输出三角形的面积f和周长.
P68 9. 编写一个程序,求出给定半径r的圆以及内接正n边形的面积,并且输出计算结果。
用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买公鸡,母鸡和小鸡各多少只。
P91 4.(1)输入a, b, c三个数,按降序打印出来。
P92 4.(3)计算1-3+5-7+......-99+101。
P92 4.(6)将1到100之间能用3或5整除的数打印出来。
P96 5-8 将100分成4个数之和,使得第一个数加上4,第二个数减去4,第三个数乘以4,第四个数除以4后所得的和,差,积,商都相等。问这4个数各是多少?
P96 5-14 换零钱问题。把1元对换成1分,2分, 5分的硬币,共有多少种换法。
P124 4 输入两个正整数m,n,求其最大公因子和最小公倍数。
P124 5 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
P124 7. 求整数1~20的阶乘之和(即求1!+2!+3!+.......+20!)。
P124 8.编写一个程序,计算并输出小于给定整数的所有素数。给定的整数由用户从键盘上输入。
P124 9. 求一个奇特的整数x, 它满足下面的条件:对于用户随便输入两个整数a和b, 有x+a和x+b分别是完全平方数。如果在给定范围内不能找到符合条件的x,就要求用户重新输入一组整数a和b。
P125 11. 某人摘了一筐桃子,第一天卖掉一半,他又吃了一只;第二天卖掉剩下的一半,又吃了一只,以后三天都这样做,到了第六天一看,筐中只有一只桃子了。问:他一共摘了多少个桃子?
P125 12. 如果一共三位数等于它自己的每一位字的立方和,则称此数为“水仙花数”,如 ,求100~999之间的全部水仙花数。
P125 14.用迭代法求给定整数的平方根。求平方根的迭代公式为 。
P125 15. 用二分法求方程在(-10,10)之间的根。
P124 16. 打印10行*号。第一行打印1个,第二行打印2个,.........,第10行打印10个。形状如下所示:
P124 18. 一只球从100m高度自由落下,每次落地后反跳回到原高度的一半,再落下。求:它在第10次落地时共经过多少米?第10次反跳多高?
P124 6-2. 设有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始起,每年年初也生一头小母牛。问在第20年时,共有多少头牛?分别输出从第1年至第20年每年的牛数。
P124 6-3. 计算2002年的某月某日是当年的第多少天?星期几(已知2002年元旦是星期二).
P124 6-7.写一个程序,计算两个矩阵相乘 得到的第三个矩阵,并打印计算结果。
P147 6-12 输入一组杂乱无序的整数,按从小到大的次序进行排列,并输出排序后的结果。
P147 6-12 使用Eractos thenes筛选法求出1000以内的素数。并按照每行放10个素数的格式把他们打印出来。
P152 2. 将1~9这9个数字分成3组,使每组中的三个数排成一个三位的完全平方数。要求每个数字必须用一次,而且只能使用一次。
P152 5.从0°到用户给定的角度,计算并输出每隔1°对应的正弦函数值。
P152 6. 找出一个二维数组的靶点, 即该位置上的元素在该行上最大,但在该列上却最小,也可能没有靶点。
P193 1.求n~m间的所有素数。n 和 m的值由用户输入。为了使程序结构清晰,设置一个函数prime(x),用来判断x是否是素数。
原式 = .=C(m-1, n-1) + C(m-1, n);
P194 6.将字符串转换为与其等价的双精度浮点数,并能处理以科学计数法表示的数据。
P196 14.设a, b, c, d是四个不同的正整数,前三个组成等比数列,后三个组成等差数列,且c+d=44,求4个数。
P205 8-2.用指针变量方程编写函数reverse(s),实现字符串s的字符全部首尾颠倒。
P215 8-7.写一个读入一串正文行并打印其中最长行的程序。
P6 1-3:等差级数
给定等差级数的首项,公差和项数,计算该级数的第n项的值以及前n项和。
第n项的值 : an = a1 + (n-1)*d;
前n项和 :Sn = a1 +(a1+d) + (a1+2d)......+(a1+(n-1)d)
= na1 + n(n-1)d/2;
#include<stdio.h>
/*给定等差级数的首项,公差和项数,计算该级数的第n项的值以及前n项和
第n项的值: an = a1 + (n-1)*d;
前n项和 :Sn = a1 +(a1+d) + (a1+2d)......+(a1+(n-1)d)
= na1 + n(n-1)d/2;
*/
int main()
{
int a1, d, n, an, sn;
scanf("%d%d%d",&a1, &n, &d);
an = a1+(n-1)*d;
sn = n*a1 + n*(n-1)*d/2;
printf("an = %d\n",an);
printf("sn = %d\n",sn);
return 0;
}
/*
运行结果
5 10 6
an = 59
sn = 320
*/
P19 7.编写一个C程序,计算上底为a, 下底为b, 高为h的梯形的面积。其中a, b和h的值由用户从键盘上输入。
#include<stdio.h>
int main()
{
double a, b, h, s;
scanf("%lf%lf%lf",&a, &b, &h);
s = (a+b)*h/2.0;
printf("%.2f\n",s);
return 0;
}
/*
运行结果
1 3 4
8.00
*/
P19 8.编写一个C程序,求出半径为r的圆的周长和面积。
#include<stdio.h>
#include<math.h>
#define PI acos(-1.0)
int main()
{
double r, L, S;
r = 1;
L = 2*PI*r;//周长
S = PI*r*r;
printf("周长为%.2f\n", L);
printf("面积为%.2f\n", S);
return 0;
}
/*
运行结果
周长为6.28
面积为3.14
*/
#include<stdio.h>
int main()
{
char x, y;
x = 'A'+10;
y = 'Z'-20;
printf("%c=%d,%c=%d",x,x,y,y) ;
return 0;
}
/*
运行结果
K=75,F=70
*/
P53 3-6.判断给定的某一年是否是闰年。
闰年:能被4整除而不能被100整除,或者能被400整除.
#include<stdio.h>
int main()
{
int year;
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0)
printf("%d is a leap year.\n",year);
else
printf("%d is not a leap year.\n",year);
return 0;
}
/*
运行结果
1900
1900 is not a leap year.
2008
2008 is a leap year.
*/
P68 9. 利用三角形的三条边求其面积的公式是 f = sqrt(s*(s-a)*(s-b)*(s-c),s = (a+b+c)/2; 计算并输出三角形的面积f和周长.
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, s, f, L;
scanf("%lf%lf%lf",&a,&b,&c);
s = (a+b+c)/2;
L = a + b + c;
f = sqrt(s*(s-a)*(s-b)*(s-c));
printf("周长为%.2lf\n面积为%.2lf\n",L, f);
return 0;
}
/*
运行结果
3 4 5
周长为12.00
面积为6.00
*/
P68 9. 编写一个程序,求出给定半径r的圆以及内接正n边形的面积,并且输出计算结果。
#include<stdio.h>
#include<math.h>
#define PI acos(-1.0)
int main()
{
double r, n, single, temp, s1,s2;
scanf("%lf%lf",&r,&n);
single = 360.0/n;
temp = sin(PI*(single/180.0));
s1 = PI * r * r;
s2 =n*(1.0/2.0)*r*r*temp;
printf("圆的面积为%.2lf\n",s1);
printf("内接正n边形的面积为%.2lf\n",s2);
return 0;
}
/*
运行结果
1 2
圆的面积为3.14
内接正n边形的面积为2.00
*/
P74 4-1. 用辗转相除法,求两个正整数的最大公约数.
#include<stdio.h>
#include<math.h>
int gcd(int a, int b)
{
if(b==0) return a;
return gcd(b, a%b);
}
int main()
{
int a, b, ans,t;
scanf("%d %d",&a,&b);
if(a<b)
{
t = a;
a = b;
b = t;
}
ans = gcd(a,b);
printf("%d\n", ans);
return 0;
}
/*
运行结果
18 33
3
*/
P80 4-2. 用二分法求方程的解。
#include<stdio.h>
#include<math.h>
/*
假设给定一个定义在区间[a, b]区间的递增函数f(x),
求f(x)=0的根.
*/
const double eps = 1e-5;//精度为10^(-5)
double f(double x)//假设f(x)=x*x=2即f(x)=x*x-2
{
return x*x-2;
}
double solve(double L, double R)
{
double left = L, right = R, mid;
while(right-left>eps)
{
mid = (left+right)/2;
if(f(mid)>0)
right = mid;
else
left = mid;
}
return mid;
}
int main()
{
printf("%.5f\n",solve(1,2));
return 0;
}
/*
运行结果
1.41421
*/
P82 4-3. 百鸡问题
用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买公鸡,母鸡和小鸡各多少只。
#include<stdio.h>
#include<math.h>
/*
x公鸡 5元/只
y母鸡 3元/只
z小鸡 1/3元/只
*/
int main()
{
int x, y, z, sum = 100;
double msum =100;
for(x=0; x<=sum/5; x++)
for(y=0; y<=sum/3; y++)
for(z=0; z<=sum*3; z++)
{
if(x+y+z==100&&5.0*double(x)+3.0*double(y)+1.0*double(z)/3==100.0)
printf("%d %d %d\n",x, y,z);
}
return 0;
}
/*
运行结果
0 25 75
4 18 78
8 11 81
12 4 84
*/
P83 4-1. 求各位数字的立方和等于1099的三位数。
#include<stdio.h>
#include<math.h>
int js(int n)
{
int sum=0;
while(n)
{
sum+=pow(n%10,3);
n/=10;
}
return sum;
}
int main()
{
for(int i=100; i<=999; i++)
{
if(js(i)==1099)
printf("%d ",i);
}
return 0;
}
/*
运行结果
379 397 739 793 937 973
*/
P84 4-5.用迭代法求方程f(x) = 的根.
#include<stdio.h>
#include<math.h>
#define eps 1e-5
double f(double x)
{
return (log(1+sqrt(2+x*x))-sqrt(1+2*x*x)-3-log(x));
}
double f1(double x)// f1(x) = lnx;
{
return log(x);
}
double f2(double x)//f2
{
return (log(1+sqrt(2+x*x))-sqrt(1+2*x*x)-3);
}
int main()
{
double x0, c, x1;
scanf("%lf",&x0);
c = f2(x0);
x1 = exp(c);
while(fabs(x1-x0)>=eps)
{
x0 = x1;
c = f2(x0);
x1 = exp(c);
}
printf("%.5f\n",x1);
}
/*
2
0.04414
*/
P86 4-7. 求
#include<stdio.h>
#include<math.h>
#define eps 1e-6//10^(-6)
double jc(double n)
{
double ans = 1;
for(int i=1; i<=n; i++)
ans*=i;
return ans;
}
int main()
{
double sum = 1, t, x;
scanf("%lf",&x);
for(int i=1; ; i++)
{
t = pow(x,i)/jc(i);
if(t<eps)
break;
sum+=t;
}
printf("%.6f\n",sum);
}
/*
1
2.718282
*/
P91 4.(1)输入a, b, c三个数,按降序打印出来。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a>b;
}
int main()
{
int a[3];
scanf("%d%d%d",&a[0],&a[1],&a[2]);
sort(a,a+3,cmp);
printf("%d %d %d\n",a[0], a[1], a[2]);
return 0;
}
/*
1
2.718282
*/
P91 4.(2)求的根,应分别考虑如下情况:
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
double a, b, c, dt,x1, x2;
scanf("%lf%lf%lf",&a,&b,&c);
dt = b*b-4*a*c;
if(dt<0)
printf("有两个共轭复根!\n");
else if(dt==0)
{
x1 = (-1.0*b-sqrt(dt))/2.0*a;
x2 = x1;
printf("有两个相等的实根:%.2f\n",x1);
}
else
{
x1 = (-1.0*b+sqrt(dt))/2.0*a;
x2 = (-1.0*b-sqrt(dt))/2.0*a;
printf("有两个不等的实根:%.2f %.2f\n",x1,x2);
}
return 0;
}
/*
1 4 4
有两个相等的实根:-2.00
1 -2 -3
有两个不等的实根:3.00 -1.00
*/
P92 4.(3)计算1-3+5-7+......-99+101。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int sum=0;
for(int i=1; 2*i-1<=101; i++)
{
if(i%2==1)
sum+=(2*i-1);
else
sum+=(2*i-1)*(-1);
}
printf("%d\n",sum);
return 0;
}
/*
51
*/
P92 4.(4)计算。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
double sum=0;
sum = (pow(3,20)-1)/2.0;
printf("%.0f\n",sum);
return 0;
}
/*
1743392200
*/
P92 4.(5)计算,n=20。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
double sum=0;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
sum+=(1.0/double(i))*double(i+1);
}
printf("%.5f\n",sum);
return 0;
}
/*
20
23.59774
*/
P92 4.(6)将1到100之间能用3或5整除的数打印出来。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
for(int i=1; i<=100; i++)
{
if(i%5==0||i%3==0)
printf("%d ",i);
}
return 0;
}
/*
3 5 6 9 10 12 15 18 20 21 24 25 27 30 33 35 36 39 40 42 45 48 50 51 54 55 57 60
63 65 66 69 70 72 75 78 80 81 84 85 87 90 93 95 96 99 100
*/
P96 5-1 利用行列式方法求解二元一次方程组.
a1x + b1y = c1;
a2x + b2y = c2;
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
double a1, a2, b1, b2, c1, c2;
double dt, x, y;
scanf("%lf%lf%lf%lf%lf%lf",&a1,&b1,&c1,&a2,&b2,&c2);
dt = a1*b2 - a2*b1;
if(dt==0.0)
printf("无解\n");
else
{
x = (c1*b2-c2*b1)/dt;
y = (a1*c2-a2*c1)/dt;
printf("x = %f\ny = %f\n",x,y);
}
return 0;
}
/*
3 8 29 -3 8 7
x = 3.666667
y = 2.250000
*/
P96 5-1 利用参考级数可以求出PI的近似值。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-7
int main()
{
double sum =0,t;
for(int i=1; ; i++)
{
t = 1.0/(2*double(i)-1);
if(t<eps) break;
if(i%2==1)
sum+=t;
else
sum+=t*(-1.0);
}
printf("%f\n",sum*4);
return 0;
}
/*
3.141592
*/
P96 5-8 将100分成4个数之和,使得第一个数加上4,第二个数减去4,第三个数乘以4,第四个数除以4后所得的和,差,积,商都相等。问这4个数各是多少?
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-7
int main()
{
int x1,x2,x3,x4;
for(int i=1;i<100; i++)
{
x1 = i-4;
x2 = i+4;
x3 = i/4;
x4 = i*4;
if(x1+x2+x3+x4==100)
{
printf("%d %d %d %d\n",x1, x2, x3,x4);
break;
}
}
return 0;
}
/*
12 20 4 64
*/
P96 5-14 换零钱问题。把1元对换成1分,2分, 5分的硬币,共有多少种换法。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-7
int main()
{
int x, y,z,ans=0;
for(int x=0; x<=20; x++)//5分
for(int y=0; y<=(100-x*5)/2; y++)//2分
{
ans++;
}
printf("%d\n",ans);
return 0;
}
/*
541
*/
P124 4 输入两个正整数m,n,求其最大公因子和最小公倍数。
#include<stdio.h>
int gcd(int a, int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int lcm(int a, int b)
{
return a/gcd(a,b)*b;
}
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
int temp;//保证m>n
if(m<n)
{
temp = m;
m = n;
n = temp;
}
printf("最大公因数为:%d\n",gcd(m,n));
printf("最小公倍数为:%d\n",lcm(m,n));
}
return 0;
}
/*
*/
P124 5 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
while(gets(a)!=NULL)
{
int ans1=0,ans2=0,ans3=0,ans4=0;
for(int i=0; i<strlen(a); i++)
{
if(a[i]>='a'&&a[i]<='b'||a[i]>='A'&&a[i]<='Z')
ans1++;
else if(a[i]==' ')
ans2++;
else if(a[i]>='0'&&a[i]<='9')
ans3++;
else
ans4++;
}
printf("%d %d %d %d\n",ans1, ans2, ans3, ans4);
}
return 0;
}
/*
123sdsnfn andsandjkwKKJ
5 4 3 14
*/