#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;
下面那个函数也一样