概述
- 编程计算存款利息。有1000元,想存5年,可按以下5种办法存:
(1) 一次存5年期。
(2) 先存2年期,到期后将本息再存3年期。
(3) 先存3年期,到期后将本息再存2年期。
(4) 存1年期,到期后将本息再存1年期,连续存5次。
(5) 存活期存款,活期利息每一季度结算一次。
假设银行存款利息如下:
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 <stdio.h>
#include <math.h>
#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;
}
- 购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,编程计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的结果取小数点后一位,对第2位按四舍五入处理。
计算还清月数m的公式如下:
lg p − lg ( p − d ∗ r ) lg ( 1 + r ) frac{lg{p}-lg{(p-d*r)}}{lg{(1+r)}} lg(1+r)lgp−lg(p−d∗r)
或改写为
lg p p − d ∗ r lg ( 1 + r ) frac{lg{frac{p}{p-d*r}}}{lg{(1+r)}} lg(1+r)lgp−d∗rp
提示:math.h函数库中有log10函数求以10为底的对数,
例如log10(7)就表示log7。
//author:祁山何小喵
//time:2020.03.28
//task:计算还清贷款所需月数
#include <stdio.h>
#include <math.h>
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;
}
- 输入一个不多于5位的正整数,要求:
(1) 求出它是几位数;
(2) 分别输出每一位数字;
(3) 按逆序输出各位数字,例如原数为321,应输出123。
//author:祁山何小喵
//time:2020.04.12
//task:输入一个整数,求其位数;输出其每个数字;将其逆序输出
#include<stdio.h>
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;
}
}
- 企业根据利润发放奖金。利润I低于或等于100000元的,奖金按10%提成;利润高于100000元、低于200000元(100000<I<=200000)时,低于100000元的部分按10%提成,高于100000元的部分按7.5%提成;200000<I<=400000时,低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成;400000<I<=600000时,高于400000元的部分按3%提成;600000<I<=1000000时,高于600000元的部分按1.5%提成;I>1000000时,高于1000000元的部分按1%提成。编程时输入当月利润I,求应发奖金总数。
要求:
(1) 用if语句编程序
(2) 用switch语句编程序
//author:祁山何小喵
//time:2020.04.12
//task:输入当月利润,分别用if、switch语句求出应发奖金总数
#include<stdio.h>
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); //输出奖金总数,保留两位小数
}
- 求 ∑ n = 1 20 n ! displaystylesum_{n=1}^{20} n! n=1∑20n!(即求 1 ! + 2 ! + 3 ! + . . . + 20 ! 1!+2!+3!+...+20! 1!+2!+3!+...+20! )
//author:祁山何小喵
//time:2020.04.23
//task:求1-20的阶乘之和
/* 20!数据太大,int类型存储不下,所以用long long int类型,
long long int是C99标准, 为64位, 8字节长度
*/
#include<stdio.h>
int main()
{
long long int i, h = 1, s = 0; //h=0!=1;
for (i = 1; i <= 20; i++)
{
h *= i;
s += h;
}
printf("%I64dn", s); //long long int的输出;
return 0;
}
- 输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一位水仙花数,因为 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33.
//author:祁山何小喵
//time:2020.04.23
//task:求出所有水仙花数
#include<stdio.h>
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("%dn", 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 <stdio.h>
#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.8fn", n, sum);
return 0;
}
- 一个球从100m高度落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高
//author:祁山何小喵
//time:2020.04.23
//task:求小球第10次落地经过的路程以及反弹起的高度
#include<stdio.h>
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<stdio.h>
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的最大公约数是:%dn", a, b, gcd(a,b));
printf("%d和%d的最小公倍数是:%dn", 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 <stdio.h>
#include <string.h>
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;
}
}
- 写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排序。在主函数中输入字符、输出结果。
//author:祁山何小喵
//time:2020.05.30
//task:编写一个函数,将输入的10个字符从小到大排序输出
#include<stdio.h>
#include<string.h>
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;
}
}
}
}
最后
以上就是动听冬日为你收集整理的C语言实验题目[01]的全部内容,希望文章能够帮你解决C语言实验题目[01]所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复