大一下实验(一)

定义三角形类,完成:为三边置值、取三边的值并输出、求三角形周长、求三角形面积、输出三角形周长和面积。

分析:按照题目要求定义三角形类并依次设置成员函数。

#include <iostream>
#include <cmath>
using namespace std;
class A //定义有关三角形的类
{
	int x,y,z;
 public :
    void in()
	{cin>>x>>y>>z;}
	void out()
	{cout<<"三边分别为:"<<x<<" "<<y<<" "<<z;}
	int l()
	{return (x+y+z);}
	double area()
	{
		double d;
		d=(x+y+z)/2.0;
		return (sqrt(d*(d-x)*(d-y)*(d-z)));
	}


};
int main()
{
	A a;
	a.in();
	cout<<endl;
	a.out();
	cout<<endl;
	cout<<"周长为:"<<a.l()<<endl;
	cout<<"面积为:"<<a.area()<<endl;

	return 0;
}

输出结果

Last login: Sat Mar  5 16:34:02 on ttys001
3 4 5 

三边分别为:3 4 5
周长为:12
面积为:6
i@HUAWEI-MateBook-X-Pro ~ % 

*************************************

有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

分析:设置结构体数组内存有三个数组元素,结构体包含人名以及得票数,输入人名后与数组中的人名比较,若相同,该成员的票数加一。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

struct Person
{
    char name[20];
    int score;
} leader[3]={"Li",0,"Zhang",0,"Sun",0};
int main()
{
    int b=1,i=0;
    char a[20];
    cout<<"输入选人次数 "<<endl;
    cin>>b;
    cout<<"输入人名 "<<endl;
    for(int j=0;j<b;j++)
    {
        cin>>a;
        for(i;i<3;i++)
        {
            if(strcasecmp(a,leader[i].name)==0)
                leader[i].score++;
        }
        i=0;
        for(int m=0;m<20;m++)
            a[m]=='\0';
    }
    for(int i=0;i<3;i++)
    {
        cout<<leader[i].name<<" "<<leader[i].score<<endl;
    }

    return 0;
}

输出结果

Last login: Wed Mar  9 21:52:38 on ttys000

输入选人次数 
2
输入人名 
Zhang Li
Li 1
Zhang 1
Sun 0
i@HUAWEI-MateBook-X-Pro ~ % 

*****************************

有一个学生情况如表所示。编写程序,对该学生情况表按成绩(grade)从低到高进行排序。(要求:用多函数分别实现数据的输入,输出,排序,在主函数中调用这些函数完成操作)

分析:通过比较学生成绩,实现学生排序之间的调换。

#include <iostream>
#include <cstdio>

using namespace std;

struct student
{
    int a;
    char b[20];
    char sex;
    int age;
    float grade;
};
void in(struct student a[],int b)//数据输入
{
    for(int i=0;i<b;i++)
        {
           cin>>a[i].a>>a[i].b;
           cin>>a[i].sex>>a[i].age>>a[i].grade;
        }
}
void out(struct student a[],int b)//数据输出
{
    for(int i=0;i<b;i++)
    {
        cout<<a[i].a<<" ";
        cout<<a[i].b;
        cout<<" "<<a[i].sex<<" "<<a[i].age<<" "<<a[i].grade<<endl;
    }
}
void chang(struct student a[],int b,struct student c)//数据排序
{
    for(int n=0;n<b-1;n++)
        for(int m=0;m<b-n-1;m++)
    {
        if(a[m].grade>a[m+1].grade)
        {
            c=a[n];
            a[n]=a[n+1];
            a[n+1]=c;
        }
    }
}
int main()
{
    int c;
    struct student stu[20],stu1;
    cout<<"输入学生人数 "<<endl;
    cin>>c;
    cout<<"输入学生信息 "<<endl;
    in(stu,c);
    cout<<"成绩排名 "<<endl;
    chang(stu,c,stu1);
    out(stu,c);
    return 0;
}

输出结果:

Last login: Wed Mar  9 22:02:48 on ttys000
输入学生人数 
3
输入学生信息 
101 wang m 18 65.4
102 zhang f 19 54.4
103 zhao m 18 96.4
成绩排名 
102 zhang f 19 54.4
101 wang m 18 65.4
103 zhao m 18 96.4
i@HUAWEI-MateBook-X-Pro ~ % 

************************************

用类表示X-Y平面直角坐标系上的点,编写程序,顺序读入一个四边形的4个顶点坐标,判别由这些顶点的连线构成的图形是否为正方形、矩形或其它四边形。

#include <iostream>
#include <cmath>

using namespace std;

class Ch
{double x,y;
public:
	void in()
	{cin>>x>>y;}
    double out1()
	{return x;}
	double out2()
	{return y;}
};


double po(Ch a,Ch b)
{
    return sqrt(pow(a.out1()-b.out1(),2)+pow(a.out2()-b.out2(),2));
}
int main()
{
    Ch p[4];
    for(int i=0;i<4;i++)
       {
           cout<<"请输入第"<<i+1<<"个坐标:";
           p[i].in();
           cout<<endl;
       }
       if(fabs(po(p[0],p[1])-po(p[2],p[3]))<=1e-8&&fabs(po(p[0],p[3])-po(p[2],p[1]))<=1e-8&&abs(po(p[0],p[2])-po(p[3],p[1]))<=1e-8)
       {
           if(po(p[0],p[1])==po(p[0],p[3])||po(p[0],p[1])==po(p[0],p[2])||po(p[0],p[3])==po(p[0],p[2]))
           cout<<"四个顶点构成的图形为正方形!";
           else 
           cout<<"四个顶点构成的图形为矩形!";
       }
       else
       cout<<"四个顶点构成的图形为其它四边形!";
       return 0;

}

 运行结果

Last login: Sat Mar  5 17:44:51 on ttys001
请输入第1个坐标:1 1

请输入第2个坐标:0 0

请输入第3个坐标:0 1

请输入第4个坐标:1 0

四个顶点构成的图形为正方形!%                                                   
i@HUAWEI-MateBook-X-Pro ~ %  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值