一.选择结构程序设计以及循环结构设计
1.if语句的使用
1).bool变量与“零值”比较
bool i = FALSE;
那么下面初始化什么比较好?
if( i == 0); if(i == 1) // 1 if( i == TURE); if( i == FALSE); //2 if(i); if(!i); //3
注意:大家知道if语句是靠其后面括号里表达式的值来进行分支跳转。表达式为真,则执行if语句后面紧跟的代码;否则不执行。那显然,第三组写法很好。不会引起误会,也不会因为TRUE,FALSE的不同定义值而出错。
当然,还有float变量和“零值”比较。指针变量与“零值”比较。大家可以自己研究。我在这里就不再讲述了。
2.while循环使用
1).讲述一个例子来剖析一下吧
#include int main() { int a = 1; int b = 2; int c = 2; int t; while (a < b < c) { t = a; a = b; b = t; c--; } printf("%d %d", a, c); system("pause"); return 0; }
分析一下结果会是什么?a的值为1,c的值为0;while循环也关注的是括号里面的值是否为真,那么a<b<c怎么分析,首先第一次进行判断,a为1,b为2,a<b为真,那么这个表达式的值为真(真为1,假为0),那么1<c,进入循环,同理进行第二次循环,最后算出结果。while循环需要注意的就是括号中的表达式中的值,如果写成while(1),那就是无限循环,读者可以尝试在while(1)中动态开辟内存,试试我说的话对不对。当然前提也可以使用break语句跳出或者return语句跳出循环。< p="">
3.for循环的使用
同样用一个例子来分析一下
#include int main() { int i = 0; int arr[10] = {0}; for (i = 0; i < 10; i++) { arr[i] = i; } for (i = 0; i < 10; i++) { printf("%dn", arr[i]); } system("pause"); return 0; }
当然这个程序是非常简单,但足以说明问题。当i = 10的时候会跳出循环。那么就很简单明了了。当然for循环也可以用while循环改写。
二.数组
数组是储存同一数据类型的一组有序的数据的集合。
数组中需要注意的点:
1.数组用循环语句赋值。同样是上面的for循环,可以自己试试将条件 i<10改为 i<11试试。程序会无条件的奔溃。因为你操作越界了,访问了不属于你自己的内存。
2.数组下标的操作。记住一点的就是,数组的下标是从0开始,并不是1!!!
3.数组和逗号表达式一起迷惑你。
#include int main() { int a[3][2] = { (0, 1), (2, 3), (4, 5) }; int *p = a[0]; printf("%d", p[0]); system("pause"); return 0; }
这个时候的p[0]等于1;为什么,不是应该是0?这就考到了逗号表达式,逗号表达式最后一个值才是整个表达式的值,那么上面的代码就变成了 int a[3][2] = {1,3,5};如果这样说,你是不是就会做对呢?
4.二维数组在内存中的存储
假如二维数组
int arr[3][3] = {0};
二维数组在内存中存储是线性的。我们可以用一维数组的方式来理解二维数组,上述代码代表的二维数组有三个元素,arr[0],arr[1],arr[2],同时每一个元素分别有三个元素,arr[0][0],arr[0][1],arr[0][2]...,那么可以这样理解arr[0],arr[1],arr[2],就是一维数组的数组名,只不过这三个一维数组是有联系的并且在内存中是连续开辟的。
同理我们可以推到三维数组直到n维数组。只要你有时间并且有毅力和决心(意义不大)。哈哈!!
5.字符数组
字符数组的赋值方式,为什么要提字符数组的赋值方式,本人认为这和字符串的操作息息相关,看看两种不同的赋值方式。
1).
char arr[]={'i',' ','a','m',' ','h','a','c','k','e','r'};
可以预见的是,没有‘