一道简单的题求指点,该怎么处理
一道简单的题求指点
#include <stdio.h>
#include <stdlib.h>
struct Grade
{
int score;
struct Grade *next;
};
typedef struct Grade NODE;
NODE *Create_LinkList();
void Insert_LinkList (NODE *head,NODE *pnew,int i);
void Delete_LinkList (NODE *head,int i);
void Display_LinkList (NODE *head);
void main()
{
int a,b;
int s;
NODE *head,*pnew;
while (1)
{
printf("\n******************************");
printf("\n* 1.插入学生记录。 *");
printf("\n* 2.查找学生记录。 *");
printf("\n* 3.删除学生记录。 *");
printf("\n* 4.显示学生记录。 *");
printf("\n* 0.退出 *");
printf("\n******************************");
printf("\n请输入选项(0~4):");
scanf("%d",&s);
if (s == 1)
{
printf("请输入学生学号:");
scanf("%d",&a);
printf("\n");
printf("请输入姓名:");
scanf("%d",&b);
head=Create_LinkList();
if (head==NULL)
return ;
pnew= (NODE *)malloc (sizeof (NODE));
if (pnew == NULL)
{
printf("错误!\n");
return ;
}
pnew->score=a;
Insert_LinkList(head,pnew,b);
}
else if (s==3)
{
printf("请输入学生学号:");
scanf("%d",&a);
Delete_LinkList (head,a);
}
else if (s==4)
{
Display_LinkList (head);
}
else if (s==0)
return ;
}
}
NODE *Create_LinkList()
{
NODE *head,*tail,*pnew;
int score;
head=(NODE *)malloc (sizeof (NODE));
if (head ==NULL)
{
printf("错误\n");
return (NULL);
}
head->next=NULL;
tail=head;
printf("请输入成绩:\n");
scanf("%d",&score);
pnew=(NODE *)malloc (sizeof (NODE));
if (pnew==NULL)
{
printf("no\n");
return (NULL);
}
pnew->score = score;
pnew -> next = NULL;
tail->next = pnew;
tail= pnew;
return (head);
}
void Insert_LinkList(NODE *head,NODE *pnew,int i)
{
NODE *p;
int j;
p=head;
for (j=0;j<i&&p!=NULL;j++)
p=p->next;
if (p==NULL)
{
printf("错误\n");
return ;
}
pnew->next=p->next;
p->next=pnew;
return;
}
void Delete_LinkList(NODE *head,int i)
{
NODE *p,*q;
int j;
if (i==0)
return ;
p=head;
for (j=1;j<i&&p->next!=NULL;j++)
p=p->next;
if (p->next==NULL)
{
return;
}
q=p->next;
p-> next = q->next;
free(q);
}
void Display_LinkList(NODE *head)
{
NODE *p;
for (p=head->next;p!=NULL;p=p->next)
printf("%d",p->score);
printf("\n");
}
题目编写一个学生成绩的链表程序,该链表的表元素信息包含学号,姓名,一门课的成绩.
请定义子函数实现以下几个功能:
1.插入一条学生成绩记录(尾插法).
2.按照学号查询学生.
3.根据学号删除某学生信息.
------解决方案--------------------
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
#include <stdio.h>
#include <stdlib.h>
struct Grade
{
int score;
struct Grade *next;
};
typedef struct Grade NODE;
NODE *Create_LinkList();
void Insert_LinkList (NODE *head,NODE *pnew,int i);
void Delete_LinkList (NODE *head,int i);
void Display_LinkList (NODE *head);
void main()
{
int a,b;
int s;
NODE *head,*pnew;
while (1)
{
printf("\n******************************");
printf("\n* 1.插入学生记录。 *");
printf("\n* 2.查找学生记录。 *");
printf("\n* 3.删除学生记录。 *");
printf("\n* 4.显示学生记录。 *");
printf("\n* 0.退出 *");
printf("\n******************************");
printf("\n请输入选项(0~4):");
scanf("%d",&s);
if (s == 1)
{
printf("请输入学生学号:");
scanf("%d",&a);
printf("\n");
printf("请输入姓名:");
scanf("%d",&b);
head=Create_LinkList();
if (head==NULL)
return ;
pnew= (NODE *)malloc (sizeof (NODE));
if (pnew == NULL)
{
printf("错误!\n");
return ;
}
pnew->score=a;
Insert_LinkList(head,pnew,b);
}
else if (s==3)
{
printf("请输入学生学号:");
scanf("%d",&a);
Delete_LinkList (head,a);
}
else if (s==4)
{
Display_LinkList (head);
}
else if (s==0)
return ;
}
}
NODE *Create_LinkList()
{
NODE *head,*tail,*pnew;
int score;
head=(NODE *)malloc (sizeof (NODE));
if (head ==NULL)
{
printf("错误\n");
return (NULL);
}
head->next=NULL;
tail=head;
printf("请输入成绩:\n");
scanf("%d",&score);
pnew=(NODE *)malloc (sizeof (NODE));
if (pnew==NULL)
{
printf("no\n");
return (NULL);
}
pnew->score = score;
pnew -> next = NULL;
tail->next = pnew;
tail= pnew;
return (head);
}
void Insert_LinkList(NODE *head,NODE *pnew,int i)
{
NODE *p;
int j;
p=head;
for (j=0;j<i&&p!=NULL;j++)
p=p->next;
if (p==NULL)
{
printf("错误\n");
return ;
}
pnew->next=p->next;
p->next=pnew;
return;
}
void Delete_LinkList(NODE *head,int i)
{
NODE *p,*q;
int j;
if (i==0)
return ;
p=head;
for (j=1;j<i&&p->next!=NULL;j++)
p=p->next;
if (p->next==NULL)
{
return;
}
q=p->next;
p-> next = q->next;
free(q);
}
void Display_LinkList(NODE *head)
{
NODE *p;
for (p=head->next;p!=NULL;p=p->next)
printf("%d",p->score);
printf("\n");
}
题目编写一个学生成绩的链表程序,该链表的表元素信息包含学号,姓名,一门课的成绩.
请定义子函数实现以下几个功能:
1.插入一条学生成绩记录(尾插法).
2.按照学号查询学生.
3.根据学号删除某学生信息.
------解决方案--------------------
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。