程序设计主要是结构的设计,其中结构主要有:顺序结构、选择结构、循环结构。
顺序结构:没有标识符,直接粗暴的些代码,一步一步执行就可;
选择结构:即可选择,数学中的可选择分为连续、间断,其中连续有if,间断用switch;
循环结构:多次重复使用的数据的精简语句,有for,while,do……while;
下面以多个结构分别进行代码说明。
选择结构
if表达式 | switch表达式 |
if(表达式1) 语句1 else if(表达式2) 语句2 else 语句3 | switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; …… case 常量表达式n: 语句n; break; default: 语句n+1; } |
连续 y = x x > 0 | 离散 y = x x = 1 |
// 测试条件语句
void test01(int y, int x) {
// if语句
if(x > 0) y = x;
else if(x = 0) y = 0;
else y = -x;
// switch语句
switch(x) {
case 1: y = x; break;
case 0: y = -9; break;
case -1: y = -x; break;
default: exit(0);
}
}
循环结构
for | while | do……while |
for(表达式1; 表达式2; 表达式3) 语句 | while(表达式) 语句 | do 语句 while(表达式) ; |
功能更强 | 至少执行一次 |
用三种循环将快排写一下
for循环
void test02_for(char *arr, int left, int right) {
char *i, *j, *k;
char value;
if(left < right) {
i = j = arr + left;
value = *(arr + left);
for( ; i< arr + right; i++) {
//printf("%c, %c\n", value, *i);
if( value < *i) {
*j = *i;
j++;
for( k = i; k > j; k--) *k = *(k - 1);
*k = value;
}
//printf("%s\n", arr);
}
test02_for(arr, j - arr + 1, right);
test02_for(arr, left, j - arr);
}
}
while循环
void test02_while(char *arr, int left, int right) {
char *i, *j, *k;
char temp;
if(left < right) {
i = j = k = arr + left;
temp = *(arr + left);
//printf("%c,%c,%d,%d\n",*i, temp, left, right);
while( i < arr + right) {
if( *i < temp ) {
//printf("%c,%c,%s\n", temp, *i, arr);
*j = *i;
j++;
k = i;
while( k > j) {
*k = *(k-1);
k--;
}
*k = temp;
}
i++;
}
test02_while(arr, left, j - arr);
test02_while(arr, j - arr + 1, right);
}
}
do……while循环
void test02_doWhile(char *arr, int left, int right) {
char *i, *j, *k;
char temp;
if(left < right) {
i = j = k = arr + left;
temp = *(arr + left);
//printf("%c,%c,%d,%d\n",*i, temp, left, right);
do{
if( *i > temp ) {
//printf("%c,%c,%s\n", temp, *i, arr);
*j = *i;
j++;
k = i;
while( k > j) {
*k = *(k-1);
k--;
}
*k = temp;
}
i++;
} while( i < arr + right);
test02_doWhile(arr, left, j - arr);
test02_doWhile(arr, j - arr + 1, right);
}
}
将三个函数进行调用
// 测试循环语句 -- 快排
void test02() {
void test02_for(char *arr, int left, int right);
void test02_while(char *arr, int left, int right);
void test02_doWhile(char *arr, int left, int right);
char str[N] = {'4', '5', '3', '6', '2', '7', '8', '0', '9', '1'};
printf("%s\n", str);
test02_for(str, 0, N); // for由大到小排序
printf("%s\n", str);
test02_while(str, 0, N); // while由小到大排序
printf("%s\n", str);
test02_doWhile(str, 0, N); // do……while由大到小排序
printf("%s\n", str);
}
输入结果如下: