精华内容
下载资源
问答
  • 学生成绩统计系统 题目要求: 学期考试结束,统计有每班每个人的平均成绩,每门课的平均成绩,并按照个人平均成绩从高到低的顺序输出成绩, 输出不及格人名单。输入输出格式自定 假设某班有30人 考试课程自定 将所有...

    C语言学生成绩统计系统

    参考很多大佬的程序 …才完成的大一作业 …仅供参考…

    题目要求:
    学期考试结束,统计有每班每个人的平均成绩,每门课的平均成绩,并按照个人平均成绩从高到低的顺序输出成绩,
    输出不及格人名单。输入输出格式自定
    假设某班有30人
    考试课程自定
    将所有同学的成绩保留在文件中,对文件中的数据处理,输入所要求的内容,程序的功能主要包括以下方面
    1.输入成绩到文件中
    2.输出成绩
    3.输出不及格学生名单
    4.成绩排序
    5.删除记录
    6.插入记录
    7.修改记录
    主函数中对以上功能选择,调用对应的函数完成

    注意事项

    1.文件打开方式
    r 只读 文件必须存在,否则打开失败
    w 只写 如果文件存在,则清除源文件内容;如果文件不存在,则新建文件。
    a 追加只写 如果文件存在,则在打开文件上追加;文件不存在,则新建。
    r+ 读写 文件必须存在
    w+ 读写
    a+ 读写
    2.对于字符串的比较 拷贝等操作
    字符串的操作与其他不同,要特别注意,下面的代码避免了字符串的操作
    偷懒ing
    3.命名语义化
    增加可读性
    4.注释
    注释!!一定要写!!不然!几天之后。。。。。它就好像变成了。。别人写的代码!!小白郁闷中

    源码

    
    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h> 
    # include <conio.h>
    

    函数声明部分

    void showmenu(void);		//显示用户选择菜单 
    void inputstudent(int);		//输入学生成绩函数
    void printstudent(int);		//输出学生成绩函数
    void notpass(int);			//输出不及格学生名单函数
    void sort(int);				//计算学生名次函数 
    void allsort(int);			//学生成绩排名函数 
    int delstudent(int);		//删除学生记录函数 
    int instudent(int);			//插入学生记录函数 
    void sublist(int); 			//各科平均成绩统计函数 
    int change(int);			//修改学生成绩函数 
    
    

    学生结构体

    struct student
    {
    	int size;				//学号 
    	char name[10];			//姓名 
    	int english;			//英语成绩 
    	int Clanguage;			//C语言成绩 
    	int math;				//高数成绩 
    	int PE;					//体育成绩 
    	float average;			//平均成绩 
    	int rank; 				//排名 
    }; 
    

    main函数

    int main()
    {
    	int flag, n=0, count=0;//flag用来记录用户选择的功能号码,count当前总人数
    	//判断文件里面有多少条记录	
    	FILE *fp;   
    	fp=fopen("cj.txt","a+");
    	if (fp == NULL)
    	{
    		printf("打开文件失败,请重试......\n");
    		getch();	      //当用户按下某个字符时,程序自动读取,无需按回车,
    		fclose(fp);	 //关闭文件 
    		exit(0);	//exit()是退出的意思,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出。 
    	}
    	int c = 0;
    	while (!feof(fp)) 
    	{
    		char cc = fgetc(fp); 
    		if (cc == EOF)
    		{ 
    			break;
    		}
    		c++;
    	}
    	printf("\t当前文件学生记录数:%d\n",count);
    	fclose(fp);
    	
    	
    	do
    	{
    		showmenu();   //调用显示提示菜单函数 
    		printf("\t请输入你要选择的功能代号\n") ;
    		scanf("%d",&flag);//用户输入要选择的功能号码 
    		switch(flag)
    		{
    			//功能1,输入需要输入的学生的人数n,录入 n个学生记录 
    			case 1:printf("\t请输入您要输入学生的人数:\n");
    				scanf("%d",&n);
    				inputstudent(n);
    				count += n;
    				break;
    			//功能2,输出文件中的学生信息 
    			case 2:
    				printf("\t输出学生信息:\n"); 
    				printstudent(count);
    				break;
    			//功能3,输出文件中不及格学生的名单 
    			case 3:
    				printf("\t输出不及格学生名单:\n");
    				notpass(count);
    				break;
    			//功能4,统计每一个科目的平均成绩 
    			case 4:
    				printf("\t为您统计各科平均成绩:\n");
    				sublist(count);
    				break;
    			//功能5,按照学生的平均成绩排序 
    			case 5:
    				printf("成绩排序结果如下:\n");
    				sort(count); //更新每条记录的rank 
    				allsort(count);//冒泡法排序,并输出记录 
    				break;
    			//功能6,输入要删除学生的学号,然后按照学号删除学生记录 
    			case 6:
    				printf("\t为您删除学生记录\n");
    				count=delstudent(count);
    				printf("\t删除记录后学生人数:%d\n",count); 
    				break;
    			//功能7,输入要插入的学生的学号,判断学生存不存在,存在则退出,不存在则在文件后面追加 
    			case 7:
    				printf("\t为您插入学生记录\n");
    				count=instudent(count);
    				printf("\t插入记录后学生人数:%d\n",count);
    				break;
    			//功能8,修改学生成绩 
    			case 8:
    				change(count);
    				break;
    			//功能0,退出系统
    			case 0:
    				printf("\t系统退出,感谢使用......\n\t欢迎再次使用!\n"); 
    				exit(0);//退出系统函数 
    				break;
    		
    			default://输入信息有误
    				printf("\t您的输入有误,请重新输入!\n");
    				break;
    		 } 
    	}while(flag != 0);
    	getch();
    	
    	
    	return 0;
    	
     } 
    

    showmenu 提示菜单显示内容

    
     void showmenu()
     {
    	printf("\t*******************************************\n");
    	printf("\t           学生成绩统计系统\n");
    	printf("\t*******************************************\n"); 
    	printf("\t1.输入学生信息----------------------------1\n");
    	printf("\t2.输出学生信息----------------------------2\n");
    	printf("\t3.输出不及格学生名单----------------------3\n");
    	printf("\t4.成绩统计--------------------------------4\n");
    	printf("\t5.成绩排序--------------------------------5\n");
    	printf("\t6.删除记录--------------------------------6\n");
    	printf("\t7.插入记录--------------------------------7\n");
    	printf("\t8.修改记录--------------------------------8\n");
    	printf("\t0.退出系统,感谢使用----------------------0\n");
    	printf("\t*******************************************\n");
    	
     } 
    
    

    inputstudent 输入学生信息

     void inputstudent(int n)
     {
     	struct student stu[50];//student结构分配空间 
     	FILE *fp;
     	fp = fopen("cj.txt","a+");//追加方式打开文件 
     	if(fp == NULL)
     	{
     		printf("\t打开文件失败,请重试\n");
     		getch();
    		fclose(fp);
    		exit(0); 
    	} 
    	 printf("\t请输入学生的学号,姓名,英语成绩,C语言成绩,高数成绩,体育成绩 \n"); 
    	 int i;
    	 for (i = 0; i < n ; i ++)
    	 {
    		printf("\t第%d个学生信息\n",i+1);
    		scanf("%d %s %d %d %d %d",&stu[i].size,&stu[i].name,&stu[i].english,&stu[i].Clanguage,&stu[i].math,&stu[i].PE);
    		//可以在这里求出每个学生的平均成绩 
    		stu[i].average=(stu[i].english+stu[i].Clanguage+stu[i].math+stu[i].PE)/4;
    		stu[i].rank=0;
    		
    		
    		//写入数据   上面求出每个学生的平均成绩要在下面加一个%d 
    		fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank ); 
    	 } 
    	 
    	 fclose(fp);
    	 printf("添加学生成功,请按任意键返回\n");
    	 getch();
    	 
      } 
    

    输出学生信息

     void printstudent(int n)
     {
     	struct student stu[50];
     	int i;
     	printf("学生成绩信息如下:\n");
     	FILE *fp;
     	fp = fopen("cj.txt","r");
     	if(fp==NULL)
     	{
     		printf("\t打开文件失败,请重试\n") ;
     		getch();
     		fclose(fp);
     		exit(0);
    	 } 
    	 printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩    \t名次\n");
    	 
    	 
    	 int c = 0;
    	 while (!feof(fp))
    	 {
    	 	fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    	 	c++;
    	 }
    	 
    	 
    	  
    	 if(n!=0)//人数不为0 
    	 {
    	 	for(i=0;i<c;i++)
    	 	{
    	 		printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name ,stu[i].english ,stu[i].Clanguage ,stu[i].math ,stu[i].PE ,stu[i].average,stu[i].rank );//可以加上平均分 
    		 }
    	 	
    	 }
    	 fclose(fp);
    	 printf("显示完毕,请按任意键返回\n");
    	 getch();
    	 
    	 return; 
    
      } 
     
    

    输出不及格学生名单

     void notpass(int n)
     {
     	struct student stu[50];
     	int i;
     	printf("不及格学生信息显示如下:\n");
     	FILE *fp;
     	fp=fopen("cj.txt","r");
     	if(fp==NULL)
     	{
     		printf("\t打开文件失败,请重试\n") ;
     		getch();
     		fclose(fp);
     		exit(0);
    	 } 
    	 printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩\t    名次\n");//可以加上平均分
    	 int c = 0;
    	 while(!feof(fp))
    	 {
    	 	//fscanf从一个流中执行格式化输入,fscanf遇到空格和换行是结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math ,&stu[c].PE ,&stu[c].average ,&stu[c].rank );//可以加上平均分 
    		 c ++;
    	 }
    
    
    	 if(n!=0)//人数部位0 
    	 {
    	 	for(i=0;i<c;i++)
    	 	{
    	 		if(stu[i].average < 60.00)
    			 { 
    	 			printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name ,stu[i].english ,stu[i].Clanguage ,stu[i].math ,stu[i].PE ,stu[i].average,stu[i].rank );//可以加上平均分 
    	 	 	}
    		 }
    	 	
    	 }
    	 fclose(fp);
    	 printf("显示完毕,请按任意键返回\n");
    	 getch();
    	 return; 
    
      } 
    

    成绩统计

    void sublist(int n)
    {
    	struct student stu[50];
    	float subenglish=0.0,subClanguage=0.0,submath=0.0,subPE=0.0; 
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0);
    	}
    	int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		subenglish +=stu[c].english;
    		subClanguage += stu[c].Clanguage;
    		submath += stu[c].math;
    		subPE += stu[c].PE;
    		c++;
    	}
    	fclose(fp);
    	printf("\t英语的平均成绩为:%.2f\n",subenglish/c);
    	printf("\tC语言的平均成绩为:%.2f\n",subClanguage/c);
    	printf("\t高数的平均成绩为:%.2f\n",submath/c);
    	printf("\t体育的平均成绩为:%.2f\n",subPE/c);
    	 
    }
    

    成绩排序并输入排序后的学生名单

     //成绩按找冒泡法进行排序
    void sort(int n)
    {
    	struct student stu[50];
    	int i,j,temp;
    	int count;
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0);
    	}
        int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		stu[c].average = (stu[c].english + stu[c].Clanguage + stu[c].math + stu[c].PE)/4;
    		c++;
    	}
    	fclose(fp);
    	//计算排名并存储  用每一名学生的average和其他的每一个学生去比较,有几个同学的average比这一名同学大就加上几 有一名则1+1=2 
        for(i=0;i<n;i++)
        {
    	    temp=1;//第1名 
    	    for(j=0;j<n;j++){
    	    	if(stu[i].average<stu[j].average) temp++; //如果较小,temp++ ,排名下降1名
    		} 
    		stu[i].rank=temp;
        }
        //更新记录 
        fp=fopen("cj.txt","w");
       	for(i=0;i<n;i++)
       	{
    	    fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);	
       	}
    	fclose(fp);
        printf("排名成功......\n");
        return;       
    
    
    }
    
    //排序输出所有同学的名单 
    void allsort(int n)
    {
      	struct student stu[100];	
      	struct student temp;	
    	FILE *fp; 
    	fp=fopen("cj.txt ","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0); 
    	}
    	int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		c++;
    	}
    	int i,j;
    
    		//冒泡排序算法:进行 n-1 轮比较
    	    for(i=0; i<n-1; i++){
    	        //每一轮比较前 n-1-i 个,已经排序好的最后 i 个不用比较
    	        for(j=0; j<n-1-i; j++){
    	            if(stu[j].average < stu[j+1].average){
    	                temp = stu[j];
    	                stu[j] = stu[j+1];
    	                stu[j+1] = temp;
    	            }
    	        }
    	    }
    	    printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩\t    名次\n");
    	    for(i=0;i<n;i++)
    	    {
    			printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);
    		}
    		printf("按任意键返回\n");
    		getch();
    		fclose(fp);
    		return;
        
    } 
    

    删除记录

    int delstudent(int n)
    {
    	struct student stu[50];
    	struct student newstu[50];//删除后的结构体数组 
    	//char stusize[10];//学号
    	int stusize;
    	int find=0;
    	printf("\t请输入您要删除的学生的学号:\n"); 
    	scanf("%d", &stusize);
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("\t打开文件失败,请重试.....\n");
    		getch(); 
    		return -1;   
    	}
    	int c=0;
    	int index=0;//index记录目标序号 
    	while(!feof(fp))//不为空
    	{ 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n", &stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		//if(strcmp(stusize,stu[c].size)==0)
    		if(stusize == stu[c].size) 
    		{
    			find = 1;//根据学号查找,找到赋值为1 
    			index = c;//记录编号
    		} 
    		c++;
    	}
    	fclose(fp);
    	if(n==0)
    	{
    		printf("\t已经没有学生成绩信息了,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	if(find==0)
    	{
    		printf("\t没有该学生成绩信息,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	else 
    	{
    		int i;
    		//删除 
    		for( i=0;i<c;i++)
    		{
    			if(i < index)
    			{
    				newstu[i] = stu[i];
    			}
    			else
    			{
    				newstu[i] = stu[i+1];
    			}
    		}
    		
    		fp=fopen("cj.txt","w");
    		//写入数据  
    		for(i=0;i<c-1;i++)
    		{
    			fprintf(fp,"%d %s %d %d %d %d %f %d\n",newstu[i].size,newstu[i].name,newstu[i].english,newstu[i].Clanguage,newstu[i].math,newstu[i].PE,newstu[i].average,newstu[i].rank); 	
    		} 
    		fclose(fp);
    		printf("\t学号为%d的学生记录已经删除成功,请按任意键返回......\n",stusize);
    		getch();
    		return n-1;
    	}     
    }
    

    插入记录

    int instudent(int n)
    {
    	struct student stu[50];
    	//char stusize[10];//学号
    	int stusize;
    	int find=0;
    	printf("\t请输入您要插入的学生的学号:\n"); 
    	scanf("%d", &stusize);
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("\t打开文件失败,请重试.....\n");
    		getch(); 
    		return -1;   
    	}
    	int c=0;
    	int index=0;//index记录目标序号 
    	while(!feof(fp))//不为空
    	{ 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n", &stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		//if(strcmp(stusize,stu[c].size)==0)
    		if(stusize == stu[c].size) 
    		{
    			find = 1;//根据学号查找,找到赋值为1 
    			index = c;//记录编号
    		} 
    		c++;
    	}
    	fclose(fp);
    	if(find==1)
    	{
    		printf("\t已经存在该学生信息,无需添加,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	
    	fp=fopen("cj.txt","a");		//在原来数据上追加一条新记录
    	printf("\t请输入学生的学号,姓名,英语成绩,C语言成绩,高数成绩,体育成绩 \n"); 
    	scanf("%d %s %d %d %d %d",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE);
    	stu[c].average=(stu[c].english+stu[c].Clanguage+stu[c].math+stu[c].PE)/4;
    	stu[c].rank=0;
    		
    		
    	fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[c].size,stu[c].name,stu[c].english,stu[c].Clanguage,stu[c].math,stu[c].PE,stu[c].average,stu[c].rank ); 
    	
    	  
    	fclose(fp);
    	printf("\t学号为%d的学生记录已经插入成功,请按任意键返回......\n",stusize);
    	getch();
    	return n+1;
    	   
    }
    

    按照学生学号修改学生成绩

    int change(int n) 
    {	
    	struct student stu[50];
     	FILE *fp;
     	int stusize;
     	int find=0;  
     	printf("\t请输入要修改的学生学号:\n");
     	scanf("%d",&stusize);
     	fp=fopen("cj.txt","r");
     	if(fp==NULL)
     	{
    	  	printf("文件打开失败,请重试.....\n");
    	  	getch();
    	  	return -1;	
     	}
     	int c=0;
     	while(!feof(fp))
    	{
    	 	fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    	 	if(stu[c].size==stusize)	
    		{
    		 	find=1;
    		 	//修改操作 
    		 	printf("\t找到你要修改成绩的同学,请输入他的成绩:\n");
    		 	printf("\t英语成绩: %d,新成绩为:\n",stu[c].english);
    		 	scanf("%d",&stu[c].english);
    		 	printf("\tC语言成绩: %d,新成绩为:\n",stu[c].Clanguage); 
    		 	scanf("%d",&stu[c].Clanguage);
    		 	printf("\t高数成绩: %d,新成绩为:\n",stu[c].math);
    		 	scanf("%d",&stu[c].math);
    		 	printf("\t体育成绩:%d,新成绩为\n",stu[c].PE);
    		 	scanf("%d",&stu[c].PE);
    		 	stu[c].average=(stu[c].english+stu[c].Clanguage+stu[c].math+stu[c].PE)/4;
     		}
      		c++;	
     	}
    	fclose(fp);
    	if(find==0)
    	{
    		printf("没有找到要删除的学生记录,请按任意键退出\n");
    		getch(); 
    	} 
    	else
     	{
    	  	fp=fopen("cj.txt","w");
    	  	int i; 
    	   	for(i=0;i<n;i++)
    	   	{
    	   		//更新数据 
    		    fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);	
    	   	}
    		fclose(fp);	 
    		printf("学号为%d同学的成绩已经修改成功,请按任意键返回\n",stusize);
     		getch(); 
     	}
      	return 1; 
    }
       
    
    展开全文
  • 统计学生成绩 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D;...

    统计学生成绩
    本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

    大于等于90分为A;
    小于90且大于等于80为B;
    小于80且大于等于70为C;
    小于70且大于等于60为D;
    小于60为E。
    输入格式:
    输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

    输出格式:
    在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

    输入样例:
    7
    77 54 92 73 60 65 69
    输出样例:
    1 0 2 3 1

    #include<stdio.h>
    int main()
    {
        int n,s,A=0,B=0,C=0,D=0,E=0;     \\n为学生数量,s为每个学生的成绩,ABCDE为每种成绩对应数量
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &s);
            if (s < 60)E++;
            else if (s < 70)D++;
            else if (s < 80)C++;
            else if (s < 90)B++;
            else A++;
        }
        printf("%d %d %d %d %d", A, B, C, D, E);
        return 0;
    }
    
    展开全文
  • 函数中的形参和实参有类型要求因为它们是变量而宏定义与宏调用之间参数没有类型的概念只有字符序列的对应关系 函数调用是在程序运行时进行的分配临时的内存单元并占用运行时间而宏调用在编译之前进行不分配内存单元...
  • C语言程序设计 实践参考——学生成绩统计

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                         

    返回:贺老师课程教学链接

    【项目1-学生成绩统计】
    每位同学的信息学号、姓名、C、高数、英语成绩。定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13])、姓名(name)、三门课的成绩(grade)、总分(score)、均分(average))。
    (1)从键盘上输入N名学生的信息(N定义为常变量);
    (2)求出每名同学的总分和均分,并存储在结构体数组中(可以读入过程中“顺便”计算);
    (3)输出每位同学的信息学号、姓名、总分和均分。
    请参考下面的代码,将需要的其他代码写出来。

    #include <stdio.h>struct Student{   char num[13];   char name[10];   int c;   int math;   int english;   int grade;   double average;};const int N=3;int main( ){   int i, j, k;   //定义结构体数组   struct Student stu[N];   //写出代码,实现要求的功能   return 0;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    参考运行结果如图:
    这里写图片描述
    [参考解答]

    #include <stdio.h>struct Student{    char num[13]; //尽管都是由数字构成,但看作为字符更合适。学号12位,定义为13个字符,便于处理成字符串    char name[10]; //每个汉字占两个字节,中国人的名字,5个汉字够用    int c;    int math;    int english;    int grade;    double average;};const int N=3;int main( ){    int i;    //定义结构体数组    struct Student stu[N];    double total=0;    printf("请输入学号、姓名、C、高数、英语成绩:\n");    for(i=0; i<N; i++)    {        scanf("%s %s %d %d %d", stu[i].num, stu[i].name, &stu[i].c, &stu[i].math, &stu[i].english);        stu[i].grade=stu[i].c+stu[i].math+stu[i].english;        stu[i].average=stu[i].grade/3.0;        total+=stu[i].average;    }    //输出成绩单    printf("学号\t姓名\t总分\t均分\n");    for(i=0; i<N; i++)        printf("%s\t%s\t%d\t%.1f\n", stu[i].num,stu[i].name,stu[i].grade,stu[i].average);    printf("所有同学均分的均值是:%.1f\n", total/N);    return 0;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    (4)使用相同的结构体类型,在main函数中已经对结构体数组进行了初始化,请完成相关函数的定义,实现main函数中要求的功能。

    #include <stdio.h>struct Student    //同前{    ……};void calculate(struct Student s[],int n);  //计算总分和均分,数据在s数组中,共有n个元素void sort1(struct Student [],int);      //按总分降序排序void sort2(struct Student [],int);      //按学号升序排序void output(struct Student [],int);     //输出成绩单void outputExcellent(struct Student [],int);  //输出优秀者:总分超285,单科不低于90int main(){    struct Student stu[]= {{"201152501104","Tom",65,69 ,68 },        {"201152501114","Jeery",94 ,89 ,63 },        {"201152501138","Speike",67 ,62 ,84 },        {"201152501204","Tyke",100 ,95 ,91 },        {"201152501202","Tuffy",59 ,80 ,55 },        {"201152501115","Butch",100 ,99 ,89 },        {"201152501201","Lightning",95 ,92 ,99 },        {"201152501145","Topsy",88 ,56 ,67 },        {"201152501203","Droopy",62 ,62 ,95 },        {"201152501140","Drupa",80 ,60 ,86 },        {"201152501205","Buzz",73 ,90 ,94}    };    int stuNum=sizeof(stu)/sizeof(stu[0]);  //用sizeof运算确定数组中元素个数    //计算总分和均分后输出    calculate(stu,stuNum);    printf("下面是成绩单:\n");    output(stu,stuNum);    printf("优秀者名单:\n");    outputExcellent(stu,stuNum);    //按总分降序排序后输出    sort1(stu,stuNum);    printf("按总分降序排序后:\n");    output(stu,stuNum);    //按学号升序排序后输出    sort2(stu,stuNum);    printf("按学号升序排序后:\n");    output(stu,stuNum);    return 0;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    [参考解答]

    #include <stdio.h>#include <string.h>struct Student    //同前{    char num[13];    char name[10];    int c;    int math;    int english;    int grade;    double average;};void calculate(struct Student s[],int n);  //计算总分和均分,数据在s数组中,共有n个元素void sort1(struct Student [],int);      //按总分降序排序void sort2(struct Student [],int);      //按学号升序排序void output(struct Student [],int);     //输出成绩单void outputExcellent(struct Student [],int);  //输出优秀者:总分超285,单科不低于90int main(){    struct Student stu[]= {{"201152501104","Tom",65,69 ,68 },        {"201152501114","Jeery",94 ,89 ,63 },        {"201152501138","Speike",67 ,62 ,84 },        {"201152501204","Tyke",100 ,95 ,91 },        {"201152501202","Tuffy",59 ,80 ,55 },        {"201152501115","Butch",100 ,99 ,89 },        {"201152501201","Lightning",95 ,92 ,99 },        {"201152501145","Topsy",88 ,56 ,67 },        {"201152501203","Droopy",62 ,62 ,95 },        {"201152501140","Drupa",80 ,60 ,86 },        {"201152501205","Buzz",73 ,90 ,94}    };    int stuNum=sizeof(stu)/sizeof(stu[0]);  //用sizeof运算确定数组中元素个数    //计算总分和均分后输出    calculate(stu,stuNum);    printf("下面是成绩单:\n");    output(stu,stuNum);    printf("优秀者名单:\n");    outputExcellent(stu,stuNum);    //按总分降序排序后输出    sort1(stu,stuNum);    printf("按总分降序排序后:\n");    output(stu,stuNum);    //按学号升序排序后输出    sort2(stu,stuNum);    printf("按学号升序排序后:\n");    output(stu,stuNum);    return 0;}void calculate(struct Student s[],int n)  //计算总分和均分{    int i;    for(i=0; i<n; i++)    {        s[i].grade=s[i].c+s[i].math+s[i].english;        s[i].average=s[i].grade/3.0;    }    return;}void sort1(struct Student s[],int n)   //按总分降序排序{    int i,j;    struct Student t;    for(j=0; j<n-2; j++)    {        for(i=0; i<n-j-1; i++)            if (s[i].grade<s[i+1].grade)            {                t=s[i];  //交换结构体                s[i]=s[i+1];                s[i+1]=t;            }    }    return;}void sort2(struct Student s[],int n)   //按学号升序排序{    int i,j;    struct Student t;    for(j=0; j<n-2; j++)    {        for(i=0; i<n-j-1; i++)            if (strcmp(s[i].num,s[i+1].num)>0)            {                t=s[i];                s[i]=s[i+1];                s[i+1]=t;            }    }    return;}void output(struct Student s[],int n)  //输出成绩单{    int i;    for(i=0; i<n; i++)    {        printf("%s, %s, ", s[i].num, s[i].name);        printf("%d, %d, %d, ", s[i].c, s[i].math, s[i].english);        printf("%d %.1f\n", s[i].grade, s[i].average);    }    printf("\n");    return;}void outputExcellent(struct Student s[],int n)   //输出优秀者{    int i;    for(i=0; i<n; i++)        if(s[i].grade>=285&&s[i].c>=90&&s[i].math>=90&&s[i].english>=90)        {            printf("%s, %s, ", s[i].num, s[i].name);            printf("%d, %d, %d, ", s[i].c, s[i].math, s[i].english);            printf("%d %.1f\n", s[i].grade, s[i].average);        }    printf("\n");    return;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119

    (5)score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:

    • 从文件中读出数据,存放到结构体数组中;
    • 求出每名同学的总分(可以在读入过程中“顺便”计算);
    • 输出结构体数组中所有同学的记录;
    • 按总分排序(降序);
    • 输出排序后的成绩单;
    • 有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。
      所有功能可以在main()函数中实现,推荐设计自定义函数实现任务,更推荐用多文件组织完成。
      [参考解答]
    #include <stdio.h>#include <stdlib.h>  //在codeblocks下,exit(1)需要这个头文件struct Student{    char num[13];    char name[10];    int c;    int math;    int english;    int grade;};const int N=200;int main( ){    int i, j, k, stuNum=0;    //定义结构体数组    struct Student stu[N], t_stu;    //1)从文件中读出数据,存放到你定义的结构体数组中;    FILE *infile=fopen("score.txt","r");    //以输入的方式打开文件    if(!infile)                 //测试是否成功打开    {        printf("open error!\n");        exit(1);    }    i=0;    fscanf(infile, "%s %s %d %d %d", stu[i].num, stu[i].name, &stu[i].c, &stu[i].math, &stu[i].english);    while(!feof(infile))    {        stu[i].grade=stu[i].c+stu[i].math+stu[i].english;        ++stuNum;        ++i;        fscanf(infile, "%s %s %d %d %d", stu[i].num, stu[i].name, &stu[i].c, &stu[i].math, &stu[i].english);    }    fclose(infile);    //2)求出每名同学的总分(可以在读入过程中“顺便”计算)——上面已经顺便完成 了;    //(3)输出结构体数组中所有同学的记录。    printf("成绩单\n");    for(i=0; i<stuNum; ++i)    {        printf("%s\t%s\t%d\t%d\t%d\t%d\n", stu[i].num,stu[i].name,stu[i].c,stu[i].math,stu[i].english,stu[i].grade);    }    printf("\n");    system("PAUSE");    //4)按总分排序(降序),用了选择排序    for(i=0; i<stuNum-1; i++)    {        k=i;        for(j=i+1; j<stuNum; j++)            if(stu[j].grade>stu[k].grade) k=j;        t_stu=stu[k];  //交换结构体数组元素        stu[k]=stu[i];        stu[i]=t_stu;    }    //(5)输出排序后的成绩单;    printf("排序后成绩单\n");    for(i=0; i<stuNum; ++i)    {        printf("%s\t%s\t%d\t%d\t%d\t%d\n", stu[i].num,stu[i].name,stu[i].c,stu[i].math,stu[i].english,stu[i].grade);    }    printf("\n");    system("PAUSE");    //6)有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。    printf("恭喜以下同学获得奖学金(奖学金用于改善学习条件,杜绝请客吃饭!)\n");    i=0,j=1;    int g;    while (j<=30)    {        if (stu[i].c>=60&&stu[i].math>=60&&stu[i].english>=60)        {            printf("%d\t%s\t%d\n", j, stu[i].name, stu[i].grade);            g=stu[i].grade;            j++;        }        i++;    }    while(g==stu[i].grade)//和刚才输出的最后一个总分相同的同学都有机会获得奖学金    {        if (stu[i].c>=60&&stu[i].math>=60&&stu[i].english>=60)        {            printf("%d\t%s\t%d\n", j, stu[i].name, stu[i].grade);            j++;        }        i++;    }    return 0;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    (6)在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。
    这里写图片描述
    [参考解答]

    #include <stdio.h>#include <stdlib.h>  struct Student{    char num[13];    char name[10];    int c;    int math;    int english;    int grade;};//声明函数int getData(struct Student s[]);void outputData(struct Student s[],int n);void sort(struct Student s[],int n);void listScholars1(struct Student s[],int n);void listScholars2(struct Student s[],int n);const int N=200;int main( ){    int stuNum;    //定义结构体数组    struct Student stu[N];    //(1)从文件中读出数据,存放到结构体数组中;    //(2)求出每名同学的总分(可以在读入过程中“顺便”计算);    stuNum=getData(stu);    printf("数据读取完毕\n");    int go=1;    int ch;    while(go)    {        printf("请选择下面的功能:\n");        printf("1. 输出成绩单\n");        printf("2. 按总分排序并输出成绩单\n");        printf("3. 输出获得奖学金的同学的名单\n");        printf("4. 输出C语言不及格同学姓名和C语言成绩\n");        printf("5. 你可以想出的成绩管理系统中的其他功能\n");        printf("0. 结束\n");        printf("请选择(0-5):");        scanf("%d", &ch);        switch(ch)        {        case 1:            outputData(stu,stuNum);            break;        case 2:            sort(stu,stuNum);            outputData(stu,stuNum);            break;        case 3:            listScholars1(stu,stuNum);            break;        case 4:            printf("请自行设计函数实现.\n");            printf("相信自己能够!\n");            break;        case 5:            printf("你可以想出很多这方面的需求,增加、删除数据,各种查询…… \n");            printf("想到就能做到! \n");            break;        case 0:            go=0;            break;        }        printf("\n");    }    printf("下次再见!\n");    return 0;}//从文件中读取数据int getData(struct Student s[]){    FILE *infile=fopen("score.txt","r");    //以输入的方式打开文件    if(!infile)                 //测试是否成功打开    {        printf("open error!\n");        exit(1);    }    int i=0;    fscanf(infile, "%s %s %d %d %d", s[i].num, s[i].name, &s[i].c, &s[i].math, &s[i].english);    while(!feof(infile))    {        s[i].grade=s[i].c+s[i].math+s[i].english;        ++i;        fscanf(infile, "%s %s %d %d %d", s[i].num, s[i].name, &s[i].c, &s[i].math, &s[i].english);    }    fclose(infile);    return i;}//按总分排序(降序),用了选择排序void sort(struct Student s[],int n){    int i,j,k;    struct Student t_stu;    for(i=0; i<n-1; i++)    {        k=i;        for(j=i+1; j<n; j++)            if(s[j].grade>s[k].grade) k=j;        t_stu=s[k];        s[k]=s[i];        s[i]=t_stu;    }    return;}//输出成绩单;void outputData(struct Student s[],int n){    int i;    for(i=0; i<n; ++i)    {        printf("%s\t%s\t%d\t%d\t%d\t%d\n", s[i].num,s[i].name,s[i].c,s[i].math,s[i].english,s[i].grade);    }    printf("\n");    return;}//输出得奖学金同学的名单//有30名同学可以获得奖学金,规则是总分高者优先void listScholars1(struct Student s[],int n){    sort(s,n);  //在应用中,并不能保证按总分有序,故需要先排序    printf("恭喜以下同学获得奖学金: \n");    int i=0,j=1;    while (j<=30&&j<=n)    {        if (s[i].c>=60&&s[i].math>=60&&s[i].english>=60)        {            printf("%d\t%s\t%d\n", j, s[i].name, s[i].grade);            j++;        }        i++;    }}//另一种奖学金规则void listScholars2(struct Student s[],int n){    sort(s,n);  //在应用中,并不能保证按总分有序,故需要先排序    printf("恭喜以下同学获得奖学金: \n");    int i=0,j=1;    int g;    while (j<=30&&j<=n)    {        if (s[i].c>=60&&s[i].math>=60&&s[i].english>=60)        {            printf("%d\t%s\t%d\n", j, s[i].name, s[i].grade);            g=s[i].grade;            j++;        }        i++;    }    while(g==s[i].grade)//和刚才输出的最后一个总分相同的同学都有机会获得奖学金    {        if (s[i].c>=60&&s[i].math>=60&&s[i].english>=60)        {            printf("%d\t%s\t%d\n", j, s[i].name, s[i].grade);            j++;        }        i++;    }}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 现要求统计必修课、选修课平均成绩统计每名学生成绩,奖学金成绩排名。程序要求包括以下4个函数。可以以10名同学为例进行设计。 (1)必修课成绩统计的函数; (2)选修课成绩统计的函数; (3)统计每...
  • C语言程序设计》是以实现一个完整的企业项目——学生成绩管理系统为载体展开的,主要实现录入、查询、统计、管理和保存等功能。《C语言程序设计》主要内容包括C语言程序设计概述、C语言编程元素、选择程序设计、...

    《C语言程序设计》是以实现一个完整的企业项目——学生成绩管理系统为载体展开的,主要实现录入、查询、统计、管理和保存等功能。《C语言程序设计》主要内容包括C语言程序设计概述、C语言编程元素、选择程序设计、循环程序设计、数组程序设计、指针程序设计、函数程序设计、结构体程序设计、文件、C语言调试等。

    《C语言程序设计》适用于电子信息工程、计算机科学与技术及其相关专业应用型本科学生,也适用于C语言程序设计的初学者或以C语言为工作对象的工程技术人员;高职教育的相关专业的学生也可以通过内容的删减达到C语言学习的目的。

    更多科学出版社服务,请扫码获取。

    目录

    前言

    第1章C语言程序设计概述1

    1.1C语言概述1

    1.1.1C语言的起源和发展1

    1.1.2C语言的特点2

    1.1.3C程序的基本结构3

    1.2程序设计5

    1.2.1算法5

    1.2.2算法的描述方法8

    1.2.3从算法到程序12

    1.3开发C程序的步骤14

    1.4执行C程序18

    1.4.1C语言开发环境18

    1.4.2解释与编译18

    1.4.3编辑、编译、链接和执行C程序18

    习题23

    第2章C语言编程元素24

    2.1数据类型24

    2.1.1什么是数据类型24

    2.1.2为何有数据类型之分25

    2.1.3数据类型的种类25

    2.2常量26

    2.2.1常量的定义26

    2.2.2特殊常量26

    2.2.3应用常量编程28

    2.3变量28

    2.3.1理解变量28

    2.3.2变量的类型及定义29

    2.3.3变量的使用原则30

    2.4各类数值型数据间的转换30

    2.4.1隐式类型转换30

    2.4.2显式类型转换31

    2.5运算符和表达式31

    2.5.1算术运算符和算术表达式31

    2.5.2赋值运算符和赋值表达式33

    2.5.3关系运算符和关系表达式33

    2.5.4逻辑运算符和逻辑表达式34

    2.5.5运算符优先级总结34

    2.5.6应用运算符和表达式编程35

    2.6输入输出语句36

    2.6.1格式化输出函数printf()36

    2.6.2格式化输入函数scanf()41

    2.6.3字符输入和输出函数43

    2.6.4应用输入和输出语句编程44

    2.7构造数据类型45

    2.7.1数组45

    2.7.2结构体46

    2.8函数48

    2.8.1模块化程序设计49

    2.8.2函数定义的四个要素49

    2.8.3函数的调用50

    2.8.4函数的参数50

    2.9C语言的语句51

    2.10预处理命令51

    2.10.1宏定义51

    2.10.2文件包含52

    习题53

    第3章选择程序设计55

    3.1选择结构55

    3.1.1C语言的选择语句56

    3.1.2选择语句的引入57

    3.1.3选择语句编程要素58

    3.2if语句59

    3.2.1if语句格式59

    3.2.2if语句执行过程60

    3.2.3应用if语句编程62

    3.3嵌套if语句65

    3.3.1多重if-else结构67

    3.3.2if语句的多种嵌套形式71

    3.4条件运算符74

    3.4.1条件运算符的语句格式74

    3.4.2条件运算符的运算优先级75

    3.4.3条件运算符与if-else语句比较75

    3.5switch语句76

    3.5.1switch语句的格式77

    3.5.2switch语句的执行过程77

    3.5.3switch语句编程要素80

    3.5.4应用switch结构编程83

    习题86

    第4章循环程序设计88

    4.1循环控制语句88

    4.1.1C语言的循环语句89

    4.1.2循环的引入90

    4.1.3应用循环结构编程的要素91

    4.2while循环语句93

    4.2.1while循环语句格式93

    4.2.2while循环语句的执行过程94

    4.2.3应用while循环编程的要素95

    4.2.4应用while循环编程96

    4.3do-while循环语句97

    4.3.1do-while循环语句的格式98

    4.3.2do-while话句的执行过程98

    4.3.3应用do-while循环编程100

    4.4for循环语句102

    4.4.1for循环语句格式102

    4.4.2for循环语句的执行过程103

    4.4.3使用for循环编程的要素105

    4.4.4应用for循环编程106

    4.5三种循环语句的比较109

    4.6循环嵌套110

    4.6.1循环嵌套111

    4.6.2循环嵌套的合法形式112

    4.6.3应用循环嵌套编程的要素114

    4.6.4应用循环嵌套编程117

    4.7循环跳转语句119

    4.7.1continue语句120

    4.7.2break语句121

    4.7.3continue和break语句的区别122

    4.8循环程序设计应用实例123

    4.9循环优化129

    习题131

    第5章数组程序设计133

    5.1数组数据类型133

    5.1.1引入数组134

    5.1.2数组的种类136

    5.1.3数组编程要素137

    5.2一维数组138

    5.2.1定义一维数组139

    5.2.2初始化一维数组139

    5.2.3应用一维数组141

    5.3二维数组142

    5.3.1定义二维数组143

    5.3.2初始化二维数组144

    5.3.3应用二维数组145

    5.4字符数组148

    5.4.1初始化字符数组149

    5.4.2字符数组的输入和输出151

    5.4.3字符串处理函数153

    5.4.4应用字符数组156

    5.5数组与循环158

    习题168

    第6章指针程序设计170

    6.1什么是指针170

    6.1.1引入指针170

    6.1.2理解指针171

    6.2指向变量的指针171

    6.2.1指针变量的定义171

    6.2.2指针变量的引用172

    6.2.3应用指针变量173

    6.3指向一维数组的指针176

    6.3.1指向一维数组元素的指针的定义176

    6.3.2通过指针引用一维数组元素177

    6.3.3应用指向一维数组元素的指针179

    6.4指向二维数组的指针180

    6.4.1通过指针访问二维数组180

    6.4.2二维数组的地址表示方法181

    6.4.3维数组指针访问二维数组181

    6.5指针与字符串182

    6.5.1字符指针的定义182

    6.5.2应用字符指针184

    习题187

    第7章函数程序设计188

    7.1引入函数188

    7.2理解函数191

    7.2.1函数的概念191

    7.2.2函数的结构192

    7.2.3函数的定义193

    7.3调用函数196

    7.3.1函数的调用方法196

    7.3.2函数的嵌套调用199

    7.3.3参数的传递方式202

    7.3.4函数原型206

    7.4递归调用207

    7.4.1认识递归207

    7.4.2递归调用编程要点209

    7.4.3递归编程210

    7.5函数中的变量213

    7.5.1变量的作用域及类型213

    7.5.2变量的存储类型215

    7.6函数的程序设计方法220

    7.6.1函数功能分解220

    7.6.2设计函数问传递的参数221

    7.6.3函数实现方法222

    7.7函数应用224

    习题229

    第8章结构体程序设计230

    8.1结构体数据类型230

    8.1.1引入结构体231

    8.1.2结构体类型变量的定义和使用233

    8.1.3结构体类型变量的赋值和初始化234

    8.1.4结构体类型变量之成员变量的访问234

    8.2结构体与函数调用236

    8.2.1结构体类型变量地址作实参236

    8.2.2结构体类型变量的成员作实参237

    8.2.3结构体类型变量作实参239

    8.3结构体数组及应用240

    8.4结构体数组与指针243

    8.5结构体编程应用实例254

    8.6结构体程序相关技巧265

    8.7共用体数据类型266

    8.7.1引入共用体266

    8.7.2共用体类型的定义267

    8.7.3共用体类型变量的定义267

    8.7.4共用体类型变量的引用268

    8.7.5共用体类型变量的应用268

    8.8枚举数据类型270

    8.8.1引入枚举270

    8.8.2枚举类型的声明270

    8.8.3枚举类型变量的定义271

    8.8.4枚举类型变量的使用271

    习题272

    第9章文件274

    9.1文件的基本概念274

    9.1.1文件的定义275

    9.1.2文件类型指针275

    9.2打开和关闭文件276

    9.2.1打开文件276

    9.2.2关闭文件277

    9.3以字符形式读写文件数据278

    9.3.1写字符函数fputc()278

    9.3.2读字符函数电fgetc()278

    9.3.3判断文件尾函数feof()279

    9.3.4以字符形式读写文件编程280

    9.4以数据块形式读写文件282

    9.4.1写数据块函数fwrite282

    9.4.2读数据块函数fread()283

    9.5以格式读写文件284

    9.5.1写格式函数fprintf()285

    9.5.2读格式函数fscanf()286

    9.6以字符串形式读写文件287

    9.6.1写字符串函数fputs()287

    9.6.2读字符串函数fgets()288

    9.6.3出错检测函数ferror()289

    9.7随机访问数据文件289

    9.7.1随机定位函数fseek()290

    9.7.2测试当前位置函数ftell()291

    9.7.3文件头定位函数rewind()292

    9.8应用文件函数编程293

    习题299

    第10章C语言调试301

    10.1调试的定义301

    10.1.1C语言的BUG306

    10.1.2断点308

    10.2单步调试309

    10.2.1查看变量的内容309

    10.2.2单步跟踪312

    10.2.3F7和F8的区别314

    10.3C语言编译警告类型的解决方法315

    10.4编写易于调试的代码318

    10.4.1编程风格318

    10.4.2借势C++319

    参考文献322

    附录323

    附录1C语言的32个关键字及其含义323

    附录2C语言编程元素及其适用场合324

    附录3常用字符与ASCII码的对照表327

    附录4常用键盘ASCII码对照328

    附录5C语言运算符及优先级330

    附录6C语言的库函数332

    附录7常见的编程错误338

    展开全文
  • 3、统计全班每门课程的平均分,并计算各分数段(60以下,60~69,70~79,80~89,90以上)的学生人数,将结果写入文件。 4、按格式在屏幕上显示出每名学生成绩条:每名学生占一行,行与行之间要有一个空行;同一行的...
  • 本题要求编写程序读入N个学生的百分制成绩统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。 ...
  • 习题3-4 统计学生成绩 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于...
  • 程序中一共包括了八个模块,分别是:创建学生资料模块、查询学生成绩模块、删除学生资料模块、追加学生资料模块、显示学生成绩模块、统计学生成绩模块、成绩排序模块、将学生资料保存到文件模块。
  • 习题3-4 统计学生成绩 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于...
  • 程序设计基础实训 项目名称 学生学分管理 系 别 计算机工程系 专 业 计算机网络技术 班 级 0922211 学生 指导教师 韦立蓉 北 京 信 息 职 业 技 术 学 院 2010年 1 月 日 一项目背景介绍 概要介绍此项目设计的意义和...
  • 习题9-6 按等级统计学生成绩 题目要求 实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。 函数接口定义 int set_grade( struct student *p, int n ); 其中p是指向学生信息的结构体数组的指针,该...
  • 本题要求编写程序读入N个学生的百分制成绩统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。...
  • #include<stdio.h> int main(void) { int n; int grade; int s=0; int count=0; float average=0; scanf("%d",&n); getchar(); if(n==0) { average=0; count=0; } ... i++)
  • 习题3-4 统计学生成绩 (15 分) 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70...
  • C语言》课程设计——学生成绩统计一、课题功能描述二、基本原理三、主要技术问题的描述四、程序代码 一、课题功能描述 在计算机文化基础课中讲了用EXCEL处理数据表,可以对数据表进行填充数据、分类汇总等操作,...
  • 习题3-4 统计学生成绩 (15 分) 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70...
  • 本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。 函数接口定义: int set_grade( struct student *p, int n ); 其中p是指向学生信息的结构体数组的指针,该结构体的定义为: struct student...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 327
精华内容 130
关键字:

c语言程序设计统计学生成绩

c语言 订阅