C语言博客作业--结构体

一、PTA实验作业。

题目1:6-3 结构体数组中查找指定编号人员

1.本题PTA实验结果

2.设计思路

struct student
{ char  num[10];
  int  year,month,day ;
};//该结构体表示人员的编号,和出生年月日
  struct student fun(struct student  *std, char  *num){
    定义变量i表示指针的指向,定义x=0来判断是否有此人员;
	定义结构变量 p,便于输出空串;
	for( i = 0 to 7
		if(*(std+i)).num和num相同的话){
			x=1;返回 *(std+i);
		end if;	
	if(x为0;p.num[0]='\0';返回 p;

3.代码截图

4.本题调试过程碰到问题及解决办法

  • 问题:指针std指向的值一直没变,就算写为std++也没变

  • 解决办法:将std++改为std+i

题目2:7-2 时间换算

1.本题PTA实验结果

2.设计思路

struct time {
	int hour;
	int minute;
	int second;
};结构体表示时间;
int main(){
	定义结构变量 clock来存放起始时间;
        scanf(时,分,秒);
	定义变量 n表示后来加的秒数;
	scanf(n的值);
	clock.second=clock.second+n;
	if(秒>=60){
		clock.second-60;
		clock.minute++;
		if(分>=60){
		        clock.minute-60;
			clock.hour++;
			if(时==24){
				clock.hour=0;
	定义变量i表示分别输出时,分,秒;
	定义变量x,y表示各时段的十位和个位;
	for(i=1 to 3
		if(i==1){
			x=clock.hour/10;y=;clock.hour%10)
			输出x,y
		else if(i==2){
			x=clock.minute/10;y=clock.minute%10;
			输出x,y);				
		else{
			x=clock.second/10;y=clock.second%10;
			输出x,y);				
                end if 
                 换行;

3.代码截图


4.本题调试过程碰到问题及解决办法

  • 碰到的问题:

    - ![](http://images2017.cnblogs.com/blog/1232112/201712/1232112-20171222231556256-112428017.png)用int来定义的话,输出的只为0.而不会为00;而换为字符变量的话太麻烦,不简便
    
    - ![](http://images2017.cnblogs.com/blog/1232112/201712/1232112-20171222232302412-743206224.png)当秒针不进位时,秒不会变,但其实是变的。
    
  • 解决办法:将时,分,秒分别输出两次,一次为输出十位,一次输出百位。

题目3:7-6 通讯录的录入与显示

1.本题PTA实验结果

2.设计思路

struct people{
	char name[11];
	char date[20];
	char sex;
	char gudingphone[81];
	char yidongphone[81];
};该结构体表示人的名字,出生年月日,性别,固定电话,手机号码。
int main(){
	定义N表示执行的次数;
	scanf(N);
	定义结构变量 std[81]来表示人员,便于存放其信息;
	定义变量i表示循环次数;
	for(i=0 to N-1
		scanf(人的名字,出生年月日,性别,固定电话,手机号码
	end if
	定义变量k表示人员的编号;
	scanf(k);
	定义变量i=0表示循环次数;定义变量j来判断是否有这个人;
	for(i=0 to k-1
		scanf(j
			if(输入的j有人员表示){
			输出(std[j].name,std[j].gudingphone,std[j].yidongphone,std[j].sex,std[j].date);				
		else{输出("Not Found\n");
         end if

3.代码截图

4.本题调试过程碰到问题及解决办法

  • 碰到的问题:

    • 没有输出No found!应该输出10次但只输出了五次就停止了,应该是程序到了极限而自动退出。
  • 解决办法:先让其输入一个数,然后直接判断是否有并输出,这样不仅避免了代码的复杂,也让输出更精确。

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

1.PTA排名

三、阅读代码(1分)

  • 7-2 时间换算:本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)

     - ![](http://images2017.cnblogs.com/blog/1232112/201712/1232112-20171223003550053-2023211052.png)
    
     - 通过结构体来输入起始时间,再输出终止时间。本代码的最大的优点是使用“%02d”,此代表了如果时,分,秒只有一位数时,那么就会自动在前面添上0.这个是自己没有学过的,而且他的代码很具有效仿性,比较直观简单的将此题的大意呈现出来。
    
  • 7-6 通讯录的录入与显示

     - ![](http://images2017.cnblogs.com/blog/1232112/201712/1232112-20171223004433443-1140687706.png)
    
     - 代码使用结构体并用结构体数组变量来赋值不同人员的信息,然后将所需的编号输出或者直接输出No found。他用数组把输入的编号输进去,再通过循环使每得出一编号就判断在结构体是否有这个编号然后输出所对应的东西。这代码直观地反映出他的思考方式,布局有条理,合理,不像我的代码有时候总是很混乱的,所以这就是我可以学习到的地方。
    

四、本周学习总结

1.总结本周学习内容

1.1函数的嵌套调用

在一个函数中再调用其他函数的情况称为函数的嵌套调用。这样可以将一个困难的问题分装成多个简单的函数,再通过一个函数中嵌套另一个函数实现函数的调用。
例如:

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;}

1.2组织函数的原则

  • (1)自顶而下:程序设计时,应先考虑总体步骤,研究这个程序需要做什么,怎么做,再考虑每个步骤需要做些什么,用作什么功能。

  • (2)逐步求精:对于复杂的问题,其中大的操作步骤应该分解关系构成了函数间的调用关系。

  • (3)函数实现:通过逐步求精,把程序要解决的大问题分解为多个小问题,最后通过解决不同的小问题来解决大问题。

1.3函数设计时应该注意的问题。

  • (1)限制函数的长度:一个函数的语句数不宜过多,即便于阅读,理解。也便于程序的调试;

  • (2)避免函数功能间的重复,以达到一处定义,多处使用的目的。

  • (3)减少全局变量的使用。只有当确实需要多个函数共享的数据时,才定义其为全局变量。

1.4递归函数的两个要点

递归出口和递归调用式子。

1.5结构体、共用体、枚举这种构造数据类型特点。

  • (1)结构体:结构体和数组一样都是构造型数据类型,和数组不同的是,结构体可以处理不同类型的数据。结构体有三种类型的数据,可以看出结构体里还可以有结构体类型、共用体的类型的数据。

  • (2)共用体:共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。

    - 共用体和结构体的区别:
    
          - 1.结构体每一位成员都用来表示一种具体事务的属性,共用体成员可以表示多种属性(同一存储空间可以存储不同类型的数据)。
    
          - 2.结构体总空间大小,等于各成员总长度,共用体空间等于最大成员占据的空间。
    
          - 3.共用体不能赋初值。
    
  • (3)枚举:枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。它和结构体、共用体的区别在于,枚举元素是常量,只能在定义阶段赋值

1.6递归函数原理

  • 递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。

  • 递归有两个基本要素:(1)边界条件:确定递归到何时终止,也称为递归出口。(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果

  • 一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:

    • (1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;

    • (2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;

    • (3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。

  • 在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。

2.罗列本周一些错题。

  • 实参是一个数组a[9]的地址,所以A,B的形参是对的,而C是指针,所以是指向这个地址,所以也是正确的,而D的是整型变量,所以错误。

  • 1。没有定义结构体变量,应加上emp[10];
    2.因为要换行而要加一个getchar()来存放换行符,防止换行符进入结构成员内;3.输入符应该加在emp[i]前,才能够正确输入.4.gechar()同样作为换行符。
    5.输出实发工资用‘基本工资+浮动工资-支出’而不只直接输出‘支出’。

posted @ 2017-12-23 15:03  烦呢,还要起名字  阅读(899)  评论(2编辑  收藏  举报