如何实现c语言程序各颜色数字雨代码

Python018

如何实现c语言程序各颜色数字雨代码,第1张

#include<stdio.h>

#include<time.h>

#include<windows.h>

typedef struct

{

int x,y

char ch

}STU

STU st[100]

//出现位置 

void gotoxy(int x, int y)

{

  HANDLE hout

  COORD pos

  pos.X = x

  pos.Y = y

  hout = GetStdHandle(STD_OUTPUT_HANDLE)

  SetConsoleCursorPosition(hout, pos)

}

/*隐藏光标*/

void show_cursor(int hide)

{

  CONSOLE_CURSOR_INFO cciCursor

  HANDLE hout

  hout = GetStdHandle(STD_OUTPUT_HANDLE)

  if(GetConsoleCursorInfo(hout, &cciCursor))

  {

      cciCursor.bVisible = hide

      SetConsoleCursorInfo(hout, &cciCursor)

  }

}

/*设置颜色*/

void set_color(int color)

{

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color)

}

main()

{

int i,j

show_cursor(0)

srand(time(NULL))

//初始化结构体

for (i=0i<100i++)

{

st[i].x = rand()%80

st[i].y = rand()%20

st[i].ch = rand()%(49-47)+48

}

while (1)

{

for (i=0i<100i++)

{

gotoxy(st[i].x,st[i].y)

set_color(0x2)//最先出现的颜色;

putchar(st[i].ch)

gotoxy(st[i].x,st[i].y-5)

putchar(' ')

st[i].y++

st[i].ch = rand()%(49-47)+48

if (st[i].y-5>=18)

{

gotoxy(st[i].x,st[i].y-1)

putchar(' ')

gotoxy(st[i].x,st[i].y-2)

putchar(' ')

gotoxy(st[i].x,st[i].y-3)

putchar(' ')

gotoxy(st[i].x,st[i].y-4)

putchar(' ')

gotoxy(st[i].x,st[i].y-4)

putchar(' ')

}

if (st[i].y >23)

{

st[i].x = rand()%80

st[i].y = rand()%20

}

gotoxy(st[i].x,st[i].y)

set_color(0xA)//由前一个颜色渐变成的颜色

putchar(st[i].ch)

}

Sleep(120)

}

}

    color(0)   printf("黑色\n")      color(1)   printf("蓝色\n")      color(2)   printf("绿色\n")       color(3)   printf("湖蓝色\n")      color(4)   printf("红色\n")      color(5)   printf("紫色\n")      color(6)   printf("黄色\n")       color(7)   printf("白色\n")      color(8)   printf("灰色\n")      color(9)   printf("淡蓝色\n")      color(10)  printf("淡绿色\n")      color(11)  printf("淡浅绿色\n")       color(12)  printf("淡红色\n")      color(13)  printf("淡紫色\n")      color(14)  printf("淡黄色\n")      color(15)  printf("亮白色\n")

几个基本的颜色;

思路:

1、根据题意每天从区间1~N中,依次深度-1,遇到某个深度0时停止作业,所修改的区间就是当日作业区间。

2、独立函数实现一天作业(workForDay)。参数flag为1显示作业过程,如不需要传0。

3、init函数为输入并返回动态数组。

#include <stdio.h>

#include <malloc.h>

int len=0//路面长度

int *init()//根据输入初始化深度数组,成功返回地址,失败返回NULL

int workForDay(int *dps,int flag)//执行一天填充作业。成功作业返回1,无需作业返回0, 异常返回-1

//flag=1,打印输出作业过程。flag=0,不打印过程

int main()

{

  int day=0,re,*dps=NULL

  dps=init()

  if(!dps) return 1

  while((re=workForDay(dps,1))==1)

      day++

  if(re==-1) return 1

  printf("共作业%d天\n",day)

  free(dps)dps=NULL//在本程序可不释放,但如果多次调用init函数,每次用完数组,需这样释放内存。

  return 0

}

int *init()

{

  int i,*dps=NULL//dps每单位长度对应深度

  len=0

  while(len<=0) scanf("%d",&len)//长度必须大于0整数

  dps=(int *)malloc(sizeof(int)*len)

  if(!dps) return NULL

  for(i=0(dps[i]=-1) &&i<leni++)

      while(dps[i]<0) scanf("%d",&dps[i])//每个深度必须大于等于0整数

  return dps

}

int workForDay(int *dps,int flag)

{

  int i,bn=-1,an=-1

  if(!dps) return -1

  for(i=0i<leni++)

  {

      if(bn==-1 &&dps[i]>0)

          bn=i+1,an=bn,dps[i]--

      else if(bn!=-1 &&dps[i]>0)

          an=i+1,dps[i]--

      else if(bn!=-1 &&dps[i]==0)

          break

  }

  if(bn==-1) return 0

  if(flag) printf("当日作业区间为[%d,%d]\n",bn,an)

  return 1

}

for(y=0y<YRSy++)

{

for(m=0m<MONTHSm++)

total+=ar[y][m]

printf("%d%10.1f\n",1990+y,total)

}

你要计算每年的total,但是这里的total是不断累加的,每次外循环时应该把total置为0;

下面那个函数也一样