大一学生,求一个c语言代码的解析

大一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以后得到了学生位置,没找到呢该位置后面的所有学生信息就向前移动一位

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7551130
  • 你也可以参考下这篇文章:写c语言的代码,转成机器语言的过程
  • 同时,你还可以查看手册:c语言-内存模型与数据竞争 中的内容
  • 除此之外, 这篇博客: [图文详解]c语言实现学生信息管理系统,采用顺序表结构中的 三、代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #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语言程序设计之指针讲解课程中的 回调函数小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    回答: 首先,C语言是一种计算机编程语言,其代码需要被计算机理解和执行。在计算机执行C语言代码时,代码需要经过以下步骤:

    1. 编写C语言代码

    C语言代码可以用任何文本编辑器编写,例如Windows上的记事本或Mac上的TextEdit。代码文件必须以“.c”为后缀名,并按照C语言的语法规则进行编写。

    1. 编译代码

    计算机不能直接理解C语言代码,因此需要将其转换为计算机可以执行的代码。这个过程称为编译。编译器将C语言代码转换为汇编代码,然后将其转换为机器代码。

    下面是编译C语言代码的示例:

    gcc -o hello hello.c
    

    其中,-o参数指定输出文件名,指定生成的可执行文件名为“hello”。hello.c为源代码文件名。

    1. 链接代码

    生成机器代码后,需要将其与所需的库文件链接起来,以生成最终的可执行文件。

    下面是链接的示例:

    gcc -o hello hello.o
    
    1. 运行可执行文件

    最后,可以运行生成的可执行文件。当执行程序时,计算机将在内存中加载程序的机器代码,并遵循程序的指令执行指令。如下所示:

    ./hello
    

    如果一切顺利,应该会在控制台上输出“Hello, world!”。

    以上是C语言代码的总体执行过程。希望这对你有所帮助!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^