个不超过 100 的正整数,表示每道判断题的正确答案,其中 1 表示正确, 表示错误。随后 n 行,每行给出一个学生的解答,其中 表示该生选择“错误”,1 表示该生选择“正确”,数字间以空格分隔。\n\n输出格式:\n按照输入的顺序输出每个学生的得分,每个分数占一行,输出小数点后 1 位。用C语言
时间: 2023-12-17 17:04:14 浏览: 16
以下是一个可能的实现:
```c
#include <stdio.h>
#define MAX_N 100
int main() {
int ans[MAX_N], res[MAX_N];
int n, m;
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
scanf("%d", &ans[i]);
}
for (int i = 0; i < n; i++) {
int score = 0;
for (int j = 0; j < m; j++) {
scanf("%d", &res[j]);
if (res[j] == ans[j]) {
score++;
}
}
printf("%.1f\n", (float)score / m * 100);
}
return 0;
}
```
该程序首先读入正确答案和学生的答案,然后对每个学生的答案进行比较得到分数,最后输出分数。注意要将分数乘以 100 并除以总题数得到百分比,并将结果输出到小数点后一位。
相关问题
个不超过 100 的正整数,表示每道判断题的正确答案,其中 1 表示正确, 表示错误。随后 n 行,每行给出一个学生的解答,其中 表示该生选择“错误”,1 表示该生选择“正确”,数字间以空格分隔。\n\n输出格式:\n按照输入的顺序输出每个学生的得分,每个分数占一行,输出小数点后 1 位。
这道题目涉及到数学计算和字符串处理,需要将输入的字符串转化为数字进行计算,同时输出结果时需要格式化输出保留小数点后一位。下面是一份 Python 的代码示例:
```python
# 读入正确答案
answers = input().split()
# 读入学生答案并计算得分
while True:
try:
line = input().split()
score = 0
for i in range(len(answers)):
if answers[i] == line[i]:
score += 1
print("{:.1f}".format(score / len(answers) * 100)) # 输出得分,保留一位小数
except:
break
```
其中,`input()` 用于读入用户输入的字符串,`split()` 方法用于将字符串按照空格分割成一个列表。在计算得分时,我们使用一个变量 `score` 来记录正确答案的个数,然后将其除以总题目数再乘以 100 即可得到百分比分数。在输出时,我们使用了 `format()` 方法来格式化输出字符串,保留一位小数。
输入第一行给出一个正整数 n(≤ 100),随后 n 行,每行按照 编号-答案 的格式给出一道题的 4 个选项,t 表示正确选项,f 表示错误选项。选项间用空格分隔。
### 回答1:
题目描述:
输入一个正整数 n(≤ 100),然后输入 n 行,每行表示一道题目,格式为 编号-答案,其中 t 表示正确选项,f 表示错误选项,选项之间用空格分隔。
回复:
题目要求输入 n 行,每行表示一道题目,格式为 编号-答案,其中 t 表示正确选项,f 表示错误选项,选项之间用空格分隔。其中 n 是一个不大于 100 的正整数。
### 回答2:
这个题目需要我们读入多行不同格式的输入,然后对这些输入进行处理和输出。
首先,我们可以使用 scanf() 函数读取第一行的正整数 n。然后,我们可以使用一个循环,读入后续的 n 行输入。在每一行中,我们可以使用 scanf() 函数读取题目编号和答案选项(包括正确选项和错误选项)。读取时,我们可以利用“%d-%1s %*1s %*1s %*1s”这个格式字符串来分别读取题目编号和答案选项,并且忽略其它选项。
读入完成后,我们需要对输入进行处理和输出。我们可以使用一个数组或者 map 来保存每个问题的正确选项,然后逐一读取每个问题的答案选项,和正确选项进行比较,输出相应的结果。在输出时,我们可以使用 printf() 函数来输出题目编号和结果,具体格式为“编号 答案”。
最终程序大概可以如下所示:
```
#include <cstdio>
#include <map>
using namespace std;
int main() {
int n;
scanf("%d", &n);
map<int, char> correct; // 保存每个问题的正确选项
for (int i = 0; i < n; ++i) {
int id;
char ans;
scanf("%d-%1s %*1s %*1s %*1s", &id, &ans);
correct[id] = ans;
}
int m;
scanf("%d", &m);
for (int i = 0; i < m; ++i) {
char ans[5];
scanf("%d %s", &id, ans);
bool flag = true; // 标记是否回答正确
int len = strlen(ans) - 1;
printf("Case %d: ", i + 1); // 输出结果
if (correct[id] != ans[len]) {
flag = false;
}
if (flag) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
```
需要注意的是,多行输入和多行输出都需要结合循环来完成,且在输出时还需注意格式的控制。
### 回答3:
这是一道关于编程的问题,题目要求输入一个正整数n和n道题目,并对每道题目的正确与否进行判断。根据题目描述,每道题目的格式为:“编号-答案”,其中答案有t和f两种选项,分别表示正确和错误。
那么,我们该如何解决这道问题呢?首先,我们需要用程序读入n个字符串,每个字符串都表示一道题目。对于每个字符串,我们需要解析出题目的编号和答案,并判断答案是否正确。可以使用字符串的split方法将字符串按照“-”进行切分,得到题目的编号和答案。接着,我们需要对答案进行判断:如果是正确答案,就累加一个计数器;否则,什么也不做。
最后,我们输出正确答案的数量,即为题目的正确数量。至此,我们完成了对题目的解析和正确数量的计数,完整的代码如下所示:
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
int cnt = 0; // 计数器
for (int i = 0; i < n; i++) {
string s;
cin >> s;
string id = s.substr(0, s.find("-")); // 提取题目编号
string ans = s.substr(s.find("-")+1); // 提取答案
if (ans == "t") cnt++; // 判断答案是否正确
}
cout << cnt << endl; // 输出正确答案的数量
return 0;
}