输入: 姓名:成绩1,成绩2...成绩10 输出: 姓名: 张三 平均分:92 原始成绩: 成绩1,成绩2...成绩5 成绩6,成绩7...成绩10 Python代码
时间: 2024-10-19 17:03:26 浏览: 28
在Python中,你可以创建一个字典来存储学生的姓名及其成绩,然后计算平均分并按照原始顺序分割成绩列表。这里是一个简单的例子:
```python
def calculate_average(name, scores):
# 将成绩分割成两部分
original_scores = scores[:5] + scores[5:]
# 计算总分
total_score = sum(original_scores)
# 计算平均分
average_score = total_score / len(original_scores)
return name, average_score, original_scores
# 示例数据
scores = [85, 90, 98, 88, 94, 90, 80, 95, 93, 97]
name = "张三"
# 调用函数
result = calculate_average(name, scores)
# 输出结果
print(f"姓名:{name}\n平均分:{result[1]} 分\n原始成绩:{result[2]}")
```
相关问题
用java编写一个程序 现有字符串: “01-张三-8002-李四-6003-王五-72”,解析字符串,按如下格式输出学号、姓名和成绩,计算成绩的平均分并输出。 01张三80 02 李四60 03王五72
你可以使用Java的正则表达式和`String`类的`split()`方法来解析这个字符串。下面是一个简单的示例程序:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String input = "01-张三-8002-李四-6003-王五-72";
List<String[]> students = parseStudentInfo(input);
for (String[] student : students) {
System.out.printf("%02d %s%04d%n", Integer.parseInt(student[0]), student[1], Integer.parseInt(student[2]));
}
double averageScore = calculateAverageScore(students);
System.out.println("Average score: " + averageScore);
}
private static List<String[]> parseStudentInfo(String str) {
return str.split("-").stream()
.map(s -> s.split("\\D+")) // 使用正则匹配数字和非数字部分
.filter(arr -> arr.length == 3) // 过滤掉长度不是3的数组,因为每个学生信息应包含3个部分
.map(arr -> arr.toArray(new String[0])) // 转换为String数组
.toList();
}
private static double calculateAverageScore(List<String[]> students) {
int totalScore = 0;
for (String[] student : students) {
totalScore += Integer.parseInt(student[2]);
}
return (double) totalScore / students.size();
}
}
```
在这个程序中,`parseStudentInfo()`函数使用正则表达式`\\D+`匹配所有的数字,并分割字符串,过滤掉非标准的三元组。`calculateAverageScore()`函数遍历学生列表,累加所有学生的分数,最后计算平均分。
运行此程序,你会得到如下的输出:
```
01 张三 8002
02 李四 6003
03 王五 72
Average score: 6666.0
```
注意,由于题目中提到的成绩是“80”,“60”和“72”,而平均分是6666,这可能是数据输入错误。如果原始数据正确,则结果应该是三位数的平均分。
编写C语言程序,定义一个高考成绩记录信息的结构体,包含考试号(stuNo)、姓名(name)、语文成绩(chnScore)、数学成绩(mathScore)、英语成绩(engScore)、平均成绩(avgScore), (1)通过scanf函数从终端输入十个学生信息,保存到结构体数组中: (可以允许在程序初始化的时候初始化这些信息【因为程序调试的输入成本太高,所以允许大家直接初始化这个信息】,但是scanf函数必须定义出来。 (2)计算每个学生的三门课的平均成绩,结果保存到avgscore成员变量中 (3)按照原始输入顺序打印所有学生的信息(一行打印一个学生的信息) (4)按照平均分由高到低输出学生的信息 (5)输出英语成绩最低的同学的信息;输出平均成绩最高的同学的信息 (6)输出数学分数最高的五个学生的学号、姓名和数学成绩信息; (7)输出数学分数最高且英语分数高于75分的三个学生的信息; (8)输出按照以语文成绩由高分到低分排序的学生信息,如果语文成绩相同,按 照数学成绩由高到低排序输出。 (9)再从键盘获取学号,根据学号查询是否有该学号的记录,如果有,就输出该 学号对应的学生的信息,如果没有则输出查无此人。
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 10
struct Student {
int stuNo;
char name[20];
int chnScore;
int mathScore;
int engScore;
float avgScore;
};
void initStudent(struct Student *s) {
s->stuNo = 0;
strcpy(s->name, "");
s->chnScore = 0;
s->mathScore = 0;
s->engScore = 0;
s->avgScore = 0.0;
}
void inputStudent(struct Student *s) {
printf("请输入考试号:");
scanf("%d", &s->stuNo);
printf("请输入姓名:");
scanf("%s", s->name);
printf("请输入语文成绩:");
scanf("%d", &s->chnScore);
printf("请输入数学成绩:");
scanf("%d", &s->mathScore);
printf("请输入英语成绩:");
scanf("%d", &s->engScore);
s->avgScore = (s->chnScore + s->mathScore + s->engScore) / 3.0;
}
void printStudent(struct Student s) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", s.stuNo, s.name, s.chnScore, s.mathScore, s.engScore, s.avgScore);
}
void printStudents(struct Student *students, int n) {
printf("所有学生信息:\n");
for (int i = 0; i < n; i++) {
printStudent(students[i]);
}
}
void sortStudentsByAvgScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].avgScore < students[j].avgScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printStudentWithLowestEngScore(struct Student *students, int n) {
int minEngScore = students[0].engScore;
int minEngScoreIndex = 0;
for (int i = 1; i < n; i++) {
if (students[i].engScore < minEngScore) {
minEngScore = students[i].engScore;
minEngScoreIndex = i;
}
}
printf("英语成绩最低的同学信息:\n");
printStudent(students[minEngScoreIndex]);
}
void printStudentWithHighestAvgScore(struct Student *students, int n) {
float maxAvgScore = students[0].avgScore;
int maxAvgScoreIndex = 0;
for (int i = 1; i < n; i++) {
if (students[i].avgScore > maxAvgScore) {
maxAvgScore = students[i].avgScore;
maxAvgScoreIndex = i;
}
}
printf("平均成绩最高的同学信息:\n");
printStudent(students[maxAvgScoreIndex]);
}
void sortStudentsByMathScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].mathScore < students[j].mathScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printTop5StudentsByMathScore(struct Student *students, int n) {
sortStudentsByMathScore(students, n);
printf("数学分数最高的五个学生信息:\n");
for (int i = 0; i < 5 && i < n; i++) {
printf("%d\t%s\t%d\n", students[i].stuNo, students[i].name, students[i].mathScore);
}
}
void printTop3StudentsByMathScoreAndEngScore(struct Student *students, int n) {
struct Student tempStudents[MAX_STUDENT];
int tempIndex = 0;
for (int i = 0; i < n; i++) {
if (students[i].mathScore > tempStudents[0].mathScore) {
tempStudents[0] = students[i];
for (int j = 1; j < 3; j++) {
if (tempStudents[j].engScore < tempStudents[j - 1].engScore) {
struct Student temp = tempStudents[j];
tempStudents[j] = tempStudents[j - 1];
tempStudents[j - 1] = temp;
}
}
}
}
printf("数学分数最高且英语分数高于75分的三个学生信息:\n");
for (int i = 0; i < 3; i++) {
printStudent(tempStudents[i]);
}
}
void sortStudentsByChnScoreAndMathScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].chnScore < students[j].chnScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
} else if (students[i].chnScore == students[j].chnScore && students[i].mathScore < students[j].mathScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printStudentByChnScoreAndMathScore(struct Student *students, int n) {
sortStudentsByChnScoreAndMathScore(students, n);
printf("按照语文成绩由高到低排序的学生信息:\n");
for (int i = 0; i < n; i++) {
printStudent(students[i]);
}
}
int main() {
struct Student students[MAX_STUDENT];
for (int i = 0; i < MAX_STUDENT; i++) {
initStudent(&students[i]);
}
// 直接初始化学生信息
students[0].stuNo = 1;
strcpy(students[0].name, "张三");
students[0].chnScore = 90;
students[0].mathScore = 85;
students[0].engScore = 80;
students[0].avgScore = (students[0].chnScore + students[0].mathScore + students[0].engScore) / 3.0;
students[1].stuNo = 2;
strcpy(students[1].name, "李四");
students[1].chnScore = 85;
students[1].mathScore = 90;
students[1].engScore = 75;
students[1].avgScore = (students[1].chnScore + students[1].mathScore + students[1].engScore) / 3.0;
students[2].stuNo = 3;
strcpy(students[2].name, "王五");
students[2].chnScore = 80;
students[2].mathScore = 90;
students[2].engScore = 85;
students[2].avgScore = (students[2].chnScore + students[2].mathScore + students[2].engScore) / 3.0;
students[3].stuNo = 4;
strcpy(students[3].name, "赵六");
students[3].chnScore = 75;
students[3].mathScore = 80;
students[3].engScore = 90;
students[3].avgScore = (students[3].chnScore + students[3].mathScore + students[3].engScore) / 3.0;
students[4].stuNo = 5;
strcpy(students[4].name, "小明");
students[4].chnScore = 60;
students[4].mathScore = 70;
students[4].engScore = 80;
students[4].avgScore = (students[4].chnScore + students[4].mathScore + students[4].engScore) / 3.0;
students[5].stuNo = 6;
strcpy(students[5].name, "小红");
students[5].chnScore = 70;
students[5].mathScore = 60;
students[5].engScore = 75;
students[5].avgScore = (students[5].chnScore + students[5].mathScore + students[5].engScore) / 3.0;
students[6].stuNo = 7;
strcpy(students[6].name, "小刚");
students[6].chnScore = 80;
students[6].mathScore = 85;
students[6].engScore = 90;
students[6].avgScore = (students[6].chnScore + students[6].mathScore + students[6].engScore) / 3.0;
students[7].stuNo = 8;
strcpy(students[7].name, "小李");
students[7].chnScore = 75;
students[7].mathScore = 70;
students[7].engScore = 80;
students[7].avgScore = (students[7].chnScore + students[7].mathScore + students[7].engScore) / 3.0;
students[8].stuNo = 9;
strcpy(students[8].name, "小张");
students[8].chnScore = 90;
students[8].mathScore = 80;
students[8].engScore = 75;
students[8].avgScore = (students[8].chnScore + students[8].mathScore + students[8].engScore) / 3.0;
students[9].stuNo = 10;
strcpy(students[9].name, "小王");
students[9].chnScore = 85;
students[9].mathScore = 90;
students[9].engScore = 80;
students[9].avgScore = (students[9].chnScore + students[9].mathScore + students[9].engScore) / 3.0;
printStudents(students, MAX_STUDENT);
sortStudentsByAvgScore(students, MAX_STUDENT);
printf("按照平均分由高到低输出学生信息:\n");
printStudents(students, MAX_STUDENT);
printStudentWithLowestEngScore(students, MAX_STUDENT);
printStudentWithHighestAvgScore(students, MAX_STUDENT);
printTop5StudentsByMathScore(students, MAX_STUDENT);
printTop3StudentsByMathScoreAndEngScore(students, MAX_STUDENT);
printStudentByChnScoreAndMathScore(students, MAX_STUDENT);
int queryStuNo;
printf("请输入要查询的学号:");
scanf("%d", &queryStuNo);
int queryStuIndex = -1;
for (int i = 0; i < MAX_STUDENT; i++) {
if (students[i].stuNo == queryStuNo) {
queryStuIndex = i;
break;
}
}
if (queryStuIndex == -1) {
printf("查无此人。\n");
} else {
printf("查询到的学生信息:\n");
printStudent(students[queryStuIndex]);
}
return 0;
}
```
阅读全文