`
v5qqcom
  • 浏览: 1286801 次
文章分类
社区版块
存档分类
最新评论

对C语言结构体知识点的学习以及复习相关基础知识

 
阅读更多

(一)结构体数组

#include <iostream>
struct student{
int number;
char name[10];/*注意字符变量的定义,是定义成字符变量,还是字符串变量呢?char name; 与后面的初始化"tang"字符串不一致*/
int code;
}studen[3]={1,"tang",99,2,"tangzhong",89,3,"hua",88};
void main ()
{
for(int i=0;i<3;i++)
{
printf("number=%d ,name= %s ,code=%d",studen[i].number,studen[i].name,studen[i].code );
/*在程序没有错误的时候一定要考虑到输出格式上的错误,开始写成了
printf(%d number= %c name= 这里面有两个错误,一个是%d的位置写错了,造成输出 1 number=,tang name=的格式
另一个错误是%c是字符格式,并不是字符串格式。。请注意*/
printf("/n");
}
getchar();
}
/*这个程序重点学习了结构体数组的初始化,以及结构体变量的引用
学习笔记:
1、结构体定义只是一种数据结构,类似于类CLASS形式的一种数据结构,并不是存在的实体,只是一种自定义的类型
2、结构体变量是这种类型的变量,就像是int n中的n一样只是一个变量,它的值可以像变量一样改变
3、结构体数组是和一般数组类似,只是它的每个元素都具有结构体的结构。

4、得到的想法是:
进一步思考到用结构体去实现线性结构的链表,及其对链表的建立,结点的建健、查找、删除、插入等综合操作。。自己写出这个程序,那么我们的结构体知识点及数据结构的还有相关的基础知识也就撑握得差不多了。我认为是这样的。。所以近来加大了上机力度和时间。。

(二)指向结构体类型数据的指针

/*指向结构体类型数据的指针*/
#include<iostream>
main()
{
struct student
{
long num;
char name[20];
char sex;
float score;
};
struct student stu_1;//定义一个结构体变量stu_1;
struct student *p; //定义一个指向struct student 结构体类型的指针变量p
p=&stu_1;//结构体变量的地址赋给变量p,使指针P指向结构体变量stu_1;
stu_1.num=891001;
strcpy(stu_1.name,"lilin");//注意一个问题,字符串不能直接赋给变量,要用strcpy函数把字符串copy到字符数组里面去!
//上面的这个strcpy(stu_1.name,"lilin");不能写成stu_1.name="lilin"编译会出错
stu_1.sex='M';//字符变量(不是字符串数组)可以直接赋值,但是注意引号是单引号,不能写成这样stu_1.sex="M";
stu_1.score=89.5;
printf("No. :%ld/nname:%s/nsex:%c/nscore:%f/n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
printf("No. :%ld/nname:%s/nsex:%c/nscore:%f/n",(*p).num,(*p).name,(*p).sex,(*p).score);
getchar();

}
/* 首先对指针进行复习:
1、指针变量的定义

(三)指向结构体数组的指针

(四)用结构体变量作函数的指针

/*结构体变量作函数参数*/
#include<iostream>
#define FORMAT "%d/n%s/n%f/n%f/n%f/n"//这里采用了宏不错的想法!方便,记得引用时也要大写。。
//而且后面的参数类型要对上哦!
struct student //结构体类型struct student 被定义成外部类型,同一源文件中的函数都可以用它
//定义结构体变量的类型
{
int num;
char name[20];
float score[3];
};
main()
{
void print(struct student); //声明print函数
struct student stu; //定义结构体student的变量stu;
//给结构体成员赋值
stu.num=12345;
strcpy(stu.name,"lili");
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;
print(stu);//调用print函数,参数传递是传递结构体变量stu
getchar();
}
void print(struct student stu)//由于结构体struct student被定义为外部类型,所以print函数也可把形参stu定义为struct student类型
{
printf(FORMAT,stu.num ,stu.name,stu.score[0],stu.score[1],stu.score[2]);
printf("/n");
}

(五)用指向结构体的指针作函数参数

/*用指向结构体变量类型的指针作函数的参数*/

#include<iostream>
#define FORMAT "%d/n%s/n%f/n%f/n%f/n"//这里采用了宏不错的想法!方便,记得引用时也要大写。。
//而且后面的参数类型要对上哦!
struct student //结构体类型struct student 被定义成外部类型,同一源文件中的函数都可以用它定义结构体变量的类型
{
int num;
char name[20];
float score[3];
}stu={1245,"lili",67.5,89,78.6};

main()
{
void print(struct student *p); //声明print函数(+++++ void print(stuct student *) 也没有错,也正确++)
print(&stu);//调用print函数,参数是地址,传给print函数的形参指向结构体变量类型的指针P
getchar();
}
void print(struct student *p)//由于结构体struct student被定义为外部类型,所以print函数也可把形参stu定义为struct student类型
{
printf(FORMAT,p->num ,p->name,p->score[0],p->score[1],p->score[2]);
printf("/n");
}

/**学习笔记
有三点值得注意的问题
1、struct student结构体被定义成外部类型,属全局类型,同一源文件中的所有函数都可以用来定义这种结构的变量
2、用指向结构体类型的指针当函的参数的时候,要注意在函数的声明或定义中,要说明形参的类型void print(struct student *p);或void print(struct student *);
3、注意这样的写法
scanf("%d%s%f%f%f",&stu.num,stu.name,&stu.score[0],&stu.score[1],&stu.score[2])
这里面的stu.name前面没有&符号,因为name是一个字符数组,它本身就是地址,所以不用加

用指针作函数的参数,能提高运行效率。。。。。。。。。。。。。。。。。。。。。。。。

(六)用结构体实现简单链表

#include <iostream>
#define NULL 0
struct student
{long num;
float score;
struct student *next;
};
main()
{
struct student stu_1,stu_2,stu_3;//定义了三个结构体struct student 变量
struct student *head,*p;
head=&stu_1;//让head指针指向链表的第一个结点;
stu_1.num=99901;stu_1.score=89.5;stu_1.next=&stu_2;
stu_2.num=99902;stu_2.score=87.6;stu_2.next=&stu_3;
stu_3.num=99903;stu_3.score=88.4;stu_3.next=NULL;
p=head;//P指向第一个结点
for(int i=0;i<3;i++)//用FOR循环,因为我已知道有多少个结点,null这个值没有用上。当不知道有多少结点的时候,要用循环while
{
printf("num=%ld,score=%f/n",p->num ,p->score );
p=p->next;//第一个结点数据输出后,让P指向第下一个结点
};
getchar();
}

/*这是一个静态链表,完全由自己从头书写,
学习笔记:
1、最后的链表输出是已知链表结点数,所有用了FOR循环
最好应该用while循环
do
{
printf("num=%ld,score=%f/n",p->num ,p->score );
p=p->next;//第一个结点数据输出后,让P指向第下一个结点
while(p!=NULL);
*/

学好了这些东西,才可以进行动态链表的程序设计。。。

分享到:
评论

相关推荐

    2024新版c语言基础知识点,全新内容c语言基础知识点

    本文为你提供了2024年最全面的C语言面试题集锦,覆盖了从基础到高级的各类C语言知识点。内容涉及C语言的基本结构、数据类型、变量和常量、运算符、控制语句、函数、数组、指针、结构体和联合体等基础概念,以及动态...

    计算机二级C语言知识点复习资料,精简版

    计算机二级c语言资料**计算机二级C语言知识点复习资料:考试者的必备指南** **内容概要:** 本文为计算机二级C语言考试者提供了全面的知识点复习资料,旨在帮助他们顺利通过考试。内容涵盖了程序设计基础、控制结构...

    新手小白学习C语言笔记推荐,适合零基础编程的小白也适合有一定的基础的同学,可以学习C语言的基本知识和复习

    C语言初级阶段的相关概念和知识点,可以帮助初学者更深层次的学习C语言的基础,帮助新手小白更快的入门,C语言是学习编程最基本的语言,掌握好C语言的知识点,对于学习其他的编程语言就会相对于轻松,因为大多数的...

    C语言知识点总结完美版

    本资源适用于初学者、大学生学习C语言课程的学生,以及需要复习巩固C语言基础知识的职业开发者。尤其适合准备参加C语言相关考试,或者想要系统性提高C语言编程能力的读者。 使用场景及目标: 1. 学习场景:在校学生...

    C语言进阶学习资料,关于预处理,文件处理,结构体,位移运算的学习 大学生期末复习资料,程序设计课程复习资料

    期末复习:资料提供了详尽的知识点回顾和案例分析,帮助学生巩固课堂学习内容,为期末考试做好充分准备。 项目开发:通过实际案例讲解如何在项目中应用预处理指令、文件操作、结构体定义和位运算,提升实战能力。 ...

    2024年计算机二级c语言复习资料

    本文为计算机二级C语言考试者提供了全面的知识点复习资料,旨在帮助他们顺利通过考试。内容涵盖了C语言的基本概念、数据类型、控制结构、函数、数组、指针、结构体、文件操作等核心知识点,以及备考策略、考试技巧和...

    个人C语言知识点笔记总结-pdf版

    我相信,如果你认真阅读这份笔记,再结合自己一定的相关练习,差不多能够掌握C语言的基础知识,为期末考试、专升本考试等打下坚实的基础。当然,这份笔记也可以作为巩固复习的资料,对于初学者来说也有一定的参考...

    个人C语言知识点笔记总结-md版

    我相信,如果你认真阅读这份笔记,再结合自己一定的相关练习,差不多能够掌握C语言的基础知识,为期末考试、专升本考试等打下坚实的基础。当然,这份笔记也可以作为巩固复习的资料,对于初学者来说也有一定的参考...

    个人C语言知识点笔记总结-word版

    我相信,如果你认真阅读这份笔记,再结合自己一定的相关练习,差不多能够掌握C语言的基础知识,为期末考试、专升本考试等打下坚实的基础。当然,这份笔记也可以作为巩固复习的资料,对于初学者来说也有一定的参考...

    个人C语言知识点笔记总结-语雀文档版

    我相信,如果你认真阅读这份笔记,再结合自己一定的相关练习,差不多能够掌握C语言的基础知识,为期末考试、专升本考试等打下坚实的基础。当然,这份笔记也可以作为巩固复习的资料,对于初学者来说也有一定的参考...

    《C语言程序设计》课程期末样卷7份,2023第一学期《C语言程序设计》期末复习资料

    《C语言程序设计》样卷涵盖的知识点包括以下几个方面。 C语言基本概念:包括变量、数据类型、符、控制语句等基本概念。 C语言基本语法:包括函数、数组、指针、结构体等基本语法特性。 C语言程序设计:包括程序设计...

    C语言课件-赵岩

    曾哈工大老师赵岩讲C语言课程的课件, 赵岩老师著有《C语言点滴》, 风趣幽默, 适合入门同学学习! Area.zip C语言总复习.pptx C语言推荐书籍.ppt 第0讲-概述.pdf ...第8讲-指针的基础知识.pdf 第9讲-指针的应用.pdf

    全国计算机二级考试资料

    强调的是,我们认真记忆公共基础知识才不会在考试中处于被动的地位,如果想要战胜公共基础这一战,我们不得不而且至少把课本的知识点看两遍。看的多得到的多!试想,30分的公共基础你能够拿多少分,如果我们只要及格...

    传智播客扫地僧视频讲义源码

    07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_二级指针做输入_第1种内存模型 11_二级指针做输入_第2种内存模型 12_二级指针做输入_第2种内存模型_课堂答疑_多维数组名...

    数据结构(C++)有关练习题

    实验一 复习C++有关知识 实验目的: 通过实验掌握下列知识: 1、复习C++有关基本知识; 2、熟悉VC编程、编译和调试环境; 内容及步骤: 编写一个类Complex,定义复数的加法、减法、乘法和除法运算,...

Global site tag (gtag.js) - Google Analytics