我的实操,与课本过程不太一样,自己写的,结果是对的,仅供练习参考。持续更。
我用的是codeblocks(cb)17.12。
第三章
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
1.增长百分比
上面定义的类型要和输入类型一致,否则输出结果会错误
int main()
{
float r,n,p;
printf("请输入年份和当年的增长率\n");
scanf("%f%f",&n,&r); //上面定义的类型要和这里输入类型一致,否则输出结果会错误
r=0.07;n=10;
p=pow(1+r,n);
printf("p=%f\n",p);
return 0;
}
2.存款利息
int main()
{
float p,p1,p2,p3,p5,p0,r1=0.015,r2=0.021,r3=0.0275,r5=0.03,r0=0.0035;
char plan;
printf("请输入本金和选择的方案:\n");
scanf("%f,%c",&p,&plan); //忘记地址符号,最好写一起
switch(plan)
{
case 'a':p1=p*(1+5*r5);printf("%f",p1);break;
case 'b':p2=p*(1+2*r2)*(1+3*p3);printf("%f",p2);break;
case 'c':p3=p*(1+3*r3)*(1+2*p2);printf("%f",p3);break;
case 'd':p5=p*pow((1+p*r1),5);printf("%f",p5);break;
case 'e':p0=p*pow(1+r0/4,4*5);printf("%f",p0);break;
default:printf("输入错误");
}
return 0;
}
3.住房贷款
用log10表示取对数10
int main()
{
float m,d=300000,p=6000,r=0.01;
m=log10(p/(p-d*r))/log10(1+r); //书上好像有问题。对数10是这样表示的log10不是书上的lg10
printf("m=%6.2f\n",m);
return 0;
}
6.翻译密码
getchar()里面可以放四种字符:abc123、转义字符、八进制、十进制。
int main(){
char c1,c2,c3,c4,c5;
printf("请输入一个五个字母的单词:\n");
c1=getchar();c2=getchar();c3=getchar();c4=getchar();c5=getchar(); //只能放字符(abc123'\n''\t'等)
c1=c1+4;c2=c2+4;c3=c3+4;c5=c5+4;
printf("对应的密码是:\n");
putchar(c1);putchar(c2);putchar(c3);putchar(c4);putchar(c5);putchar('\n');
printf("对应密码是:\n%c%c%c%c%c",c1,c2,c3,c4,c5);
}
7. 求球的面积体积及圆柱的体积
注意pi此类值要定义,在整数类型值相比时最好带.0转化为float型。
int main()
{
float r,h,c,s,ss,sv,shv;
float pi=3.1415926; //注意pi也要定义
printf("请输入圆的半径和圆柱的高:\n");
scanf("%f %f",&r,&h);
c=2*pi*r; //圆周长
s=pi*r*r; //圆面积
ss=4*pi*r*r; //圆球表面积
sv=3.0/4.0*pi*r*r*r; //圆球体积 四分之三表示方式前面最好加上.0
shv=pi*r*r*h; //圆柱体积
printf("圆周长为%6.2f\n",c);
printf("圆面积为%6.2f\n",s);
printf("圆球表面积为%6.2f\n",ss);
printf("圆球体积为%6.2f\n",sv);
printf("圆柱体积为%6.2f\n",shv);
}
8.putchar与printf在字符上的区别联系
整型变量(2或4字节)在可输出字符的范围内(ASCII码为0~127)是可以与字符变量(一个字节)互相转换的。
int main(){
char c1,c2; //c1c2定义成字符型和整数型都可以
c1=getchar();c2=getchar();
putchar(c1);putchar(c2);putchar('\n');
printf("%c%c",c1,c2);
printf("输出对应的ASCII码:%d %d",c1,c2); //输出ascii码应该用printf
return 0; //整型变量2/4在可输出字符的范围内(ASCII码为0~127)是可以与字符变量1互相转换的
}
如果int(2或4字节)转char(1字节)再转int时将只将其存储单元中最后一个字节赋给c1。
如果是unsigned char类型可以存放0~255的整数;
如果是signed char类型可以存放-128~127的整数;
第四章 选择结构
4.输出其中最大的数
scanf后面的地址符号总是忘记,注意内嵌if的结构。三目运算符比较三个数的大小。
int main() //第一种if方法
{
int a,b,c;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c); //别忘地址符号
if (a>b)
if (c>a) printf("%d",c); //注意内嵌if的结构
else printf("%d",a);
else
if (c>b) printf("%d",c);
else printf("%d",b);
return 0;
}
int main() //第二种三目运算符比较大小方法
{
int a,b,c,max;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c);
max = a>b?(a>c?a:c):(b>c?b:c);
printf("%d",max);
}
5. 输入正数并判断,是则平方根并取整
int main()
{
int a;
printf("请输入一个小于1000的正数:");
scanf("%d",&a);
if (a<=0||a>=1000)
printf("输入的数字不合法请重新输入!");
else {a=sqrt(a);printf("%d",a);}
}
6.分段函数的值
不能忘记乘法要加*不能直接2x,(1<=x<10)C语言中不能这样写要写成逻辑运算符。
int main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if (x<1) printf("%.2f",y=x);
else if (1<=x&&x<10) printf("%.2f",y=2*x-1); //(1<=x<10)C语言中不能这样写
else printf("%.2f",y=3*x-11); //(y=2x-1)没有乘号是错误的
return 0;
}
8.分段输出成绩对应的等级
else后面什么都不加。
int main()
{
float a;
printf("请输入分数:");
scanf("%f",&a);
if (a>=90) printf("A");
else if (a>=80&&a<90) printf("B");
else if (a>=70&&a<80) printf("C");
else if (a>=60&&a<70) printf("D");
else printf("E"); //else后面什么都不加
return 0;
}
9.输入一个数字求出它是几位数,并输出每一位数字,和按逆序输出各位数字。
int main()
{
int n,a1,a2,a3,a4,a5;
printf("请输入一个不多于五位的正整数:");
scanf("%d",&n);
a5=n/10000;
a4=(n-a5*10000)/1000;
a3=(n-a4*1000-a5*10000)/100;
a2=(n-a3*100-a4*1000-a5*10000)/10;
a1=(n-a2*10-a3*100-a4*1000-a5*10000);
if ((n/10000)!=0)
printf("输入的正整数为5位数。分别是%d,%d,%d,%d,%d。逆序数为:%d%d%d%d%d。",a5,a4,a3,a2,a1,a1,a2,a3,a4,a5);
else if ((n/1000)!=0)
printf("输入的正整数为4位数。分别是%d,%d,%d,%d。逆序数为:%d%d%d%d。",a4,a3,a2,a1,a1,a2,a3,a4);
else if ((n/100)!=0)
printf("输入的正整数为3位数。分别是%d,%d,%d。逆序数为:%d%d%d。",a3,a2,a1,a1,a2,a3);
else if ((n/10)!=0)
printf("输入的正整数为2位数。分别是%d,%d。逆序数为:%d%d。",a2,a1,a1,a2);
else
printf("输入的正整数为1位数。分别是%d。逆序数为:%d。",a1,a1);
return 0;
}
10根据利润提成
int main()
{
float bonus,profit;
printf("请输入当月的利润:");
scanf("%f",&profit);
if (profit<0)
printf("输入不合法请重新输入!");
else if (profit<=100000)
bonus=profit*0.1;
else if (profit>100000&&profit<=200000)
bonus=100000*0.1+(profit-100000)*0.075;
else if (profit>200000&&profit<=400000)
bonus=100000*0.1+100000*0.075+(profit-200000)*0.05;
else if (profit>400000&&profit<=600000)
bonus=100000*0.1+100000*0.075+200000*0.05+(profit-400000)*0.03;
else if (profit>600000&&profit<=1000000)
bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(profit-600000)*0.015;
else
bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(profit-1000000)*0.01;
printf("应发奖金数为%.2f",bonus);
return 0;
}
用switch写用bonus/10000来判断,case0-case10。
11.输入四个整数按由大到小的顺序输出。用了数组。
int main()
{
int a[4]= {0},t,i,j;
printf("请输入四个整数:");
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
for (i=0; i<4; i++) //for用;分隔不用,!
{
for (j=i+1; j<4; j++)
{
if (a[i]>a[j])
t=a[i],a[i]=a[j],a[j]=t; //注意
else continue;
}
}
printf("按由小到大排列为:%d%d%d%d",a[0],a[1],a[2],a[3]);
return 0;
}