大一c语言代码的解析,谢谢啦
struct Student *del()
{
struct Student *p;
p = Stu;
int i = 0;
int number;
printf("请选择你要删除的学生的学号\n");
scanf("%d", &number);
while (p[i].id != number && i < count)
{
i++;
}
if (p[i].id == number)
{
for (; i < count; i++)
{
p[i] = p[i + 1];
}
count--;
}
else
{
printf("查无此人!\n");
}
printf("删除完毕!\n");
return Stu;
};
这段代码定义了一个名为 del() 的函数,返回类型为指向 struct Student 结构体类型的指针。
函数的目的是用来删除 Student 对象。
具体来说,该函数接收一个学生序号,并遍历链表,直到找到该序号对应的学生。如果找到了该学生,就将该学生从链表中删除。
如果找不到该学生,则输出错误信息。最后,返回链表的地址。
通过调用该函数,可以删除存储在指针 Stu 中的任意学生对象。
看整体思路就行了,这个代码做的就是通过学号从结构体数组中删除对应学生信息
定义变量指针你刚开始学都知道,没必要说
主要要讲的就是找到要删除的学生number,遍历数组Stu以后得到了学生位置,没找到呢该位置后面的所有学生信息就向前移动一位
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//Author Wechat:qczsbwjzjn
//-----定义结构体存储学生信息-------
struct student
{
char no[10];//学号
char name[15];//姓名
char sex[7];//性别
char dor[10];//宿舍号码
char tel[16];//电话号码
int score;//成绩
};
//-------申明全局变量------
struct student stu[20];//结构体数组
int len=0;//结构体数组中元素的数量
//------申明函数----------
void AddStudent(); //从键盘录入学生信息
void ReadStudent(); //从文本中读取学生信息
void SaveStudent(); //将学生信息保存至文本
void SortStudent(); //对学生成绩进行排序
void ModifyStudent(); //修改学生信息
void DeleteStudent(); //删除学生信息
void ShowStudent(); //显示学生信息
void FindStudent(); //查询学生信息
//------函数实现---------
void AddStudent()
{
printf("请输入学号:");
scanf("%s",stu[len].no);
printf("请输入姓名:");
scanf("%s",stu[len].name);
printf("请输入性别:");
scanf("%s",stu[len].sex);
printf("请输入宿舍号码:");
scanf("%s",stu[len].dor);
printf("请输入电话号码:");
scanf("%s",stu[len].tel);
while(1){
printf("请输入成绩:");
scanf("%d",&stu[len].score);
if(stu[len].score<0||stu[len].score>100)
printf("输入成绩有误!\n");
else
break;
}
len++;
system("pause");
}
void ReadStudent()
{
FILE *fp;
fp=fopen("student.txt","r");
if(fp==NULL)
{
printf("文件不存在!");
exit(1);
}
while(fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%d",stu[len].no,stu[len].name,stu[len].sex,stu[len].dor,\
stu[len].tel,&stu[len].score)!=EOF)
{
len++;
}
fclose(fp);
printf("读取完毕!");
system("pause");
}
void SaveStudent()
{
FILE *fp;
int i;
fp=fopen("student.txt","w");
if(fp==NULL)
{
printf("文件不存在!");
exit(1);
}
for(i=0;i<len;i++)
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%d\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].dor,\
stu[i].tel,stu[i].score);
}
fclose(fp);
}
void SortStudent()
{
int type;
struct student s;
int i,j;
printf("0.按分数降序排序;1.按分数升序排序\n请输入排序方式:\n");
scanf("%d",&type);
if (type==0)//降序排列
{
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(stu[j].score<stu[j+1].score)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
}
}
else //升序排列
{
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(stu[j].score>stu[j+1].score)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
}
}
ShowStudent();
}
void ModifyStudent()
{
char s[10];
int k;
printf("请输入要修改的学生的学号:");
scanf("%s",s);
for(k=0;k<len;k++)
{
if(strcmp(stu[k].no,s)==0)
{
printf("请输入修改后的学号:");
scanf("%s",stu[k].no);
printf("请输入修改后的姓名:");
scanf("%s",stu[k].name);
printf("请输入修改后的性别:");
scanf("%s",stu[k].sex);
printf("请输入修改后的宿舍号码:");
scanf("%s",stu[k].dor);
printf("请输入修改后的电话号码:");
scanf("%s",stu[k].tel);
printf("请输入修改后的成绩:");
scanf("%d",&stu[k].score);
system("pause");
return;
}
}
printf("未查找到该学生\n");
system("pause");
return;
}
void DeleteStudent()
{
char s[10];
int k,p;
printf("请输入要删除的学生的学号:");
scanf("%s",s);
for(k=0;k<len;k++)
if(strcmp(stu[k].no,s)==0){
for (p=k;p<len-1;p++)
stu[p]=stu[p+1];
len--;
printf("删除成功!\n");
system("pause");
return;
}
printf("未查找到该学生\n");
system("pause");
return;
}
void ShowStudent()
{
int k;
printf("学号\t 姓名\t性别 宿舍号码 电话号码\t成绩 \n");
for(k=0;k<len;k++)
printf("%3s\t%5s\t %2s\t%3s\t%8s\t%3d\n",stu[k].no,stu[k].name,stu[k].sex,\
stu[k].dor,stu[k].tel,stu[k].score);
printf("显示完毕\n");
system("pause");
}
void FindStudent()
{
char s[10];
int k;
int type;
printf("1.按姓名查找;2.按学号查找\n请输入查询方式:\n");
scanf("%d",&type);
if(type==1){
printf("请输入要查询的姓名:");
scanf("%s",s);
for(k=0;k<len;k++)
if(strcmp(stu[k].name,s)==0){
printf("查询成功,信息如下:\n");
printf("学号:%s\n",stu[k].no);
printf("姓名:%s\n",stu[k].name);
printf("性别:%s\n",stu[k].sex);
printf("宿舍号码:%s\n",stu[k].dor);
printf("电话号码:%s\n",stu[k].tel);
printf("成绩:%d\n",stu[k].score);
system("pause");
return;
}
printf("未查找到该学生\n");
system("pause");
return;
}
if(type==2)
{
printf("请输入要查询的学号:");
scanf("%s",s);
for(k=0;k<len;k++)
{
if(strcmp(stu[k].no,s)==0)
{
printf("查询成功,信息如下:\n");
printf("学号:%s\n",stu[k].no);
printf("姓名:%s\n",stu[k].name);
printf("性别:%s\n",stu[k].sex);
printf("宿舍号码:%s\n",stu[k].dor);
printf("电话号码:%s\n",stu[k].tel);
printf("成绩:%d\n",stu[k].score);
system("pause");
return;
}
}
printf("未查找到该学生\n");
system("pause");
return;
}
}
void Menu()
{
system("cls");
printf("\t\t=======学生信息管理系统=======\n\n");
printf("\t\t=====作者微信: qczsbwjzjn=====\n\n");
printf("\t0.从文件中读取学生信息 ");
printf("1.从键盘中录入学生信息\n\n");
printf("\t2.修改学生信息\t");
printf("\t3.删除学生信息\n\n");
printf("\t4.查询学生信息\t");
printf("\t5.显示所有信息\n\n");
printf("\t6.学生成绩排序\t");
printf("\t7.保存并退出系统\n\n");
printf("\t\t请输入选择:");
}
int main() //主函数
{//正常退出系统才会保存数据,直接关闭无法将数据保存至文件
int s=1;
while(1){
Menu();
scanf("%d",&s);
switch(s){
case 0:ReadStudent();break;
case 1:AddStudent();break;
case 2:ModifyStudent();break;
case 3:DeleteStudent();break;
case 4:FindStudent();break;
case 5:ShowStudent();break;
case 6:SortStudent();break;
case 7:SaveStudent();return 0;
}
}
}
回答: 首先,C语言是一种计算机编程语言,其代码需要被计算机理解和执行。在计算机执行C语言代码时,代码需要经过以下步骤:
C语言代码可以用任何文本编辑器编写,例如Windows上的记事本或Mac上的TextEdit。代码文件必须以“.c”为后缀名,并按照C语言的语法规则进行编写。
计算机不能直接理解C语言代码,因此需要将其转换为计算机可以执行的代码。这个过程称为编译。编译器将C语言代码转换为汇编代码,然后将其转换为机器代码。
下面是编译C语言代码的示例:
gcc -o hello hello.c
其中,-o参数指定输出文件名,指定生成的可执行文件名为“hello”。hello.c为源代码文件名。
生成机器代码后,需要将其与所需的库文件链接起来,以生成最终的可执行文件。
下面是链接的示例:
gcc -o hello hello.o
最后,可以运行生成的可执行文件。当执行程序时,计算机将在内存中加载程序的机器代码,并遵循程序的指令执行指令。如下所示:
./hello
如果一切顺利,应该会在控制台上输出“Hello, world!”。
以上是C语言代码的总体执行过程。希望这对你有所帮助!