yahoo japan 日本妈妈:求C语言的一个小程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 02:11:07
任意输入俩个数字做为菱形的对角线长度
然后在屏幕上用*号打出满足此条件的菱形
我记得当初我们老师给我们示范的时候 挺简单的啊 并且不用管奇数偶数都可以的 只不过有点不太规范而已了就是.....大家答的都很好 呵呵 谢谢大家 不过我有点看不懂...本人是新学C的小菜

对角线长度的单位是什么呢?如果是一个输入位,则只能做成奇数长度的,所以要求输入奇数值。否则无法构造这样的菱形。如输入(5,5),则菱形如下:
*
* *
* *
* *
*
对于输入(4,4),在屏幕上是不可能模拟的。
另外,长对角线值减一要求是短对角线值减一的整数倍,否则也不能在屏幕上模拟该菱形。
所以基于此二点,增加了合法性检查函数。

最后程序如下:
#include<stdio.h>
#include<stdlib.h>
int legal(int x,int y)
{
if(x>1&&y>1&&y>=x&&y%2==1&&x%2==1&&(y-1)%(x-1)==0)
return 1;
printf("输入的值不符合要求,请重新输入。\n\n");
return 0;
}
void main()
{
char **diamond;
int x,y,i,j,min,dis;
do{
printf("请输入长对角线值(只能是奇数)\n y=");
scanf("%d",&y);
printf("请输入短对线值(只能是奇数)\n x=");
scanf("%d",&x);
}while(!legal(x,y));

//创建动态数组
diamond=(char **)malloc(x*sizeof(char*));
for(i=0;i<x;i++)
diamond[i]=(char*)malloc(y*sizeof(char));

//初始数组
for(i=0;i<x;i++)
for(j=0;j<y;j++)
diamond[i][j]=NULL;

min=y/2;
dis=(y-1)/(x-1);

for(i=0;i<=x/2;i++)
{

diamond[i][min+i*dis]=diamond[i][min-i*dis]='*';
diamond[x-1-i][min+i*dis]=diamond[x-1-i][min-i*dis]='*';
}
printf("\n");

for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
printf("%c",diamond[i][j]);
printf("\n");
}

//释放内存
for(i=0;i<x;i++)
free(diamond[i]);
free(diamond);
}

main()
{int i,j,k,n,m,t;
clrscr();
scanf("%d%d",&n,&m);
for(i=0;i<((n%2==0)?n/2:n/2+1);i++)
{for(j=0;j<m/2-i;j++) printf(" ");
for(k=m;k>m-i*2;k--) printf("*");
printf("\n");}
for(i=0;i<n/2;i++)
{for(j=m;j>=m-i;j--) printf(" ");
for(k=0;k>i*2;k++) printf("*");
printf("\n");}
getch();}

#include "graphics.h"
#include "stdlib.h"
main()
{
int gdriver,gmode;
int a,b,c,d,e;
gdriver=VGA;
initgraph(&gdriver,&gmode,"c:\\tc");
setbkcolor(RED);
cleardevice();
printf("\nInput a:");
scanf("%d",&a);
printf("\nInput b:");
scanf("%d",&b);
a=50*a;
b=50*b;
c=a/2;
d=b/2;
setcolor(BLUE);
line(0,d,c,0);
line(c,0,a,d);
line(a,d,c,b);
line(c,b,0,d);
printf(":");
scanf("%d",e);
}