NEFU锐格作业四[结构体运用]
知识点
题目 | 知识点 |
---|---|
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;
}