求高手帮做两个C语言编程题,高分

1、打印输出一个由*号组成的菱形,高度为n行,n在运行时输入;

2、输入n个点的平面坐标,程序将这些点按照距离原点从近到远的顺序进行排序并输出。(n>=6)。

谢谢,一定追加分!!!!

//第一题:这个绝对简单,便捷。界面良好 ---打印菱形
#include<stdio.h>
int main()
{
int i,j,n;
printf("请输入菱形高:n = ");
while( scanf("%d",&n) && n>0 )
{
printf("\n");
puts("--------------------------------------------------------------------------------");
for( i = 0 ; i< n ; i++ )
{
for(j=0;j < n-i ; j++ )
printf(" ");
for(j=0;j < (i<<1)+1 ; j++ )
printf("*");
printf("\n");
}
for( i = n-2 ; i>=0 ; i-- )
{
for(j=0;j < n-i ; j++ )
printf(" ");
for(j=0;j < (i<<1)+1 ; j++ )
printf("*");
printf("\n");
}
puts("--------------------------------------------------------------------------------");
printf("请输入菱形高:n = ");
}
return 0;
}

/*

请输入菱形高:n = 8

------------------------

*
***
*****
*******
*********
***********
*************
***************
*************
***********
*********
*******
*****
***
*
------------------------

*/

/*第二题:输入n个点的平面坐标,程序将这些点按照距离原点从近到远的顺序进行排序并输出。(n>=6)。*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 200
typedef struct PO
{
double x;
double y;
double z;
} POINT;
POINT a[MAXN];
POINT * p[MAXN];
int cmp( const void * a, const void * b )
{
if( ((POINT*)a)->z > ((POINT*)b)->z )
return 1;
else
return -1;
}

void Init()
{
int i;
for( i = 0 ; i < MAXN ; i++ )
{
p[i] = &a[i];
}
}

int main()
{
int n,i,j,k;
while(1)
{
Init();
printf("\n有几个点? n=");
scanf("%d",&n);
if(n<=0) continue;
for(i=0;i<n;i++)
{
printf("请输入第 %d 个点的 x 和 y 坐标: ",i+1);
scanf("%lf%lf",&a[i].x,&a[i].y);
a[i].z = sqrt(a[i].x*a[i].x + a[i].y * a[i].y);
}
qsort(a,n,sizeof(POINT),cmp);
printf("到原点距离排序后输出:\n");
for(i=0;i<n;i++)
{
printf("( %lf , %lf ) = %lf\n",p[i]->x,p[i]->y,p[i]->z);
}
}
return 0;
}

/*

有几个点? n=6
请输入第 1 个点的 x 和 y 坐标: 1 9
请输入第 2 个点的 x 和 y 坐标: 8 77
请输入第 3 个点的 x 和 y 坐标: 0 0
请输入第 4 个点的 x 和 y 坐标: 37 3
请输入第 5 个点的 x 和 y 坐标: 89 102
请输入第 6 个点的 x 和 y 坐标: 34 23
到原点距离排序后输出:
( 0.000000 , 0.000000 ) = 0.000000
( 1.000000 , 9.000000 ) = 9.055385
( 37.000000 , 3.000000 ) = 37.121422
( 34.000000 , 23.000000 ) = 41.048752
( 8.000000 , 77.000000 ) = 77.414469
( 89.000000 , 102.000000 ) = 135.369864
*/
///////哥们。赶紧加分呀。。通宵给你做出来了。。。。。
//又不明白的加我 695033480 。 我负责到底!!!追问

哥们,谢了,以后又问题我还问你啊,别不告诉我啊!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-31
这个是我写的菱形输出,测试通过,第二个问题更简单,首先计算出每一点的距离,然后用排序排列就可以了,第二个每点建议用结构体,结构体包括 横坐标,纵坐标,距离原点的距离。
// 打印输出高度为n的菱形
#include <stdio.h>
#include <stdlib.h>

void printfRhombus(int n);

int main(int argc,char **argv)
{
int n=0;
n = atoi(argv[1]);
printfRhombus(n);
return 0;
}

void printfRhombus(int n)
{
int tmp = 0,idx,j,k=0;
tmp = (n-1)/2;
for(idx=0;idx<n;idx++)
{
if(idx<=tmp)
k = idx;
else
k -= 1;
for(j=0;j<n;j++)
{
if((j>=(tmp-k))&&(j<=(tmp+k)))
{
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
}追问

谢了,但是你不编出来我不知道

第2个回答  2011-05-30
貌似第一个题目可以这样做:
我也是初学者,刚试着做做)
#include <stdio.h>
void main()
{
int nH = 0;
int nA = 0;
int nB = 0;
int nC = 0;
int nL = 10;

scanf("%d",&nH);
nA = nL;
nB = -1;

for(nC = 0; nC <= nH; nC = nC + 1)
{

if(nC <= nH / 2)
{
nA = nA -1;
nB = nB + 2;
}else
{
nA = nA + 1;
nB = nB - 2;
}
for(int nI =1; nI <= nA; nI = nI + 1)
{
printf(" ");
}

for( nI =1; nI <= nB; nI = nI + 1)
{
printf("*");
}
printf("\n");

}
}追问

谢了

第3个回答  2011-05-30
这个很简单吧!改天我给你做做,这几天在准备考试,急不急啊?追问

急。。

第4个回答  2011-05-30
我现在用的是手机追问

等你用电脑时帮我编一下吧