不知道有多少门课程(由用户自己确定)
用户需要做的是:依次输入这门课程的分数,以及该门课程所占的学分。(做的时候应该是遇到-1就停止?记得学过这样的,但是还是不太会哈)
最后屏幕输出的是 加权成绩,即 所有 成绩x学分 之和 除以 学分之和
突然想到这么个问题,但是水平有限无从下手。
希望好心人能够帮助写一个程序,最好有注释的:)
先谢谢了
本人(无界)用C-Free亲手编写的,亲测可运行
# include <stdio.h>
struct stu{ //用结构体数组储存学生的成绩和学分
float score; //成绩
float credit; //学分
}Stu[100];
int main()
{
unsigned int x=1,y=0;
//y用于结构体数组Stu,同时用于循环计算该学生成绩
double sxcsum=0,csum=0,sum;
//sxcsum记录所有成绩乘以学分之和
//csum学分之和
//sum加权成绩
printf("提示:输入完后按回车键结束,输入负数代表学生成绩输入完成\n");
while(1) //循环用户输入成绩,直到用户输入完成后结束
{
printf("请输入第%d门课程的成绩:",x);
scanf("%f",&Stu[y].score);
getchar(); //吸收回车键字符
if(Stu[y].score<0) break; //输入负数结束循环,结束学生输入成绩操作
printf("请输入第%d门课程的学分:",x++);
scanf("%f",&Stu[y++].credit);
getchar();
if(Stu[y-1].credit<0) break;
}
printf("---输入成绩结束---\n");
for(x=0;x<y;x++) //循环计算成绩,直到算完所有课程 ,y变量储存共有多少门课程
{
sxcsum+=Stu[x].score*Stu[x].credit;
csum+=Stu[x].credit;
}
sum=sxcsum/csum;
printf("该学生的加权成绩为:%g\n",sum);
return(0);
}
---“无界”回答---
# include <stdio.h>
struct stu{ //用结构体数组储存学生的成绩和学分
float score; //成绩
float credit; //学分
}Stu[100];
int main()
{
unsigned int x=1,y=0;
//y用于结构体数组Stu,同时用于循环计算该学生成绩
double sxcsum=0,csum=0,sum;
//sxcsum记录所有成绩乘以学分之和
//csum学分之和
//sum加权成绩
printf("提示:输入完后按回车键结束,输入负数代表学生成绩输入完成\n");
while(1) //循环用户输入成绩,直到用户输入完成后结束
{
printf("请输入第%d门课程的成绩:",x);
scanf("%f",&Stu[y].score);
getchar(); //吸收回车键字符
if(Stu[y].score<0) break; //输入负数结束循环,结束学生输入成绩操作
printf("请输入第%d门课程的学分:",x++);
scanf("%f",&Stu[y++].credit);
getchar();
if(Stu[y-1].credit<0) break;
}
printf("---输入成绩结束---\n");
for(x=0;x<y;x++) //循环计算成绩,直到算完所有课程 ,y变量储存共有多少门课程
{
sxcsum+=Stu[x].score*Stu[x].credit;
csum+=Stu[x].credit;
}
sum=sxcsum/csum;
printf("该学生的加权成绩为:%g\n",sum);
return(0);
}
---“无界”回答---
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2020-12-17
#include <stdio.h>
void main(){
float cj, scj=0;
int xf, sxf=0;
while(1){
printf("输入 成绩 学分(-1 -1数据结束):");
scanf("%f%d",&cj,&xf);
if(cj==-1)
break;
scj+=cj*xf;
sxf+=xf;
}
printf("总评成绩=%.2f\n", scj/sxf);
}追问
void main(){
float cj, scj=0;
int xf, sxf=0;
while(1){
printf("输入 成绩 学分(-1 -1数据结束):");
scanf("%f%d",&cj,&xf);
if(cj==-1)
break;
scj+=cj*xf;
sxf+=xf;
}
printf("总评成绩=%.2f\n", scj/sxf);
}追问
感谢阿,但是我运行了一下,不太会用你这个,成绩和学分之间 是空格?
-1结束那段也不太懂
成绩和学分之间 是空格。成绩(cj)等于-1时执行break语句跳出循环。
追问还是算不出。。。
追答学分是小数的时候 就出错了
本回答被提问者采纳第2个回答 2014-07-16
#include <stdio.h>
#define STUDENT_COUNT 3 //宏定义 定义学生的成绩科目数
int main()
{
float sumCredit=0;//总学分
float sumScore=0;//总的加权分数
float score[STUDENT_COUNT];//存放学生的成绩
float credit[STUDENT_COUNT];//存放学生的成绩对应的学分
for (int i=0;i<STUDENT_COUNT; i++) {
printf("请输入学生第%d科的成绩:",i+1);
while (1) {
scanf("%f",&score[i]);
if (score[i]>=0&&score[i]<=100) {//保证输入的分数在合理区间
break;
}
else
{
printf("您输入的成绩不再0-100范围内请重新输入");
}
}
printf("请输入学生第%d科的成绩对应的学分:",i+1);
while (1) {
scanf("%f",&credit[i]);
if (credit[i]>=1&&credit[i]<=10) {//保证输入的学分在合理区间
break;
}
else
{
printf("您输入的学分不再1-10范围内请重新输入");
}
}
}
for (int i=0; i<STUDENT_COUNT; i++) {
sumCredit+=credit[i];
}
for (int i=0; i<STUDENT_COUNT; i++) {
printf("学生第%d科的加权成绩:%f\n",i+1,(score[i]*credit[i])/sumCredit);
sumScore+=(score[i]*credit[i])/sumCredit;
}
printf("学生的加权成绩为:%f\n",sumScore);
return 0;
}追问
#define STUDENT_COUNT 3 //宏定义 定义学生的成绩科目数
int main()
{
float sumCredit=0;//总学分
float sumScore=0;//总的加权分数
float score[STUDENT_COUNT];//存放学生的成绩
float credit[STUDENT_COUNT];//存放学生的成绩对应的学分
for (int i=0;i<STUDENT_COUNT; i++) {
printf("请输入学生第%d科的成绩:",i+1);
while (1) {
scanf("%f",&score[i]);
if (score[i]>=0&&score[i]<=100) {//保证输入的分数在合理区间
break;
}
else
{
printf("您输入的成绩不再0-100范围内请重新输入");
}
}
printf("请输入学生第%d科的成绩对应的学分:",i+1);
while (1) {
scanf("%f",&credit[i]);
if (credit[i]>=1&&credit[i]<=10) {//保证输入的学分在合理区间
break;
}
else
{
printf("您输入的学分不再1-10范围内请重新输入");
}
}
}
for (int i=0; i<STUDENT_COUNT; i++) {
sumCredit+=credit[i];
}
for (int i=0; i<STUDENT_COUNT; i++) {
printf("学生第%d科的加权成绩:%f\n",i+1,(score[i]*credit[i])/sumCredit);
sumScore+=(score[i]*credit[i])/sumCredit;
}
printf("学生的加权成绩为:%f\n",sumScore);
return 0;
}追问
运行环境?
到我这里各种报错
xcode
很感谢帮助 但是我这个真心运行不了