007_stdc_C语言基础

qscool 2020-05-17

回顾:
1. continue; break;
跳出一次循环
break 跳出整循环

2. 多重循环
3. while do while
while(条件) //循环次数不确定
{

}

for 带次数的循环

do while(); 先执行一次循环体里面的语句 在判断条件
for或者 while 先判断条件再确定是否执行循环体语句

4. goto 在同一函数进行跳转

5. 数组
1.用于存储一组同一类型数的容器
2.定义数组 需要数据名 类型,还需要知道容纳元素的个数.
int arr[5];
3. 系统为数据分配连续的存储空间
5 * 4 = 20;

4.对数组元素的访问,可以通过数组名(数组首地址) + 偏移 来访问该数组其他元素的内容
arr[0] 第一个元素
arr[1]

arr[] 数据类型
[] 下标运算

跟循环一起使用,通过循环读写数组里面的内容
arr[0] = 10;
arr[1] = 10;
arr[2] = 10;
arr[3] = 10;
arr[4] = 10;

arr[0] 等价于 变量
int i;
&i
&arr[0] ??

----------------------

/*
 * 彩票
 *   去重复相同的数字
 */
#include <stdio.h>
//#include <windows.h>
#include <stdlib.h>
#include <time.h>
int main(){
    int a[7];
    srand(time(0));
    int flag = 1;

    while(flag)
    {
        flag = 0;
        for(int i = 0;i<7;i++)
        {
            a[i] = rand()%32+1;  //1 - 32 
        }

        for(int i = 0;i<7;i++)
        {
            printf("a[%d] = %d\n",i,a[i]);  //1 - 32 
        }

        for(int j = 0;j<7;j++)
        {
            for(int i =j+1;i<7;i++)
            {
                if(a[j]  == a [i])
                {
                    printf("数字重复\n"); 
                    flag =1;
                    break;
                }
            }

            if(flag ==1)
                break;
        }

    }
    getchar();
    return 0;
}

      数组的初始化

 //int a[5] = {0};    //所有元素初始化0
// int a[5] = {2};   //所有元素初始化a[0]=2 其他0
//    int a[5] = {0,1,2,3,4};//元素初始化0,1,2,3,4
//    int a[5] = {0,1,2};//元素初始化前三个0,1,2
//C99
//    int a[5] = {[1]=1,[4]=5};//元素初始化下标1=1,下标4=5
    int a[] = {0,1,2,3,4};//初始化5个元素0,1,2,3,4

将a 内容 复制 到 b
输出 b

#include <stdio.h>
int main(){
     char a[]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘ ‘,‘W‘,‘o‘,‘r‘,‘l‘,‘d‘,‘!‘};
     char b[12]={0};
     for (int i=0;i<12;i++)
     {
         b[i] = a[i];
         printf("%c",b[i]);
     }
    getchar();
    return 0;
}

将a 内容 复制 到 b (去掉空格
输出 b

#include <stdio.h>
int main(){
     char a[]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘ ‘,‘W‘,‘o‘,‘r‘,‘l‘,‘d‘,‘!‘};
     char b[12]={0};
     for (int i=0;i<12;i++)
     {
         if (a[i] != 32)
         {
             b[i] = a[i];
             printf("%c",b[i]);
         }
     }
    getchar();
    return 0;
}
/*
 * 查看数组的地址
*/
int a[5] = {0};

    printf("a = %p\n",&a);
    printf("a[0] = %p\n",&a[0]);
    printf("a[1] = %p\n",&a[1]);
    printf("a[2] = %p\n",&a[2]);
    printf("a[3] = %p\n",&a[3]);
    printf("a[4] = %p\n",&a[4]);

a = 0055F88C
a[0] = 0055F88C
a[1] = 0055F890
a[2] = 0055F894
a[3] = 0055F898
a[4] = 0055F89C

可变长数组(
不能初始化


可变长数组 C99 
int n = 3;
n = 5;

int a[n]; //在定义数组时 跟据变量 确定 数组长度

 (Windows不支持)

007_stdc_C语言基础

/*
 * C99 支持的可变长数组
 * [练习] 使用可变数组
 *      先输入 学员个数n
 *      为这n学员 申请 n个数组元素 存放录入他们的成绩
 *
 *      录入完后 打印 他们的成绩 和平均 成绩(考虑是小数)
 */

linux系统下

/*
 * C99 支持的可变长数组
 * [练习] 使用可变数组
 *      先输入 学员个数n
 *      为这n学员 申请 n个数组元素 存放录入他们的成绩
 *
 *      录入完后 打印 他们的成绩 和平均 成绩(考虑是小数)
 */
#include <stdio.h>

int  main(){

    int n = 0;
    //int a[n] = {0};  不能初始化

    //printf("数组元素个数:%d\n",sizeof(a)/sizeof(a[0]));

    printf("输入新n值:");
    scanf("%d",&n); //0  5

    int a[n];// {0};   一般是局部变量
    printf("数组元素个数:%d\n",sizeof(a)/sizeof(a[0]));

    for(int i = 0;i<n;i++)
    {
        printf("输入一个学员的成绩:");
        scanf("%d",&a[i]); //a[5]  
        //printf("a[%d] = %d\n",i,a[i]);
    }

    float sum  = 0;
    for(int i = 0;i<n;i++)
    {
        sum = sum + a[i];
        printf("a[%d] = %d\n",i,a[i]);
    }

    printf("平均成绩= %f\n",sum/n);
    return 0;
}

多维数组
定义
int a[5][5] 二维数组

int a[5][5][3] 三维数组

/*
 * 二维数组的定义
 * 初始化
 */
    int a[3][3];   //3*3 9个元素
    int a[3][3] ={{3,3,3},{3,3,3},{3,3,3}};   //3*3 9个元素
/*
 *    1   2   3
 *    2   4   6
 *    3   6   9
 */
#include <stdio.h>
int main(){
    int a[3][3];
    for (int j=0;j<3;j++)//j 表示 第几排
    {
        for (int i=0;i<3;i++)
        {
            a[j][i] = (j+1) * (i+1);
        }
    }
    for (int j=0;j<3;j++)//j 表示 第几排
    {
        for (int i=0;i<3;i++)
        {
            printf("%d ",a[j][i]);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

1 1 1
2 2 2
3 3 3

//a[j][i] = (j+1) * (i+1);
a[j][i] = (j+1);
/*
 * 练习
 *      已知 数组 a[3][3] 所有元素赋初始值 3
 *      已知 数组 b[3][3] 所有元素赋初始值 4
 *      a = a*b
 *      a[0][0] = b[0][0]  * a[0][0];
 *      a[0][1] = b[0][1]  * a[0][1];
 *
 *      打印a数组的值
 */
#include <stdio.h>
int main(){
    int a[3][3] ={{3,3,3},{3,3,3},{3,3,3}};   //3*3 9个元素
    int b[3][3] ={{4,4,4},{4,4,4},{4,4,4}};   //3*3 9个元素
    for (int j =0;j<3;j++)
    {
        for (int i=0;i<3;i++)
        {
            a[j][i] = a[j][i] * b[j][i];//对应的数组下标相乘再放到对应的A数组下标
            printf("a[%d][%d] = %d ",j,i,a[j][i]);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

a[0][0] = 12 a[0][1] = 12 a[0][2] = 12
a[1][0] = 12 a[1][1] = 12 a[1][2] = 12
a[2][0] = 12 a[2][1] = 12 a[2][2] = 12

/*
 *
 * [练习]
 *      1.声明一个int 4*4 二维数组
 *      int a[4][4] = {0}; //初始化整个数组为0
 *
 *      2.在数组的随机一个位置赋值2
 *         y =  rand()%4  -->0 - 3
 *         x =  rand()%4  -->0 - 3
 *         a[y][x]  = 2;
 *
 *      3. 打印出a 数组
 *
 *      4. 绘制输出内容
 *
 */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    int a[4][4] ={0}; 
    srand(time(0));
    int x = rand()%4;
    int y = rand()%4;
    a[x][y] = 2;
    printf("+----+----+----+----+\n");
    for (int i=0;i<4;i++)
    {
        for (int j=0;j<4;j++)
        {
            printf("|%4d",a[i][j]);
        }
        printf("|\n");
        printf("+----+----+----+----+\n");
    }
    getchar();
    return 0;
}
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+
|   0|   0|   0|   2|
+----+----+----+----+
|   0|   0|   0|   0|
+----+----+----+----+

添加移动游戏(向上)

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    int a[4][4] ={0}; 
    srand(time(0));
    int x = rand()%4;
    int y = rand()%4;
    a[x][y] = 2;
    while (1)
    {
        system("cls");
    printf("+----+----+----+----+\n");
    for (int i=0;i<4;i++)
    {
        for (int j=0;j<4;j++)
        {
            if(a[i][j] == 0)  //0 用空格替换
            {
                printf("|    "); 
            }else{
                printf("|%4d",a[i][j]);
            }
        }
        printf("|\n");
        printf("+----+----+----+----+\n");
    }
    printf("|    k              |\n");
    printf("|h<--+-->l          |\n");
    printf("|    j              |\n");
    printf("+----+----+----+----+\n");
    char cmd = 0; 
    scanf("%c",&cmd);
    scanf("%*[^\n]");
    scanf("%*c");
    switch (cmd)
    {
    case ‘k‘ :
        for (int i=3;i>0;i--)//遍历第四排开始
        {
            for (int j=0;j<4;j++)//遍历列数
            {
                if (a[i-1][j] == 0)//如果第三排的对应元素等于0
                {
                    a[i-1][j] = a[i][j];//把第四排开始将对应的元素拿到上一排
                    a[i][j] = 0;//拿走之后赋值为0
                }else{
                    if (a[i-1][j] == a[i][j])
                    {
                        a[i-1][j] = 2*a[i][j];//如果对应元素相等,合并
                        a[i][j] = 0;//拿走之后赋值为0
                    }
                }
            }
        }
        x = rand()%4;
        y = rand()%4;
        a[x][y] = 2;
        break;
    case  ‘h‘ :
        printf("左移动\n");
        break;
    case  ‘j‘ :
        printf("下移动\n");
        break;

    case  ‘l‘ :
        printf("右移动\n");
        break;

    default :
        printf("输入错误\n");
        break;
    }
  }
    getchar();
    getchar();
    return 0;
}

添加移动游戏(向上2)如果随机的位置还没有值才赋值 do...while()

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    int a[4][4] ={0}; 
    srand(time(0));
    int x = rand()%4;
    int y = rand()%4;
    a[x][y] = 2;
    while (1)
    {
        system("cls");
    printf("+----+----+----+----+\n");
    for (int i=0;i<4;i++)
    {
        for (int j=0;j<4;j++)
        {
            if(a[i][j] == 0)  //0 用空格替换
            {
                printf("|    "); 
            }else{
                printf("|%4d",a[i][j]);
            }
        }
        printf("|\n");
        printf("+----+----+----+----+\n");
    }
    printf("|    k              |\n");
    printf("|h<--+-->l          |\n");
    printf("|    j              |\n");
    printf("+----+----+----+----+\n");
    char cmd = 0; 
    scanf("%c",&cmd);
    scanf("%*[^\n]");
    scanf("%*c");
    switch (cmd)
    {
    case ‘k‘ :
        for (int i=3;i>0;i--)//遍历第四排开始
        {
            for (int j=0;j<4;j++)//遍历列数
            {
                if (a[i-1][j] == 0)//如果第三排的对应元素等于0
                {
                    a[i-1][j] = a[i][j];//把第四排开始将对应的元素拿到上一排
                    a[i][j] = 0;//拿走之后赋值为0
                }else{
                    if (a[i-1][j] == a[i][j])
                    {
                        a[i-1][j] = 2*a[i][j];//如果对应元素相等,合并
                        a[i][j] = 0;//拿走之后赋值为0
                    }
                }
            }
        }
        do 
        {
            x = rand()%4;
            y = rand()%4;
        } while (a[x][y] != 0);//如果得到的随机位置已经有值,继续循环得到随机坐标
        a[x][y] = 2;//的到为空的值的随机坐标,赋值
        break;
    case  ‘h‘ :
        printf("左移动\n");
        break;
    case  ‘j‘ :
        printf("下移动\n");
        break;

    case  ‘l‘ :
        printf("右移动\n");
        break;

    default :
        printf("输入错误\n");
        break;
    }
  }
    getchar();
    getchar();
    return 0;
}

007_stdc_C语言基础

007_stdc_C语言基础

 
 
 
 
 
 
 
 
 
 
 
 

相关推荐