学生成绩
现有若干个学生(不超过100的数据记录,每个记录包括学号姓名,三科成绩,学号不超过15位, 且有字母。成绩为整数,每名学生的姓名不超过10个字母,且只包含字母,读入n条记录,再按要求输出。
输入描述
学生数量N占一行,每个学生的学号、姓名、三科成绩占一行,空格分开。
输出描述
每个学生的学号、姓名、三科成绩占一行,逗号分开。
示例
输入
a111 zhblue 70 80 90
b111 newsclan 90 85 75
输出
2
a111 zhblue 70 80 90
b111 newsclan 90 85 75
思路
-
将学生的属性定义为一个字符数组,方便遍历输出。
-
(输入不能使用平常的输入了,要用istringstream输入流。)
-
首先先用字符串s接收每一行,若该行长度为0,则输出,否则可以继续输入。
-
然后将s作为输入流输入,(istringstream可以利用分隔符(空格)自动分割。所以输入属性时要加空格,不然就当做同一个属性了)然后sum++。
-
最后利用sum循环输出。
具体实现
#include<bits/stdc++.h>
using namespace std;
struct node{
string s,n;
int g1,g2,g3;
}p[100]; //定义结构体数组p[100],其长度是100,相当于要记录100个学生的信息
int main(){
string s;
int sum=0;
while(getline(cin,s)){
if(s.size()==0) break;
istringstream iss;
iss.str(s); //将s作为输入流输入
iss>>p[sum].s>>p[sum].n>>p[sum].g1>>p[sum].g2>>p[sum].g3;
sum++;
}
cout<<sum<<endl;
for(int i=0; i<sum; i++){
cout<<p[i].s<<" "<<p[i].n<<" "<<p[i].g1<<" "<<p[i].g2<<" "<<p[i].g3<<" "<<endl;
}
return 0;
}
小结
-
str函数:将string类型转化为字符串数组。
-
istringstream:c++输入输出控制类,头文件为< sstream >。可以当cin使用。可以以空格为分隔符把该行划分。
-
可以定义结构体数组,来方便循环遍历。
阶乘求和
求和s=1! + 2! + 3! +…+ 10!
思路
首先i从1到10循环,在循环体中计算i的阶乘。在纸上写一下,可找到规律。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
for(int i=1; i<=10; i++){
int sum1=1;
for(int j=i; j>=1; j--){
sum1*=j; //计算i的阶乘
}
sum+=sum1; //i的阶乘和
}
cout<<sum;
return 0;
}