首页 > 专题系列 > C基础练习 > C语言程序设计-学生成绩管理[文件应用]
2013
12-18

C语言程序设计-学生成绩管理[文件应用]

2041 学生成绩管理

Description

学生成绩管理,每个学生的数据包括学号、姓名、3门课的成绩,数据保存在文件中(内存中只保留一个学生的信息,处理后写回文件)。分别用三个函数实现如下各操作,主函数中列出选择菜单,根据选择执行相应功能。

1)输入学生成绩;

2)给出学号或姓名,找到该学生的信息。

3)给出学号或姓名,修改某学生的信息。

4)找出某门课程不及格的学生,并输出其学号和不及格课程的成绩;

5)给出所有学生的各科平均成绩和总平均成绩。

6)给出学号,修改某学生的信息。(选作)

Input

Output

Sample Input

Sample Output

1

#include"stdio.h"
#include"stdlib.h"
typedef struct Student
{
  int no;
  char name[22];
  float score[3];

}S;

void main()
{
	int n;
    S s[100];
	scanf("%d",&n);
    FILE *fp;
	for(int i=0;i<n;i++)
	{
	   scanf("%d%s",&s[i].no,&s[i].name);
	   for(int j=0;j<3;j++)
		   scanf("%d",&s[i].score[j]);

	}

	if((fp=fopen("t1.txt","w"))==NULL)
	{printf("cannot open");
	exit(1);
	}
	for(int j=0;j<n;j++)
	{
	   fwrite(&s[j],sizeof(S),1,fp);

	}
    fclose(fp);

}

 


  1. 这道题这里的解法最坏情况似乎应该是指数的。回溯的时候
    O(n) = O(n-1) + O(n-2) + ….
    O(n-1) = O(n-2) + O(n-3)+ …
    O(n) – O(n-1) = O(n-1)
    O(n) = 2O(n-1)

  2. for(int i=1; i<=m; i++){
    for(int j=1; j<=n; j++){
    dp = dp [j-1] + 1;
    if(s1.charAt(i-1) == s3.charAt(i+j-1))
    dp = dp[i-1] + 1;
    if(s2.charAt(j-1) == s3.charAt(i+j-1))
    dp = Math.max(dp [j - 1] + 1, dp );
    }
    }
    这里的代码似乎有点问题? dp(i)(j) = dp(i)(j-1) + 1;这个例子System.out.println(ils.isInterleave("aa","dbbca", "aadbbcb"));返回的应该是false

  3. 学算法中的数据结构学到一定程度会乐此不疲的,比如其中的2-3树,类似的红黑树,我甚至可以自己写个逻辑文件系统结构来。