NEFU锐格作业四[结构体运用]

NEFU锐格作业四[结构体运用]

推荐:NEFU大一下C语言锐格实验与作业参考程序目录

知识点

题目知识点
7118结构体坐标,几何
7151结构体实现复数运算
7152结构体算面积
7119创建链表
7154链表头插法,删除节点
7153改变链表节点值

题目

7118

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 105

int n;
struct Graph
{
    double x,y;
}g[N];

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%lf%lf",&g[i].x,&g[i].y);
    double ans=0;
    for(int i=1;i<n;i++)
        ans+=sqrt((g[i].x-g[i-1].x)*(g[i].x-g[i-1].x)+(g[i].y-g[i-1].y)*(g[i].y-g[i-1].y));
    
    ans+=sqrt((g[0].x-g[n-1].x)*(g[0].x-g[n-1].x)+(g[0].y-g[n-1].y)*(g[0].y-g[n-1].y));
    printf("hl=%lf",ans);
    return 0;
}

7151

( a + b i ) ( c + d i ) = ( a c + b d ) + ( b c + a d ) i (a+bi)(c+di)=(ac+bd)+(bc+ad)i (a+bi)(c+di)=(ac+bd)+(bc+ad)i

#include<stdio.h>
#include<stdlib.h>

typedef struct Num
{
    double a,b;
} num;

int main()
{
    num A,B;
    scanf("%lf%lf%lf%lf",&A.a,&A.b,&B.a,&B.b);
    printf("%.2lf %.2lf",A.a*B.a-A.b*B.b,A.b*B.a+A.a*B.b);
    return 0;
}

7152

海伦公式太麻烦了
直接任意多边形面积公式即可
鞋带定理

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 105
struct Graph
{
    double x,y;
}G[N];
int main()
{
    for(int i=0;i<3;i++)scanf("%lf %lf",&G[i].x,&G[i].y);
    double ans=0;
    G[3].x=G[0].x;G[3].y=G[0].y;
    for(int i=0;i<3;i++)
        ans+=G[i].x*G[i+1].y-G[i+1].x*G[i].y;
    printf("%.2lf",fabs(ans)/2.0);
    return 0;
}

7119

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
    int data;
    struct Node * next;
}Lnode;

void CreatList_Tail(Lnode * H,int n)
{
    Lnode * p,* r;
    r=H;
    for(int i=0;i<n;i++)
    {
        p=(Lnode *)malloc(sizeof(Lnode));
        p->data=i;
        r->next=p;r=p;
    }
    r->next=NULL;
}

void PrintList(Lnode * H)
{
    Lnode * p;
    p=H->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main()
{
    int n;
    Lnode * H;
    scanf("%d",&n);
    H=(Lnode *)malloc(sizeof (Lnode));H->next=NULL;
    CreatList_Tail(H,n);
    PrintList(H);
    return 0;
}

7154

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

int cnt;//记录节点数量
typedef struct Node
{
    int data;
    struct Node * next;
}Lnode;

void CreatList_Head(Lnode * H)
{
    Lnode * p;
    int x;
    while(scanf("%d",&x)&&x>0)
    {
        ++cnt;
        p=(Lnode *)malloc(sizeof(Lnode));
        p->data=x;
        p->next=H->next;
        H->next=p;
    }
}

bool RemoveList(Lnode * H,int no)
{
    Lnode * p,* pre,* tmp,*last;//last用来处理删除最后一个节点
    pre=H;
    p=H->next;
    int idx=1;
    while(p!=NULL&&idx!=no)
    {
        ++idx;
        pre=p;
        p=p->next;
        if(idx==cnt)last=pre;
        
    }
    if(p==NULL&&no!=-1)return 0;
    if(no!=-1)
    {
        tmp=p;
        pre->next=p->next;
        free(tmp);
    }
    else
    {
        tmp=pre;
        last->next=NULL;
        free(tmp);
    }
    return 1;
}
void PrintList(Lnode * H)
{
    Lnode * p;
    p=H->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main()
{
    int x;
    Lnode * H;
    H=(Lnode *)malloc(sizeof (Lnode));H->next=NULL;
    CreatList_Head(H);
    scanf("%d",&x);
    bool f=RemoveList(H,x);
    if(!f)printf("Node not found!\n");
    PrintList(H);
    return 0;
}

7153

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

int cnt;
typedef struct Node
{
    int data;
    struct Node * next;
}Lnode;

void CreatList_Head(Lnode * H)
{
    Lnode * p;
    int x;
    while(scanf("%d",&x)&&x>0)
    {
        ++cnt;
        p=(Lnode *)malloc(sizeof(Lnode));
        p->data=x;
        p->next=H->next;
        H->next=p;
    }
}

void ChangeList(Lnode * H,int no,int x)
{
    Lnode * p;
    int idx=1;
    p=H->next;
    while(p!=NULL&&idx!=no)
    {
        ++idx;
        p=p->next;
    }
    if(p!=NULL)p->data=x;
}
void PrintList(Lnode * H)
{
    Lnode * p;
    p=H->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main()
{
    int x,n;
    Lnode * H;
    H=(Lnode *)malloc(sizeof (Lnode));H->next=NULL;
    CreatList_Head(H);
    scanf("%d%d",&n,&x);
    ChangeList(H,n,x);
    PrintList(H);
    return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值