1.
谁不及格?
Problem:A
Time Limit:1000ms
Memory Limit:65535K
Description
聪聪的班主任王老师最近有点忙,可是他又是一位非常细心的老师,每次考试成绩都有专门的东西来记录,学期结束的时候给每位学生算了加权之后,他都要“关心关心”成绩不好的学生,并在假期给他们补补功课。什么是成绩不好呢?在王老师眼里,成绩不好当然就是加权成绩不及格咯!如今王老师这么忙,正好看你成天写程序闲着没事儿,于是他想让聪明的你来帮他写个程序,把那些不及格的同学的名单打印给他。
Input
输入包含多组数据,每组输入一个数n(1<=n<=10),然后接下来输入n个同学的信息,每个同学的信息分3行,第一行姓名name(姓名长度不超过20个字母),第二行学号x,长度为10(例:2015215098),第三行学生的平均加权成绩。
Output
每组数据第一行输出一个数k,表示不及格学生的个数,然后接下来输出3*k行不及格学生信息,第一个k行输出不及格学生姓名(按输入顺序),第二个k行输出学生学号(按输入顺序),第三个k行输出学生成绩(按输入顺序)(保留2位小数)。若是没有同学不及格,那么输出“They are Great!!”。
Sample Input
2
zhu dan
2015213678
79.99
wang meng
2015213902
83.78
1
tiancai
2015234930
59.08
Sample Output
They are Great!!
1
tiancai
2015234930
59.08
输出注意一下……
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu{
char name[30];
char xh[20];
float ss;
}st[11];
int main()
{
int n,i,j,s[11],m;
while (scanf("%d",&n)!=EOF)
{
m=0;
getchar();
for (i=1;i<=n;i++)
{
gets(st[i].name);
scanf("%s%f",st[i].xh,&st[i].ss);
getchar();
if (st[i].ss<60)
{
s[++m]=i;
}
}
if (m==0)
{
printf("They are Great!!
");
continue;
}
printf("%d
",m);
for (i=1;i<=m;i++)
{
printf("%s
",st[s[i]].name);
}
for (i=1;i<=m;i++)
{
printf("%s
",st[s[i]].xh);
}
for (i=1;i<=m;i++)
{
printf("%.2f
",st[s[i]].ss);
}
}
return 0;
}
2
校庆的活动
Problem:B
Time Limit:1000ms
Memory Limit:65536K
Description
在林大60年校庆时要设计1个平面,平面的设计要会几何知识.给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。
Input
输入有多组,每组第1行是给定的点的坐标x和y,(0 <= x,y <= 100),第2行是n,接下来有n行(1 <= n <= 50),每行2个数,代表其它点的坐标。
Output
输出这n行坐标中离定点距离最近的点的坐标,输出到屏幕上并换行。
Sample Input
9 2
5
1 0
1 1
0 0
1 2
2 1
Sample Output
2 1
这个题好多人没用结构体……倒是能写,结构体的专题怎么能不练习结构体呢
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
typedef struct lhy{char s[100];char s1[20];float b;} L;
int main()
{
int i,j,k,p,t;
float x,y,d=99999999,x1,y1;
L l[100];
while(cin>>p>>t)
{
cin>>k;
for(i=1;i<=k;i++)
{
cin>>x>>y;
if(d>sqrt((p-x)*(p-x)+(y-t)*(y-t)))
d=sqrt((p-x)*(p-x)+(y-t)*(y-t)),x1=x,y1=y;
}
printf("%.0f %.0f
",x1,y1);
}
return 0;
}
3
第4题
Problem:C
Time Limit:1000ms
Memory Limit:65535K
Description
复数运算
同学们在C语言中已经利用整数、实数和字符类型等标准数据类型编写一些程序了。那你们还记得在中学阶段学习过一种数据——复数吗?C语言中没有把这种数据设定为标准数据,老师也只在FORTRAN语言中见过。现在请你利用C语言定义复数这种类型的数据,并完成复数的加、减运算,提示复数类型的定义用结构体实现。题目也做了简单处理,只考虑结果都还是复数的情况,不必考虑虚部为零了。
Input
输入数据为多组,每组两行,每行两个实数(double),分别代表复数的实部和虚部。
Output
对于每组数据,输出这两个复数的和、差,实部虚部都分别保留两位小数。
提示:1)如果两个复数分别为a+bi和c+di,那么它们的和是:(a+c)+(b+d)i;它们的差是:(a-c)+(b-d)i;
2)除主函数外,分别编写三个函数,用于求两个复数的和,差、和结果的输出。例如,如果复数类型结构体定义为 CX,则求和函数为 CX cadd(CX x1,CX x2);,求差函数为 CX cminu(CX x1,CX x2);,输出结果函数为 void cprint(CX x);
Sample Input
1.2 2.3
3.2 3.4
3.4 2.2
-7.5 -1.1
Sample Output
4.40+5.70i
-2.00-1.10i
-4.10+1.10i
10.90+3.30i
好像是c语言期末考试的考试题
#include <stdio.h>
#include <stdlib.h>
struct comp
{
double real;
double imag;
};
int main()
{
struct comp data[2];
struct comp pluss;
struct comp minuss;
while(scanf("%lf%lf%lf%lf",&data[0].real,&data[0].imag,&data[1].real,&data[1].imag)!=EOF)
{
pluss.real=data[0].real+data[1].real;
pluss.imag=data[0].imag+data[1].imag;
if(pluss.imag<0)
printf("%.2lf%.2lfi
",pluss.real,pluss.imag);
else
printf("%.2lf+%.2lfi
",pluss.real,pluss.imag);
minuss.real=data[0].real-data[1].real;
minuss.imag=data[0].imag-data[1].imag;
if(minuss.imag<0)
printf("%.2lf%.2lfi
",minuss.real,minuss.imag);
else
printf("%.2lf+%.2lfi
",minuss.real,minuss.imag);
}
return 0;
}
4
优秀学生
Problem:D
Time Limit:1000ms
Memory Limit:65535K
Description
读入学生的信息(最多不超过100个):学号(不超过八位)、姓名(不超过20个字符)、C语言成绩(用整数表示)。统计优秀学生的信息(成绩在90分以上,包括90分)及个数。(要求用结构体实现)
Input
输入数据有多组,每组为n个学生的信息;
Output
输出数据优秀学生的信息及个数。
Sample Input
5
2015001
ZhangSan
90
2015002
LiMing
80
2015003
WangHong
70
2015004
ZhangXiao
95
2015005
WangFang
100
3
2015001
ZhangSan
60
2015002
LiMing
80
2015003
WangHong
85
Sample Output
2015001 ZhangSan 90
2015004 ZhangXiao 95
2015005 WangFang 100
3
0
Hint
按要求做答,否则无分!
comment
题目难度系数 :3分 难度适中;
本题目考核知识点:
1.结构体定义。
2.结构体数据的输入和输出。
3.结构体数组的使用。
这个题是c语言补考的题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
int number;
char name[20];
int score;
} student;
int main()
{ struct student stu[100];
int n,i,sum;
while(scanf("%d",&n)!=-1)
{
sum=0;
getchar();
for(i=0;i<n;i++)
{
scanf("%d%s%d",&stu[i].number,&stu[i].name,&stu[i].score);
if(n>1) getchar();
}
for(i=0;i<n;i++)
if(stu[i].score>=90)
{
sum++;
printf("%d %s %d
",stu[i].number,stu[i].name,stu[i].score);
}
printf("%d
",sum);
}
return 0;
}
5
两圆的距离
Problem:E
Time Limit:1000ms
Memory Limit:65535K
Description
有很多个圆,圆心的坐标都在X轴上,这些圆都不相交,请问最右边的圆距离y轴有多远?
计算公式为:最右边的圆的圆心到(0,0)点的距离减去这个圆的半径。
Input
输入数据有多组,每组第1行为N代表圆的个数(2<=N<=10),然后有N行数据,每行2个实数x和r,分别代表圆的圆心横坐标和半径(0.0<x,r<50.0,因为圆心的纵坐标都为0,所以不给出纵坐标的值)。
本题用结构体来实现
struct yuan
{
double x;//圆心的X轴坐标
double r;//半径
} data[11];
Output
对于每组数据在一行内输出最右边的圆到Y轴的距离,结果保留2位小数。
Sample Input
3
0 1
2 0.5
4 1
Sample Output
3.00
这个也是补考题
#include <stdio.h>
#include <stdlib.h>
struct yuan
{
double x;
double r;
}data[11];
int main()
{
int n,i,t;
double max;
while(scanf("%d",&n)!=-1)
{
max=-9999.00;t=0;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&data[i].x,&data[i].r);
if (max<data[i].x) {max=data[i].x;t=i;}
}
printf("%.2lf
",data[t].x-data[t].r);
}
return 0;
}
p.s.应该养成良好的习惯,结构体的定义在main函数外面,每次使用清空内容……