习题9-1 时间换算 (15 分)
本题要求编写程序,以hh:mm:ss
的格式输出某给定时间再过n
秒后的时间值(超过23:59:59就从0点开始计时)。
输入格式:
输入在第一行中以hh:mm:ss
的格式给出起始时间,第二行给出整秒数n
(<60)。
输出格式:
输出在一行中给出hh:mm:ss
格式的结果时间。
样例:">样例:">输入样例:
11:59:40
30
输出样例:
12:00:10
//%02d是关键
#include <stdio.h>
int main()
{
int hh, mm, ss, s;
scanf("%d:%d:%d", &hh, &mm, &ss);
scanf("%d", &s);
ss = ss + s;
if(ss >= 60)
{
ss -= 60;
mm += 1;
if(mm >= 60)
{
mm = 0;
if(hh == 23)
hh = 0;
else
hh++;
}
}
printf("%02d:%02d:%02d", hh, mm, ss);
return 0;
}
习题9-3 平面向量加法 (15 分)
本题要求编写程序,计算两个二维平面向量的和向量。
输入格式:
输入在一行中按照“x1 y1 x2 y2”的格式给出两个二维平面向量v1=(x1,y1)和v2=(x2,y2)的分量。
输出格式:
在一行中按照(x, y)
的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。
输入样例:
3.5 -2.7 -13.9 8.7
输出样例:
(-10.4, 6.0)
//1.要用double型 2. %.1f 0.05 - > 0.1 0.049 -> 0.0
#include <stdio.h>
int main()
{
double x1, y1, x2, y2, x3, y3;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
x3 = x1 + x2;
y3 = y1 + y2;
if(x3 > -0.05 && x3 < 0)
x3 = 0;
if(y3 > -0.05 && y3 < 0)
y3 = 0;
printf("(%.1lf, %.1lf)", x3, y3);
return 0;
}
习题9-4 查找书籍 (20 分)
给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出样例:
25.00, Programming in Delphi
18.50, Programming in VB
//1.结构体的定义以及price需要定义为double型(float不行吗?) 2. gets()、getchar()的使用 3.字符数组长度为31,留一个给'\0'
#include <stdio.h>
typedef struct
{
char book[31];
double price;
}message;
int main()
{
int n, i, c, min, max;
scanf("%d", &n);
getchar();
message shu[n];
for(i = 0; i < n; i++)
{
gets(shu[i].book);
scanf("%lf", &shu[i].price);
getchar();
}
min = 0;
max = 0;
for(i = 1; i < n; i++)
{
if(shu[i].price < shu[min].price)
min = i;
if(shu[i].price > shu[max].price)
max = i;
}
printf("%.2lf, %s\n%.2lf, %s", shu[max].price, shu[max].book, shu[min].price, shu[min].book);
return 0;
}
习题10-4 递归求简单交错幂级数的部分和 (15 分)
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn
函数接口定义:
double fn( double x, int n );
其中题目保证传入的n
是正整数,并且输入输出都在双精度范围内。函数fn
应返回上述级数的部分和。建议尝试用递归实现。
裁判测试程序样例:
#include <stdio.h>
double fn( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.5 12
输出样例:
0.33
//我没想出来,看了别人的,写的很简单。f(n) = g(f(n - 1)), return的结果是的关系式g(f(n - 1))
double fn( double x, int n )
{
if(n == 1)
return x;
else
return x + (-x) * fn(x, n - 1);
}
习题10-7 十进制转换二进制 (15 分)
本题要求实现一个函数,将正整数n转换为二进制后输出。
函数接口定义:
void dectobin( int n );
函数dectobin
应在一行中打印出二进制的n
。建议用递归实现。
裁判测试程序样例:
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
1010
//没想出来递归的方法
void dectobin( int n )
{
int a;
if(n == 0)
printf("0");
else if(n == 1)
printf("1");
else
{
dectobin(n / 2);
a = n % 2;
printf("%d", a);
}
}