假设银行存款利息如下:
1年期定期存款利息为1.5%;
2年期定期存款利息为2.1%;
3年期定期存款利息为2.75%;
5年期定期存款利息为3%;
活期存款利息为0.35% (活期存款每一季度结算一次利息)。
计算方法如下:
如果r为年利率,n为存款年数,则计算本息和的公式为
1年期本息和:P = 1000 * (1+r);
n年期本息和:P = 1000 * (1+n*r);
存n次1年期的本息和:P = 1000 * (1+r)n;
活期存款本息和:P = 1000 * (1+r/4)4n。
注:1000 * (1+r/4)是一个季度的本息和。
提示:math.h函数库中有pow函数,例如pow(3.6, 2)就表示3.62。
//author:祁山何小喵
//time:2020.03.28
//task:计算各种存款方式所得的利息
#include
#include
#define Principal 1000 //本金1000元
int main()
{
float p1, p2, p3, p4, p5;
p1 = Principal * (1 + 5 * 0.03) - Principal; //5年期,利率为3%
p2 = Principal * (1 + 2 * 0.021) * (1 + 3 * 0.0275) - Principal; //先存2年(利率2.1%),到期本息再存3年(利率2.75%)
p3 = Principal * (1 + 3 * 0.0275) * (1 + 2 * 0.021) - Principal; //先存3年(利率2.75%),到期本息再存2年(利率2.1%)
p4 = Principal * pow((1 + 0.015), 5) - Principal; //存1年期(利率1.5%),到期后将本息再存1年期,连续存5次
p5 = Principal * pow((1 + 0.0035 / 4), 4 * 5) - Principal; //存活期存款(利率0.35%)
printf("存5年期所得的利息是%.2f元\n", p1);
printf("先存2年,到期本息再存3年所得的利息是%.2f元\n", p2);
printf("先存3年,到期本息再存2年所得的利息是%.2f元\n", p3);
printf("存1年期,到期后将本息再存1年期,连续存5次所得的利息是%.2f元\n", p4);
printf("存活期存款所得的利息是%.2f元\n", p5);
return 0;
}
//author:祁山何小喵
//time:2020.03.28
//task:计算还清贷款所需月数
#include
#include
int main()
{
int d = 300000, p = 6000; //贷款金额为300000元,每月还款6000元
float m, r = 0.001; //月利率为1%,需要m月才能还清
m = log10(p / (p - d * r)) / log10(1 + r);
printf("还清月数为%.1f", m);
return 0;
}
//author:祁山何小喵
//time:2020.04.12
//task:输入一个整数,求其位数;输出其每个数字;将其逆序输出
#include
int number(int p); //自定义函数number的声明,返回值类型为int;
void printnumber(int p); //自定义函数printnumber的声明,无返回值;
void reverse01(int p); //自定义函数reverse01的声明,无返回值;
int main(void) //主函数;
{
int p;
printf("请输入一个不多于5位的整数:");
scanf_s("%5d", &p); //输入不多于5位的整数p;
printf("输入的整数是%d位数。\n", number(p)); //调用函数number,并输出返回值;
printf("从最低位到最高位依次是:");
printnumber(p); //调用函数printnumber;
printf("\n%d的逆序输出为:",p);
reverse01(p); //调用函数reverse01;
return 0;
}
//定义函数number,求出输入整数的位数
int number(int p)
{
int count = 0; //count用来累计p除以10的整数商大于0的次数,即该整数的位数;
while (p > 0)
{
p /= 10;
count++;
}
return count;
}
//定义printnumber函数,求出输入整数的每一位数字
void printnumber(int p)
{
int temp;
while (p > 0)
{
temp = p % 10; //temp用来存放p除以10的余数,即该整数的最低位;
p /= 10;
printf("%d ", temp);
}
}
//定义reverse函数,将输入的整数逆序输出
void reverse01(int p)
{
while (p > 0)
{
printf("%d", p % 10); //p%10的作用同上一个函数中的temp;
p /= 10;
}
}
要求:
(1) 用if语句编程序
(2) 用switch语句编程序
//author:祁山何小喵
//time:2020.04.12
//task:输入当月利润,分别用if、switch语句求出应发奖金总数
#include
void bonus01(float I); //声明bonus01函数,无返回值
void bonus02(float I); //声明bonus02函数,无返回值
int main() //主函数
{
float I;
printf("请输入当月利润(单位:元):");
scanf_s("%f", &I);
printf("(if语句)应发奖金总数为");
bonus01(I); //调用bonus01函数
printf("\n(switch语句)应发奖金总数为");
bonus02(I); //调用bonus02函数
return 0;
}
//定义bonus01函数,输入当月利润,用if语句,求出应发奖金总数
void bonus01(float I)
{
float p; //p为奖金总数
if (I <= 100000)
{
p = I * 0.1;
}
else if (100000 < I && I <= 200000)
{
p = 100000 * 0.1 + (I - 100000) * 0.075;
}
else if (200000 < I && I <= 400000)
{
p = 100000 * 0.1 + 100000 * 0.075 + (I - 200000) * 0.05;
}
else if (400000 < I && I <= 600000)
{
p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (I - 400000) * 0.03;
}
else if (600000 < I && I <= 1000000)
{
p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (I - 600000) * 0.015;
}
else if (I > 1000000)
{
p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (I - 1000000) * 0.01;
}
printf("%.2f元", p); //输出奖金总数,保留两位小数
}
//定义bonus02函数,输入当月利润,用switch语句,求出应发奖金总数
void bonus02(float I)
{
float p; //p为奖金总数
int c; //c为 I/100000的整数商,用来做case后的常量
if (I > 1000000) c = 11;
else c = I / 100000;
switch (c)
{
case 0: p = I * 0.1; break;
case 1: p = 100000 * 0.1 + (I - 100000) * 0.075; break;
case 2:
case 3: p = 100000 * 0.1 + 100000 * 0.075 + (I - 200000) * 0.05; break;
case 4:
case 5: p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (I - 400000) * 0.03; break;
case 6:
case 7:
case 8:
case 9: p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (I - 600000) * 0.015; break;
case 10:
case 11: p = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (I - 1000000) * 0.01; break;
}
printf("%.2f元", p); //输出奖金总数,保留两位小数
}
//author:祁山何小喵
//time:2020.04.23
//task:求1-20的阶乘之和
/* 20!数据太大,int类型存储不下,所以用long long int类型,
long long int是C99标准, 为64位, 8字节长度
*/
#include
int main()
{
long long int i, h = 1, s = 0; //h=0!=1;
for (i = 1; i <= 20; i++)
{
h *= i;
s += h;
}
printf("%I64d\n", s); //long long int的输出;
return 0;
}
//author:祁山何小喵
//time:2020.04.23
//task:求出所有水仙花数
#include
int main()
{
int i, x, y, z;
for (i = 100; i < 1000; i++)
{
x = i % 10; //个位
y = i / 10 % 10; //十位
z = i / 100 % 10; //百位
if (i == (x * x * x + y * y * y + z * z * z))
printf("%d\n", i);
}
return 0;
}
7.有一个分数序列
2 1 , 3 2 , 5 3 , 8 5 , 13 8 , 21 13 , . . . \frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8},\frac{21}{13},... 12,23,35,58,813,1321,...
求出这个数列的前20项之和.
1. //author:祁山何小喵
//time:2020.04.23
//task:求一数列的前20项和
#include
#define n 20 //求解项数
int main()
{
int i; //循环变量
double a = 2, b = 1; //a,b分别为某项的分子、分母
double sum=0;
double temp; //临时变量
for (i = 1; i <= n; i++)
{
sum += a / b;
temp = a; //记录前一项分子
a = a + b; //前一项分子与分母之和为后一项分子
b = temp; //前一项分子为后一项分母
}
printf("前%d项之和为:sum=%10.8f\n", n, sum);
return 0;
}
//author:祁山何小喵
//time:2020.04.23
//task:求小球第10次落地经过的路程以及反弹起的高度
#include
float length(float h, float s); //函数length的声明,返回值类型为float
float height(float h); //函数height的声明,返回值类型为float
int main() //主函数
{
float h = 100.0, s = 0.0; //起始高度h,经过的路程s
printf("第10次落地时,共经过%f米\n", length(h, s)); //函数length的调用及输出
printf("第10次反弹%f米\n", height(h)); //函数height的调用及输出
return 0;
}
//自定义函数length,height落地经过的总路程
float length(float h, float s)
{
s = h;
for (int i = 2; i <= 10; i++)
{
h /= 2;
s += 2 * h;
}
return s;
}
//自定义函数height,求小球第10次反弹起的高度
float height(float h)
{
for (int i = 1; i <= 10; i++)
{
h /= 2;
}
return h;
}
//author:祁山何小喵
//time:2020.05.30
//task:编写两个函数,输入两个整数,输出其最大公约数和最小公倍数
#include
int gcd(int a, int b); //函数gcd的声明
int lcm(int a, int b); //函数lcm的声明
int main()
{
int a, b;
printf("请输入两个整数:");
scanf("%d,%d", &a, &b);
printf("%d和%d的最大公约数是:%d\n", a, b, gcd(a,b));
printf("%d和%d的最小公倍数是:%d\n", a, b, lcm(a,b));
return 0;
}
//定义函数gcd,求两个整数的最大公约数,算法为辗转相除法;
int gcd(int a, int b)
{
int x, y, c;
x = a;
y = b;
while (b != 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
//定义函数lcm,求两个整数的最小公倍数,最小公倍数=a*b/最大公约数
int lcm(int a, int b)
{
int x, y, c;
x = a;
y = b;
while (b != 0)
{
c = a % b;
a = b;
b = c;
}
return (x * y / a);
}
//author:祁山何小喵
//time:2020.05.30
//task:编写一个函数,反序输出字符串
#include
#include
void reverse(char a[]); //声明reverse函数
int main()
{
char str[100];
printf("请输入一个字符串:\n");
gets_s(str); //输入一个字符串
reverse(str); //调用reverse函数
printf("反序后的字符串为:\n");
puts(str); //输出反序后的字符串
return 0;
}
//定义reverse函数
void reverse(char a[])
{
int i, j, n;
char t;
n = strlen(a);
for (i = 0; i < n / 2; i++)
{
t = a[i];
a[i] = a[n-i-1];
a[n-i-1] = t;
}
}
//author:祁山何小喵
//time:2020.05.30
//task:编写一个函数,将输入的10个字符从小到大排序输出
#include
#include
void sort(char s[]); //声明sort函数
int main()
{
char s[11];
printf("请输入要比较的10个字符:\n");
gets_s(s); //输入一个字符串到字符数组s[]
sort(s); //调用sort函数
printf("从小到大排序为:\n");
puts(s); //输出s[]中的字符串
return 0;
}
//定义sort函数,用“气泡法”对字符从小到大排序
void sort(char s[])
{
int i, j;
char t;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9 - i; j++)
{
if (s[j] > s[j + 1])
{
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
}
}
}