第二章:流程控制与数组

一、顺序结构

顺序结构:程序从上到下一行一行的执行,中间没有人和判断和跳转。

二、分支结构

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxiaobukuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值