一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

3.代码截图

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

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

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

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

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

题目2.判断回文字符串

1. 本题PTA提交列表

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.代码截图

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

①初步代码,答案错误。

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

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

1. 本题PTA提交列表

2. 设计思路

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

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)++

posted on 2017-12-17 22:08  呜啦  阅读(643)  评论(1编辑  收藏  举报