## C语言课后习题-循环

C语言课后习题-循环

  1. 分数序列:2/1,3/2, 5/3, 8/5, 13/8…求前20项的和。
    虽然麻烦了点,但是很好理解,嘻嘻!!
    先为s[20]和a[20]分别赋值后,进行两个数组相除。
#include <stdio.h>
void main()
{
    
    
	int i;
	float sum=0;
	float s[20],a[20];
	s[0]=2;
	s[1]=3;
	a[0]=1;
	a[1]=2;
	for(i=2;i<20;i++)
	{
    
    
		s[i]=s[i-1]+s[i-2];
	}
	for(i=2;i<20;i++)
	{
    
    
		a[i]=a[i-1]+a[i-2];
	}
	for(i=0;i<20;i++)
	{
    
    
		sum=sum+s[i]/a[i];
	}
	printf("%f\n",sum);
}

2、一个球从100米高度自由落下,每次落地后反跳回原高度一半,在落下,在反弹,求他在第十次的时候经过多少米,反弹有多高?
思路:
①确定高度的计算,列出公式
②上升和下降的值相同,但后面别忘了加上100.
③记住求带有小数的值的时候,别忘了用float,而不用int 后面记得输出时用f别用d。

#include <stdio.h>
void main()
{
    
    
	float sum=0;
	float h[10];
	int i;
	h[0]=100;
	for(i=1;i<10;i++)
	{
    
    
		h[i]=h[i-1]/2;
		sum=sum+2*h[i];
	}
	printf("the height is %f\n",h[9]);
	printf("the sum is %f\n",sum+100);
}

3、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第十天的时候,就只剩下一个桃子了,求第一天一共摘了多少个桃子。
思路:掌握好逻辑表达式,和已知条件。

#include <stdio.h>
void main()
{
    
    
	int a[10],i;
	a[0]=1;
	for(i=1;i<10;i++)
	{
    
    
		a[i]=a[i-1]*2+1;
	}
	printf("peach is %d\n",a[9]);
}

4、用迭代法求x=根号a。求平方根的迭代公式为:
x(n+1)=1/2*(x(n)+a/x(n)).()里面的n和n+1为下标哦。
要求前后两次求出的x的差的绝对值小于10的-5次方。

#include <stdio.h>
#include <math.h>
void main()
{
    
    
	float x0,a,x1;
	printf("enter a number:");
	scanf("%f",&a);
	x0=a/2;
	x1=(x0+a/x0)/2;
	while(fabs(x1-x0)>=1e-5)
	{
    
    
		x0=x1;
		x1=(x0+a/x0)/2;
	}
	printf("the square root of %5.2f is %5.2f\n",a,x1);
}

5、用牛顿迭代法求下面方程在1.5附近的根:
2xxx-4xx+3x-6=0

#include <stdio.h>
#include <math.h>
void main()
{
    
    
	float x1,x0=1.5;
	x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
	while(fabs(x1-x0>=1e-6))
	{
    
    
		x0=x1;
		x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
	}
	printf("方程的根为%f\n",x1);
}

6、用二分法求下面方程在(-10,10)之间的根:
2xxx-4xx+3x-6=0`

#include<stdio.h>
#include<string.h>
#include<math.h>

void main(){
    
    
    double low=-10,high=10,mid;
    double temp=10;
    while(fabs(temp)>1e-5)
	{
    
    
        mid=(low+high)/2;//二分法
        temp=((2*mid-4)*mid+3)*mid-6;
        printf("%lf  ",mid);
        printf("%lf\n",temp);
        if(temp>0)    
			high=mid;
        else if(temp<0)
			low=mid;
    }
    printf("%lf",mid);
}

6:两个乒乓球队进行比赛,各出3人。甲队为A、B、C三人,乙队为X、Y、Z3人。以抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程找出3对对手名单。
思路:首先可以看出XYZ为连续的,想到循环,其次,由于C的条件最多,所以先由C判断,判断A,后为B。并且不要忘了判断ABC的关系。

#include <stdio.h>
#include <stdlib.h>
void main()
{
    
    
	char A;
	char B;
	char C;
	char str;
	for(str='X';str<='Z';str++)
	{
    
    
		if(str!='X'&&str!='Z')
		{
    
    
			C=str;
		}
	}
	for(str='X';str<='Z';str++)
	{
    
    
		if(str!='X'&&str!=C)
			A=str;
	}
	for(str='X';str<='Z';str++)
	{
    
    
		if(str!=A&&str!=C)
			B=str;
	}
	printf("A-%c\nB-%c\nC-%c\n",A,B,C);
}

7、输出用星号表示的菱形。
先对上半部分进行遍历,后反过来为下半部分进行遍历。
掌握算法:当一行确定的情况下,对所有的列进行循环。
j>=(column+1)/2-(i-1) (column+1)/2-(i-1)为第i行最左边的星号
j<=(column+1)/2+(i-1) (column+1)/2+(i-1)为第i行最右边的星号(上半部分)
j>=(column+1)/2-(line-i) (column+1)/2-(line-i)为第i行最左边的星号
j<=(column+1)/2+(line-i) (column+1)/2+(line-i)为第i行最右边的星号(下半部分)

#include <stdio.h>
#include <stdlib.h>

int main(){
    
    
    int line;  // 菱形总行数
    int column;  // 菱形总列数
    int i;  // 当前行
    int j;  // 当前列

    printf("请输入菱形的行数(奇数):");//因为对称还需要一个中间不变的所以一定为偶数
    scanf("%d", &line);
    if(line%2==0){
    
      // 判断是否是奇数
        printf("必须输入奇数!\n");
        exit(1);//异常退出,exit(0)是正常退出。
    }
    column = line;  // 总行数和总列数相同

    for(i=1; i<=line; i++){
    
      // 遍历所有行
        if(i<(line+1)/2+1){
    
      // 上半部分(包括中间一行)
            for(j=1; j<=column; j++){
    
      // 遍历上半部分的所有列
                if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
    
    
                    printf("*");
                }else{
    
    
                    printf(" ");
                }
            }
        }
		else{
    
      // 下半部分
            for(j=1; j<=column; j++){
    
      // 遍历下半部分的所有列
                if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
    
    
                    printf("*");
                }else{
    
    
                    printf(" ");
                }
            }
        }
        printf("\n");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/jijijun/article/details/104999130