小杰学C(six day)——少年当有凌云志,万里长空竞风流

1.循环语句

(1)do_while

格式:

定义循环变量并赋值;

do

{

语句块;

增值或减值语句;

}while(表达式);

死循环:

for(;;){}

while(1){}

// 让程序卡死在这等

while(1);

循环控制语句

        break:直接结束循环

        continue:结束本次循环,继续下次循环

使用场景:

        使用在循环语句中,结束循环

        使用时需要有判断条件

如:

#include

int main(int argc, char const *argv[])

{

        for(int i = 1; i <= 5; i++)

        {

                if(i == 3)

                // break;

                continue;

                printf("%d\n", i);

        }

return 0;

}

2.数组

(1)一维数组

1.有序

2.集合

        格式:

存储数据类型  数组名[元素个数]

如: int arr[5]

其中arr为数组名,且为元素首地址,arr为地址常量,不能被赋值。

数组元素的访问

访问元素:数组名[下标];下标从0开始

访问第一个元素:arr[0]

访问第n个元素:arr[n-1]

初始化

三种类型:

1.全部初始化:int arr[3] = {1, 2, 3};

2.部分初始化:int arr[3] = {1, 2};

3.未初始化:随机值,在进行代码书写时需要单个赋值

int arr[3];

定义空数组

1.可以全部初始化

        int arr[5] = {0, 0, 0, 0, 0};

2.可以部分初始化

        int arr[5] = {0};

3.

        int arr[5] = {};

引用

1.先定义后引用

2.每次只能引用一个数组元素arr[下标],如果想要引用所有元素可以循环遍历

3.引用时防止数组越界,虽然有时编译器不会报错

4.打印数组元素地址用%p格式

注意:每个数组元素的位数都比其对应坐标少一;其次注意越界,数组开辟的空间为定义的元素个数。

如:arr[5]中的第三位元素的下标为2,其下标是从0开始的。

*特别注意*:遇见数组就想到循环,特别是for循环,常常循环变量作为数组下标,用for循环遍历

数组的大小

  1. 数组元素个数*数据类型大小
  2. sizeof(数组名);

        int arr[5] = {};

        printf("%d\n", sizeof(arr));

计算元素的个数:

  1. 直接观察
  2. sizeof(数组名) / sizeof(数据类型)

清零函数

  1. bzero

#include

void bzero(void *s, size_t n);

功能:将内存空间设置为0

参数:s:要清空空间的首地址

n:字节大小

返回值:无

#include
#include
int main(){
    int arr[5] = {1, 2, 3, 4, 5};
    int i;
    bzero(arr, sizeof(arr));
    for(i=0;i<5;i++){
        printf("%d", arr[i]);  //0 0 0 0 0  数组被清空
    }
    return 0;
}
        2.memset

#include

void *memset(void *s, int c, size_t n);

功能:将内存空间设置为0

参数:s:要清空空间的首地址

        c:要清空的值,设置为0

        n:字节大小

返回值:

#include
#include
int main(){
    int arr[5] = {1, 2, 3, 4, 5};
    int i;
    memset(arr, 0, sizeof(arr));
    for(i=0;i<5;i++){
        printf("%d", arr[i]);  // 0 0 0 0 0  数组被清零
    }

}

3字符数组

数组中存放字符,元素为字符。

(1)使用形式

1.

// 元素个数没有书写的时候,就会以后面实际的元素数量去开辟空间

char c[] = {'a', 'b', 'c'};

char ch[] = {}; // 大小为0,随便加入一个元素就会越界

2.

char str[] = {"hello"}; // 用字符串赋值 sizeof(str) = 6

3.

char ch[] = "abc" // 用字符串赋值 sizeof(str) = 4

printf("%c\n", ch[0]);

4.

char c[32] = "hello"; // 用字符串赋值 sizeof(str) = 32

注意:字符串赋值常常会省略数组长度,需要注意数组越界问题;其次定义的空间大于元素个数时,后边多余空间自动补零。

(2)字符数组的输入输出

        输入

char s[32] = {};

  1. scanf("%s", s);

输入的字符串不能含有空格,因为scanf输入字符串遇到空格或\n都会认为字符串输入结束,空格后面的内容就不会存放到数组里面

如果我们需要输入空格就按以下格式输入

scanf("%[^\n]", s) // 知道输入\n才结束

        2.遍历输入字符

char str[32] = {}

int i;

for(i = 0; i < 32; i++)

{

scanf("%c", &str[i]);

}

        3.gets

char *gets(char *s)

功能:从终端输入字符串

参数:s:目标字符数组的首地址(数组的名字)

返回值:目标字符数组的首地址

gets(s); // gets在输入不关心数组越界问题,使用时会报警告

        输出

  1. printf("%s\n", s);
  2. for(i = 0; i < 32; i++)

printf("%c\n", str[i]);

      3. puts

int puts(const char *s);

功能:向终端输出字符串

参数:s:要输出字符串的首地址

返回值:输出字符的个数

计算字符串的实际长度

1.for循环遍历数组,直到\0为止;

#include
int main(){
    char str[32] = {"hello"};
    int len = 0;
    for(len=0;str[len]!='\0';len++){
        prinitf("%d\n", len);
    }
    return 0;
}

2.strlen

#include

size_t strlen(const char *s);

功能:计算字符串的实际长度(不包含\0)

参数:s:要计算的字符串的首地址

返回值:字符串的实际长度

sizeof(str); // 32 计算的是整个数组的大小,不是实际的个数

#include
#include
int main(){
    char str[32] = {"hello"};
    int len = strlen(str);
    printf("%d\n", len);
    return 0;
}

你可能感兴趣的:(c语言,c++,算法)