liunxC學習第七天
阿新 • • 發佈:2018-11-20
今天是一天的程式編寫練習(大部分是抄寫,練習格式,熟悉之前學到的一些指令和函式)
一、用“*”列印一個半徑為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中第一個數就是和平均值差最小的,最後一個數是和平均值差最大的