一、顺序结构
顺序结构:程序从上到下一行一行的执行,中间没有人和判断和跳转。
二、分支结构
1、if条件语句
- (1)、if(表达式)语句。
例如:
int x = 1;
int y = 2;
if(x>y)printf("%d",x);
- (2)、if(表达式)语句1 else 语句2
例如:
int x = 1;
int y = 2;
if(x>y)
printf("%d",x);
else
printf("%d",y);
(3)、
if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
else if(表达式m)语句m
else 语句 n
在每个语句中,可以有多个语句,但需要加上大括号
例:
int x = 1;
int y = 2;
if(x>y){
printf("%d",x);
return;
}
2、switch分支语句
switch (表达式) {
case 常量表达式1:
语句1;
break;
case 常量表达式1:
语句2;
break;
......
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
注意:
第一:switch语句后expression表达式的数据类型只能是short、char、int、long等整型和枚举类型;
第二:省略case后代码块的break时,注意其所引入的陷阱。
三、循环结构
循环语句包括四部分
- 初始化语句(init_statements):一条或多条语句,这些代码用于完成一些初始化工作,初始化语句在循环开始之前执行。
- 循环条件(test_expression):这是一个boolean表达式,这个表达式能决定是否执行循环体。
- 循环体(body_statements):这部分是循环的主体,如果循环条件允许,这个代码块将重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。
- 迭代语句(iteration_statements):这部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使循环在合适的时候结束。
1、while语句
先判断循环条件(test_expression),如果条件为真才执行循环体
[init_statements],
while(test_expression){
statements;
[iteration_statements];
}
2、do switch语句
先执行循环体,然后才判断条件,如果循环条件为真,则这执行下一次循环,否则终止循环。
[init_statements];
do{
statements;
[iteration_statements];
}while(test_expression);
3、for循环
for([init_statements];[test_expression];[iteration_statements]){
statements;
}
四、控制循环结构
1、使用break结束循环
break:用于完全结束一个循环,跳出循环体,不管是那种循环,一旦在循环体中遇到break,系统讲完全结束改循环,开始执行循环之后的代码。
2、使用continue结束本次循环
continue:只是中止本次循环,接着开始下一次循环。可以理解成忽略当次的循环中剩下的语句,重新了开始一次新的循环。
3、使用return结束函数
return:结束一个函数,当一个函数执行到一个return语句时(return关键字还可以跟变量和表达式),这个方法将结束
五、goto语句
格式:goto 标签;
例1:
int i = 0;
start:
NSLog(@"i = %d",i);
i ++;
if (i < 10) {//如果i小于10,再次跳转到start标签处
goto start;
}
例2:
for (int i = 0; i < 5; i ++) {
for (int j = 0; j < 3; j ++) {
NSLog(@"i = 值为:%d,j的值为:%d",i,j);
if (j >= 1) {
goto outer;//调到outer标签处
}
}
}
outer:
;//标签后的分号代表一条空语句
六、数组
1、定义数组
数组赋初值的规则:
- (1)、所有整型(包括字符型)的数组元素,系统默认将它们赋值为0;
- (2)、所有浮点型的数组元素,系统默认将它们赋值为0;
- (3)、所有指针型的数组元素,系统默认将它们赋值为空。
例如:
int arr[5];
注意:元素的地址 = 首地址 + 数组变量所占的内存大小 *索引;
2、数组的初始化
int len = 5;
//定义数组,不执行初始化,系统为数组元素制定默认的初始值
int arr[len];
//定义数组时,指定长度,并且完整的指定了数组的5个元素
int arr2[5] = {2,3,45,544,321};
//只指定前面的3个数组 后面2个数组元素默认为0;
int arr3[5] = {2,3,45};
3、使用数组
注:
- (1)数组初始化完成后不能在对数组进行赋值;
- (2)数组索引是从0开始的,也就是arr[5]有5个元素 分别是arr[0],arr[1],arr[2],arr[3],arr[4];
- (3)计算数组的元素个数:sizeof(arr)返回整个数组占用的字节数;sizeof(arr[0]):返回第一个数组元素占用的字节数;相除就是数组元素的个数
int arr[5] = {2,3,40,300,450};
for (int i = 0;i <sizeof(arr)/sizeof(arr[0]); i ++) {
NSLog(@"arr[%d] = %d",i,arr[i]);
}
4、多维数组
二维数组的本质依然是一维数组,例如定义一个int arr[3][4],可以认为定义了一个长度为3的数组,其中每个数组元素又是长度为4的数组。以此可以推论到多维数组。
5、多维数组的初始化
以二维数组为例:
int arr[3][4] = {
{2,20,10,4},
{4,100,20,34},
{5,12,-12,-34}
};
//采用循环来遍历二维数组
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i ++ ) {
for (int j = 0; j < sizeof(arr[i])/sizeof(arr[i][0]); j ++) {
printf("%d\t",arr[i][j]);
}
printf("\n");
}
6、输出字符串和字符串函数
- (1)、%s用于输出字符串
char str1[] = "I Love iOS";
printf("%s\n",str1);
char str2[20] = "I Love iOS";
printf("%s\n",str2);
结果:
I Love iOS
I Love iOS
- (2)、int isalnum(int ch); //判断ch是否为字母或数字,如果ch是字母或数字,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isalnum(90));//返回1;
- (3)、int isalpha(int ch);//判断ch是否为字母,如果ch是字母,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isalpha('a'));//返回1;
- (4)、int iscntrl(int ch);//判断ch是否为控制字符(其ASCII码在0~0x1F之间),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",iscntrl(32));//返回0;
- (5)、int isdigit(int ch);//判断ch是否为控制数字(0~9),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isdigit('1'));//返回1;
- (6)、int isgraph(int ch);//判断ch是否为可打印字符(其ASCII码在0x21~0x7E之间),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isgraph(33));//返回1;
- (7)、int islower(int ch);//判断ch是否为小写字母(a~z),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",islower('A'));//返回0;
- (8)、int isprint(int ch);//判断ch是否为可打印字符,包括空格(其ASCII码在0x20~0x7E之间),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isprint(' '));//返回1;
- (9)、int ispunct(int ch);//判断ch是否为标点字符,如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",ispunct(','));//返回1;
- (10)、int isspace(int ch);//判断ch是否为空白字符,(包括空格、Tab键,换行符),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isspace(' '));//返回1;
- (11)、int isupper(int ch);//判断ch是否为大写字符(A~Z),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isupper('A'));//返回1;
- (12)、int isxdigit(int ch);//判断ch是否为十六进制字符(0~9或a~f或A~F),如果是,则返回代表真的1;否则返回代表假的0;
NSLog(@"%d",isxdigit(10));//返回0;
- (13)、char *strcat(char *str1,char *str2);//把str2添加到str1得后面,返回追加后的字符串。
char str1[] = "I Love";
char str2[] = " iOS";
strcat(str1, str2);
NSLog(@"%s",str1);
结果:
I Love iOS
注意 :保存str1字符串底层的数组必须还有足够的剩余空间来容纳复制的字符。
- (14)、char *strchr(char *str ,int ch);//返回ch第一次在str出现的位置
char str1[] = "I Love iOS";
NSLog(@"%s",strchr(str1, 'o'));
结果:
ove iOS
- (15)、int strcmp(char *str1,char *str2);//比较两个字符的大小,如果str1>str2,则返回正数;如果str1=str2,则返回0;如果str1
char str1[] = "I Love iOS";
char str2[] = "I Love iOS too";
NSLog(@"%d",strcmp(str1, str2));
结果 :
-32
- (16)、char *strcpy(char *str1,char *str2,[int n]);//将str2字符串的前 n个字符串复制到str1后面。如果没有指定参数n,则会将str2的全部字符复制到str1后面。
char str1[100];
char str2[100] = "I Love iOS too";
strcpy(str1, str2);
NSLog(@"%s",str1);
结果:
I Love iOS too
注意:解释貌似有误;不能对已经赋值的字符串赋值;
- (17)、unsigned int strlen(char *)str;//返回str字符串的个数(不包括结束标志).
char str[100] = "I Love iOS ";
NSLog(@"%lu",strlen(str));
结果:
11
- (18)、char *strstr(char *str1,char str2);//返回str2第一次在str1中出现的位置。
char str1[100] = "I Love iOS ";
char str2[] = "L";
NSLog(@"%s",strstr(str1,str2));
结果:
Love iOS
- (19)、int tolower(int ch);//返回ch字母对应的小写字母;
NSLog(@"%c",tolower('A'));
结果:
a
- (20)、int toupper(int ch);//返回ch字母对应的大写字母;
NSLog(@"%c",toupper('a'));
结果:
A