一、今日学习概览
p14~27
备注:
- i++与++i的区别:i++是先使用再将i+1;++i是先将i+1再使用i。
- 无穷大的数INF的表示:
const int INF = (1<<30)-1;
const int INF = 0x3fffffff;
- 左移右移:
指定 A = 60(0011 1100):
(1) 按位左移(<<) 将操作数的所有位向左移动指定的位数。
下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
(A << 2)结果为 240, 二进制为 1111 0000 位(2) 按位右移(<<) 将操作数的所有位向右移动指定的位数。
下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
A >> 2 结果为 15, 二进制为 0000 1111
- 下面两行代码等价,但最好加上括号。(避免不熟练时犯错)
n/= m+1 ;
n/=(m+1);
- 数组名称前不需要加取地址运算符&。在 scanf 中,除了char数组(字符串)整个输入的情况不加&之外,其他变量类型都 需要加& 。
- double的scanf是%lf;printf是%f。
- 如何输出%和\:
printf("%%");
printf("\\");
- printf的三种实用输出格式:%md %0md %.mf(m是常数)
- “四舍六入五成双”
“四舍六入五成双”,也即“4舍6入5凑偶”,这里“四”是指≤4 时舍去,"六"是指≥6时进上。"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:5前为奇数,舍5入1;5前为偶数,舍5不进(0是偶数)。
一、具体计算规则:
(1)被修约的数字小于5时,该数字舍去;
(2)被修约的数字大于5时,则进位;
(3)被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
二、来由:
这一方式的另一个常见名称为“银行家舍入”,是IEEE754标准的推荐舍入标准。这一方式跟通常的四舍五入相比,平均数方面更能保持原有数据的特性。
三、举例:
9.8249=9.82, 9.82671=9.83
9.8350=9.84, 9.8351 =9.84
9.8250=9.82, 9.82501=9.83
- getchar可以识别换行符,输出的时候就会换一行。
- 常用math函数:使用时程序前面要加头文件
#include <math.h>
1.fabs(double x) //绝对值函数
2.floor(double x)和ceil(double x) //向下/向上取整
3.pow(double r,double p) //返回r^p
4.sqrt(double x) //返回算术平方根
5.log(double x) //返回自然对数,其他对数用换底公式
6.sin(double x)、cos(double x)和tan(double x) //参数要求是弧度制pi*45/180
7.asin(double x)、acos(double x)和atan(double x)
8.round(double x) //四舍五入,返回类型是double型,强制转换取整
- 角度制与弧度制
角度制与弧度制
- 角度制(Degree Measure)
把一个圆周平均分成360份,其中的每一份都是1o的角。这种以“度”作为单位来度量角度单位制叫做角度制。下图是我们常见的180o角度尺Protractor。
弧度制(Radian Measure)
长度为半径长的弧,所对的圆心角是 1 弧度(Radian),用符号rad表示。
正角度弧度数是一个正数,负角度弧度数是一个负数,零角度弧度数。半径为r的圆的圆心角α 所对的弧度长为l,那么角α 的弧度数的绝对值是 | α
| = l / r。角度制与弧度制的换算
常用的角度与弧度对照图
- π的精确值 pi=acos(-1.0)
- %f默认保留六位小数。
二、今日代码分析
2.02
#include <stdio.h>
int main(){
char c1,c2,c3;
c1=getchar();
getchar();
c2=getchar();
c3=getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}
b去哪儿了?
——声明三个变量,输出三个变量。getchar就是接字符的啊,朋友,a接到了,没赋值出去,不就凭空消失了。c1接收a;getchar()接收b,没保存因此凭空消失;c3接收c;c4接收d。
三、2.2练习
2.03A
#include <stdio.h>
int main(){
printf("This is my first c program!");
return 0;
}
2.04B
#include <stdio.h>
int main(){
printf("********************\nVery Good!\n********************");
return 0;
}
2.05C
#include <stdio.h>
int main(){
int a=123;
int b=456;
int sum=a+b;
printf("sum=%d",sum);
return 0;
}
2.06D
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
}
2.07E
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,r1,r2;
scanf("%lf%lf%lf",&a,&b,&c);
if(a=0||b*b-4*a*c<=0){
printf("a=0或b^2-4ac不大于0,请重新输入参数!");
}
else{
r1 = ((-b) + sqrt(b*b - 4*a*c))/(2*a);
r2 = ((-b) - sqrt(b*b - 4*a*c))/(2*a);
printf("r1=%.2f\n",r1);
printf("r2=%.2f",r2);
}
return 0;
}
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,r1,r2;
scanf("%lf%lf%lf",&a,&b,&c);
if(b*b-4*a*c<=0){
printf("a=0或b^2-4ac不大于0,请重新输入参数!");
}
else{
r1 = ((-b) + sqrt(b*b - 4*a*c))/(2*a);
r2 = ((-b) - sqrt(b*b - 4*a*c))/(2*a);
printf("r1=%.2f\n",r1);
printf("r2=%.2f",r2);
}
return 0;
}
又改了一下,虽然还是过不去。
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,r1,r2;
scanf("%lf%lf%lf",&a,&b,&c);
if(a!=0||b*b-4*a*c>0){
r1 = ((-b) + sqrt(b*b - 4*a*c))/(2*a);
r2 = ((-b) - sqrt(b*b - 4*a*c))/(2*a);
printf("r1=%.2f\n",r1);
printf("r2=%.2f",r2);
}
else
{
printf("a=0或b^2-4ac不大于0,请重新输入参数!");
}
return 0;
}
2.08F
#include <stdio.h>
#include <math.h>
int main(){
char str[10];
scanf("%s",str);
printf("%s\n",str);
return 0;
}