1.1算术表达式
printf("%.1f\n",8.0/5.0);
此段话为保存一位小数。
printf("%f\n",8.0/5.0);
此段话为保存六位小数。
printf("%.1f\n",8/5);
此段话结果为0.0。
printf("%d\n",8.0/5.0);
此段话结果为-1717986918。
1.2复杂的表达式计算
需要添加头文件,
#include<math.h>
例如sqrt的使用。
例题1-1 圆柱体的表面积
输入底面半径r和高h,输出圆柱体的表面积,保留三位小数。
#include<stdio.h>
#include<math.h>
int main()
{
const double pi=acos(-1.0);
double r,h,s1,s2,s;
scanf("%lf%lf",&r,&h);
s1=pi*r*r;
s2=2*pi*r*h;
s=s1*2.0+s2;
printf("Area = %.3f\n",s);
return 0;
}
本段话中要注意lf而不是1f,否则会出错。
C语言问题%f和%lf的区别
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double , 双精度浮点型,对应%lf.
在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。
在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
C语言中float和double的区别
double、float都是浮点型。double(双精度型)比float(单精度型)存的数据更准确些,占的空间也更大。double精度是float的两倍,所以需要更精确的计算常使用double。double>float
单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。
非常重要的竞赛提示
在算法竞赛中,输入前不要打印提示信息。
输入完毕后立即终止程序,不要等待用户按键,因为输入输出过程都是自动的,没有人工干预。
不要在算法竞赛中使用 getch() getche() gotoxy() clrscr() 等函数。
输出格式是非常严厉的,多一个或者少一个字符都是不可以的。
在算法竞赛中,每行输出均应以回车符结束,包括最后一行。除非特别说明,每行的首行不应有空格,但行末通常可以有多余空格。另外,输出的每两个数或者字符串之间应以单个空格隔开。
尽量使用const关键字声明常数。
1.3顺序结构程序设计
%是取余数操作
/ 是取商操作
%3d 可以指定宽度,不租的左边补空格
%-3d 左对齐
%03d 左边补0的等宽格式
变量交换
方法一:(推荐使用)
t=a;
a=b;
b=t;
方法二:(不推荐使用)
a=a+b;
b=a-b;
a=a-b;
1.4分支结构程序设计
例题1-4 鸡兔同笼
#include<stdio.h>
int main()
{
int a,b,n,m;
scanf("%d%d",&n,&m);
a=(4*n-m)/2;
b=n-a;
if(m%2==1||a<0||b<0)
printf("No answer\n");
else
printf("%d %d\n",a,b);
return 0;
}
短路运算符
C语言中的逻辑运算符都是短路运算符。一旦能够确定整个表达式的值,就不再继续计算。
习题
习题1-1 平均数(average)
输入3个整数,输出它们的平均值,保留3位小数。
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%.3f",(a+b+c)/3.0);
return 0;
}
习题1-2 温度(temperature)
输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。
#include<stdio.h>
int main()
{
float f,c;
scanf("%f",&f);
printf("%.3f",5.0*(f-32.0)/9.0);
return 0;
}
习题1-3 连续和(sum)
输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。
#include<stdio.h>
int main()
{
int n;
int sum=0;
scanf("%d",&n);
if(n<=0)
printf("input error!");
else
{
for(int i=1;i<=n;i++)
sum+=i;
printf("%d",sum);
}
return 0;
}
习题1-4 正弦和余弦(sin和cos)
输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。
#include<stdio.h>
#include<math.h>
int main()
{
const double pi=acos(-1.0);
int n;
scanf("%d",&n);
if(n<=0||n>=360)
printf("input error!");
else
printf("%f %f\n",sin(n*pi/180.0),cos(n*pi/180.0));
return 0;
}
习题1-5 打折 (discount)
一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n<=0)
printf("input error");
else if(n>3)
printf("%.3f",n*95.0*0.85);
else
printf("%.3f",n*95.0);
return 0;
}
习题1-6 三角形(triangle)
输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果 可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(!(a+b>c&&a+c>b&&b+c>a))
printf("not a triangle");
else
{
if(a*a+b*b==c*c)
printf("yes");
else if(a*a+c*c==b*b)
printf("yes");
else if(b*b+c*c==a*a)
printf("yes");
else
printf("no");
}
return 0;
}
习题1-7 年份(year)
输入年份,判断是否为闰年。如果是,则输出yes,否则输出no
#include<stdio.h>
int main()
{
int year;
scanf("%d",&year);
if((year%4==0&&year/100!=0)||(year%400==0))
printf("yes");
else
printf("no");
return 0;
}
作者注
代码均为自己所写,如认为有错误,欢迎前来探讨,谢谢~~