ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>日本韩国视频一区二区,性色av一区二区怡红,中日韩视频在线观看http://www.aygfsteel.com/badboyryan/articles/70280.html谈笑有é¿`å„?/dc:creator>谈笑有é¿`å„?/author>Mon, 18 Sep 2006 06:34:00 GMThttp://www.aygfsteel.com/badboyryan/articles/70280.htmlhttp://www.aygfsteel.com/badboyryan/comments/70280.htmlhttp://www.aygfsteel.com/badboyryan/articles/70280.html#Feedback0http://www.aygfsteel.com/badboyryan/comments/commentRss/70280.htmlhttp://www.aygfsteel.com/badboyryan/services/trackbacks/70280.html  c语言隄¡‚¹(我è{çš?
 

˜q™ç¯‡æ–‡ç« ä¸»è¦æ˜¯ä»‹¾lä¸€äº›åœ¨å¤ä¹ C语言的过½E‹ä¸­½W”è€…ä¸ªäºø™®¤ä¸ºæ¯”较重点的地方åQŒè¾ƒå¥½çš„æŽŒæ¡˜q™äº›é‡ç‚¹ä¼šä‹É对C的运用更加得 心应手。此外会包括一些细节、易错的地方。涉及的主要内容包括åQšå˜é‡çš„作用域和存储¾cÕdˆ«ã€å‡½æ•°ã€æ•°¾l„、字½W¦ä¸²ã€æŒ‡é’ˆã€æ–‡ä»¶ã€é“¾è¡¨ç­‰ã€‚一些最基本的概念在æ­?ž®×ƒ¸å¤šä½œè§£é‡Šäº†ï¼Œä»…希望能有只­a€ç‰‡è¯­¾l™åŒæ˜¯Cè¯­è¨€åˆå­¦è€…çš„å­¦ä¹ å’Œä¸Šæœø™¿‡½E‹æä¾›ä¸€ç‚¹ç‚¹çš„帮助ã€?

变量作用域和存储¾cÕdˆ«åQ?/strong>

了解了基本的变量¾cÕdž‹åŽï¼Œæˆ‘们要进一步了解它的存储类别和变量作用域问题ã€?/font>

变量¾cÕdˆ«å­ç±»åˆ?/font>
局部变é‡?/font>静态变量(¼›Õd¼€å‡½æ•°åQŒå˜é‡å€ég»ä¿ç•™åQ?/font>
自动变量
寄存器变�/font>
全局变量静态变量(只能在本文äšg中用åQ?/font>
非静态变量(允许其他文äšg使用åQ?/font>

换一个角�/font>

变量¾cÕdˆ«å­ç±»åˆ?/font>
静态存储变é‡?静态局部变量(函数åQ?
静态全局变量åQˆæœ¬æ–‡äšgåQ?
非静态全局/外部变量åQˆå…¶ä»–文件引用)
动态存储变�/font>自动变量
寄存器变�/font>
形式参数

extern型的存储变量在处理多文äšg问题时常能用刎ͼŒåœ¨ä¸€ä¸ªæ–‡ä»¶ä¸­å®šä¹‰ extern型的变量卌™¯´æ˜Žè¿™ä¸ªå˜é‡ç”¨çš„æ˜¯å…¶ä»–æ–‡äšg的。顺便说一下,½W”者在做课设时遇到out of memory的错误,于是æ”ÒŽˆåšå¤šæ–‡äšgåQŒå†æŠŠå®ƒinclude˜q›æ¥åQˆæ³¨æ„è‡ªå·±å†™çš?.h要用“”不ç”?lt;>åQ‰ï¼Œèƒ½è“våˆîC¸€å®šçš„æ•ˆç”¨ã€‚static 型的在读½E‹åºå†™ç»“果的试题中是个考点。多数时候整个程序会出现多个定义的变量在不同的函æ•îC¸­åQŒè€ƒæŸ¥åœ¨ä¸åŒä½¾|®åŒä¸€å˜é‡çš„值是多少。主要是遵åó@一个原则,å?要本函数内没有定义的变量ž®Þq”¨å…¨å±€å˜é‡åQˆè€Œä¸æ˜¯main里的åQ‰ï¼Œå…¨å±€å˜é‡å’Œå±€éƒ¨å˜é‡é‡åæ—¶å±€éƒ¨å˜é‡è“v作用åQŒå½“然还要注意静态与自动变量的区别ã€?

函数åQ?/strong>

对于函数最基本的理解是从那个叫main的单词开始的åQŒä¸€å¼€å§‹æ€ÖM¼šè§‰å¾—把语句一òq?写在main里不是挺好的么,ä¸ÞZ»€ä¹ˆåæ‹©å‡ºåŽ…R€‚其实这是因为对函数˜q˜ä¸å¤Ÿç†Ÿ¾lƒï¼Œå¦åˆ™å‡½æ•°çš„运用会¾l™æˆ‘们编½E‹å¸¦æ¥æžå¤§çš„便利。我们要知道函数的返回值类型, 参数的类型,以及调用函数时的形式。事先的函数说明也能起到一个提醒的好作用。所谓åŞ参和实参åQŒå³åœ¨è°ƒç”¨å‡½æ•°æ—¶å†™åœ¨æ‹¬å·é‡Œçš„ž®±æ˜¯å®žå‚åQŒå‡½æ•°æœ¬íw«ç”¨çš„就是åÅž 参,在画‹¹ç¨‹å›¾æ—¶ç”¨åã^行四边åŞ表示传参ã€?/font>

函数的另一个应用例子就是递归了,½W”者开始比较头疼的问题åQŒååº”æ€ÀL˜¯æ¯”较˜qŸé’åQŒæŒ‰ç…§è€å¸ˆçš„æ–¹æ³•,把递归的过½E‹è€å¿ƒå‡†ç¡®çš„逐çñ”ç”Õd‡ºæ¥ï¼Œå­¦ä¹ çš„æ•ˆæžœè¿˜æ˜¯æ¯”较好的,会觉得这¿Ué€’归的运用是挺åéy的,事实上,著名的八皇后、汉诺塔½{‰é—®é¢˜éƒ½ç”¨åˆ°äº†é€’å½’ã€?/font>

例子åQ?
long fun(int n)
{
long s;
if(n==1||n==2) s=2;
   else s=n-fun(n-1);
return s;
}
main()
{
printf("%ld",fun(4));
}

 

数组åQ?/strong>

åˆ†äØ“ä¸€¾l´æ•°¾l„和多维数组åQŒå…¶å­˜å‚¨æ–¹å¼ç”ÖMؓ表格的话ž®×ƒ¼šä¸€ç›®äº†ç„Óž¼Œå…¶å®žž®±æ˜¯æŠŠç›¸åŒç±»åž‹çš„变量有序的放在一赗÷€‚因此,在处理比较多的数据时åQˆè¿™ä¹Ÿæ˜¯å¤§å¤šæ•°çš„æƒ…况åQ‰æ•°¾l„的应用范围是非常广的ã€?/font>

具体的实际应用不便ä‹D例,而且¾lå¤§å¤šæ•°æ˜¯ä¸ŽæŒ‡é’ˆç›¸ç»“合的åQŒç¬”è€…ä¸ªäºø™®¤ä¸ºå­¦ä¹ æ•°¾l„在 更大½E‹åº¦ä¸Šæ˜¯ä¸ºå­¦ä¹ æŒ‡é’ˆåšä¸€ä¸ªé“ºåž«ã€‚作为基¼‹€çš„基¼‹€è¦æ˜Žç™½å‡ ¿UåŸºæœ¬æ“ä½œï¼šåÏx•°¾l„赋倹{€æ‰“印、排序(冒æˆö排序法和选择排序法)、查找。这些都不可避免的用åˆ?循环åQŒå¦‚果觉得反应不˜q‡æ¥åQŒå¯ä»¥å…ˆä¸€ç‚¹ç‚¹çš„æŠŠå¾ªçޝ展开åQŒå°±ä¼šè¶Šæ¥è¶Šç†Ÿæ‚‰åQŒä»¥åŽè‡ªå·Þq¼–写一个功能的时候就会先扑ևºå†…在规律åQŒè¾ƒå¥½çš„˜qç”¨äº†ã€‚另外数¾l„做参数 æ—Óž¼Œä¸€¾l´çš„[]里可以是½Iºçš„åQŒäºŒ¾l´çš„½W¬ä¸€ä¸ª[]里可以是½Iºçš„但是½W¬äºŒä¸ª[]中必™å»è§„定大ž®ã€?/font>

冒æˆö法排序函敎ͼš
void bubble(int a[],int n)
{
int i,j,k;
for(i=1,i<n;i++)
   for(j=0;j<n-i;j++)
   if(a[j]>a[j+1])
    {
    k=a[j];
       a[j]=a[j+1];
       a[j+1]=k;
       }
}

选择法排序函敎ͼš
void sort(int a[],int n)
{
int i,j,k,t;
for(i=0,i<n-1;i++)
   {
   k=i;
   for(j=i+1;j<n;j++)
      if(a[k]<a[j]) k=j;
      if(k!=i)
         {
         t=a[i];
         a[i]=a[k];
         a[k]=t;
         }
   }
}

折半查找函数åQˆåŽŸæ•°ç»„æœ‰åºåQ‰ï¼š
void search(int a[],int n,int x)
{
int left=0,right=n-1,mid,flag=0;
while((flag==0)&&(left<=right))
   {
   mid=(left+right)/2;
   if(x==a[mid])
      {
      printf("%d%d",x,mid);
      flag =1;
      }
      else if(x<a[mid]) right=mid-1;
                   else left=mid+1;
   }
}

相关常用的算法还æœ?strong>判断回文åQŒæ±‚阶乘åQŒFibanacci数列åQŒä“Q意进制è{换,杨辉三角形计½Ž?/strong>½{‰ç­‰ã€?/strong>

字符ä¸ÔŒ¼š

字符串其实就是一个数¾l„(指针åQ‰ï¼Œåœ¨scanf的输入列中是不需要在前面åŠ?â€?amp;”符åïLš„åQŒå› ä¸ºå­—½W¦æ•°¾l„名本èín即代表地址。值得注意的是字符串末ž®„¡š„‘\0’,如果没有的话åQŒå­—½W¦ä¸²å¾ˆæœ‰å¯èƒ½ä¼šä¸æ­£å¸¸çš„æ‰“印。另外就是字½W¦ä¸² 的定义和赋值问题了åQŒç¬”者有一‹Æ¡çš„æ¯”较¾l¼åˆçš„上æœÞZ½œä¸šå°±æ˜¯å­—½W¦ä¸²æ‰“印老是ä¹Þq åQŒä¸Šä¸Šä¸‹ä¸‹æ‰¾äº†ä¸€åœˆé—®é¢˜ï¼Œæœ€åŽå‘çŽ°æ˜¯å› äØ“

char *name;

而不�/font>

char name[10];

前者没有说明指向哪儿,更没有确定大ž®ï¼Œå¯ÆD‡´äº†äؕ码的错误åQŒå°è±¡æŒºæ·±åˆ»çš„ã€?

另外åQŒå­—½W¦ä¸²çš„赋å€ég¹Ÿæ˜¯éœ€è¦æ³¨æ„çš„åQŒå¦‚果是用字½W¦æŒ‡é’ˆçš„话,既可以定义的时候赋初å€û|¼Œå?/font>

char *a="Abcdefg";

ä¹Ÿå¯ä»¥åœ¨èµ‹å€ÆD¯­å¥ä¸­èµ‹å€û|¼Œå?/font>

char *a;
a="Abcdefg";

但如果是用字½W¦æ•°¾l„的话,ž®±åªèƒ½åœ¨å®šä¹‰æ—¶æ•´ä½“赋初å€û|¼Œå³char a[5]={"abcd"};è€Œä¸èƒ½åœ¨èµ‹å€ÆD¯­å¥ä¸­æ•´ä½“赋倹{€?

常用字符串函数列表如下,要会自己实现åQ?/font>

函数作用函数调用形式备注
字符串拷贝函�/font>strcpy(char*,char *)后者拷贝到前�/font>
字符串追加函æ•?/font>strcat(char*,char *)后者追加到前者后åQŒè¿”回前者,因此前者空间要­‘›_¤Ÿå¤?/font>
字符串比较函æ•?/font>strcmp(char*,char *)前者等于、小于、大于后者时åQŒè¿”å›?、正倹{€è´Ÿå€¹{€‚注意,不是比较长度åQŒæ˜¯æ¯”较字符ASCII码的大小åQŒå¯ç”¨äºŽæŒ‰å§“名字母排序等ã€?/font>
字符串长åº?/font>strlen(char *)˜q”回字符串的长度åQŒä¸åŒ…括'\0'.转义字符½Ž—一个字½W¦ã€?/font>
字符串型->整型atoi(char *)
整型->字符串型itoa(int,char *,int)做课设时挺有用的
sprintf(char *,格式化输入)赋给字符ä¸ÔŒ¼Œè€Œä¸æ‰“印出来。课设时用也比较方便

注:对字½W¦ä¸²æ˜¯ä¸å…è®¸å?=或!=的运½Ž—çš„åQŒåªèƒ½ç”¨å­—符串比较函æ•?

指针åQ?/strong>

指针可以说是C语言中最关键的地方了åQŒå…¶å®žè¿™ä¸ªâ€œæŒ‡é’ˆâ€çš„名字对于˜q™ä¸ªæ¦‚念的理è§?是十分åŞ象的。首先要知道åQŒæŒ‡é’ˆå˜é‡çš„å€û|¼ˆåÏxŒ‡é’ˆå˜é‡ä¸­å­˜æ”¾çš„å€û|¼‰æ˜¯æŒ‡é’ˆï¼ˆå›_œ°å€åQ‰ã€‚指针变量定义åŞ式中åQšåŸºæœ¬ç±»åž?*指针变量å?中的â€?”代表的是这是一个指向该基本¾cÕdž‹çš„æŒ‡é’ˆå˜é‡ï¼Œè€Œä¸æ˜¯å†…容的意思。在以后使用的时候,å¦?ptr=aæ—Óž¼Œâ€?”才表示ptr所指向的地址里放的内 å®ÒŽ˜¯aã€?/font>

指针比较典型又简单的一应用例子是两æ•îCº’换,看下面的½E‹åºåQ?/font>

swap(int c,int d)
{
int t;
t=c;
c=d;
d=t;
}
main()
{
int a=2,b=3;
swap(a,b);
printf(�d,%d�a,b);
}

˜q™æ˜¯ä¸èƒ½å®žçްaå’Œb的数å€égº’换的åQŒå®žé™…上只是形参在这个函æ•îC¸­æ¢æ¥æ¢åŽ»åQŒå¯¹å®žå‚æ²¡ä»€ä¹ˆåª„å“ã€‚çŽ°åœ¨ï¼Œç”¨æŒ‡é’ˆç±»åž‹çš„æ•°æ®åšäØ“å‚æ•°çš„è¯åQŒæ›´æ”¹å¦‚下:

swap(#3333FF *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
main()
{
int a=2,b=3;
int *ptr1,*ptr2;
ptr1=&a;
ptr2=&b;
swap(prt1,ptr2);
printf(�d,%d�a,b);
}

˜q™æ ·åœ¨swap中就把p1,p2 的内容给换了åQŒå³æŠŠaåQŒbçš„å€égº’换了ã€?/font>

指针可以执行增、减˜qç®—åQŒç»“å?+˜qç®—½W¦çš„æ³•则åQŒæˆ‘们可以看åˆ?

*++s

取指针变量加1以后的内�/font>

*s++取指针变量所指内容后s再加1
(*s)++指针变量指的内容�

指针和数¾l?/strong>实际上几乎是一æ ïLš„åQŒæ•°¾l„名可以看成是一个常量指针,一¾l´æ•°¾l„中ptr=&b[0]则下面的表示法是½{‰ä­h的:

a[3]½{‰ä­häº?(a+3)
ptr[3]½{‰ä­häº?(ptr+3)

下面看一个用指针来自己实现atoiåQˆå­—½W¦ä¸²åž?>æ•´åž‹åQ‰å‡½æ•ŽÍ¼š

int atoi(char *s)
{
int sign=1,m=0;
if(*s=='+'||*s=='-') /*判断是否有符�/
sign=(*s++=='+')?1:-1; /*用到三目˜qç®—½W?/
while(*s!='\0') /*å¯Òޝä¸€ä¸ªå­—½W¦è¿›è¡Œæ“ä½?/
   {
   m=m*10+(*s-'0');
   s++; /*指向下一个字½W?/
   }
return m*sign;
}

指向多维数组的指针变量也是一个比较广泛的˜qç”¨ã€‚例如数¾l„a[3][4]åQŒa代表的实际是整个二维数组的首地址åQŒå³½W?行的首地址åQŒä¹Ÿž®±æ˜¯ä¸€ä¸ªæŒ‡é’ˆå˜é‡ã€‚而a+1ž®×ƒ¸æ˜¯ç®€å•的在数å€ég¸ŠåŠ ä¸Š1了,它代表的不是a[0][1]åQŒè€Œæ˜¯½W?行的首地址åQ?amp;a[1][0]ã€?/font>

æŒ‡é’ˆå˜é‡å¸¸ç”¨çš„ç”¨é€”è¿˜æœ‰æŠŠæŒ‡é’ˆä½œäØ“å‚æ•°ä¼ é€’ç»™å…¶ä»–å‡½æ•°åQŒå³æŒ‡å‘函数的指é’?/strong>ã€?
看下面的几行代码åQ?

void Input(ST *);
void Output(ST *);
void Bubble(ST *);
void Find(ST *);
void Failure(ST *);
/*函数声明åQšè¿™äº”个函数都是以一个指向ST型(事先定义˜q‡ï¼‰¾l“构的指针变量作为参敎ͼŒæ— è¿”回倹{€?/

void (*process[5])(ST *)={Input,Output,Bubble,Find,Failure};
/*process被调用时提供5¿UåŠŸèƒ½ä¸åŒçš„å‡½æ•°å…±é€‰æ‹©(指向函数的指针数¾l„)*/

printf("\nChoose:\n?");
scanf("%d",&choice);
if(choice>=0&&choice<=4)
(*process[choice])(a); /*调用相应的函数实çŽîC¸åŒåŠŸèƒ?;/

æ€ÖM¹‹åQŒæŒ‡é’ˆçš„应用是非常灵‹zÕd’Œòq¿æ³›çš„,不是三言两语能说完的åQŒä¸Šé¢å‡ ä¸ªå°ä¾‹å­åªæ˜¯ä¸ªå¼•子,实际¾~–程中,会逐渐发现˜qç”¨æŒ‡é’ˆæ‰€èƒ½å¸¦æ¥çš„便利和高效率ã€?

æ–‡äšgåQ?/strong>

函数调用形式说明
fopen("路径","打开方式")打开文äšg
fclose(FILE *)防止之后被误�/font>
fgetc(FILE *)从文件中è¯Õd–一个字½W?/font>
fputc(ch,FILE *)把ch代表的字½W¦å†™å…¥è¿™ä¸ªæ–‡ä»‰™‡Œ
fgets(FILE *)从文件中è¯Õd–一è¡?/font>
fputs(FILE *)把一行写入文件中
fprintf(FILE *,"格式字符ä¸?,输出表列åQ?/font>把数据写入文ä»?/font>
fscanf(FILE *,"格式字符ä¸?,输入表列åQ?/font>从文件中è¯Õd–
fwriteåQˆåœ°å€åQŒsizeofåQˆï¼‰åQŒnåQŒFILE *åQ?/font>把地址中n个sizeof大的数据写入文äšgé‡?/font>
freadåQˆåœ°å€åQŒsizeofåQˆï¼‰åQŒnåQŒFILE *åQ?/font>把文件中n个sizeof大的数据è¯Õdˆ°åœ°å€é‡?/font>
rewindåQˆFILE *åQ?/font>把文件指针拨回到文äšgå¤?/font>
fseekåQˆFILE *åQŒxåQ?/1/2åQ?/font>¿UÕdŠ¨æ–‡äšg指针。第二个参数是位¿U»é‡åQ?代表从头¿U»ï¼Œ1代表从当前位¾|®ç§»åQ?代表从文件尾¿U…R€?/font>
feof(FILE *)判断是否åˆîCº†æ–‡äšg末尾

æ–‡äšg打开方式说明
r打开只能è¯Èš„æ–‡äšg
w建立供写入的文äšgåQŒå¦‚果已存在ž®±æŠ¹åŽÕdŽŸæœ‰æ•°æ?/font>
a打开或徏立一个把数据˜q½åŠ åˆ°æ–‡ä»¶å°¾çš„æ–‡ä»?/font>
r+打开用于更新数据的文�/font>
w+建立用于更新数据的文ä»Óž¼Œå¦‚果已存在就抹去原有数据
a+打开或徏立用于更新数据的文äšgåQŒæ•°æ®è¿½åŠ åˆ°æ–‡äšgž®?/font>

注:以上用于文本文äšg的操作,如果是二˜q›åˆ¶æ–‡äšgž®±åœ¨ä¸Šè¿°å­—母后加“b”ã€?

我们用文件最大的目的ž®±æ˜¯èƒ½è®©æ•°æ®ä¿å­˜ä¸‹æ¥ã€‚因此在要用文äšg中数据的时候,ž®±æ˜¯è¦?把数据读åˆîC¸€ä¸ªç»“构(一般保存数据多用结构,便于½Ž¡ç†åQ‰ä¸­åŽ»ï¼Œå†å¯¹¾l“æž„˜q›è¡Œæ“ä½œå›_¯ã€‚例如,文äšgaa.data中存储的æ˜?0个学生的成ç‡W½{‰ä¿¡æ¯ï¼Œè¦éåŽ?˜q™äº›ä¿¡æ¯åQŒå¯¹å…¶è¿›è¡Œæˆ¾l©è¾“出、排序、查扄¡­‰å·¥ä½œæ—Óž¼Œæˆ‘们ž®±æŠŠ˜q™äº›ä¿¡æ¯å…ˆè¯»å…¥åˆ°ä¸€ä¸ªç»“构数¾l„中åQŒå†å¯¹è¿™ä¸ªæ•°¾l„进行操作。如下例åQ?/font>

#include<stdio.h>
#include<stdlib.h>
#define N 30

typedef struct student /*定义储存学生成ç‡W信息的数¾l?/
{
char *name;
int chinese;
int maths;
int phy;
int total;
}ST;

main()
{
ST a[N]; /*存储N个学生信息的数组*/
FILE *fp;
void (*process[3])(ST *)={Output,Bubble,Find}; /*实现相关功能的三个函�/
int choice,i=0;
Show();
printf("\nChoose:\n?");
scanf("%d",&choice);
while(choice>=0&&choice<=2)
   {
   fp=fopen("aa.dat","rb");
   for(i=0;i<N;i++)
      fread(&a[i],sizeof(ST),1,fp); /*把文件中储存的信息逐个è¯Õdˆ°æ•°ç»„中去*/
   fclose(fp);
   (*process[choice])(a); /*前面提到的指向函数的指针åQŒé€‰æ‹©æ“ä½œ*/
   printf("\n");
   Show();
   printf("\n?");
   scanf("%d",&choice);
   }
}

void Show()
{
printf("\n****Choices:****\n0.Display the data form\n1.Bubble it according to the total score\n2.Search\n3.Quit!\n");
}

void Output(ST *a) /*ž®†æ–‡ä»¶ä¸­å­˜å‚¨çš„信息逐个输出*/
{
int i,t=0;
printf("Name Chinese Maths Physics Total\n");
for(i=0;i<N;i++)
   {
   t=a[i].chinese+a[i].maths+a[i].phy;
   a[i].total=t;
   printf("%4s%8d%8d%8d%8d\n",a[i].name,a[i].chinese,a[i].maths,a[i].phy,a[i].total);
   }
}

void Bubble(ST *a) /*å¯ÒŽ•°¾l„进行排序,òq¶è¾“出结æž?/
{
int i,pass;
ST m;
for(pass=0;pass<N-1;pass++)
   for(i=0;i<N-1;i++)
      if(a[i].total<a[i+1].total)
         {
         m=a[i]; /*¾l“构互换*/
         a[i]=a[i+1];
         a[i+1]=m;
         }
Output(a);
}

void Find(ST *a)
{
int i,t=1;
char m[20];
printf("\nEnter the name you want:");
scanf("%s",m);
for(i=0;i<N;i++)
   if(!strcmp(m,a[i].name)) /*æ ÒŽ®å§“名匚w…æƒ…况输出查找¾l“æžœ*/
   {
   printf("\nThe result is:\n%s, Chinese:%d, Maths:%d,     Physics:%d,Total:%d\n",m,a[i].chinese,a[i].maths,a[i].phy,a[i].total);
   t=0;
   }
if(t)
   printf("\nThe name is not in the list!\n");
}

链表åQ?/strong>
链表是C语言中另外一个难炏V€‚牵扯到¾l“点、动态分配空间等½{‰ã€‚用¾l“æž„ä½œäØ“é“¾è¡¨çš„ç»“ç‚ÒŽ˜¯éžå¸¸é€‚合的,例如åQ?

struct node
{
int data;
struct node *next;
};

其中next是指向自íw«æ‰€åœ¨ç»“构类型的指针åQŒè¿™æ ·å°±å¯ä»¥æŠŠä¸€ä¸ªä¸ª¾l“点相连åQŒæž„成链表ã€?/font>

链表¾l“构的一大优势就是动态分配存储,不会像数¾l„一样必™åÕdœ¨å®šä¹‰æ—¶ç¡®å®šå¤§ž®ï¼Œé€ æˆä¸å¿…要的‹¹ªè´¹ã€‚用mallocå’Œfree函数卛_¯å®žçŽ°å¼€è¾Ÿå’Œé‡Šæ”¾å­˜å‚¨å•å…ƒã€‚å…¶ä¸­ï¼Œmalloc的参数多用sizeof˜qç®—½W¦è®¡½Ž—得到ã€?/font>

链表的基本操作有åQ?strong>正、反向徏立链表;输出链表åQ›åˆ é™¤é“¾è¡¨ä¸­¾l“点åQ›åœ¨é“¾è¡¨ä¸­æ’入结ç‚?/strong>½{‰ç­‰åQŒéƒ½æ˜¯è¦ç†Ÿç»ƒæŽŒæ¡çš„,初学者通过ç”Õd›¾çš„æ–¹å¼èƒ½æ¯”较形象地理解徏立、插入等实现的过½E‹ã€?

typedef struct node
{
char data;
struct node *next;
}NODE; /*¾l“点*/

正向建立链表åQ?
NODE *create()
{
char ch='a';
NODE *p,*h=NULL,*q=NULL;
while(ch<'z')
   {
   p=(NODE *)malloc(sizeof(NODE)); /*强制¾cÕdž‹è½¬æ¢ä¸ºæŒ‡é’?/
   p->data=ch;
   if(h==NULL) h=p;
      else q->next=p;
   ch++;
   q=p;
   }
q->next=NULL; /*链表¾l“束*/
return h;
}

 

逆向建立åQ?/font>

NODE *create()
{
char ch='a';
NODE *p,*h=NULL;
while(ch<='z')
   {
   p=(NODE *)malloc(sizeof(NODE));
   p->data=ch;
   p->next=h; /*不断地把head往前挪*/
   h=p;
   ch++;
   }
return h;
}

 

用递归实现链表逆序输出åQ?/font>

void output(NODE *h)
{
if(h!=NULL)
   {
   output(h->next);
   printf("%c",h->data);
   }
}

插入¾l“点åQˆå·²æœ‰å‡åºçš„链表åQ‰ï¼š

NODE *insert(NODE *h,int x)
{
NODE *new,*front,*current=h;
while(current!=NULL&&(current->data<x)) /*查找插入的位¾|?/
   {
   front=current;
   current=current->next;
   }
new=(NODE *)malloc(sizeof(NODE));
new->data=x;
new->next=current;
if(current==h) /*判断是否是要插在表头*/
   h=new;
else front->next=new;
return h;
}

 

删除¾l“点åQ?/font>

NODE *delete(NODE *h,int x)
{
NODE *q,*p=h;
while(p!=NULL&&(p->data!=x))
   {
   q=p;
   p=p->next;
   }
if(p->data==x) /*扑ֈ°äº†è¦åˆ çš„¾l“点*/
   {
   if(p==h) /*判断是否要删表头*/
   h=h->next;
      else q->next=p->next;
   free(p); /*释放掉已删掉的结�/
   }
return h;
}


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1217307



]]>
C/C++头文件一è§?/title><link>http://www.aygfsteel.com/badboyryan/articles/69110.html</link><dc:creator>谈笑有é¿`å„?/dc:creator><author>谈笑有é¿`å„?/author><pubDate>Tue, 12 Sep 2006 02:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/badboyryan/articles/69110.html</guid><wfw:comment>http://www.aygfsteel.com/badboyryan/comments/69110.html</wfw:comment><comments>http://www.aygfsteel.com/badboyryan/articles/69110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/badboyryan/comments/commentRss/69110.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/badboyryan/services/trackbacks/69110.html</trackback:ping><description><![CDATA[C、传¾l?C++<br /><br />#include <assert.h>    //è®‘Ö®šæ’å…¥ç‚?br />#include <ctype.h>     //字符处理<br />#include <errno.h>     //定义错误ç ?br />#include <float.h>     //‹¹®ç‚¹æ•°å¤„ç?br />#include <fstream.h>    //æ–‡äšg输入åQè¾“å‡?br />#include <iomanip.h>    //参数化输入/输出<br />#include <iostream.h>   //数据‹¹è¾“入/输出<br />#include <limits.h>    //定义各种数据¾cÕdž‹æœ€å€¼å¸¸é‡?br />#include <locale.h>    //定义本地化函æ•?br />#include <math.h>     //定义数学函数<br />#include <stdio.h>     //定义输入åQè¾“出函æ•?br />#include <stdlib.h>    //定义杂项函数及内存分配函æ•?br />#include <string.h>    //字符串处ç?br />#include <strstrea.h>   //åŸÞZºŽæ•°ç»„的输入/输出<br />#include <time.h>     //定义关于旉™—´çš„函æ•?br />#include <wchar.h>     //宽字½W¦å¤„理及输入åQè¾“å‡?br />#include <wctype.h>    //宽字½W¦åˆ†¾c?br /><br />//////////////////////////////////////////////////////////////////////////<br /><br />标准 C++ åQˆåŒä¸Šçš„不再注释åQ?br /><br />#include <algorithm>    //STL 通用½Ž—法<br />#include <bitset>     //STL 位集容器<br />#include <cctype><br />#include <cerrno><br />#include <clocale><br />#include <cmath><br />#include <complex>     //复数¾c?br />#include <cstdio><br />#include <cstdlib><br />#include <cstring><br />#include <ctime><br />#include <deque>      //STL 双端队列容器<br />#include <exception>    //异常处理¾c?br />#include <fstream><br />#include <functional>   //STL 定义˜qç®—函数åQˆä»£æ›¿è¿½Ž—符åQ?br />#include <limits><br />#include <list>      //STL ¾U¿æ€§åˆ—表容å™?br />#include <map>       //STL 映射容器<br />#include <iomanip><br />#include <ios>       //基本输入åQè¾“出支æŒ?br />#include <iosfwd>     //输入åQè¾“出系¾lŸä‹É用的前置声明<br />#include <iostream><br />#include <istream>     //基本输入‹¹?br />#include <ostream>     //基本输出‹¹?br />#include <queue>      //STL 队列容器<br />#include <set>       //STL 集合容器<br />#include <sstream>     //åŸÞZºŽå­—符串的‹¹?br />#include <stack>      //STL 堆栈容器    <br />#include <stdexcept>    //标准异常¾c?br />#include <streambuf>    //底层输入åQè¾“出支æŒ?br />#include <string>     //字符串类<br />#include <utility>     //STL 通用模板¾c?br />#include <vector>     //STL 动态数¾l„容å™?br />#include <cwchar><br />#include <cwctype><br /><br />using namespace std;<br /><br />//////////////////////////////////////////////////////////////////////////<br /><br />C99 增加<br /><br />#include <complex.h>   //复数处理<br />#include <fenv.h>    //‹¹®ç‚¹çŽ¯å¢ƒ<br />#include <inttypes.h>  //整数格式转换<br />#include <stdbool.h>   //布尔环境<br />#include <stdint.h>   //整型环境<br />#include <tgmath.h>   //通用¾cÕdž‹æ•°å­¦å®?img src ="http://www.aygfsteel.com/badboyryan/aggbug/69110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/badboyryan/" target="_blank">谈笑有é¿`å„?/a> 2006-09-12 10:46 <a href="http://www.aygfsteel.com/badboyryan/articles/69110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言‹¹‹è¯•题的讲解分析http://www.aygfsteel.com/badboyryan/articles/69102.html谈笑有é¿`å„?/dc:creator>谈笑有é¿`å„?/author>Tue, 12 Sep 2006 02:23:00 GMThttp://www.aygfsteel.com/badboyryan/articles/69102.htmlhttp://www.aygfsteel.com/badboyryan/comments/69102.htmlhttp://www.aygfsteel.com/badboyryan/articles/69102.html#Feedback0http://www.aygfsteel.com/badboyryan/comments/commentRss/69102.htmlhttp://www.aygfsteel.com/badboyryan/services/trackbacks/69102.html下面是网友Jackie214发布的答æ¡?其认真态度令我深受感动.˜q™äº›é¢˜æ˜¯æˆ?000òq´åœ¨åšåŸ¹è®­æ—¶ä¸ºå­¦å‘˜ä»¬è®¾è®¡çš?但我已经˜q?òq´æ²¡æœ‰æŽ¥è§¦è¿‡vc++下的c语言¾~–程äº?æœ?òq´æ²¡æŽ¥è§¦unix下的c语言¾~–程äº?所ä»?除了一些核心思想令我¾lˆç”Ÿéš‘Ö¿˜å¤?其他一些语法细节和当初出题的意图何åœ?我也差不多忘è®îCº†!前天把这个测试题发布出来,是因为前一阉|‰çŸ¥é“我多òq´å‰å†™çš„一些内容又要被别äh加入到其书籍中出ç‰?我只是对一些äh惯于借鉴别äh的东西而当作自己成ž®Þqš„æ€§æ ¼å¾ˆä¸èµžèµ,但这般行为在商业上来说是无可厚非,甚至是值得学习,只是我自己做不出˜q™æ ·çš„事情来,反而有点自己没胆量吃葡è?ž®Þp¯´åƒè‘¡è„的人酸),当时非常生气,ž®±åˆ¾˜»è…¾å‡ÞZº†˜q™äº›å¿«è¢«è‡ªå·±é—忘的东è¥?前几天就™åÞZ¾¿æŠŠè¿™ä¸ªæµ‹è¯•题发表在自å·Þqš„blog里了.我没有受˜q‡æ­£è§„的计算机教è‚?除了自学˜q‡èµK‹¹©å¼ºçš„那本入门çñ”çš„c语言,也没有看˜q‡c语言斚w¢çš„经典名è‘?很多东西都是自己瞎摸索出来的,所以有自己的讲课思èµ\,但不一定严è°?˜q˜è¯·çœ‹å®¢å¤šå¤šè°…è§£!
另外,我有˜q‡ä¸€ŒDµå¼€å‘实践和教学¾låކå?回过头来看èµK老爷子的那本c语言ä¹?觉得写得真的很不å¥?没抓主重ç‚?讲解也不通俗,很多人都˜q™ä¹ˆè®¤äØ“,ä½†ä¹Ÿæ²¡æœ‰äºø™ƒ½ä¸‹å®šå†›_¿ƒ,吃上两年的苦,写一被绝对好˜q‡è€èµK的书,我曾¾læœ‰˜q‡è¿™èˆ¬æƒ³æ³?但一直未能实æ–?我期望书能通过试验来让读者轻村֭¦æ‡?òq¶ä¸”学懂后还不容易忘è®?所以要把原理性的东西用通俗易懂的方式表现出æ?˜q˜è¦é«˜åº¦æ€È»“出核心思想,如果谁有˜q™æ–¹é¢çš„心愿,不妨与我合作!
下面是网友Jackie214发布的答�随后是我的一点补�
Jackie214 发表�006-05-19 11:47 AM  IP: 61.154.9.*
int x=35;
char str[10];

//问:strlen(str)å’Œsizeof(str)的值分别是多少åQ?
// strlen(str) å€ég¸¼‹®å®šåQŒstrlenæ ÒŽ®'\0'¼‹®å®šå­—符串是否结束ã€?
// sizeof(str)=10 sizeof一个数¾l„äØ“æ•°ç»„é•¿åº¦

strcpy(str,"www.it315.org"/*�3个字�/);
//é—?此时xå’Œstrlen(str)的值分别是多少åQ?
// x �5
// strcpy(char* dest, const char* src)
// æ ÒŽ®src来复制deståQŒä¾ç…§srcçš?\0'军_®šå¤åˆ¶çš„长度,而dest必须要提供èƒö够的长度åQŒè¿™é‡Œä¼šå¼•è“v溢出åQŒstrlen˜q”回13åQŒä½†æ˜¯æ•°¾l„外部的数据已经被破å?/div>
//(作者注:我下面给å‡ÞZº†æ›´ç¡®åˆ‡çš„½{”案 )

str="it315.org";//¾~–译能通过吗?
// 数组不能赋å€û|¼Œåªèƒ½åˆå§‹åŒ–。char str[10] = "it315.org";
// 而且初始化时¾~–译器会‹‚€æŸ¥æ•°¾l„的长度与初始化串的长度是否匚w…

char *pstr;
strcpy(pstr,"http://www.it315.org");
//上句¾~–译能通过吗?˜qè¡Œæ—¶æœ‰é—®é¢˜å—?
// 可以通过¾~–译åQŒä½†æ˜¯pstr指向了常量区åQŒè¿è¡Œæ—¶æœ€å¥½åªåšè¯»æ“ä½œåQŒå†™æ“ä½œä¸ä¿é™?
//(作者注:我下面给å‡ÞZº†æ›´ç¡®åˆ‡çš„½{”案 )

const char *p1;
char * const p2;
//上面两句有什么区别吗åQ?
// const char* å’?char const* ä¸€æ øP¼Œéƒ½æ˜¯è¡¨ç¤ºæŒ‡å‘帔R‡çš„å­—½W¦æŒ‡é’ˆã€?
// char * const 表示指向字符的常量指�

p1=(const char *)str;
//如果是p1=stråQ›ç¼–译能够通过吗?明白ä¸ÞZ»€ä¹ˆè¦¾cÕdž‹è½¬æ¢åQŸç±»åž‹è{换的本质是什么?
// 可以通过¾~–译。关于常量与非常量指针的关系是这æ ïLš„åQ?
// const指针可以指向const或者非const区域åQŒä¸ä¼šé€ æˆä»€ä¹ˆé—®é¢˜ã€?
// 非const指针不能指向const区域åQŒä¼šå¼•è“v错误ã€?

strcpy(p1,"abc");//¾~–译能够通过吗?
// 不能通过åQŒstrcpy( char*, const char*); char* 不能指向const char*

printf("%d",str);//有问题吗åQ?
// 没有问题åQŒè¾“出的是str的地址信息ã€?

pstr=3000;//¾~–译能过吗?如果不行åQŒè¯¥å¦‚何修改以保证编译通过呢?
// 不能通过åQŒchar* pstr表示pstr是个字符指针åQŒä¸èƒ½æŒ‡å?000的整形变量ã€?
// 修改的话åQŒå¯ä»¥è¿™æ øP¼špstr = (char*)3000åQŒæŠŠpstr指向3000˜q™ä¸ªåœ°å€;

long y=(long)pstr;//可以˜q™æ ·åšå—åQ?
// 可以åQŒyçš„å€égØ“pstr所指的地址。不˜q‡å¦‚果是¾U¯çÑa要地址的话åQŒæœ€å¥½æ˜¯ç”¨unsigned longã€?

int *p=str;
*p=0x00313200;
printf("%s",str);//会是什么效果?提示0x31对应字符'1',0x32对应字符'2'�
// 首先¾~–译未必会过养I¼Œæœ‰äº›¾~–译器可能不允许int * 直接指向char*ã€‚æœ€å¥½æ˜¯æ”¹äØ“int *p = (int*)str;
// ˜q‡å…³äº†æ•ˆæžœå°±æ˜¯ä»€ä¹ˆä¸œè¥‰Kƒ½æ²¡æœ‰ã€‚int *p=str; p为str所指的地址åQ?p表示修改了str所指向的内存ã€?
// ç”׃ºŽsizeof(int)åœ?2位机上,intæœ?个字节(其实具体要看¾~–译器的配置文äšgåQŒå¥½åƒæ˜¯limit.håQŒä¸€èˆ¬æ˜¯4个字节)所以修改了str[0]-str[3]
// ç”׃ºŽ0x00313200头尾都是0åQŒæ‰€ä»¥å­—½W¦ä¸²ä¸?\0'å¼€å¤ß_¼Œä»€ä¹ˆéƒ½æ‰“印不出来。这里有个Big-endinå’Œlittle-endin的问题。以0x31323334ä¸ÞZ¾‹
// little-endin的机器上面,0x31323334在内存中排列™åºåºä¸?4 33 32 31åQŒè¾“å‡ÞZØ“4321åQŒå¦‚INTEL芯片的pc
// big-endin机器上面ä¸?1 32 33 34 åQŒè¾“å‡ÞZØ“1234åQŒå¦‚IBM POWERPC

p=3000;//p+1的结果会是多ž®‘?
// 3000+sizeof(int); 指针+1å‡äØ“åŽŸæ¥åœ°å€åŠ ä¸Šsizeof(指针所指的数据¾cÕdž‹)

char *pc=new char[100];//上述语句在内存中占据几个内存块,怎样的布局情况åQ?
// 本èínpc会占用函数栈一ä¸?字节的指针长度(具体是否ä¸?个字节要看机器和¾~–译器)ã€?
// new会在堆上甌™¯·100个字节sizeof(char)的连¾l­ç©ºé—´ã€?

void test(char **p)
{
*p=new char[100];
}//˜q™ä¸ª¾~–译函数有问题吗åQŸå¤–面要调用˜q™ä¸ªå‡½æ•°åQŒè¯¥æ€Žæ ·ä¼ é€’参敎ͼŸ
// 该程序没有问题。需要在函数中对指针所指的地址˜q›è¡Œå˜åŒ–是必™åÖM¼ äººæŒ‡é’ˆçš„地址ã€?
// 原因是这æ ïLš„åQšå¦‚果传入的为指针本íw«ï¼Œåœ¨å‡½æ•°è°ƒç”¨çš„æ—¶å€™ï¼Œå®žå‚会被复制一个实例,˜q™æ ·ž®×ƒ¸æ˜¯åŽŸæ¥çš„æŒ‡é’ˆäº†ï¼Œå¯¹è¯¥æŒ‡é’ˆæœ¬èín˜q›è¡Œçš„ä“Q何改变都不能传递回åŽÖMº†ã€?
// 可以˜q™æ ·ç†è§£åQŒå¦‚果传入的参数为intåQŒé‚£ä¹ˆå¯¹int本èín的值的改变ž®×ƒ¼ ä¸å›žåŽÕd•¦åQŒåŠ ä¸?也是一æ ïLš„ã€?


//能明白typedef int (*PFUN)(int x,int y)及其作用吗?
// 定义了一个函数指针类型的宏,˜q™æ ·PFUNž®Þp¡¨½CºæŒ‡å‘返回å€égØ“intåQŒä¸”同时å¸?个int参数的函数指针类型了ã€?
// 可以用来定义˜q™æ ·çš„变量:
// 比如有个函数为int fun( int x, int y );
// PFUN p = fun;
//(作者注:我下面给å‡ÞZº†æ›´ç¡®åˆ‡çš„½{”案) 
--------------------------------------------------------------------------------------------------------------
下面是我的一点补�
½W¬äºŒé¢?
int x=35;
char str[10];
strcpy(str,"www.it315.org"/*�3个字�/);
//é—?此时xå’Œstrlen(str)的值分别是多少åQ?
½{?strlençš„å€égØ“13,在VC++环境ä¸?x的值是要改变的(å…¶ä»–¾~–译器下没试,).虽然表面上看æ?在程序中òq¶æ²¡æœ‰ä¿®æ”¹xçš„å€?但是实际˜qè¡Œçš„结果是上面的x的值发生了修改,˜q™æ˜¯å› äØ“strcpy以后,把多余的数据拯‚´˜q›äº†str的邻å±?int¾cÕdž‹çš„x)ä¸?所以x的数据也ž®±å˜äº?˜q™æ˜¯ä¸€ä¸ªæ›¾è®©æˆ‘刻骨铭心的问é¢?在我刚出道时遇到˜q™ä¸ªé—®é¢˜,虽然在朋友的帮助下解决了˜q™ä¸ªé—®é¢˜,但一直不明白xçš„å€égؓ何变äº?只有最后走上培训教师的岗位,才开始梳理自己曾¾lçš„困惑,才开始æ€È»“以前的经验供学员们借鉴.æˆ‘è§‰å¾—è¿™ä¸ªé¢˜ç›®çš„ä»·å€¼éžå¸æ€¹‹å¤?它能引è“v学员对字½W¦ä¸²æ‹¯‚´­‘Šç•Œé—®é¢˜çš„èƒö够重è§?òq¶ä¸”通过˜q™ä¸ªé—®é¢˜æ›´èƒ½æ˜Žç™½å­—符串的处理是怎么回时,更能明白字符串与字符数组的关¾p?字符串就是一个字½W¦æ•°¾l?只是把这个字½W¦æ•°¾l„用在处理串的函æ•îC¸­æ—?˜q™äº›å‡½æ•°ä¸è€ƒè™‘数组的长åº?只是è®îC½æ•°ç»„的首地址,从首地址开始处ç?òq¶åœ¨é‡åˆ°0时结束处ç?
½W¬å››é¢?
char *pstr;
strcpy(pstr,"http://www.it315.org");
//上句¾~–译能通过吗?˜qè¡Œæ—¶æœ‰é—®é¢˜å—?
½{? ¾~–译可以通过åQŒä½†æ˜¯pstr没有˜q›è¡Œæœ‰æ•ˆçš„初始化,它指向了一个不¼‹®å®šçš„内存区åQŒè¿è¡Œæ—¶ä¼šå‡ºçŽ°å†…å­˜ä¸å¯å†™é”™è¯¯!
最后一�
//能明白typedef int (*PFUN)(int x,int y)及其作用吗?
½{?函数指针最大的用处在于它可以被一个模板方法调ç”?˜q™æ˜¯æˆ‘在学java的设计模式时领悟到的.例如,有两个函数的‹¹ç¨‹¾l“构完全一è‡?只是内部调用的具体函æ•îC¸å?如下所½C?
void func1()
{
         //一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
         int sum = add( x , y);
        //一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
}
void func2()
{
         //与func1完全相同的一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
         int difference = sub( x , y);
        //与func1完全相同的一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
}
那么,可以只定义一个函æ•?如下所½C?/div>
void func(PFUNC p)
{
         //与func1完全相同的一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
         int difference = p( x , y);
        //与func1完全相同的一ŒD‰|µ½E‹ä»£ç å’Œé¢å‘æ–šw¢çš„代ç?如安全检æŸ?日志记录½{?/div>
}
调用½E‹åºåœ¨è°ƒç”¨æ—¶,让参数p分别指向addå’Œsub函数ž®±å¯ä»¥äº†.
对于其他题目的讲è§?ç”׃ºŽæˆ‘目前写作和工作的重点已完全不在c语言斚w¢äº?也没有时间一一解答,ž®±å€Ÿç”¨Jackie214发布的答案来回应大家.


]]> Ö÷Õ¾Ö©Öë³ØÄ£°å£º аͶû»¢×óÆì| ÓÀµÇÏØ| ÁÙ½­ÊÐ| Äþ²¨ÊÐ| º£ÃÅÊÐ| ÇúÑôÏØ| Á®½­ÊÐ| ¶ýÔ´ÏØ| Öî³ÇÊÐ| ãäÁêÏØ| Äϵ¤ÏØ| Ë«ÅÆÏØ| ÕÁÊ÷ÊÐ| ¡»ØÏØ| ¿ªÆ½ÊÐ| ÐÅ·áÏØ| ÎäÄþÏØ| иÉÏØ| Û¶ÑôÏØ| ÂÐÆ½ÏØ| ¶¨ÈÕÏØ| ÂÞÌïÏØ| ÕþºÍÏØ| ÄϲýÏØ| ÕÂÇðÊÐ| ¸Ê¹ÈÏØ| ¿µÂíÏØ| ÍпËÍÐÏØ| µÂÁî¹þÊÐ| ÑôË·ÏØ| ÅìºþÏØ| À³ÖÝÊÐ| µÂÑôÊÐ| ÈýÑÇÊÐ| ˾·¨| ³£ÖÝÊÐ| ÈýÃ÷ÊÐ| ´óÖñÏØ| ×ó¹±ÏØ| ƽÀûÏØ| Ûº£ÏØ|