头歌C&C++ 面向过程编程综合练习

卢权
2023-12-01

第1关:最大值函数

int Max(int a,int b)
{
    /********* Begin *********/
    //找出两个参数中最大的那个并返回
    if(a>b)
    return a;
    else 
    return b;
    /********* End *********/
}

int Max(int a,int b,int c)
{
    /********* Begin *********/
    //找出三个参数中最大的那个并返回
    if(a>b)
    {
        if(a>c)
        return a;
        else 
        return c;
    }
    else 
    {
        if(b>c)
        return b;
        else
        return c;
    }
    /********* End *********/
}

第2关:计算阶乘

fact.cpp

int Fact(int n)
{
    /********* Begin *********/
    //使用递归计算 n 的阶乘
    if(n>1)
      return n*Fact(n-1);
    else 
      return 1;
    /********* End *********/
}

fact.h

/********* Begin *********/
//添加定义
#ifndef FACT_H_
#define FACT_H_

int Fact(int n);

#endif

/********* End *********/

第3关:求矩阵最大元素

int max(int *b)
{
    if(b[0]>b[1])
    {
        if(b[0]>b[2])
        return b[0];
        else 
        return b[2];
    }
    else if(b[0]<b[1])
    {
        if(b[1]>b[2])
        return b[1];
        else
        return b[2];
    }
}    

int MaxEle(int a[3][2],int *r,int *c)
{
    /********* Begin *********/
    //返回最大元素和它所在的行、列号
    int i,j,b[3];
    for (i=0;i<3;i++)
       {
           if(a[i][0]>a[i][1])
           b[i]=a[i][0];
           else if(a[i][0]<a[i][1])
           b[i]=a[i][1];
       }
    for(i=0;i<3;i++)
       for(j=0;j<2;j++)
       {
           if(a[i][j]==max(b))
           {
           *r=i+1;
           *c=j+1;
           }
       }
    return max(b);   
    /********* End *********/
    
}

第4关:使用链表进行学生信息管理

usr.h

#include <iostream>
using namespace std;


struct Linked
{
    /********* Begin *********/
    //结构体的成员变量
    int sid;
    float sco;
    Linked *next;
    /********* End *********/
};

Linked* Create()
{
    /********* Begin *********/
    //创建并返回一个新链表
    Linked* head=new Linked;
    head->next = NULL;
    return head;
    /********* End *********/
}

void InsertAfter(Linked *node,int num,float sc)
{
    /********* Begin *********/
    //在指定节点后插入一个新节点,内容由 num,sc 参数指定
    Linked* newnode = new Linked;
    newnode->sid=num;
    newnode->sco=sc;
    newnode->next=node->next;
    node->next=newnode;
    /********* End *********/
}

void DeleteAfter(Linked *node)
{
    /********* Begin *********/
    //删除此节点之后的一个节点
    node->next = node->next->next;
    

    /********* End *********/
}

Linked* GetByIndex(Linked *head,int index)
{
    /********* Begin *********/
    //返回指定索引处的节点
    head=head->next;

    if(index==0)
    {
        return head;
    }
    else
    {
        while(index--)
        {
            head=head->next;
        }
        return head;
    }
    /********* End *********/
}

void PrintAll(Linked *head)
{
    /********* Begin *********/
    //按格式打印此链表中所有节点的成员变量
    Linked* p=head->next;
    while(p)
    {
        cout<<p->sid<<" "<<p->sco<<endl;
        p=p->next;
    }
    
    /********* End *********/
}

run.cpp

#include "usr.h"

int main()
{
	int num;
	float score;
	cin >> num >> score ;
    Linked *lk = Create();
    InsertAfter(lk,num,score);
	cin >> num >> score ;
    InsertAfter(GetByIndex(lk,0),num,score);
	cin >> num >> score ;
    InsertAfter(GetByIndex(lk,1),num,score);
    DeleteAfter(GetByIndex(lk,0));
    PrintAll(lk);
}

 类似资料: