1.float
和
double
类型的区别
float
为
4
字节
,double
类型为
8
字节
,
小数默认为
double
类型
,
它们的区别主要在精度和有效数字的不同
.
//float(4
字节
)
和
double(8
字节
),
小数默认为
double
//float
的精度和有效数字 小于
double,
具体定义在
float.h
int
main
()
{
float
a
=
12.3
;
//
数据截断
,
小数默认为
double
double
b
=
12.3
;
float
c
=
(
float
)
12.3
;
float
d
=
12.3f
;
//f
说明
12.3
为
float,
常用的方法
float
e
=
12345.678f
;
double
f
=
12345.678
;
printf
(
"%f\n%f\n"
,
e
,
f
);
return
0
;
}
2.
从键盘输入一行字符
从标准输入读取一行字符的常用方法
标准输入
:
键盘
标准输出
:
屏幕
getchar():
从键盘获取一个字符
,
具体使用参考帮助手册
putchar():
输出一个字符
,
具体使用参考帮助手册
isalpha():
判断是否为字母字符
,
需要引用
ctype.h
int
main
()
{
int
sum
=
1
;
for
(
int
i
=
9
;
i
>=
1
;
i
--
)
{
sum
=
(
sum
+
1
)
*
2
;
}
printf
(
"%d\n"
,
sum
);
return
0
;
}
//float(4
字节
)
和
double(8
字节
),
小数默认为
double
//float
的精度和有效数字 小于
double,
具体定义在
float.h
int
main
()
{
float
a
=
12.3
;
//
数据截断
,
小数默认为
double
double
b
=
12.3
;
float
c
=
(
float
)
12.3
;
float
d
=
12.3f
;
//f
说明
12.3
为
float,
常用的方法
float
e
=
12345.678f
;
double
f
=
12345.678
;
printf
(
"%f\n%f\n"
,
e
,
f
);
return
0
;
}
isdigit():
判断是否为数字字符
,
需要引用
ctype.h
int
main
()
//
方法
1,
这是最常用的
{
int
ch
;
while
((
ch
=
getchar
())
!=
'\n'
)
//,
从键盘获取一行字符
,
注意
=
和
!=
的优先级
,
类似
3+4*2
{
putchar
(
ch
);
}
return
0
;
}
int
main
()
//
方法
2,
没有上面的常用
{
char
ch
;
while
(
scanf
(
"%c"
,
&
ch
)
>
0
&&
ch
!=
'\n'
)
{
printf
(
"%c"
,
ch
);
}
return
0
;
}
3.
常量
常量
:
不能修改的值
.
常见的常量有数字
,
字符常量
,
宏
数字常量
.
例如
1,2,12.5,1.25e1(1.25e-1,1.25e+1,1e2,1.e2)
字符常量
.
例如
'0', 'A', 'a',
转义字符
'\\', '\0', '\n'
上面的字符对应的值或者含义
48, 65, 97 ,
斜线本身
, 0 ,
换行
(10)
宏定义
.#define NUM 10 (
让数字有名字
) ,
宏仅仅是字符替换
int
main
()
//
科学计数法的表示
{
printf
(
"%f\n"
,
1.e2
);
//ok
printf
(
"%f\n"
, .
1e2
);
//ok
//printf("%f\n", 1.e);//error,
不能缺省指数
printf
(
"%f\n"
,
3.e0
);
//ok
//printf("%f\n", 2.e2.4);//error
指数不能是小数
,
可以使用
pow
函数替代
//printf("%f\n",3.1ea);//error,
指数不能是变量
,
可以使用
pow
函数替代
return
0
;
}
int
main
()
{
//%c
输出该字符
,%d
输出该字符的
ASCII
码
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'0'
,
'0'
);
//0,48
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'A'
,
'A'
);
//A,65
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'a'
,
'a'
);
//a,97
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'\0'
,
'\0'
);
//
不可打印
,0
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'\\'
,
'\\'
);
//\,92
printf
(
"
字符
:%c,
对应的值
:%d\n"
,
'\n'
,
'\n'
);
//
换行
,10
return
0
;
}
宏的使用
#define PI 3.1415926
//1.
数字有名字
,2.
一改全改
int
main
()
{
//PI = 3.14;//error,
宏不能改变
double
r
=
5
;
double
c
=
2
*
PI
*
r
;
double
s
=
PI
*
r
*
r
;
return
0
;
}
4.
变量
变量
:
可以修改的值
,
先定义后使用
标识符
:
函数名
,
变量名
,
宏名
,
总之就是名字
.
命名规则
:
1.
只能包含字母
,
数字和下划线
_
2.
不能以数字开头
3.
不能使用关键字
.
例如
.int float = 10;
4.
区分大小写
1.break
作用
:
跳出一层循环或者跳出
switch.
例
:1+2+3+...+x<1000; 1+2+3+...+x+(x+1)>1000,
求
x
的值
int
main
()
{
int
sum
=
0
;
//
和
int
x
;
for
(
x
=
1
; ;
++
x
)
{
sum
+=
x
;
if
(
sum
>
1000
)
break
;
//
跳出一层循环
}
printf
(
"%d,%d\n"
,
x
-
1
,
sum
);
return
0
;
}
2.continue
作用
:
提前结束本次
(
趟
)
循环
,
直接进入下一次循环
.
例
:
输出
1~200
之间能被
3
和
5
整除的数字
int
main
()
{
for
(
int
i
=
1
;
i
<
200
;
i
++
)
{
if
(
i
%
15
!=
0
)
//1 != 0
continue
;
printf
(
"%d\n"
,
i
);
}
/*for (int i = 1; i < 200; i++)
{
if (i % 15 == 0)
printf("%d\n",i);
}*/
return
0
;
}
穷举法
穷举法
:
也称枚举法
,
在给定范围内把所有的情况全部列举一遍
.
例
1.
有
10,5,1
面值的人民币足够多
,
现在需要
18
元
,
一共有多少种组合方法
int
main
()
{
int
sum
=
0
;
for
(
int
i10
=
0
;
i10
<=
18
/
10
;
i10
++
)
//10
元的数量
{
for
(
int
i5
=
0
;
i5
<=
18
/
5
;
i5
++
)
{
if
(
i10
*
10
+
i5
*
5
>
18
)
continue
;
//??
for
(
int
i1
=
0
;
i1
<=
18
/
1
;
i1
++
)
{
sum
=
i10
*
10
+
i5
*
5
+
i1
*
1
;
if
(
sum
==
18
)
printf
(
"%d,%d,%d\n"
,
i10
,
i5
,
i1
);
else if
(
sum
>
18
)
break
;
//??
}
}
}
return
0
;
}
例
2.
在一个陌生的国度,有
5
种不同的硬币单位:
15
、
23
、
29
、
41
和
67
(分)。寻找所有组成
18
元
8
分
(即
1808
分)的可能组合。假定对于所有面值的硬币你都有足够的硬币。
int
main
()
{
int
sum
=
0
;
int
count
=
0
;
//
符合
1808
条件的次数
int
tmp
=
0
;
//
罗列的所有穷举情况次数
(
符合条件
+
不符合条件
)//731693655
次
,8637396
次
for
(
int
i15
=
0
;
i15
<=
1808
/
15
;
i15
++
)
{
for
(
int
i23
=
0
;
i23
<=
1808
/
23
;
i23
++
)
{
if
(
i15
*
15
+
i23
*
23
>
1808
)
continue
;
for
(
int
i29
=
0
;
i29
<=
1808
/
29
;
i29
++
)
{
if
(
i15
*
15
+
i23
*
23
+
i29
*
29
>
1808
)
continue
;
for
(
int
i41
=
0
;
i41
<=
1808
/
41
;
i41
++
)
{
if
(
i15
*
15
+
i23
*
23
+
i29
*
29
+
i41
*
41
>
1808
)
continue
;
for
(
int
i67
=
0
;
i67
<=
1808
/
67
;
i67
++
)
{
tmp
++
;
sum
=
i15
*
15
+
i23
*
23
+
i29
*
29
+
i41
*
41
+
i67
*
67
;
if
(
sum
==
1808
)
{
count
++
;
//printf("%d,%d,%d,%d,%d\n",i15,i23,i29,i41,i67);
}
else if
(
sum
>
1808
)
break
;
}
}
}
}
}
printf
(
"
一共计算了
%d
次
\n"
,
tmp
);
printf
(
"
一共
%d
种组合
\n"
,
count
);
return
0
;
}