
完整代码如下:
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++编写一个给分数约分的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)