SCAU高程期末课后习题复习(只放了易错自用)
18041 分期还款(加强版)
Description
从银行贷款金额为 d dd,准备每月还款额为 p pp,月利率为 r rr 。请编写程序输入这三个数值,计算并输出多少个月能够还清贷款,输出时保留 1 11 位小数。
如果无法还清,请输出 “God”
计算公式如下:
输入格式
三个数,分别为货款金额、每月还款和月利率,以空格分隔,均为非负数,其中 d , p , r > = 0 d,p,r>=0d,p,r>=0
输出格式
需要还款的月份
输入样例
50 50 0.01
输出样例
1.0
贷款为0时和(p-d*r)<=0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double d,p,r;
scanf("%lf%lf%lf",&d,&p,&r);
if(d==0)
printf("0.0\n");
else if((p-d*r)<=0)
printf("God\n");
else
{
printf("%.1f", log(p/(p-d*r))/log(1+r));
}
return 0;
}
18037 20秒后的时间
Description
编写程序,输入三个整数变量 h o u r hourhour(小时)、m i n u t e minuteminute(分钟)、s e c o n d secondsecond(秒)代表一个时间,
输出该时间 20 2020 秒以后的时间。
输入格式
一行三个整数,分别代表小时、分钟、秒,中间使用冒号分隔
输出格式
输出一个时间,数字间用冒号分隔
小时、分钟、秒均占两个数字位,不足位用0补足
输入样例
15:30:41
输出样例
15:31:01
#include <stdio.h>
int main()
{
int h,m,s;
scanf("%d:%d:%d", &h,&m,&s);
s += 20;
if(s >= 60) {
s %= 60;
m++;
}
if(m >= 60) {
m %= 60;
h++;
}
if(h >= 24) {
h %= 24;
}
printf("%02d:%02d:%02d\n", h, m, s);
return 0;
}
1037 计算数列和
Description
有数列:
编程实现,由键盘输入 n ,计算输出数列前 n 项和。(结果保留四位小数,提示:要使用 double ,否则精度不够)
输出格式
请按格式输出
输入样例
20
1
输出样例
32.6603
#include<stdio.h>
int main() {
double a = 2;
double b = 1;
double ans = 0;
int n;
scanf("%d",&n);
for(int i = 1 ; i <= n ; i ++) {
ans += a / b;
up = a + b;
down = a - b;
}
printf("%.4f\n",ans);
}
18049 迭代法求平方根
Description
使用迭代法求 a 的平方根。求平方根的迭代公式如下,要求计算到相邻两次求出的 x 的差的绝对值小于10 -5时停止,结果显示 4位小数
输入格式
输入一个非负实数 a
输出格式
计算并输出平方根
输入样例
16
输出样例
4.0000
注意0÷0 无意义,单独判断
#include <stdio.h>
#include <math.h>
int main()
{
double a;
scanf("%lf", &a);
if(a == 0) {
printf("%.4f",0);
return 0;
}
double x0 = a;
double x1 = (x0 + a/x0) / 2.0;
while(fabs(x0 - x1) >= 1e-5) {
x0 = (x1 + a/x1) / 2;
double temp = x0;
x0 = x1;
x1 = temp;
}
printf("%.4f\n", x1);
return 0;
}
18057 ASCII码值之和的差
Description
输入两个字符串 s1 和 s2 (每个串占一行,以换行回车符结束),计算两个字符串的所有字符的 ASCII 码值之和的差。
输入格式
两行字符,每行字符不超过 80个字符
输出格式
ASCII 码值之和的差
注意这个题差就是差,不用求绝对值!!!(懒得喷)
输入样例
234
123
3
#include <stdio.h>
#include <string.h>
int main() {
char a[100],b[100];
gets(a);
gets(b);
int l1 = strlen(a);
int l2 = strlen(b);
int ans1 = 0;
int ans2 = 0;
for(int i = 0 ; i < l1 ; i ++) {
ans1 += a[i];
}
for(int i = 0 ; i < l2 ; i ++) {
ans2 += b[i];
}
printf("%d",ans1 - ans2);
return 0;
}
18068 选择排序
输入10个整数,编写一个实现对数组进行选择排序的函数
#include <stdio.h>
int sort(int a[], int n)
{
int i,j,k,tmp;
for(i=0;i<n-1; i++)
{
k=i;
for(_______________________)
if(_______________________) k=j;
tmp=a[k];a[k]=a[i];a[i]=tmp;
}
}
int main()
{
int a[10];
int i;
for(i=0; i<10; i++) scanf("%d", &a[i]);
sort(a,10);
for(i=0; i<10; i++) printf("%d\n", a[i]);
return 0;
}
输入格式
10 1010 个整数,以空格分隔
输出格式
排序后的 10 1010 个整数,一行一个数字
#include <stdio.h>
int sort(int a[], int n)
{
int i,j,k,tmp;
for(i=0;i<n-1; i++)
{
k=i;
for(j = i ; j < n ; j ++/*方框1*/)
if(a[k] > a[j]/*方框2*/) k=j;
tmp=a[k];a[k]=a[i];a[i]=tmp;
}
}
int main()
{
int a[10];
int i;
for(i=0; i<10; i++) scanf("%d", &a[i]);
sort(a,10);
for(i=0; i<10; i++) printf("%d\n", a[i]);
return 0;
}