第三节课作业电信15-2lhz150206227

学习c语言指针和链表的体会

1、指针、引用和取值

指针:指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。

定义(声明)指针变量: int*ptr;

给变量引用一个地址: ptr =&val;

对指针变量取值: int deref =*ptr;

2、指针和数组

数组:数组表示一段连续的内存空间,用来存储多个特定类型的对象。

指针:指针用来存储单个内存地址。数组和指针不是同一种结构因此不可以互相转换。

而数组变量指向了数组的第一个元素的内存地址。

一个数组变量是一个常量。即使指针变量指向同样的地址或者一个不同的数组,也不能把指针赋值给数组变量。也不可以将一个数组变量赋值给另一个数组。然而,可以把一个数组变量赋值给指针,这一点似乎让人感到费解。把数组变量赋值给指针时,实际上是把指向数组第一个元素的地址赋给指针。

#include<stdio.h>

i{

int myarray[4]= {1,2,3,0};

int *ptr = myarray;

printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

ptr++;

printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

ptr++;

printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

ptr++;

printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

}3、指针与结构体

就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址。与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型。

单链表程序:

typedefstruct node

{

char name[20];

struct node *link;

}stud;

老师信息管理系统:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

/*结构体类型*/

typedef struct

{   int num;/*职工号*/

char name[20];/*姓名*/

char sex[5];/*性别*/

int age;/*年龄*/

char studentclass[20];/*班级*/

int score;/*总信息*/

}TEACHERS;

int read_file(TEACHERS stu[])

{        FILE *fp;

int i=0;

if((fp=fopen("stu.txt","rt"))==NULL)

{printf("\n\n*****库存文件不存在!请创");

return 0;

}

while(feof(fp)!=1)

{

fread(&stu[i],sizeof(TEACHERS),1,fp);

if(stu[i].num==0)

break;

else

i++;

}

fclose(fp);

return i;

}

void save_file(TEACHERS stu[],int sum)

{FILE*fp;

int i;

if((fp=fopen("stu.txt","wb"))==NULL)

{printf("写文件错误!\n");

return;

}

for(i=0;i<sum;i++)

if(fwrite(&stu[i],sizeof(TEACHERS),1,fp)!=1)

printf("写文件错误!\n");

fclose(fp);

}

/*创建老师信息*/

int input(TEACHERS stu[])

{  int i,x;

for(i=0;i<1000;i++)

{

system("cls");

printf("\n\n                 录入老师信息  (最多%d个)\n",MAX);

printf("              ----------------------------\n");

printf("\n                     第%d个老师",k+1);

printf("\n 请输入老师的职工号:");

scanf("%d",&stu[k].num);

printf("\n 请输入老师的姓名:");

scanf("%s",stu[k].name);

printf("\n请输入老师的性别:");

scanf("%s",stu[k].sex);

printf("\n 请输入老师的年龄:");

scanf("%d",&stu[k].age);

printf("\n 请输入老师的班级:");

scanf("%s",stu[k].studentclass);

printf("\n 请输入老师的总信息:");

scanf("%d",&stu[k++].score);

printf("\n 请按1键返回菜单或按0键继续创建");

scanf("%d",&x);

if(x)

break;

}

return k;

}

/*删除老师信息*/

void deletel(TEACHERS stu[])

{ system("cls");

char Stuname2[20];

int i,j;

printf("请输入老师姓名:");

scanf("%s",Stuname2);

printf("\n");

for(i=0;i<k;i++)

if(strcmp(stu[i].name,Stuname2)==0)

for(j=0;j<20;j++)

stu[i].name[j]=stu[i+1].name[j];

k--;

printf("删除成功\n");

printf("按任意键加回车返回主菜单!");

scanf("%d",&i);

getchar();

}

/*打印老师信息*/

void output(TEACHERS stu[])

{  system("cls");

int i;

for(i=0;i<k;i++)

printf("职工号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,总信息:%d\n",stu[i].num,stu[i].name,

stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

printf("按任意键加回车返回主菜单!");

scanf("%d",&i);

getchar();

}

/*查询老师信息*/

void inquire(TEACHERS stu[])

{ int i;

int num;

system("cls");

printf("     \n\n请输入您要查找的老师的职工号");

scanf("%d",&num);

for(i=0;i<k;i++)

if(num==stu[i].num)

printf("\n\n\n职工号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,总信息:%d\n",stu[i].num,stu[i].name,

stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

printf("按任意键加回车返回主菜单!");

scanf("%d",&i);

getchar();

}

/*修改老师信息*/

void change(TEACHERS stu[])

{ int num,i,choice;

system("cls");

printf("\n\n\n      请输入您要修改的老师的职工号");

scanf("%d",&num);

for(i=0;i<k;i++)

{ if(num==stu[i].num)

printf("\n职工号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,总信息:%d\n",stu[i].num,stu[i].name,

stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

printf("\n\n\n     ********请输入您想要修改的数据********\n\n");

printf("                1. 职工号\n\n");

printf("                2. 姓名\n\n");

printf("                3. 性别\n\n");

printf("                4. 年龄\n\n");

printf("                5. 班级\n\n");

printf("                6. 总信息\n\n");

printf("                 请选择(1-6):");

scanf("%d",&choice);

switch(choice)

{case 1:{

printf("\n   请输入你改的新职工号");

scanf("%d",&stu[i].num);

break;

}

case 2:{

printf("\n   请输入你改的新姓名");

scanf("%s",stu[i].name);

break;

}

case 3:{

printf("\n   请输入你改的新性别");

scanf("%s",stu[i].sex);

break;

}

case 4:{

printf("\n   请输入你改的新年龄");

scanf("%d",&stu[i].age);

break;

}

case 5:{

printf("\n   请输入你改的新班级");

scanf("%s",stu[i].studentclass);

break;

}

case 6:{

printf("\n   请输入你改的新总信息");

scanf("%d",&stu[i].score);

break;

}

}

printf("职工号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,总信息: %d\n",stu[i].num,stu[i].name,

stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

printf("按任意键加回车返回主菜单!");

scanf("%d",&i);

break;

}

}

/*老师总信息信息排名*/

void sort(TEACHERS stu[])

{ int i,j,n=1,x;

system("cls");

int t;

for(i=0;i<k-1;i++)

for(j=i+1;j<k;j++)

if(stu[i].score<stu[j].score)

{t=stu[i].score;

stu[i].score=stu[j].score;

stu[j].score=t;

t=stu[i].num;

stu[i].num=stu[j].num;

stu[j].num=t;

}

for(i=0;i<k;i++)

printf("排名    职工号    总信息\n %d      %d       %d\n",n++,stu[i].num,stu[i].score);

printf("按任意键加回车返回主菜单!");

scanf("%d",&x);

getchar();

}

void pagedis()

{

printf(" \n\n\n                  **********************************\n");

printf("                   *                                *\n");

printf("                   *                                *\n");

printf("                   *                                *\n");

printf("                   *     欢迎进入老师信息管理系统   *\n");

printf("                   *                                *\n");

printf("                   *                                *\n");

printf("                   *                                *\n");

printf("                  **********************************\n");

}

void check()

{

char userName[5];/*用户名*/

char userPWD[5];/*密码*/

int i,sum;

system("color 4E");

for(i = 1; i < 4; i++)

{

/*用户名和密码均为abcde;*/

printf("   用户名和密码均为abcde\n\n");

printf("\n       请输入您的用户名:");

gets(userName);

printf("\n       请输入您的密码:");

gets(userPWD);

if((strcmp(userName,"abcde")==0) &&(strcmp(userPWD,"abcde")==0))/*验证用户名和密码*/

{

printf("用户名和密码正确,显示主菜单");

return;

}

else

{

if (i < 3)

{

printf("用户名或密码错误,提示用户重新输入");

printf("用户名或密码错误,请重新输入!");

}

else

{

printf("连续3次输错用户名或密码,退出系统。");

printf("您已连续3次将用户名或密码输错,系统将退出!");

exit(1);

}

}

}

}

void menu()

{

TEACHERS stu[20];

int choice,k,sum;

sum=read_file(stu);

if(sum==0)

{ printf("首先录入基本库存信息!按回车后进入*****\n");

getch();

sum=input(stu);

}

do

{ system("cls");

printf("\n\n\n               ********老师信息管理系统********\n\n");

printf("                      1. 创建老师信息\n\n");

printf("                      2. 打印老师信息\n\n");

printf("                      3. 查询老师信息\n\n");

printf("                      4. 修改老师信息\n\n");

printf("                      5. 删除老师信息\n\n");

printf("                      6. 老师总信息信息排名\n\n");

printf("                      0. 退出系统\n\n");

printf("                       请选择(0-6):");

scanf("%d",&choice);

switch(choice)

{

case 1: k=input(stu); break;/*创建老师信息*/

case 2: output( stu) ;break;/*打印老师信息*/

case 3: inquire(stu); break;/*查询老师信息*/

case 4: change(stu); break;/*修改老师信息*/

case 5: deletel(stu); break;/*删除老师信息*/

case 6: sort(stu); break;/*老师总信息信息排名*/

case 0: break;

}

}while(choice!=0);

save_file(stu,sum);

}

int main()

{

int i,sum;

pagedis();

check();

menu();

}

时间: 2024-12-10 22:37:31

第三节课作业电信15-2lhz150206227的相关文章

第一节课作业电信15-2lhz150206227

俄罗斯方块c语言代码体会 以前都是编写简单的数学计算代码,感觉很枯燥,麻烦.这节课,老师给我们演示了几个c语言游戏代码,感觉很有趣,很期待自己又一天也可以编出这样的代码. 下面是我对俄罗斯方块中基本语句的分析: 提供有关信息:#include <    > 定义变量:int(整型): float,double(小数): char(字符): 函数原型声明:struct  名称 {分别定义变量:}: 主函数:main(void)(void表示空,执行次函数后不出函数值) 输出函数:printf(&

第二节课作业电信15-2lhz150206227

设计和编写应用系统 一文件操作 写一个字符串到一个文件中,是什么方式呢?显示到屏幕上是默认的输出文件,如果是硬盘中的一个文件,首先要打开一个文件,然后才能往里写,那么就要告诉程序这个文件在什么地方,按照什么样的方式打开(读.写.读和写.添加.覆盖等),然后打开后要给这个打开的文件一个符号(指针变量),表示后续的读和写都是针对这个文件的,而不是到屏幕的,这个指针变量以后就代表了文件自身了. 定义一个代表文件的符号(指针变量)       FILE *英文指针变量名: 打开文件的语句是      

信管师培训之第十三节课作业(战略管理+业务流程管理+知识管理)

一.战略管理1.企业战略的特点有哪些? (1).全局性 (2).长远性 (3).抗争性 (4).纲领性 2.企业战略决策的特点有哪些?(1).决策的对象是复杂的,很难把握住它的结构,并且是没有先例的,对其处理上也是没有经验可循. (2).面对的问题常常是突发性的.难以预料的.所依靠的是来自外部的关于未来如何变化的很少的情报. (3).决策的性质直接涉及到企业的前途. (4).评价困难,难以标准化. 3.战略管理分为哪三步?(记) 战略管理分为战略制定.战略执行和战略评估三个步骤. 4.组织的使包

第三节课作业

1 指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针. 根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值.当用在声明一个变量时,*表示这里声明了一个指针.其它情况用到*表示指针的取值. 链表由一系列不必在内存中相连的结构组成.每一个结构均含有表元素和指向包含该元素后继元的结构指针.我们称之为next指针.最后一个单

第三节课作业150206309

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

第三节课作业——指针

1.指针与数组 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量:数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间,不需要预先分配,智能自动,可以根据需要增大或减小. (2)静态内存分配 即预先分配好储存空间,缺点显而易见,需要预先知道数据的大小,修改数据的时候需要更改已经分配好的储存空间,浪费内存等. (3)函数 v

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

1 指针的概念分解      指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 1.指针的类型2.指针所指向的类型3.指针的值或者叫指针所指向的内存区4.还有指针本身所占据的内存区 学习C语言动态内存分配 对于指针,正确的分配动态内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc以及memset的用法. 一.对于malloc,在终端输入 #:man  malloc可以知道函数原型是: Void

数据结构课作业系列

数据结构课作业-----顺序表 1 /**************************** 2 3 程序名称:简单电话号码查询系统 V.0.1 4 主要功能:简单联系人录入,查找,排序..... 5 主要结构:静态数组类链表 6 7 **************************/ 8 9 #include <cstdio> 10 #include <cstring> 11 #include <iostream> 12 #include <algorit

centos mysql 优化 第十三节课

centos mysql  优化  第十三节课 MySQL索引 主键值不能重复,也不能是NULLunique key + not null 业务主键用唯一索引代替 案例:某InnoDB表,没有自增列主键,使用一段时间后,产生碎片,重整表空间后,从13G变成了9G重整表空间的3种方法alter table xx engine=innodb;optimize table xx;create primary key on id 加主键聚集索引 mysql5.6之后依然无法online ddl做 加主键