C语言数据结构问题
发布网友
发布时间:2022-04-30 08:32
我来回答
共3个回答
热心网友
时间:2022-04-10 02:11
当现有的数据类型,如int、char、float不能够满足你的需要时,你可以通过定义结构体来实现现有数据类型不能满足的问题。
如定义这样一个结构体:
typedef struct name
{
char a[25];
int chengji;
}JD;
JD stu[50];
这里就是定义一个结构体数组。其中每一个结构体数组元素(定义的结构体)都包含char的数据类型(它可以用来存储学生姓名)和int的数据类型(它可以用来存储学生的成绩)。这样的一个结构体数组便可以满足你的需要。看下面的:
结构体类型是C语言程序设计中处理表格数据的方法,通过结构体的定义、引用及处理,使学生掌握结构体数据类型的应用范围,处理方法,能用C程序设计对表格数据作各种不同的处理。
重点难点:结构类型的定义,程序方式下给结构体变量赋值,链表的定义及其它操作。
结构体类型概述:
结构体类型概念及定义
C语言中由前面定义的变量类型只是离散的,要想处理象数据库中那样的数据结构的数据,单用前面的变量是不行的。为了处理这些数据,C语言中可定义一种特殊的类型“结构体”,把一些不同的数据放在一起组成具有数据库库结构形式处理的数据。
如学生档案可包括姓名、性别、出生年月、四门课在成绩;
结构体类型的说明:
struct 结构体标识名 struct student
{ 类型名1 结构成名表1; {char name[12];
类型名2 结构成名表2; char sex;
…… struct date birthday;
类型名n 结构成名表n; float sc[4];
}; };
struct date {int year, month, day};
这样就定义了一个名为student的结构体
而结构体数组是这样的:
(1)结构体数组概述
数组元素是结构体类型的数组,称为结构体数组。与一般的数组一样,结构体数组具有数组的一切性质。
定义结构体数组的方法与定义结构体变量的方法类似,只是要多用一个方括号以说明它是一个数组,可以采用以下方法:
①先定义结构体类型,再用它定义结构体数组。例
struct stud_type
{ char name[20];
int age;
char sex;
struct date birthday;
long num;
float score;
};
struct stud_type student[30];
②在定义结构体数组的同时定义结构体数组。例:
struct stud_type
{ char name[20];
int age;
char sex;
struct date birthday;
long num;
float score;
} student[30];
(2)结构体数组的初始化
结构体数组的初始化,就是在定义结构体数组的同时,为结构体数组元素赋初值。
例:
struct stud_type
{ char name[20];
long num;
int age;
char sex;
float score;
} student[3]={{“wangli”,80101,18,’M’,89.5},
{“zhangfun”,80102,19,’M’,90.5},
{“liling”,80103,20,’M’,98}};
(3)结构体数组的应用
一个结构体数组的元素相当于一个结构体变量,因此前面介绍的关于结构体变量的规则也适合于结构体数组元素。
①引用某一元素中的一个成员
student[i].num
②可以将一个结构体数组元素赋值给同一结构体类型的数组中另一个元素,或赋值给同一类型的变量。例:
struct stud_type student[3],student1;
student1=student[0];
student[0]=student[1];
student[1]=student[2];
③不能把结构体数组元素作为一个整体直接进行输入或输出。
例4 输入3个学生的信息并打印出来。
#include <stdlib.h>
#include <stdio.h>
struct stud_type
{ long num;
char name[20];
int age;
char sex;
int score;
};
main()
{
struct stud_type student[3];
int i; char ch; char numstr[20];
for(i=0;i<3;i++)
{
printf("enter all data of student[%d]:\n",i);
scanf("%ld",&student[i].num);
getchar();
scanf("%s",student[i].name);
scanf("%d",&student[i].age);
getchar();
scanf("%c",&student[i].sex);
scanf("%d",&student[i].score);
}
printf("\nrecord name\t\t num age sex score\n");
for(i=0;i<3;i++)
printf("%6d %-13s%8ld%6d %3c %6d\n",i,
student[i].name, student[i].num,
student[i].age,student[i].sex,student[i].score);
}
运行情况如下:
enter all data of student[0]:
10 zhang 18 M 89
enter all data of student[1]:
11 wang 20 F 88
enter all data of student[2]:
12 li 19 M 80
record name num age sex score
0 zhang 10 18 M 89
1 wang 11 20 F 88
2 li 12 19 M 80
热心网友
时间:2022-04-10 03:29
构建结构
strcut student
{
char name[10];
float score;
};
void main()
{
student a[10];
for(int i=0;i<10;i++)
{
cout<<"input the "<<i+1<<" student's name and score:"<<endl;
cin>>a[i].name>>a[i].score;
}
for(i=0;i<10;i++)
for(int j=i+1;j<10;j++)
{
if(a[i].score>a[j].score)
{
student temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
cout<<"成绩升序排列结果:"<<endl;
for(i=0;i<10;i++)
{
cout<<a[i].name<<" "<<a[i].score<<endl;
}
}
热心网友
时间:2022-04-10 05:03
#include <stdio.h>
#include <stdlib.h>
struct student{
char name[20];
float sc;
};
int cmp(const void *a,const void *b)
{
struct student *c,*d;
c = (struct student*)a;
d = (struct student*)b;
if(fabs(c->sc-d->sc)<1e-6) return 0;
else if(c->sc>d->sc) return -1;
else return -1;
}
int main()
{
struct student test[10];
int i;
for(i=0;i<10;i++)
{
scanf("%s%f",test[i].name,&test[i].sc);
getchar();
}
qsort(test,10,sizeof(struct student),cmp);
for(i=0;i<10;i++)
printf("%s %f\n",test[i].name,test[i].sc);
return 0;
}
参考资料:自己敲的
C语言数据结构类型定义的问题
在C语言中,结构体struct指的是一种数据结构,是C语言中聚合数据类型aggregate data type的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员member,且这些成员可以为不同的类型,成员一般用名字访问。
数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...
C语言版的数据结构问题:数据结构和数据类型的关系?
数据结构 用 struct 定义 比如: struct A {int a, char b, A *p} *pA;那么A属于一个数据结构,a,b,p都属于数据元素。A的初始大小是四个字节,既元素最大的一个的空间。。。里面的成员同时存在,各自有各自的地址,互不干扰。既pA->a,pA->b,pA->p是可以同时存在滴。数据类型 用...
有关数据结构(C语言)的判断题?
1.错.链式存储逻辑上相邻的结点物理上不必相邻,逻辑上的前后顺序实际由指针实现.2.错.链式存储和顺序存储各有优点,适用的情况不同 3.正确.4.正确.5.正确.6.错.深度是指组成该树各结点的最大层次.7.错.叶子节点就没有子树,也可能有的节点有且只有一棵子树.8.正确.9.正确.10.正确....
C语言数据结构的一个基本问题
1 int read_2D_Array(int **array, int i, int j, int column)2 { //i row j column ,总行数为column 3 return((*(int*)array + i*column + j));4 } 以上函数的参数第一行的int **array是函数参数这个参数说明该函数参数列表一接收的数据类型为int ** 型的变量 ...
数据结构问题。。。c语言
main是入口函数,调用printN这个函数。所以,只要确保printN定义在main函数之前,或者是在main调用之前申明。都可以。所以,你可以排成:1、include <stdio.h> void printN(int n){。。。}//把代码放在main前面就不需要申明语句。int main(){ 。。printN(N)。。。} 2、include <stdio.h> vo...
C语言数据结构问题
如果子表为空表,表明查找失败。折半查找又称为二分查找。例如:一个有序顺序表为(9,23,26,32,36,47,56,63,79,81),如果要查找56。利用以上折半查找的思想。其中low和high表示两个指针,分别指向待查找元素的下界和上界,指针mid指向low和high的中间位置,即mid=(low+high)/2。将顺序...
关于数据结构的问题,用C语言描述
关于数据结构的问题,用C语言描述 60 1.设一函数f(x,y)=(1+A*(e^B/cosθ)*(1+C*(cosψ)^2),其中θ=(π*x)/180,ψ=(π*y)/180,参数A=-0.5,B=-0.4,C=-0.1。x从0变化到89,步长为1,y从0变化到359,步长为1。采用一种数据结... 1. 设一函数 f(x,y)=(1+A*(e^B/cosθ)*(1...
关于数据结构(C语言)的几个题
1.随意画几个二叉树就知道了,这里空链域用ε表示,数一数结点个数与ε个数就知道是n+1了 2.具体过程在图中给出。3.第一步将数据(假设为e)放入s的data中;第二步s的后继指向q的后继节点;第三步q的后继指向s 4.查找72只需2步:第一步:设立low、high与mid指针,将72与mid指向的值...
C语言问题(数据结构)
LNode *p=L->next 定义一个结构体指针p,使其指向L->next中记录的地址,假设L->next中记录的地址为0xA,此时p中的内容就是0xA。注意,这一行为是拷贝,即将L->next中的内容拷贝到p中;L->next=NULL 令L->next=NULL,此时L->next中记录的地址变为0x0,但这一操作并不影响到指针p,p中...