6-11 弹球距离
设有一个球从高度为h米的地方落下,碰到地面后又弹到高度为原来p倍的位置,然后又落下,再弹起,再落下…。请编写函数求初始高度为h的球下落后到基本停下来(高度小于给定阈值TOL)时在空中所经过的路程总和。
函数接口定义:
doubledist( double h, double p );
其中h是球的初始高度,p是球弹起高度与弹起前落下高度的比值;函数dist要返回球下落后到基本停下来时在空中所经过的路程总和。注意:当弹起的高度小于裁判程序定义的常数TOL时,弹起的距离不计算在内。
裁判测试程序样例:
#include<stdio.h>#define TOL 1E-3doubledist( double h, double p );
intmain(){
double h, p, d;
scanf("%lf %lf", &h, &p);
d = dist(h, p);
printf("%.6f\n", d);
return0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1.0 0.4
输出样例:
2.331149
double dist( double h, double p )
{
double s=0;
while(1)
{
s=s+h;
if(h*p>=TOL)
{
s=s+h*p;
h=h*p;
}
else
break;
}
return s;
}
6-12 输出每个月的天数
本题要求实现一个简单函数,能计算给定的年份和月份的天数。使得可以利用该函数,输出给定年份中每个月的天数。其中1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,2月平年有28天,闰年有29天。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。
函数接口定义:
intMonthDays(int year, int month);
其中year和month是用户传入的参数,如果1≤ month≤12,该函数必须返回year年month月的天数。
裁判测试程序样例:
#include<stdio.h>intMonthDays(int year, int month);
intmain(){
int ndays, month, year;
scanf("%d", &year);
for(month = 1; month <= 12; month++){
ndays = MonthDays(year, month);
printf("%d ", ndays);
}
return0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
2000
输出样例1:
31 29 31 30 31 30 31 31 30 31 30 31
输入样例2:
2001
输出样例2:
31 28 31 30 31 30 31 31 30 31 30 31
int MonthDays(int year, int month)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
if(year%400==0||(year%4==0&&year%100!=0))
return 29;
else
return 28;
case 4:
case 6:
case 9:
case 11:
return 30;
}
}
6-13 空心的数字金字塔
本题要求实现一个函数,输出n行空心的数字金字塔。
函数接口定义:
voidhollowPyramid( int n );
其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行空心的数字金字塔,请注意,最后一行的第一个数字前没有空格。
裁判测试程序样例:
#include<stdio.h>voidhollowPyramid( int n );
intmain(){
int n;
scanf("%d", &n);
hollowPyramid ( n );
return0;
}
/* 你的代码将被嵌在这里 */
输入样例:
5
输出样例:
1
2 2
3 3
4 4
555555555
void hollowPyramid( int n )
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=2*n-1;j++)
{
if(i==n)
printf("%d",i);
else
{
if(j==n-i+1)
printf("%d",i);
else if(j==n+i-1)
printf("%d",i);
else if(j<n-i+1||(j>n-i+1&&j<n+i-1))
printf(" ");//注意空格位置只能存在于两个区间,否则错误
}
}
printf("\n");
}
}
6-14 使用函数找出数组中的最大值
本题要求实现一个找出整型数组中最大值的函数。
函数接口定义:
intFindArrayMax( int a[], int n );
其中a是用户传入的数组,n是数组a中元素的个数。函数返回数组a中的最大值。
裁判测试程序样例:
#include<stdio.h>#define MAXN 10intFindArrayMax( int a[], int n );
intmain(){
int i, n;
int a[MAXN];
scanf("%d", &n);
for( i=0; i<n; i++ ){
scanf("%d", &a[i]);
}
printf("%d\n", FindArrayMax(a, n));
return0;
}
/* 请在这里填写答案 */
输入样例:
4
20 78 99 -14
输出样例:
99
int FindArrayMax( int a[], int n )
{
int max=0;
for(int i=0;i<n;i++)
{
if(a[i]>max)
max=a[i];
}
return max;
}
6-15 字符金字塔
本题要求实现函数输出n行字符金字塔。
函数接口定义:
voidCharPyramid( int n, char ch);
其中n和ch是用户传入的参数,n为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行由字符ch构成的字符金字塔。注意每个字符后有一个空格。
裁判测试程序样例:
#include<stdio.h>voidCharPyramid( int n, char ch );
intmain(){
int n;
char ch;
scanf("%d %c", &n, &ch);
CharPyramid(n, ch);
return0;
}
/* 请在这里填写答案 */
输入样例:
4 G
输出样例:
在这里给出相应的输出。例如:
G
G G
G G G
G G G G
void CharPyramid( int n, char ch)
{
int a,b;
for(a=1;a<=n;a++)
{
for(b=n;b>a;b--)
{
printf(" ");
}
for(b=1;b<=a;b++)
{
printf("%c ",ch);
}
printf("\n");
}
}