结构

一、PTA实验作业(5分)

题目1:计算两个复数之积

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

struct complex{
int real;
int imag;
};//该结构体表示复数的实部和虚部
struct complex multiply(struct complex x, struct complex y){
定义变量product用于存放一个结构体变量以便返回
product.real=x.realy.real-x.imagy.imag;//计算实数
product.imag=x.realy.imag+x.imagy.real;//计算虚数
返回product至主函数;
}

3.代码截图

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

1.该题中的product要自己定义,不能直接利用主函数中的变量,因为没有传过来
2.实数的运算应该还要减去虚数乘以虚数的数字部分

题目2: 有理数比较

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

        struct number{
	float kid,mother;
        }a1,a2;//该结构体表示一个分数的kid(分子)和mother(分母)
        输入a1的分子和分母
	输出a1(分子/分母)
	定义单浮点变量one,two
        one=a1.kid/a1.mother;
	two=a2.kid/a2.mother;
	如果one和two大小相等  输出=;
	如果one大于two  输出>;
	如果one小于two  输出<;
	输出a2(分子/分母)
        }

3.代码截图

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

1.大于和小于弄反了
2.分子分母要定义浮点型,同时one、two忘了用浮点

题目3: 计算职工工资

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

        struct worker{
	char name[10];
	float basic,floats,payment;
	float realmoney;
        };//该结构体用于存放基本工资,浮动工资,支出工资和实际工资以及员工名字
        定义计算实际工资的函数 calc(struct worker *p,int n);
        int main(){
	定义n存放员工人数;
	输入n;
	struct worker worker_s[n];
	i定义i=0用于循环
	for i=0 to i=n-1
		scanf("%s",worker_s[i].name);
		scanf("%f",&worker_s[i].basic);
		scanf("%f",&worker_s[i].floats);
		scanf("%f",&worker_s[i].payment);
	end for
	调用函数calc(worker_s,n);
	for    i=0   to   i=n-1
		printf("%s ",worker_s[i].name);
		printf("%.2f\n",worker_s[i].realmoney);
	end for
	}
        函数:float calc(struct worker *p,int n){
	定义i用于循环
	for      i=0 to i=n-1
		(*(p+i)).realmoney=(*(p+i)).basic+(*(p+i)).floats-(*(p+i)).payment;
	end for
        }

3.代码截图

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

1.指针*(p+i)外面还需要一个括号,多次漏掉
2.工资要保留小数,忘记了

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

三、阅读代码

题目1:N个人围成一圈,然后给一个数字M,每次数到M的自杀,问最后自杀的人是谁

        #include<iostream>  
        using namespace std;  
        int main()  
        {  
            int N;//人的总个数  
            int M;//间隔多少个人  
  
            cin>>N;  
            cin>>M;  
  
            bool *p=new bool[N+1];//[1……N]为true表示此人还活着  
            for (int i=1; i <= N; i++)  
                *(p+i)=true;  
      
            int count=0;//统计自杀的人数  
  
            for (int i=1, j=0; ;i++)//i用来表示循环,j用来计算是不是第N个人  
            {  
                if (*(p+i))//此人还活着  
                {  
                    j++;  
                    if (j == M)  
                    {  
                        *(p+i)=false;  
                        j=0;  
                        count++;//统计自杀的人  
                    }  
                    if (count == N)  
                    {  
                        cout<<"最后自杀的人是:"<<i<<endl;  
                        break;  
                    }  
                }  
  
                if(i == N)  
                    i=0;  
            }  
  
            delete []p;  
      
            return 0;  
          }  

点评:这是目前还不理解的约瑟夫环模型,先让所有人都是ture,然后从i=0开始数,数到M后这个人挂了,令j++,count,接下去数,知道count=N,即死去的人等于总人数时,跳出,找到最后一个人

题目2:有黑白棋子各有N个(分别用*和O代替),按下图方式排列

    ***...***OOO...OOO

        N个黑棋            N个白棋

允许将相邻两个棋子互换位置,最后使队形成黑白交替排列,试编程实现该操作。

             #include<stdio.h>
            #define MAX 20
            char state[MAX*2+1];
            void Move(int start, int end)
            {
            while( end > start )
            {
                    int tmp = state[end];
                    state[end] = state[end-1];
                    state[end-1] = tmp;
                    puts(state);
                    --end;
                }
            }
            int Solve(int n)
            {
            int i;
            puts(state);
            for(i=1;i<n;++i)
                Move(i*2-1,n+i-1);
            }
            int main(void)
            {
            int i,n;
            scanf("%d",&n);
            for(i=0;i<n;++i)
                state[i] = '*';
            for(i=n;i<n*2;++i)
                state[i] = '0';
            state[i] = '/0';
            Solve(n);
            }

运行结果
点评:本题利用两个函数,一个MOVE:把第end位置的棋子交换到第start位置,其他棋子依次向后移动一个位置,一个Solve:用于调用MOVE的一个函数,实现了黑白颠倒的功能,如果将这些代码全部放在主函数中就会很乱,很难写,而放在函数中则十分清晰。

四、本周学习总结(1分)

1.总结本周学习内容。

1.1 什么是结构体

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合

1.2定义一个结构的一般形式为:

struct 结构名
{
成员表列
};
使用时可以在上面分号前面加变量,也可以在函数内在定义

1.3注意事项

要加分号

1.4结构体和枚举区别

枚举类型默认为是int类型,并默认为从0,1,2,3...递增排序,也可为属性赋值,也可改变枚举类型的int类型

1.5结构体和联合

结构体来存放一组不同类型的数据,联合是共用一个共用体

1.6递归函数原理

递归就是函数直接调用自己或通过一系列调用语句间接调用自己

2.罗列本周一些错题


错误点:getchar没写出来。
答案:

错误点:数据有不同类型没答出来

posted @ 2017-12-19 12:27  林怡鹏  阅读(314)  评论(2编辑  收藏  举报