C语言基础-循环与数组

目录

循环

while 循环:

for 循环:

do while 循环:

中断循环:

break

continue:

数组

数组:用来装一组数的类型。声明形式如下:

定义数组类型变量:

下标:即各元素的编号,编号从 0 开始

二维数组

二维数组初始化:

二维数组元素遍历:

字符数组:

常见赋值方式

字符数组的输入输出

单个字符输入输出(用格式符%c或字符输入函数)

字符串整体或部分输入输出(用格式符%s)

字符串输入函数gets

字符串输出函数 puts



循环

循环就是重复的执行一段代码

循环结构有三种:while 循环,for 循环,do while 循环

while 循环:

形式:
while(条件)
{
         code;
         //条件为真就重复执行
}
例题:
输出 1,2,3,4,5
        int i = 1;
        while (i <= 5)
        {
          printf("%d ", i);
          i++;
        }

注意点:
1.不要在小括号后面加分号
2.只有一条语句的时候可以不加大括号
3.条件恒为真的时候就是死循环

for 循环:

循环形式:
for (int i = 1; i<10; i++)
{
   code;
}

三要素:
要素 1、循环控制变量有初始值,即 i=1,初始值不一定是 1,根据需要来设置
要素 2、循环控制变量参与条件,即 i<10
要素 3、循环控制变量规律变化,比如 i++,i+=3,i--等等,按照规律变化,乱变不行
小括号内被两个分号分成三部分,分别是要素 1,要素 2,要素 3
举例:输出 1,2,3,4,5
int i;
for (i = 1; i <= 5; i++)
{
    printf("%d ", i);
}

do while 循环:

形式如下
int i = 1;
do
{
        printf("%d ", i);        
        i++;
}while(i <= 5);

//有分号
执行过程:先执行,后判断条件
用得比较少
对比:
while for 叫入口条件循环,二者用谁都行,习惯哪个用哪个,没有好坏。
do while 叫出口条件循环,该循环至少执行一次
初始循环条件为真时,三者用谁都行。初始循环条件为假时,for,while 一次都不执行,do while
执行 1 次。

中断循环:

break

举例如下:
int i = 1;
while (i <= 5)
{
        if (i==3)  //i==3 时中断跳出循环
        break;
        printf("%d ", i);
        i++;
}

执行过程:
1、i==1,i<=5 为真,执行循环,3 == i 为假,输出 i 即 1,然后 i++,i 变为 2
2、i==2,i<=5 为真,执行循环,3 == i 为假,输出 i 即 2,然后 i++,i 变为 3
3、i==3,i<=5 为真,执行循环,3 == i 为真,break 跳出循环

continue:

结束本次循环,跳到循环头,进行下一轮循环

如下:
int i;
for (i = 1; i <= 5; i++)
{
        if (i == 2 || i == 5)
        continue;
        printf("%d ", i);
}

执行过程:
0、i=1,i==1,部分 1 只执行一次
1、i==1,i<=5 为真,执行循环,if 条件为假,继续执行,输出 i 即 1
2、i++,i 变为 2,i<=5 为真,执行循环,if 条件为真,跳到循环头
3、i++,i 变为 3,i<=5 为真,执行循环,if 条件为假,继续执行,输出 i 即 3
4、i++,i 变为 4,i<=5 为真,执行循环,if 条件为假,继续执行,输出 i 即 4
5、i++,i 变为 5,i<=5 为真,执行循环,if 条件为真,跳到循环头
6、i++,i 变为 6,i<=5 为假,结束循环
练习:

用for循环 求出 1+2+3+4+5+6+....+666的和

数组

数组:用来装一组数的类型。声明形式如下:

int a[10]; //声明数组 a
int 表示该数组用来装 int 类型的元素,其他类型就写其他的,比如 double b[10];
a 是数组名字,是合法的 C 语言标识符即可(比如不能取scanf)
[ ]是指示的作用,表示变量 a 是数组变量,没有[ ]即 int a,就是普通的整形变量
10 表示该数组最多装 10 个 int 类型数据,个数自定。

定义数组类型变量:

int a[10] = {6,4,7,3,8,3,2,8,1,0}; //初始化形式,最多初始化 10 个元素
int a[10] = {6,4,7,3,8}; //初始化部分元素,其他元素默认初始化成 0
int a[10] = {0}; //10 个元素全部初始化 0
int a[ ] = {6,4,7,3}; //初始化时可不写元素个数,系统根据元素多少自定

下标:即各元素的编号,编号从 0 开始

int a[5] = {4,2,7,8,4};
5 个元素的标号依次是:0,1,2,3,4 最大下标是元素个数-1,即 5-1
元素访问:数组名[下标]
5 个元素依次是:a[0],a[1],a[2],a[3],a[4]
相当于 5 个变量,即变量名字,跟 int c = 9;的 c 的用法一模一样

二维数组

上面学习的叫一维数组,此时就是二维数组,对比定义如下:

int a[5];

//一维数组

int c[3][4]; //二维数组

一维数组:元素是数据类型的的数组

二维数组:元素是一维数组的数组,本质还是一维数组

c 是 3 个元素的一维数组,每个元素是 含有4个 元素的一维数组。

二维数组一般理解为行列,对初学者比较友好,int a[行][列],即 3 行 4 列,可抽象如下

二维数组初始化:

int a[3][2] = {{3,2},{6,5},{8,7}}; //内部大括号对应每个小一维数组
3 2
6 5
8 7
int a[3][2] = {{3},{9},{8,7}};
//初始化部分元素,其他默认 0
3 0
9 0
8 7
int a[3][2] = {3,9,8 };
//没有内部大括号,就依次初始化各元素,其他为 0
3 9
8 0
0 0
int a[ ][2] = {3,9,8};
//初始化时,可不写行,系统根据数据个数计算行,2 行
3 9
8 0
下标:行下标与列下标,都是从 0 开始
另一个角度
a[0]是第 1 个小数组的数组名字
a[1]是第 2 个小数组的数组名字
a[2]是第 3 个小数组的数组名字
第一个小数组的第一个元素就是 a[0][0]

二维数组元素遍历:

int i, j, a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };

for (i = 0; i < 3; i++)
    for (j = 0; j < 4; j++)
    {
       printf("%d ", a[i][j]);
    }
  
}

字符数组:

用来存放字符数据的数组是字符数组。

定义格式: char 数组名[常量];

例如:char ctr[6];     

常见赋值方式

           (1)char str[6]={"CHINA"};

           (2)char str[6]="CHINA";            //省略{}

           (3)char str[ ]="CHINA";            // 省略长度值

           (4)char c[12]={"HOW ARE YOU"};  
 

如果不手动加结束符,打印时会出错
比如:
char str3[3] = { 'f','f','f'};

 //c数组具有6个元素,可以存放长度小于或等于5的字符串。

为什么不能存放6个元素?

例如:char c[6]="hello";   在字符数组中是这样的

c[0]c[1]c[2]c[3]c[4]c[5]
hello\0

系统会自动在最后一位加上‘\0’,(字符串结束符)

如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')

字符数组的输入输出

单个字符输入输出(用格式符%c或字符输入函数)

#include<stdio.h>
int main()
{
    char c[5];
    int i;
    for(i=0;i<5;i++)
       scanf("%c",&c[i]);
    for(i=0;i<5;i++)
       printf("%c",c[i]);
    printf("\n");
    return 0;
}

//输入  :a bc

//打印  :   a bc

字符串整体或部分输入输出(用格式符%s

#include<stdio.h>
int main()
{
    char str[5];
    scanf("%s",str);
    printf("%s",str);
}

//输入  :a bc

//打印  :   a

原因:使用%s时,遇到空格,\n,\t都会直接在字符串末尾加结束符'\0',而输出时会遇到'\0'就结束

注意:使用%s时

  • 只能输入不包括空格、\t和\n的字符串
  • 若要输入空格,用gets函数
  • 自动加'\0'

字符串输入函数gets

格式:gets(字符数组)

功能:从键盘输入一个以回车结束的字符串放入字符数组中,并自动加'\0'

#include<stdio.h>
#include<string.h>
int main()
{
    char a1[10],a2[10];
    gets(a1);
    scanf("%s",a2);
    printf("a1=%s\n",a1);
    printf("a2=%s\n",a2);
}

字符串输出函数 puts

格式:  puts(字符数组)

功能:向显示器输出一个字符串(输出完,换行)

说明:字符数组必须以'\0'结束。可以包含转义字符。输出时'\0'转换成'\n',即输出字符后换行。

#include<stdio.h>
#include<string.h>
int main()
{
    char a[]={"china\ngood"};
    char b[]={"zhong\0guo"};
    puts(a);
    puts(b); 
    puts("CHINA");
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值