谁能给我详细解释一下关于C语言数据结构的
#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>
struct f //数据结构
{
double data;
struct f *next;
};
main()
{
int n;
scanf("%d",&n);
fun(n);
}
fun(n)
{
double y=0.00,x=1.00; //这里用双精度实数定义可以容纳更大的数据
struct f *head,*cthis,*a;
int number,i,j=0;
do{
a=(struct f*)malloc(sizeof(struct f));
if(head==NULL)
head=a;
else
{
cthis=head;
cthis=cthis->next;
}
cthis=a;
cthis->data=j; //这里定义存处在各个链表里的数据
//你可以用(int)rand()随机数来代替j
number=cthis->data;
for(i=0;i<j;i++)
x=x*n;
y+=number*x;
j++;
}while(j<n);
printf("%.0lf",y);
}
这是属于C语言数据结构那章的知识 然后呢帮我解释每一句话 包括里面含有的知识 例如指向
追问: 我这个还不是太懂 你先告诉我能运行吗
答案:#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>
struct f //定义一个名为f的结构体,该结构体由一个double类型的数据以及一个自身类型的指针组成,相当于一个节点。默认情况下struct中的数据都是共有属性外部可直接访问。
{//使用指针访问结构体内部的成员是a->data这种形式,而实例访问内部成员为a.data形式。
double data;
struct f *next;//虽然结构体f没有被完全定义,但是在这里可以声明f类型的指针,指针的大小由编译器的位数决定,一般为4个字节,在选定的编译环境下指针的大小是不会变的,所以这里可以使用未定义完成的f来声明指针。而不能够声明该类型的变量,由于大小未确定。
};
main()
{
int n;
scanf("%d",&n);
fun(n);
}
void fun(int n)
{
double y=0.00,x=1.00; //这里用双精度实数定义可以容纳更大的数据
struct f *head,*cthis,*a;//这里声明了f类型的三个指针,从命名上很好判断,这里的目的应该是组成一条链表,head为首指针,指向链表的首部。cthis为指向当前的指针。链表只要知道首节点就能够顺序访问所以首指针必不可少
int number,i,j=0;
do{//这边要开始构造链表了
a=(struct f*)malloc(sizeof(struct f));//使用malloc函数动态分配内存创建一个f类型的节点,并把地址给a
if(head==NULL)//如果首指针为空那么这第一个创建的节点就是首节点使用head指针指向它。
head=a;
else//若不是首节点,从头开始把新创建的节点链接到首节点后。
{
cthis=head;//如果要组成链表这句话不应该放在这里这样每次新的节点都不会被链到链表中
cthis=cthis->next;
}
cthis=a;
cthis->data=j;//这里定义存处在各个链表里的数据
//你可以用(int)rand()随机数来代替j
number=cthis->data;
for(i=0;i<j;i++)
x=x*n;
y+=number*x;
j++;
}while(j<n);
printf("%.0lf",y);
}
如果要组成链表,那么fun中应该修改该成:
if(head==NULL)
cthis=head=a;
else
{
cthis=cthis->next=a;
}
上一个:C语言中所有的代码及其代表的意思,有谁知道?
下一个:大家帮忙推荐几本C++或者C语言的书籍吧。