c语言课程设计作业框架,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();//创建一个对象}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值