liunxC学习第七天

今天是一天的程序编写练习(大部分是抄写,练习格式,熟悉之前学到的一些指令和函数)

一、用“*”打印一个半径为10 的圆

第一种画圆的方法

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

int main()
{
    double y;						
    int x,m;
	
    for(y=10;y>=-10;y--)			//对于行数做20此循环也就是20行
    {
        m=2.3*sqrt(100-y*y);
        
        for(x=1;x<30-m;x++)			//打印左半部分的空格数
        {
            printf(" ");
        }
        printf("*");				//在对应圆上的点打印“*”
    
        for(;x<30+m;x++)			//打印右半部分的空格数
        {
            printf(" ");			
        }      
            printf("*\n");			//每一行的"*"打印结束后换一行
    }    

    return 0;
}

注:用linux编译头文件带math.h的文件要添加 -lm

第二种画圆的方法

#include <stdio.h>
#include <math.h>
#define R 10
#define SCREN 2.3

int main()
{
    double y;
    int x,m;
	
    for(y=R;y>=-R;y--)								//对于行数做20此循环也就是20行(行数有半径决定)
    {
        m=SCREN*sqrt(R*R-y*y);						        //圆的公式
        
        for(x=0;x<2*R*SCREN;x++)					        //对于列数做20此循环也就是20列(行数有半径决定)
        {	
	    if(x==R*SCREN-m || x==R*SCREN+m)		                        //判读每一次的列是否在正好对应圆的横坐标(由于圆有左右两部分因此用或连接)满足添加就打印“*”
	    {	
	        printf("*");						
	    }
            else							        //其他不是圆对应的点打印空格
	    {
	        printf(" ");
	    }
        }  
        
        printf("\n");							        //每判断结束一行后换行
    }

    return 0;
}

三、画出上述圆与y=x*x的图像

#include <stdio.h>
#include <math.h>
#define R 10
#define SCREN 2.3

int main()
{
    double y;
    int x,m,n;

    for(y=R;y>=-R;y--)								//对于行数做20此循环也就是20行(行数有半径决定)
    {
        m=SCREN*sqrt(R*R-y*y);						        //圆的公式
        n=SCREN*sqrt(y);							//对应y=x*x
        
        for(x=0;x<2*R*SCREN+1;x++)						//对列做检测,判断那几列在圆上打印“*”,那几行在y=x*x上打印"+"
        {	
	    if(x==m+R*SCREN || x==R*SCREN-m)
	    {
	        printf("*");
	    }
	    else if(x==R*SCREN+n || x==R*SCREN-n)
	    {
		printf("+");
	    }
	    else
	    {
		printf(" ");
	    }
        }
		
	printf("\n");								//每行结束换行
    }

    return 0;
}

二、去除一组10个数中的最大值和最小值,计算平均值

#include <stdio.h>

int main()
{	
    int interger,i,max,min,sum,average;
    max=-32768;
    min=32767;
    sum=0;
	
    for(i=0;i<10;i++)
    {
	printf("input number%d=",i+1);
	scanf("%d",&interger);
		
	sum+=interger;
		
	if(interger>max)
	{
	    max=interger;	
	}
	if(interger<min)
	{
            min=interger;
	}
		
    }

    average=(sum-max-min)/8;	
		
    printf("Cancelde max score:%d\nCancelde min score:%d\n",max,min);
    printf("Averager score:%d\n",average);
		
    return 0;
}

怎么在上面的基础上计算出与平均值相差对大和最小的值是多少呢

#include <stdio.h>
#include <math.h>
#define SIZE 10

void bubble_up(int a[],int n)
 {
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
    {
        for (i = 0; i < n - 1 - j; i++)
        {	
			
            if(a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
	    }
	}
    }
}

int main()
{	
	int a[SIZE]={};
	int interger,i,j,max,min,sum,average;
	max=-32768;
	min=32767;
	sum=0;
	
	for(i=0;i<10;i++)
	{
	    printf("input number%d=",i+1);
	    scanf("%d",&interger);
		
	    a[i]=interger;
	    sum+=interger;
		
	    if(interger>max)
	    {
		max=interger;	
	    }
	   if(interger<min)
	   {
		min=interger;
	   }
	}

	average=(sum-max-min)/8;
	
	for(i=0;i<10;i++)
	{
	    a[i]=abs(a[i]-average);
	}
	
	bubble_up(a,i);
		
	printf("gap max:%d,gap min:%d\n",a[9],a[0]);
	printf("Cancelde max score:%d\nCancelde min score:%d\n",max,min);
	printf("Averager score:%d\n",average);
		
	return 0;
}

先将输入的数据存储到数组a同时去掉最大和最小值中计算出平均值,将a数组中的值同时减去平均值就是每个数据和平均值之间的差,再用冒泡从小到大排列那么数组a中第一个数就是和平均值差最小的,最后一个数是和平均值差最大的

猜你喜欢

转载自blog.csdn.net/weixin_43360263/article/details/84196999