/*
const int N=10;
int arr[N];//GCC中可以通过编译,但是对arr进行初始化的时候,会报variable-sized object may not be initialized的错误~~
//但是在VC中,会直接报错~~~所以对数组进行初始化的时候,下标必须是常量~~不能是常变量~~
int _arr[10]={0};
_arr[n]<=>*(_arr+n)<=>n[_arr]//_arr是个指针常量,不能做左值
int b[10]={8,1};//在main函数中可以进行完全初始化
char c[]={'a','b'};//不会自动增加空字符
char d[3]={'c','d'};//定义了字符数组长度会自动添加空字符
printf("%d %d",sizeof(c),sizeof(d));
printf("%s\n%s",c,d);
*/
栈底到栈顶是从高到低的地址排列!!!
螺旋数组的一个简单算法:
代码
int Dir=0;//0:donw 1:right 2:up 3:left
typedef struct tagPos
{
int x;
int y;
}POS;
void ChangeDirection(int *dir)
{
(*dir)++;
if(*dir>3)
*dir=0;
}
int PosIsValid(int *data,POS *p,int n)
{
if((p->x)<0||(p->x)>=n)
return 0;
if(p->y<0||p->y>=n)
return 0;
if(data[p->y*n+p->x]!=0)
return 0;
return 1;
}
void GetNextPos(int *data,POS *p,int *dir,int n)
{
POS next;
for(;;)
{
next.x=p->x;
next.y=p->y;
switch(*dir)
{
case 0:
next.y++;
break;
case 1:
next.x++;
break;
case 2:
next.y--;
break;
case 3:
next.x--;
break;
default:
break;
}
if(!PosIsValid(data,&next,n))
{
ChangeDirection(dir);
}
else
break;
}
p->x=next.x;
p->y=next.y;
}
void FillMatrix(int *data,int n,int dir)
{
POS p;
int i;
p.x=p.y=0;
for(i=1;i<=n*n;i++)
{
int index=p.y*n+p.x;
data[index]=i;
if(i<n*n)
GetNextPos(data,&p,&dir,n);
}
}
int main()
{
int n=10,i=0,j=0;
int *data=(int *)malloc(sizeof(int)*n*n);
memset(data,0,sizeof(int)*n*n);
FillMatrix(data,n,Dir);
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%d\t",data[i*n+j]);
printf("\n");
}
free(data);
return 0;
}
/*
int *p=(int *)malloc(sizeof(int));
*p=20;
int *p=q;
free(p);
....
p野指针
q野指针
....
所以再free过后记得要指向NULL
*/
代码
void Tri()//杨辉三角
{
int arr[6][6]={0},i,j;
for(i =0;i<6;i++)arr[i][0]=1;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
for(i=0;i<6;i++)
{
printf("\n");
for(j=0;j<6;j++)
if(arr[i][j]!=0) printf("%d\t",arr[i][j]);
}
}
void KingPOS()//将帅位置
{
char ch1,ch2;
int i,j,count=0;
for(ch1='d';ch1<='f';ch1++)
for(i=1;i<=3;i++)
{
for(ch2='d';ch2<='f';ch2++)
for(j=8;j<=10;j++)
{
if(ch2!=ch1)
{
printf("将在%c%d帅在%c%d\n",ch2,j,ch1,i);
count++;
}
}
}
printf("总共有%d种走法:",count);
}
void CalAlpha()//统计字符
{
char *str=(char *)malloc(sizeof(char)*100);
int i=0,size,count=0;
memset(str,0,100);
for(i=0;i<_msize(str);i++)
{
str[i]=getche();
if(str[i]=='*')
break;
}
size=_msize(str);
for(i=0;i<size;i++)
{
if(!isalpha(str[i])&&(str[i]!='\0'))
count++;
}
printf("\n%d",count);
free(str);
}
void MagMatrix()//魔方阵
{
int i,j,count;
int square[N][N];
memset(square,0,N*N*sizeof(int));
square[0][(N-1)/2]=0;
i=0;
j=(N-1)/2;
square[i][j]=1;
for(count=2;count<=N*N;count++)
{
if(square[(i-1+N)%N][(j+1+N)%N])//(i-1+N)%N..(j+1+N)%N...如果第一行,则跳到最后一行;如果最后一列,则跳到第一列
{
i++;
}
else
{
i=(i-1+N)%N;
j=(j+1+N)%N;
}
square[i][j]=count;
}
for(i=0;i<N;i++)
{
printf("\n");
for(j=0;j<N;j++)
printf("%d\t",square[i][j]);
}
}
读取MP3信息程序
代码
struct MUSIC_INFO
{
char ID3v1TAG[3];//TAG
char MUSIC_NAME[30];//存储标题
char Artist[30];//歌手信息
char Album[30];//专辑信息
char YEAR[4];//年代信息
char Comments[28];//备注信息
char Genre;//风格
char Reserved;//保留位
char Track;//音轨
};
void ReadMp3(const char *name)
{
int i=0;
char style[129];
struct MUSIC_INFO info;
FILE *fp;
if(!(fp=fopen(name,"rb")))
{
printf("open fail!");
return;
}
else
{
fseek(fp,-128,SEEK_END);
fread(style,128,1,fp);
memcpy(&info,style,128);
}
printf("TAG:");
for(i=0;i<sizeof(info.ID3v1TAG);i++)
printf("%c",info.ID3v1TAG[i]);
printf("\n");
printf("NAME:%s\n",info.MUSIC_NAME);
printf("Artist:%s\n",info.Artist);
printf("Album:%s\n",info.Album);
printf("Year:");
for(i=0;i<sizeof(info.YEAR);i++)
printf("%c",info.YEAR[i]);
printf("\n");
printf("Comments:%s\n",info.Comments);
printf("Genre:%d\n",info.Genre);
printf("Track:%d\n",info.Track);
fclose(fp);
}
发表于 @ 2009年08月04日

浙公网安备 33010602011771号