今天是一天的程序编写练习(大部分是抄写,练习格式,熟悉之前学到的一些指令和函数)
一、用“*”打印一个半径为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中第一个数就是和平均值差最小的,最后一个数是和平均值差最大的