• C语言第九次博客作业---指针


    一、PTA实验作业

    题目1.统计大于等于平均分人数

    1. 本题PTA提交列表

    2. 设计思路

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    ①第一次代码验证对后贴到pta上显示答案错误。

    ②加两个0分的成绩,发现人数变多,平均分不变。

    ③尝试改条件,发现答案更加离谱。

    ④在同学的帮助下循环条件修改,最后正确。

    题目2.判断回文字符串

    1. 本题PTA提交列表

    2. 设计思路

    定义i,j为循环变量,n存放字符串长度,flag为是否回文的标志
    for i=0 to s[i]=''
        字符串长度n++; 
    end for 
    for i=0,j=n-1 to i>j
        if 是回文字符串 
    	    flag=1;
    	else 
    	    flag=0;跳出循环;
    end for
    if flag为1 
        是回文字符串
    else 
        不是回文字符串
    
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    ①初步代码,答案错误。

    ②验证发现问题。只要有一组字符相等,就有flag=1,因此判断到中间如果发现不是回文字符串应该令flag=0。

    题目3.使用函数实现字符串部分复制

    1. 本题PTA提交列表

    2. 设计思路

    定义循环变量i;
    for i=1 to m
        开始的位置t++;
    end for
    while(*t)
        字符复制到字符串s中;
        t递增;
    结束符*s='';
    
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明

    ①寻找开始复制的位置时,循环里的条件使用错误,导致输出答案错误。

    ①把i=0改为i=1后正确。

    二、截图本周题目集的PTA最后排名。

    PTA排名

    PTA提交列表



    三、阅读代码

    • 1.删除字符串中的子串
      分析:这段代码中采用了四种字符串操作函数:strcpy, strcat,strstr,strlen;利用strstr在字符串a中查找字符串b首次出现的地址,利用strcpy得到删除b字符串后得到的后面的字符串赋值到数组c中,再利用strcat把字符串c连接到a使a成为包含c和a的结果串。循环以上步骤。
      优点:巧妙地运用了字符串操作函数,使原本复杂的代码变得较简单。

    • 2.字符串的冒泡排序
      分析:通过strcmp函数比较前后两个字符串,利用了strcpy函数的复制功能做到了字符串冒泡的效果,输出扫描完第K遍后的中间结果序列。
      优点:运用字符串操作函数来表现字符串冒泡的效果,比较巧妙。

    四、本周学习总结

    1.自己总结本周学习内容。

    1.什么是结构?结构与数组有什么差别?

    • 结构是C语言中一种新的构造数据类型,它能够把有内在联系的不同类型的数据统一成一个整体,使它们相互关联;又是一个变量的集合,可以按照对基本数据类型的操作方法 单独使用其成员变量。
    • 结构与数组的比较:①都是构造类型,是多个变量的集合;②数组成员类型相同,结构成员类型不同。

    2.结构类型的定义形式

    2.1结构类型定义的一般形式

    struct 结构名{
        类型名 结构成员名 1 ;
        类型名 结构成员名 2 ;
        …
        类型名 结构成员名 n ;
    };
    

    注:
    ①struct是定义结构类型的关键字
    ②结构名是一个合法的C标识符
    ③关键字和结构名组成结构类型名。
    ④大括号内的内容是结构所包括的结构成员,也叫结构分量。
    ⑤结构的定义以分号结束。

    2.2结构的嵌套定义

    struct address{   //定义地址结构
        char city[10];
        char street[20];
        int code;
        int zip;
    };
    struct nest_student{
        int num;
        char name[10];
        struct address addr;   //定义通信地址成员
        int computer,english,math;
        double average;
    };
    

    注:定义嵌套的结构类型时,必须定义成员的结构类型定义主结构类型

    2.3.用typedef定义类型

    • 方法一:先定义结构体类型,再使用typedef为之取一个别名。
    struct student{
        int num;
        char name[10];
        struct address addr;   
        int computer,english,math;
        double average;
    };
    typedef struct student STU;
    
    • 方法二:定义结构体类型的同时使用typedef为之取一个别名,并且不省略结构体标识名。
    typedef struct student{
        int num;
        char name[10];
        struct address addr;   
        int computer,english,math;
        double average;
    }STU;
    
    • 方法三:定义结构体类型的同时使用typedef为之取一个别名,并且省略结构体标识名。
    typedef struct {
        int num;
        char name[10];
        struct address addr;   
        int computer,english,math;
        double average;
    }STU;
    

    3.结构变量的定义

    • 1.单独定义:先定义一个结构类型,再定义这种结构类型的变量。
    struct 结构名{
        类型名 结构成员名 1 ;
        类型名 结构成员名 2 ;
        …
        类型名 结构成员名 n ;
    };
    
    • 2.混合定义:在定义结构类型的同时定义结构变量。
    struct 结构名{
        类型名 结构成员名 1 ;
        类型名 结构成员名 2 ;
        …
        类型名 结构成员名 n ;
    }结构变量名表;
    
    • 3.无类型名定义:在定义结构变量时省略结构名。
    struct {
        类型名 结构成员名 1 ;
        类型名 结构成员名 2 ;
        …
        类型名 结构成员名 n ;
    }结构变量名表;
    

    4.结构变量的使用

    4.1.结构变量的成员的引用

    • 格式:结构变量名.结构成员名
      例:
      strcpy(s1.name,"zhang");
      ②嵌套结构:nest_s1.add.zip=310015;//表示学生的通信地址的邮编
      注:
      ①嵌套定义的结构变量中,每个成员按从左到右,从外到内的方式引用。
      ②结构成员成员运算符的优先级属最高级别,所以一般情况下都是优先执行,即和一般运算符混合运算时,结构成员运算符优先。

    4.2.结构变量的整体赋值

    注:只有相同结构类型的变量之间才可以直接赋值。
    例:s2=s1;等效于

    s2.num=s1.sum;
    strcpy(s2.name,s1.name);//数组
    s2.math=s1.math;
    s2.english=s1.english;
    s2.computer=s1.computer;
    s2.average=s1.average;
    

    4.3.结构变量作为函数的参数特点

    • 特点:可以传递多个数据且参数形式较简单。但是,对于成员较多的大型结构,参数传递时所进行的结构数据复制使得效率较低。、

    5.结构数组操作

    • 结构数组的每个数组元素都是一个结构类型的数据。
    • 定义:struct student students[50];
    • 初始化:struct student students[50]={{101,"zhang",76,85,78},{102,"wang",83,92,86} };
    • 引用:结构数组名 [下标].结构成员名
      例:字符型数组:strcpy(students[i].name,"zhang");

    6.结构指针概念

    • 结构指针就是指向结构类型变量的指针。
    • 结构指针的值实际上时结构变量的首地址,即第一个成员的地址。
    struct student s1={101;"zhang",78,87,85},*p;
    p=&s1;
    
    • 访问结构成员
      (1)用*p访问结构成员
      (*p).num=101;
      注:括号不能少。因为“.”优先级高于“*”,若没有括号,*p.num等价于*(p.num),含义发生变化,会产生错误。
      (2)用指向运算符->访问指针指向的结构成员
      p->num=101;
      注:在使用结构指针访问结构成员时,通常使用指向运算符->。

    7.常见的字符串操作函数

    2.罗列本周一些错题。

    • 应该在sum+=*s后加上‘0’才能将字符串中的数字字符转换成对应数值

    • 图中圈出来的一处表示的应该是n所指向的内容递增,而不是地址自增,应该是(*n)++

  • 相关阅读:
    .net发送邮件
    关于innerhtml的解释
    ASP.NET如何进行性能优化的问题,看一老兄的建议!【转】
    深入理解xLua热更新原理
    VS2010中的ListView的BUG
    asp,jsp,php等web开发必懂技术什么时候使用静态页,什么时候必须使用动态页
    IIS7虚拟目录出现HTTP错误500.19(由于权限不足而无法读取配置文件)的解决方案
    IIS错误信息另一个程序正在使用此文件,进程无法访问!
    CSS3图片展示效果
    一个简单的返回顶部效果
  • 原文地址:https://www.cnblogs.com/smtwula/p/8052234.html
Copyright © 2020-2023  润新知