1. 程式人生 > >liunxC學習第七天

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中第一個數就是和平均值差最小的,最後一個數是和平均值差最大的