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

一、PTA实验作业

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

1. 本题PTA提交列表

1231987-20171217143909249-1138072708.png

2. 设计思路

1231987-20171217152936702-610431611.png

3.代码截图

1231987-20171217143945889-1749077465.png

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

①第一次代码验证对后贴到pta上显示答案错误。
1231987-20171217160814843-1363413940.jpg
1231987-20171217160849889-822338722.png

②加两个0分的成绩,发现人数变多,平均分不变。
1231987-20171217161120155-883413284.png

③尝试改条件,发现答案更加离谱。
1231987-20171217162504389-1062911638.png1231987-20171217162526186-186910446.jpg1231987-20171217162542421-87127932.png

④在同学的帮助下循环条件修改,最后正确。
1231987-20171217143945889-1749077465.png

题目2.判断回文字符串

1. 本题PTA提交列表

1231987-20171217144158124-1146139007.png

2. 设计思路

定义i,j为循环变量,n存放字符串长度,flag为是否回文的标志
for i=0 to s[i]='\0'
    字符串长度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.代码截图

1231987-20171217144227780-550201040.png

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

①初步代码,答案错误。
1231987-20171217162901077-312115237.png

1231987-20171217162907311-1040345923.png

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

1231987-20171217164435874-1434195150.png

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

1. 本题PTA提交列表

1231987-20171217195732186-738107253.png

2. 设计思路

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

3.代码截图

1231987-20171217195742280-1643238099.png

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

①寻找开始复制的位置时,循环里的条件使用错误,导致输出答案错误。
1231987-20171217200524686-1624702172.png1231987-20171217200532249-98730025.png
①把i=0改为i=1后正确。

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

PTA排名

1231987-20171217165027827-1946974710.png

PTA提交列表

1231987-20171217165037983-1471264579.png
1231987-20171217165044061-1820894822.png
1231987-20171217165050264-155548839.png

三、阅读代码

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

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

四、本周学习总结

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.常见的字符串操作函数

1231987-20171218002329264-429621645.png

2.罗列本周一些错题。

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

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

1231987-20171217171622546-495921388.png

转载于:https://www.cnblogs.com/smtwula/p/8052234.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值