/*
 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日