C语言程序设计习题

文章目录

  • 2.用PI/4=1-1/3+1/5-1/7+···公式求PI的近似值,直到发现某一项的绝对值小于1e-6为止(该项不累加)。分别统计当"fabs(t)>=1e-6"和"fabs(t)>=1e-8"执行循环体的次数
  • 3. 输入两个正整数m和n,求其最大公约数和最小公倍数。
  • 4. 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
  • 5. 求Sn=a+aa+aaa+...+aa..a(n个a)其中a是一个数字,n表示a的位数。例如2+22+222+2222+22222(此时n=5),n由键盘输入。
  • 6. 求1!+2!+3!+4!...+20!.
  • 7. 求1+2+3+...+100+1+4+9+...+50*50+1+1/2+1/3+...+1/10;
  • 8. 输出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
  • 9. 一个数恰好等于它的因子之和,这个数就称为完数。编程序找出1000之内所有的完数。
  • 10. 有一个分数序列:2/1,3/2,5/3,8/5,13/8... 求出这个序列的前20项的和
  • 11. 一个球从高度100米自由落下,每次落地就反弹跳回原高度的一半,再落下,再反弹。求它在第十次落地时共经过多少米,第十次反弹多高。
  • 12. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃掉了一般,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一般,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第十天早上再想吃的时候,就只剩下一个桃子了。求第一天共摘下了多少个桃子。
  • 13. 用迭代法求x=sqrt(a)。求平方根的迭代公式为 Xn+1 = 1/2*(Xn+a/Xn) 要求前后;两次求出的x的差的绝对值小于1e-5。
  • 14. 用牛顿迭代法求下面方程在1.5附近的根:2*X*X*X -4*X*X+3*X - 6 = 0
  • 15. 用二分法求下面公式在(-10,10)之间的根:2*X*X*X -4*X*X+3*X - 6 = 0
  • 16. 输出下面的图案
  • 17. 两个乒乓球队进行比赛,各出三r。甲队为A,B,C,乙队为X,Y,Z。已知抽签决定比赛名单。有人向队员打听情报,A说他不和X比,C说他不和X和Z比。请编程序找出三对赛手的名单。

1.略

2.用PI/4=1-1/3+1/5-1/7+···公式求PI的近似值,直到发现某一项的绝对值小于1e-6为止(该项不累加)。分别统计当"fabs(t)>=1e-6"和"fabs(t)>=1e-8"执行循环体的次数

#include 
#include 

int main()
{
	double PI = 0.0,t = 1.0,i = 1.0;
	int sign = 1,count=0;
	int tag = 1;
	while(fabs(t)>=1e-8)
	{
		count++;
		sign = - sign;
		i = i + 2;
		PI += t;
		t = sign /i;
		if(fabs(t)<1e-6 && tag == 1)
		{
		printf("fabs(t)>=1e-6时,执行%d次\n",count);
		tag = -1;
	}
		
	}
	printf("fabs(t)>=1e-8时,执行%d次\n",count);
	PI = 4* PI;
	printf("PI = %lf\n",PI);
	return 0;
 } 

3. 输入两个正整数m和n,求其最大公约数和最小公倍数。

#include 
#include 
int main()
{
int i,m,n,min1,max1,min2,max2;
printf("请输入m和n的值\n");
scanf("%d%d",&m,&n);
max1 = m>n?m:n;
min1 = m<n?m:n;
max2 = max1;
min2 = min1;
for(i = 2; i <= min1/2;i++)
{
if(m%i == 0 & n%i == 0)
max2 = i;
}
for(i = max1;i <= m*n;i++)
{
if(i%m==0&&i%n==0)
{
min2 = i;
break;
}
}
printf("两数的最大公约数为%d,最小公倍数为%d\n",max2,min2);
return 0;
}

4. 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。

#include 

int main()
{
	char c;
	int letters = 0,space = 0,digit = 0,other = 0;
	printf("请输入一行字符:\n");
	while((c = getchar())!='\n')
	{
		if(c>='a' && c<='z' || c >= 'A' && c <= 'Z')
		letters++;
		else if(c == ' ')
		space++;
		else if(c >= '0' && c <= '9')
		digit++;
		else 
		other++;
	}
	printf("字母数:%d,空格数:%d,数字数:%d,其它字符数:%d\n",letters,space,digit,other);
	return 0;
}

5. 求Sn=a+aa+aaa+…+aa…a(n个a)其中a是一个数字,n表示a的位数。例如2+22+222+2222+22222(此时n=5),n由键盘输入。

#include 
#include  
int main()
{
int i,n, temp = 0,count = 0,sum = 0;
printf("请输入n的值\n");
scanf("%d",&n);
for(i = 0;i<n;i++)
{
temp = 2 * pow(10,i);
count += temp;
sum += count;
} 
printf("sum = %d\n",sum);
return 0;
}

6. 求1!+2!+3!+4!..+20!.

#include 
int main()
{
int n,sum = 0,temp = 1;
for(n = 1; n <= 20;n++)
{
temp *= n;
sum += temp;
}
printf("sum = %d\n",sum);
return 0;
}

7. 求1+2+3+…+100+1+4+9+…+50*50+1+1/2+1/3+…+1/10;

#include
int main(){
double i,sum1 =0.0,sum2 = 0.0, sum3 = 0.0,sum = 0.0;
for(i = 1.0;i <= 100;i++)
{
sum1 += i;
if(i <= 50)
{
sum2 +=i*i;
if(i <= 10)
sum3 +=1/i;
}
}
sum = sum1 +sum2 + sum3;
printf("sum = %15.6f\n",sum);
return 0;
}

8. 输出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

#include
int main()
{
int i,n,m,l;
for(i=100;i<=999;i++)
{
n = i%10;
m = i/10 %10;
l = i/100%10;
if(i == n*n*n+m*m*m + l*l*l)
printf("水仙花数:%d\n",i);
}
return 0;
}

9. 一个数恰好等于它的因子之和,这个数就称为完数。编程序找出1000之内所有的完数。

#include 
int main()
{
int i,j,sum;
for(i = 2;i <= 1000;i++)
{
	sum = 0;
	for(j = 1; j<= i/2; j++)
	{
		if((i%j)== 0)
		sum += j;
	}
	if(sum == i)
	printf("完数:%d\n",i);
}
return 0;
}

10. 有一个分数序列:2/1,3/2,5/3,8/5,13/8… 求出这个序列的前20项的和

#include 
int main()
{
double a = 1.0, b = 2.0,sum = 0.0,temp;
int i,n = 20;
for(i = 0 ; i < n;i++)
{
	temp = b/a;
	b += a;
	a = b - a;
	sum =sum + temp;
}
printf("sum = %lf\n",sum);
return 0;
}

11. 一个球从高度100米自由落下,每次落地就反弹跳回原高度的一半,再落下,再反弹。求它在第十次落地时共经过多少米,第十次反弹多高。

#include 
int main()
{
double height = 100,sum = 100;
int i;
for(i = 1;i<10;i++)
{
height = height/2;
sum = sum + 2*height;
}
printf("sum = %lf, 10th height =%lf\n",sum,height/2);
return 0;
}

12. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃掉了一般,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一般,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第十天早上再想吃的时候,就只剩下一个桃子了。求第一天共摘下了多少个桃子。

#include 
int main()
{
int i,sum = 1;
for(i = 0; i < 9; i++)
{
	sum = (sum + 1)*2;
}
printf("sum = %d\n",sum);
return 0;
}

13. 用迭代法求x=sqrt(a)。求平方根的迭代公式为 Xn+1 = 1/2*(Xn+a/Xn) 要求前后;两次求出的x的差的绝对值小于1e-5。

#include 
#include 
int main()
{
double n1,n2,a;
printf("请输入a的值");
scanf("%lf",&a);
n1 = a/2;
n2= 0.5*(n1 + a/n1);
do{
	n1 = n2;
	n2= 0.5*(n1 + a/n1);
}while(fabs(n2-n1)>1e-5);
printf("The square root of %lf is %lf\n",a,n2);
return 0;
}

14. 用牛顿迭代法求下面方程在1.5附近的根:2XXX -4XX+3X - 6 = 0

#include 
#include 
int main(){
double x1,x,f,f1;
x1 = 1.5;
do{
x = x1;
f = ((2 *x-4)*x+3)*x -6;
f1=(6*x-8)*x +3;
x1 = x-f/f1;
}while(fabs(x-x1)>=1e-5);
printf("The root of equation is %lf\n", x1);
return 0;
}

15. 用二分法求下面公式在(-10,10)之间的根:2XXX -4XX+3X - 6 = 0

#include 
#include 
int main(){
double x1,x2,mid,f2,f1,fm;
do{
printf("请输入查找的范围x1,x2\n");
scanf("%lf%lf",&x1,&x2);
f1 = x1*((2*x1-4)*x1+3)-6;
f2 = x2*((2*x2-4)*x2+3)-6;
if(f1*f2>0)
printf("请输入合理的区间!\n");
}while(f1*f2>0);
do{
	mid = (x1 + x2)/2;
	fm = mid*((2*mid-4)*mid+3)-6;
	if(fm*f1 <0)
	{
		x2 = mid;
		f2= fm;
	}
	else
	{
	x1 = mid;
	f1 = fm;
	}
}while(fabs(fm)>1e-5);
printf("The root of equation is %lf\n", mid);
return 0;
}

16. 输出下面的图案

   *
  ***
 *****
*******
 *****
  ***
   *
#include 

int main(){
int i,j,k;
for(i = 1; i <= 7;i++)
{
if(i <= 4)
{
	for(j=4-i; j>0;j--)
	{
		printf(" ");
	}
	for(k = 2 *i -1;k  > 0; k--)
	{
		printf("*");
	}
}
if(i >4)
{
	for(j=i%4; j>0;j--)
	{
		printf(" ");
	}
	for(k = 7-2*(i%4);k  > 0; k--)//x+i%4 = 7-i%4 
	{
		printf("*");
	}
}
	printf("\n");
}
return 0;
}

17. 两个乒乓球队进行比赛,各出三r。甲队为A,B,C,乙队为X,Y,Z。已知抽签决定比赛名单。有人向队员打听情报,A说他不和X比,C说他不和X和Z比。请编程序找出三对赛手的名单。

#include 

int main(){
char i,j,k;
for(i = 'X';i <= 'Z';i++)
for(j = 'X';j <= 'Z';j++)
	if(i!=j)
	for(k = 'X';k<='Z';k++)
	if(i!=k && j!= k)
	if(i !='X' && k!= 'X' && k!= 'Z')
	printf("A--%c\nB--%c\nC--%c\n",i,j,k);
return 0;
}

你可能感兴趣的:(习题,程序设计,算法)