C语言:学习笔记(二)

10. 一维数组排序的两种不同的方法

1 for (i=5;i>0;i--) 
2     for (j=0;j<i+1;j++) 
3         if (a[j]>a[j+1]) {
4             m=a[j];a[j]=a[j+1];a[j+1]=m;
5         }
1 for (i=0;i<5;i++)
2     for (j=i+1;j<6;j++)
3         if (a[i]>a[j]) {
4             m=a[i];a[i]=a[j];a[j]=m;        
5         }

运算步骤构成图:

11. 两数交换引入第三个量

 

12. 给字符数组赋值

如果赋值没有赋完,则需要在最末元素用 \0, 例如:char str[5]={'a', 'b', 'c', '\0'}; 如果赋全值,则\0可以省略。例如: char str[]={'n', 'j', 'm', 'w',};

字符串赋初值。char a[]="chinese"; 系统自动添加 \0。

char a[]={"chinese"} 也是对的。

char a[10]="China"; 这样的赋值只有在赋初值的时候才能出现,其他情况都会出现错误,例如 char a[10];    a="Chinese";

 

13.字符数组在内存中占有多少字符?

在内存中会用到数组长度+1个字符。

 

 14. 字符数组中,scanf("%s", a) 不再需要在字符数组名前加 &。因为a本身就是地址。

 

15. 当%s 遇到空格或者回车

printf("%s") 输出字符,直到遇到 \0为止,而sanf("%s") 遇到空格或者回车都属于数据的分隔符而不能被读入。

 

16. gets(字符数组) 和 puts(字符数组)

gets会把空格读入,直到遇到回车,在字符串后自动加上 \0。

puts输出字符串,直到遇到 \0。

 

17. strcat(字符串1, 字符串2)

 strcat()会找到第一个字符串末尾的 \0,然后用第二个字符串的头覆盖它。

第一个字符串要有足够的长度。否则不能容下第二个字符串。情况真是这样么?完全不是,只需要第一个字符数组有赋值,未赋值则会出现越界。那种情况只有在通过for循环实现粘合功能的时候。

注意:这里两个参数不能是字符串常量。例如:strcat("I am", "workers")

 

18. strcpy(字符串1, 字符串2)

把第二个字符串拷贝到第一个字符串中。

 

19. strcmp(字符串1, 字符串2)

按照ASCII比较两个字符串。内容和长度都要想等。

str1==str1:return 0

str1 > str2:return 正整数

str1 < str2:return 负整数

char a[3]={'a', 'b'}, b[2]={'a', 'b'};
if (strcmp(a, b) == 0) printf("OK");  /*答案是 "OK"*/

两个字符串数组长度不同,一个是3,另一个是2。但是它们在比较的时候,却相等。

 

20. strlen() 和 sizeof()

计算字符串中有意义的字符,不包括 \0 和 空字符(null)。那些没有被有效字符填充的数组元素。

 sizeof() 计算字符串数组在内存中的真实长度。

 

21 strlwr() 和 strupr()

变大写、变小写

 

22. 如果字符数组的长度大于所赋的值的长度。在printf()的时候,后面的空位不会出现,而是遇到 \0 就会停止。

 

 

 

 

 

posted @ 2012-04-13 02:18  CCJPP  阅读(737)  评论(1)    收藏  举报