zoukankan      html  css  js  c++  java
  • C博客作业04-数组

    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 C博客作业04--数组
    这个作业的目标 学习如何设计函数、C语言基本数据类型
    姓名 胡旻轩

    0. 展示PTA总分

    1. 本章学习总结

    1.1 学习内容总结

    数组:就是只能存放一种数据类型,比如int类型的数组、float类型的数组,里面存放的数据称为“元素”

    数组的定义:

    首先声明数组的类型,然后声明数组元素的个数(也就是需要多少存储空间)

    格式: 元素类型 数组名[元素个数];

    比如: int[3];

    数组元素有顺序之分,每个元素都有一个唯一的下标(索引),而且都是从0开始

    数组元素的访问: a[i]

    数组元素的初始化:

    • int a[3] = {10, 9, 6};

    • int a[3] = {10,9};

    • int a[] = {11, 7, 6};

    • int a[4] = {[1]=11,[0] = 7};

    #include<stdio.h>
     
    int main()
    {
        //数组的定义格式: 类型 变量名[元素个数];
        //int ages[5];
        
        //数组的赋值方式:
        /*
        ages[0] = 12;
        ages[1] = 19;
        ages[2] = 14;
        ages[3] = 26;
        ages[4] = 18;
         */
        
        //int ages[5] = {[2] = 14,[3] = 26};
        //int ages[5] = {12,19};
        int ages[5] = {12,19,14,26,18};
        
        //错误写法:
        //int ages[];
        //错误写法
        //int ages[5];     只能在定义数组的时候进行初始化
        //ages = {12,19,14,26,18};
        //错误写法,如果想在定义数组的同时进行初始化,数组元素个数必须是常量或者不写
        //int ages[count] = {12,19,14,26,18};
        
        /*数组的遍历,按顺序查看数组的每一个元素*/
        
        //1.for循环遍历
        for (int i = 0; i <5; i++)
        {
            printf("ages[%d] = %d
    ",i ,ages[i]);
        }
        
        
        
        return 0;
    }
    

    [ ]里面的个数必须是一个固定值,可以是常量(比如6、8)、常量表达式(比如3+4、5*7)。绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要省略元素个数
    (当数组作为函数的形参和数组初始化时除外)

    C语言中编译器是不会对数组下标越界进行检查的,所以自己访问数组元素时要注意。<

    一维数组与函数参数:

    一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参

    数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组

    修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

    二维数组的定义:

    一个数组能表示一个班人的年龄,如果想表示很多班呢?

    什么是二维数组?int ages[3][10]; 三个班,每个班10个人,相当于3行10列,相当于装着3个一维数组

    二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素

    定义形式: 类型 数组名[ 行数] [列数]

    int  a[2][3];   //2行3列的二维数组
    

    二维数组的存放顺序是按行存放的,先存放第一行的元素,再存放第2行的元素。例如int a[2][3]的存放顺序是:a[0][0] → a[0][1] → a[0][2] → a[1][0] → a[1][1] → a[1][2]

    2. PTA实验作业

    2.1 7-7 数组循环左移

    2.1.1 伪代码

    分别输2个整数代表数组中数字个数和左移位置

    for 循环输入数组的值

    for 重复每次向左移动

    嵌套for 将数组右移一位

    输出数组第一个数

    for 循环输出剩下的数

    2.1.2 代码截图

    2.1.3 找一份同学代码比较

    和陈宇航同学进行代码比较:

    #include <stdio.h>
    #define MAXN 100
    
    int ArrayShift( int a[], int n, int m );
    
    int main()
    {
        int a[MAXN], n, m;
        int i;
    
        scanf("%d %d", &n, &m);
        for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    
        ArrayShift(a, n, m);
    
        for ( i = 0; i < n; i++ ) {
            if (i != 0) printf(" ");
            printf("%d", a[i]);
        }
        printf("
    ");
    
        return 0;
    }
    
    int ArrayShift(int a[], int n, int m)
    {
    	for (int i = 0; i < m; i++)
    	{
    		int temp = a[n - 1];
    		a[n - 1] = a[0];
    		for (int A = 0; A < n - 2; A++)
    		{
    			a[A] = a[A + 1];
    		}
    		a[n - 2] = temp;
    	}
        return 1;
    }
    

    总结:虽然主题的思路都差不多,但是宇航同学进行了更为系统的代码封装,动用函数的思维,让整个代码更加标准化和专业化,这份思维值得我们的学习。

    2.2 7-14 找鞍点

    2.2.1 伪代码

    定义a[] 定义函数GetPoint(int a[][N], int n)
    for 读入数据 end for
    在函数中
    定义maxindex
    for
    index=0
    判断每一行中的最大值
    并把下标给maxindex
    end for
    for
    让列等于index
    判段该数是否是该列最小的
    end for
    若内循环执行一遍输出结果
    若外循环执行一遍则输出NONE

    2.2.2 代码截图

    2.2.3 请说明和超星视频做法区别,各自优缺点

    这题在自己开始着手的时候,并没有什么思路,自己每次尝试也是以失败告终,没有一个测试点可以过得去,因此就利用超星视频进行了学习,所以总体思路就是利用超星视频内的思路。

    2.3 7-6 切分表达式——写个tokenizer吧

    2.3.1 伪代码

    定义字符串str[50]
    定义变量i 控制循环
    定义flag

    输入字符串fgets
    加入循环for (i = 0; str[i] != ' '; i++)

    判断:if(第一个地方就是第一个字符是正负号时)

    判断:if(如果是数字或者小数点的话判断下一位是否是小数点或者数字)

    else if(负数的判断 前一位是数字还是其他符号)

    else if(正数的判断 数字前一位是不是‘(’)

    2.3.2 代码截图

  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/Inevitable/p/14130379.html
Copyright © 2011-2022 走看看