C语言课程设计第三节课作业刘子威

1 指针的概念分解
      指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:

1.指针的类型
2.指针所指向的类型
3.指针的值或者叫指针所指向的内存区
4.还有指针本身所占据的内存区

学习C语言动态内存分配

对于指针,正确的分配动态内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc以及memset的用法。

  一、对于malloc,在终端输入 #:man  malloc可以知道函数原型是:

  Void *calloc(size_t  size) ,包含在库函数 stdlib.h中,作用是在内存的堆区分配一个大小为size的连续空间,如果分配内存成功,函数返回新分配内存的首地址,否则,返回NULL,注意:鉴于上述这点,一般在写程序需要判断分配内存是否成功,如下程序语句:

  int  *p;

  p=(int *)malloc(sizeof(int));

  if(p!=NULL)

  .................................//需要执行的语句

  else

  .........................//打印分配内存不成功出错信息

  通常造成内存分配失败的原因如下:

  1、 内存访问越界

  2、 所需连续的内存空间不足

  二、对于函数calloc用法大致与malloc相同,函数原型为:

  void *callo(size_t  num,size_t  size),作用是在内存中分配连续大小为num*size的空间,这一点在动态数组内存分配有所体现,返回值以及判断返回是否成功与上面相同,下面重点来讨论malloc与calloc区别:

  1、后者在返回指向内存的指针之前把它初始化为0。

  2、请求内存数量的方式不同。malloc的参数仅仅是需要分配的内存字节数;calloc的参数包括元素的数量和每个元素的字节数。

链表

链接方式存储的线性表简称为链表(Linked List)。
 链表的具体存储表示为:
  ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
  ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
注意:
  链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。

2、链表的结点结构
┌──┬──┐
│data│next│
└──┴──┘ 
 data域--存放结点值的数据域
 next域--存放结点的直接后继的地址(位置)的指针域(链域)
注意:
  ①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。
 ②每个结点只有一个链域的链表称为单链表(Single Linked List)。

3、头指针head和终端结点指针域的表示
 单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。
注意:
 链表由头指针唯一确定,单链表可以用头指针的名字来命名。
【例】头指针名是head的链表可称为表head。
  终端结点无后继,故终端结点的指针域为空,即NULL。

4、单链表的一般图示法
 由于我们常常只注重结点间的逻辑顺序,不关心每个结点的实际位置,可以用箭头来表示链域中的指针,线性表(bat,cat,fat,hat,jat,lat,mat)的单链表就可以表示为下图形式。

5、单链表类型描述
typedef char DataType; //假设结点的数据域类型为字符
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next;//结点的指针域
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;

这就是最后的成果

importjava.awt.*;
importjava.awt.event.*;
publicclassDengLuJieMianextendsFrameimplementsActionListener
{
Labelusername=newLabel("用户名:");//使用文本创建一个用户名标签
TextFieldt1=newTextField();//创建一个文本框对象
Labelpassword=newLabel("密码:");//创建一个密码标签
TextFieldt2=newTextField();
Buttonb1=newButton("登陆");//创建登陆按钮
Buttonb2=newButton("取消");//创建取消按钮
publicDengLuJieMian()
{
this.setTitle("学生信息管理系统");//设置窗口标题
this.setLayout(null);//设置窗口布局管理器
username.setBounds(50,40,60,20);//设置姓名标签的初始位置
this.add(username);//将姓名标签组件添加到容器
t1.setBounds(120,40,80,20);//设置文本框的初始位置
this.add(t1);//将文本框组件添加到容器
password.setBounds(50,100,60,20);//密码标签的初始位置
this.add(password);//将密码标签组件添加到容器
t2.setBounds(120,100,80,20);//设置密码标签的初始位置
this.add(t2);//将密码标签组件添加到容器
b1.setBounds(50,150,60,20);//设置登陆按钮的初始位置
this.add(b1);//将登陆按钮组件添加到容器
b2.setBounds(120,150,60,20);//设置取消按钮的初始位置
this.add(b2);//将取消按钮组件添加到容器
b1.addActionListener(this);//给登陆按钮添加监听器
b2.addActionListener(this);//给取消按钮添加监听器

this.setVisible(true);//设置窗口的可见性
this.setSize(300,200);//设置窗口的大小
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});//通过内部类重写关闭窗体的方法
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1)//处理登陆事件
{
Stringname=t1.getText();
Stringpass=t2.getText();
if(name!=null&&pass.equals("000123"))//判断语句
{
newStudentJieMian();
}
}
}
publicstaticvoidmain(Stringargs[])//主函数
{
newDengLuJieMian();
}
}
以下方法实现了学生界面设计
importjava.awt.*;
importjava.awt.event.*;
classStudentJieMianextendsFrameimplementsActionListener
{
MenuBarm=newMenuBar();//创建菜单栏
Menum1=newMenu("信息");//创建菜单“信息”
MenuItemm11=newMenuItem("插入");//创建“插入”的菜单项
MenuItemm12=newMenuItem("查询");
Menum2=newMenu("成绩");//创建菜单“成绩”
MenuItemm21=newMenuItem("查询");
publicStudentJieMian()
{
this.setTitle("学生界面");//设置窗口标题
this.setLayout(newCardLayout());//设置窗口布局管理器
this.setMenuBar(m);//将菜单栏组件添加到容器
m.add(m1);//将信息菜单放入菜单栏
m.add(m2);
m1.add(m11);//将“插入”菜单项添加到“信息”菜单
m1.add(m12);//将“查询”菜单项添加到“信息”菜单
m2.add(m21);//将“查询”菜单项添加到“成绩”菜单
m11.addActionListener(this);//给“插入”菜单项添加监听器
m12.addActionListener(this);//给“查询”菜单项添加监听器
m21.addActionListener(this);//给“查询”菜单项添加监听器
this.setVisible(true);//设置窗口的可见性
this.setSize(300,200);//设置窗口的大小
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);//关闭窗口
}
});
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==m11)//处理“添加信息”事件
{
newAddStudent();
}
if(e.getSource()==m12)//处理“查询信息”事件
{
newSelectStudent();
}
if(e.getSource()==m21)//处理“查询成绩”事件
{
newChengJiStudent();
}
}
publicstaticvoidmain(Stringargs[])
{newStudentJieMian();//创建一个对象}

时间: 2024-10-09 02:25:10

C语言课程设计第三节课作业刘子威的相关文章

C语言课程设计第三节课:指针和链表使用     150809205

一.学习体会 C语言的难点就是指针,学习的时候感觉指针的难点在于与其相关的技术和方法很多,所以学习              的时候并不能像前边一样一个知识点一道题就明白了. 二.以下是我对指针原理的理解 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量 1.指针与数组 数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间

高级c语言第一次作业刘子威

C语言程序的基本语句能完成功能的体会.(结合飞机游戏等) 数据输出包括字符输出函数putchar()和格式输出函数printf().数据输入包括字符输入函数getchar()和格式输入函数scanf() 飞机软件中default:printf('\n 错误,请重新选择...\n'); void print(int [][N]);//输出函数 void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting

C语言课程设计—图书管理系统

这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<stdio.h> #include<stdlib.h> #include<string.h> struct book{ char book_name[30]; int bianhao; double price; char author[20]; char state[20]; cha

学生管理系统-火车订票系统 c语言课程设计

概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描述: 学生信息: 基本信息: 学号: int 姓名: char 128 密码: char 32 年龄: int 班级: int 成绩信息: 数学成绩: int C 语言成绩:int 语文成绩: int 名次: int 1.  实现对学生信息基本信息的录入,其中名次根据成绩自动计算(添加).学号不能

C语言课程设计

目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多的版本和玩法,各种优秀应用游戏层出不穷. 本游戏注重"视觉展现效果和更快速的动画".注重数据储存,是一种对于算法和 UI 设计有一定要求的应用设计. 本小组秉承课程所学与外部优秀知识技术相结合的观念,多人合作,共同研究学习. 以 C 语言为基础.C++ 语言库函数为辅助.Windows 程

第三节课作业150206309

指针是一个地址,指向的是个类型: 我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小.(这个东西我并不清楚..) 而指针就是一个8个字节(64系统). 链表我的理解要包含以下特征: (1).由n个节点离散分配:(2).每个节点通过指针连接(3

第三次C语言课程设计作业

#include<stdio.h> int main() { FILE *fp; if((fp=fopen("c://my/test.txt","r+"))==NULL)     () { printf("文件没有正确打开,不能往下执行了. \n"); return(1); } } 文件型指针 #include<stdio.h> int main() { int*ptr;   // 声明一个int指针 intval = 1

C语言课程设计第二次作业

*结构体类型*/ typedef struct {  int num;/*宿舍号*/ char name[20];/*姓名*/ charsex[5];/*性别*/ intage;/*年龄*/ charstudentclass[20];/*班级*/   (使用结构体使一个变量同时表达多个含义) intscore;/*成绩*/ }STUDENTS; 通过结构体可以使定义后的变量表达多个含义 int read_file(STUDENTS stu[]) {        FILE*fp; int i=0

C语言课程设计——电影院订票系统

1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电影场次信息管理.具体菜单有: 1.电影放映厅信息管理 选择该菜单能展示所有放映厅,用户输入某个放映厅编号后,能实现对放映厅增加.删除.修改功能.主要对movie_house.txt数据修改. 放映厅主要字段信息有: 放映厅编号.放映厅名称.放映厅行数.放映厅列数.放映厅座位初始状态. 假如放映厅是一