编写一个程序,从键盘输入5个学生的分数(以非数字字符串结束),然后输出高于平均分的分数。

编写一个程序,从键盘输入5个学生的分数(以非数字字符串结束),然后输出高于平均分的分数。,第1张

完整代码如下:

import javautil;

/

  从键盘输入5个学生的分数(以非数字字符串结束),然后输出高于平均分的分数

  @author young

 

 /

public class He {

public static void main(String[] args) {

Scanner sc = new Scanner(Systemin);

String reg="^[0-9]+$" ;

float[] s = new float[5];

int count = 0;

float avg = 0, sum = 0;

Systemoutprintln("输入5个分数,以非数字结束:");

while(true){

String f = scnextLine();

if(fmatches(reg)){

s[count] = IntegerparseInt(f);

}else {

break;

}

count ++;

}

//计算平均数

for(int j=0;j<slength;j++){

            sum+=s[j];

            avg=sum/slength;

       }

Systemoutprintln("平均分是:" + avg);

//输入大于平均数的分数

Systemoutprint("大于平均分的分数是: ");

for(float temp : s){

if(temp > avg){

Systemoutprint("  " + temp);

}

}

}

}

运行结果如下:

//分数序列如:2\1,3\25\3,8\513\8,21\13的前20项之和。 \x0d\#include//直接看这一组数列有什么规律,很容易发现,从2/1开始,后一组的分母为前一组的一个分子\x0d\//后一项的分子为前一项的分母分子之和,如果用An表示分母,Bn表示分子,则有递推工式,B(n+1)=An::A(n+1)=An+Bn知道这个就很好办了\x0d\float getMe(int n)//这个函数就是求第n项的那个数的值\x0d\{\x0d\ float An=20;float Bn=10;\x0d\ float temp;\x0d\ while(--n)\x0d\ {\x0d\ temp=Bn;\x0d\ Bn=An;\x0d\ An=An+temp;\x0d\ }\x0d\ return(An/Bn);}\x0d\void main()\x0d\{\x0d\ int n;\x0d\ float theSum=00;\x0d\ printf("请输入你想要求的前n项的和:");\x0d\ scanf("%d",&n);\x0d\ for(;n>0;n--)\x0d\ {\x0d\ theSum=theSum+getMe(n);\x0d\ }\x0d\ printf("%f",theSum);\x0d\}

#include <iostream>

using namespace std;

/最简单的方法就是,分子和分母如果可以同除一个数,那么就约去这个数

直到这个除数大于分子或分母,那么这个分数就是最简的了/

int main()

{

int n,m,max;

cout<<"输入分子:"<<endl;

cin>>n;

cout<<"输入分母:"<<endl;

cin>>m;

for(int i=2;n>=i;i++)

if(n%i==0 && m%i==0)

{

n/=i;

m/=i;

i--;

}

cout<<n<<"/"<<m<<endl;

return 0;

}

//这是分数 *** 作类的定义代码:保存为Fractionh文件

#include<iostreamh>

#include<stdlibh>

#include<stringh>

class Fraction

{

public:

Fraction();

friend const Fraction operator +(const Fraction& lhs,const Fraction& rhs);

friend const Fraction operator - (const Fraction& lhs,const Fraction& rhs);

friend const Fraction operator / (const Fraction& lhs,const Fraction& rhs);

friend const Fraction operator (const Fraction& lhs,const Fraction& rhs);

long Gcd(long num,long deno);//求最大公约数

void Print();//输出函数

void Simplify();//分数化简

void Read();

int StrIndex(char s[],int pos,char t);

char SubString(char sub[],char s[],unsigned int pos,unsigned int len);

private:

double numerator;//分子

double denominator;//分母

char arr[50];

char arr1[50];

char arr2[50];

};

Fraction::Fraction()

{

this->numerator = 1;

this->denominator = 1;

}

const Fraction operator+(const Fraction& lhs,const Fraction& rhs)

{

Fraction newFrac;

if(lhsdenominator == 0 || rhsdenominator == 0)

{

cout<<"存在分母为0的分数"<<endl;

exit(-1);

}

newFracnumerator = (lhsnumerator rhsdenominator) + (rhsnumerator lhsdenominator);

newFracdenominator = lhsdenominator rhsdenominator;

newFracSimplify();

return newFrac;

}

const Fraction operator -(const Fraction& lhs,const Fraction& rhs)

{

Fraction newFrac;

if(lhsdenominator == 0 || rhsdenominator == 0)

{

cout<<"存在分母为0的分数"<<endl;

exit(-1);

}

newFracnumerator = rhsdenominator lhsnumerator - rhsnumerator lhsdenominator;

newFracdenominator = lhsdenominator rhsdenominator;

newFracSimplify();

return newFrac;

}

const Fraction operator (const Fraction &lhs,const Fraction &rhs)

{

if((lhsdenominator rhsdenominator) == 0)

{

cout<<"存在分母为零的分数"<<endl;

exit(-1);

}

else

{

Fraction newFrac;

newFracdenominator = lhsdenominator rhsdenominator;

newFracnumerator = lhsnumerator rhsnumerator;

newFracSimplify();

return newFrac;

}

}

const Fraction operator /(const Fraction& lhs,const Fraction& rhs)

{

if(rhsdenominator == 0 || lhsdenominator == 0|| rhsnumerator == 0)

{

cout<<"存在分母为零的分数或者存在分母被除数为零,请检查算式"<<endl;

exit(-1);

}

Fraction newFrac;

if(lhsnumerator== 0)

{

newFracdenominator = 1;

newFracnumerator = 0;

return newFrac;

}

newFracdenominator = lhsdenominator rhsnumerator;

newFracnumerator = lhsnumerator rhsdenominator;

newFracSimplify();

return newFrac;

}

void Fraction::Print()

{

if(this->numerator == 0)

{

cout << "0"<<endl;

}

else

{

cout<< this->numerator<<"/"<<this->denominator<<endl;

}

return ;

}

long Fraction::Gcd(long num,long deno)

{//求最大公约数

long tmp;

while(deno != 0)

{

tmp = num%deno;

num = deno;

deno = tmp;

}

return num;

}

void Fraction::Simplify()

{//分数化简

long tmp = 0;

tmp = Gcd((long)this->numerator,(long)this->denominator);

this->denominator /= tmp;

this->numerator /= tmp;

return ;

}

// *** 作符的定位函数

int Fraction::StrIndex(char s[],int pos,char t)

{

int ii=0,j=0,slen=0;

slen=strlen(s);

ii=pos;

j=0;

while(ii<slen&&j<1)

for(int k=0;k<slen;k++)

if(s[k]==t)

{

ii++;

j++;

break;

}

else

{

ii=ii-j+1;

j=0;

}

if(j>=1) return ii-j;

else return 0;

}

void Fraction::Read()

{

int loc1=0,loc2=0,loc3=0,temp1=0,temp2=0,temp3=0;

int flag=1;

char choose;

Fraction p1,p2,res;

long sum1=0,sum2=0,sum3=0,sum4=0;

while(flag)

{

double sum1=0,sum2=0,sum3=0,sum4=0;

cout<<"请输入一个数学表达式:"<<endl;

cin>>arr;

int len1=strlen(arr);

//定位 *** 作符函数的调用

loc1=StrIndex(arr,1,'+');

if(loc1==0)

{

loc1=StrIndex(arr,1,'-');

if(loc1==0)

{

loc1=StrIndex(arr,1,'');

if(loc1==0)//三个'/'情况下的 *** 作符'/'的定位

{

loc1=StrIndex(arr,1,'/');

temp1=loc1;

loc1=StrIndex(arr,loc1+1,'/');temp2=loc1;

loc1=StrIndex(arr,loc1+1,'/');temp3=loc1;

if(temp1<temp2&&temp2<temp3)loc1=temp2;

else loc1=temp1;

}

}

}

//定位前一个'/'

loc2=StrIndex(arr,1,'/');

//定位后一个'/'

loc3=StrIndex(arr,loc1+1,'/');

//提取两个分数的分子分母

SubString(p1arr1,arr,0,loc2-1);//前一个分子位数

SubString(p1arr2,arr,loc2,loc1-loc2-1);//前一个分母位数

SubString(p2arr1,arr,loc1,loc3-loc1-1);//后一个分子位数

SubString(p2arr2,arr,loc3,len1-loc3);//后一个分母位数

//分子分母化为十进制数(分子分母为多位数的情况)

for(int i=0;i<loc2-1;i++)

sum1=(p1arr1[i]-48)pow(10,loc2-2-i)+sum1;

p1numerator=sum1;

for(int j=0;j<loc1-loc2-1;j++)

sum2=(p1arr2[j]-48)pow(10,loc1-loc2-2-j)+sum2;

p1denominator=sum2;

for(int k=0;k<loc3-loc1-1;k++)

sum3=(p2arr1[k]-48)pow(10,loc3-loc1-2-k)+sum3;

p2numerator=sum3;

for(int l=0;l<len1-loc3;l++)

sum4=(p2arr2[l]-48)pow(10,len1-loc3-1-l)+sum4;

p2denominator=sum4;

cout<<"数学表达式的结果为"<<endl;

cout<<p1numerator<<'/'<<p1denominator<<arr[loc1-1]<<p2numerator<<'/'<<p2denominator<<'=';

switch(arr[loc1-1])

{

case '+':res=p1+p2;resPrint();break;

case '-':res=p1-p2;resPrint();break;

case '':res=p1p2;resPrint();break;

case '/':res=p1/p2;resPrint();break;

default:break;

}

cout<<"还要继续吗(y/n)"<<endl;

cin>>choose;

if(choose=='y'||choose=='Y') flag=1;

else flag=0;

}

}

char Fraction::SubString(char sub[],char s[],unsigned int pos,unsigned int len)

{

if( pos<0 || pos>strlen(s) || len<1 || len>strlen(s)-pos )//strlen返回的是无符号数,用无符号数比较就不产生警告

return NULL;

else

{

for(unsigned int i=0;i<len;i++)

sub[i]=s[i+pos];

return sub;

}

}

//这是测试代码:

#include <iostreamh>

#include <mathh>

#include "Fractionh"

#include<stdlibh>

#include<stringh>

void main()

{

Fraction r;

rRead();

}

//这是测试数据:

1/2+3/4=5/4

12/34+56/78=710/663

123/456+789/1234=85261/93784

1234/4567+1357/2468=082

1/2-3/4=-1/4

12/34-56/78=-242/663

123/456-789/1234=-34667/93784

1234/4567-1357/2468=-02796

1/23/4=3/8

12/3456/78=56/221

123/456789/1234=32349/187568

1234/45671357/2468=1357/9134

1/2/3/4=2/3

12/34/56/78=117/238

123/456/789/1234=25297/59964

1234/4567/1357/2468=049142

将答案作为一个字符串,对每个字符进行比较,如果在0-9,a-d,A-D这个范围内,就取出来放在ans字符串中,将学生答案也进行相应处理拼成题号答案的字符串,然后比较有几个不一样的字符就是错了几道题。

拼学生答案的字符串时要注意如果没有写答案的话给补上一个Z免得后面的都认为错了!!!

我觉得 不对

C++没有读取分数的功能

一般来讲 读入的都是字符串,

但是它可以很智能的根据你的接收类型 给你转换

std::string s;

std::cin >> s; // 如果你输入 12, 就是字符串 12

int i;

std::cin >> i;  // 如果你输入12, 就是数字 12

但是C++没有分数类型

所以唯一的办法是 你当成 字符串输入, 然后自己解析

或者 每次让用户分别 输入 分子 和 分母(中间用空格隔开)

改变数据类型试试

类似这样吧

#include<stdioh>

double gongbeishu(double b,double d)

{

double i,max;

max=b>db:d;

for(i=max;;i++)

if((int)(i)%(int)(b)==0&&(int)(i)%(int)(d)==0)

break;

return i;

}

double gongyueshu(double a,double c)

{

double i,min;

min=a<ca:c;

for(i=2;i<=min;i++)

if((int)(a)%(int)(i)==0&&(int)(c)%(int)(i)==0)

break;

if(i>min)

i=1;

return i;

}

void main()

{

double a,b,c,d;

double beishu1,beishu2,fenzihe0,fenmu,fenzihe1;

scanf("%lf/%lf %lf/%lf",&a,&b,&c,&d);

beishu1=gongbeishu(b,d)/b;

beishu2=gongbeishu(b,d)/d;

fenzihe0=beishu1a+beishu2c;

fenmu=gongbeishu(b,d);

fenzihe1=fenzihe0/gongyueshu(fenzihe0,fenmu);

fenmu=fenmu/gongyueshu(fenzihe0,fenmu);

printf("%lf %lf/%lf\n",a/b+c/d,fenzihe1,fenmu);

}

分数就是用/来表示的。你看看笑面的程序熟悉下

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13求出这个数列的前20项之和。

1程序分析:请抓住分子与分母的变化规律。

2程序源代码:

#include "stdioh"

main()

{

int n,t,number=20;

float a=2,b=1,s=0;

for(n=1;n<=number;n++)

{

s=s+a/b;

t=a;a=a+b;b=t;/这部分是程序的关键/

}

printf("sum is %96f\n",s);

getch();

}

以上就是关于编写一个程序,从键盘输入5个学生的分数(以非数字字符串结束),然后输出高于平均分的分数。全部的内容,包括:编写一个程序,从键盘输入5个学生的分数(以非数字字符串结束),然后输出高于平均分的分数。、用C语言编写程序编写分数序列的前20项之和、用c++编写一个给分数约分的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9488095.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存