C语言结构特点
一,概念
- C语言标识符只能是字母、数字、下划线组成,且必须以字母或下划线作为首字母。
- 库函数是C语言本身就存在的函数,如格式化输入函数scanf,格式化输出函数printf,还有putchar等等,这些函数不需要定义,可以直接调用
- C语言是由函数构成的,函数是C语言的基本单位,一个C语言总是从主函数开始执行的,一个函数是由两部分组成:函数的首部和函数体。
- C语言可以有零个或者若干个子函数。这些子函数可以是库函数也可以是自定义函数
- 一个C语言源程序可以由一个或多个源文件组成。
- 每个源文件可以由一个或多个函数组成。
- 源程序有且仅有一个main函数,即主函数。
- 算法:解决问题的方法和步骤。
二、注释
- 单行注释 //…
- 多行注释
/*…*/
(/和*之间不能有空隔)
三.用当型求12345的乘积
四、进制
-
十进制:由0~9的数字组成。
-
八进制:以0开头,由0~7的数字序列构成,如0123表示八进制,换成十进制:
1x82 +2x81 +3x80 =83
-
十六进制:以0x或0X开头(这里0是阿拉伯数字零),可以由数字0~9和字母A ~F或a ~f构成,A ~F字母表示10 ~15。例如,0x2F表示
2x161 +15x160 =47 即十进制的47
八进制 0123 | 十进制1x82 +2x81 +3x80 =83 |
---|---|
十六进制0x2F | 十进制2x161 +15x160 =47 |
若要在函数中输出转换进制,需要在定义时加反斜杠\ | | 如char a=’\x41’ 这里x41是0x41即十六进制,0要去掉 ,此时若putchar(a) 则是输出十进制的A |
五、指数
-
它由数字0~9、字母e或E和+、—组成,它的形式为 aEn,意为aX10n,其中a为十进制整数或小数,n为十进制整数。例如 2.5e3,表示2.5 x103,—3.5e—2 表示 —3.5x10—2。
-
注意:以指数形式表示实数时,a和n不能省**,n必须为整数。如:e5、 3e2.5都是不合法的。
-
以十进制小数形式表示实数时,整数和小数部分可省略其中一个。如: .35、**26.**这两个都可以。
2. 在ASCLL中小写字母比大写字母多32,如a—A=32。
字符串常量
是由一对双引号括起来的字符序列,字符串中可以包含任何字符、汉子等等,字符串在机内存储时,所占字节数等于字符串常量中的字符个数加1,那加的1个字节便是用于存放‘\0’(空字符,ASCLL码为0),它是字符串的结束标志,例如“wei”在内存中存储形式是:wei\0
,共占了四个字节。(字符串常量可以是
O个或者多个
)符号常量
,即放在main函数上面的常量
,格式为:#define 标识符 常量
#include <stdio.h> | |
---|---|
#define PI 3.14 | 定义一个圆周率的符合常量 |
int main() | 这个符合常量在main函数之前 |
**优点:**如果这个常量在程序中多次出现,需要更改时,只需在符合常量这里改,一改全改,**** | – |
六、绝对值函数abs、fabs、labs
int abs(int x) | 适用于整数 |
---|---|
double fabs(double x) | 适用于浮点数 |
– | – |
long labs(long x) | 适用于长整型数 |
|abs(—10)等于10 | | fabs(—5.6)等于5.6 | | labs(—9999)等于9999 |
七、exp和pow函数
double exp (double x) | 表示e为底。参数为X的指数值为 ex |
---|---|
double pow (double x,double y) | 表示返回x的次幂X^y^ |
exp(2.0)等于e^2^ =7.389056 | pow(2.0 ,3.0 )等于2^3^ =8.0 |
八、使用fflush (stdin); 来清除输入缓冲区的内容。
int i;
char c; scanf (“%d”,&i);
scanf(“%c”,&c);
printf(“i=%d,c=%d”,i,c);
return o;
这个程序运行时,正常应该输入两个内容,第一个是整数,回车确认后,再输入第二个内容。然而实际是,如果我们输入100,
然后按回车键确认后,程序随机结束运行,程序默认把回车键当成了一个输入。打印出i=100,c=10。
出现c=10是因为第二个scanf是输入%c,因为ASCll码值10就是回车。为了避免这样的情况,
当有多个输入scanf时,可用fflush (stdin);来清除缓冲区的内容。
int i;
char c;
scanf (“%d”,&i);
fflush (stdin); //消除缓冲区内容
scanf(“%c”,&c);
printf(“i=%d,c=%d”,i,c);
return o;
九、字符输入函数getchar。
#include<stdio.h>
int main()
{
char ch;
ch=getchar(); //getchar函数得到输入字符,并赋值给字符变量ch
putchar(ch); //输出字符
return 0;
}
十、算术运算符*、/、%、+、—
- 用%求余时,两个数都必须是整型数据,如下:
8%2 | 表达式的值为0 |
---|---|
5%3 | 表达式的值为2 |
5.5%3 | 编译错误,操作数不能为实数,必须为整型数据 |
—5%4 | 表达式的值为—1还是1,具体看编译器。有的编译器显示为1 |
- 整数除:两个整数相除后的结果为商的整数部分,小数部分被舍弃,没有进行四舍五入的操作。如:1/2的值为0,而不是0.5;再比如15/4的值为3。
- 实数除:只要相除两个数中有一个为实数,则结果是实数。如:1.0/2=0.5, 15/4.0=3.75
- 数据类型转换原则:低数据类型向高数据类型转换。
十一、随机函数srand和rand
- 注意:使用随机函数时,必须在头文件中包含声明
#include<stdlib.h>
如图1:
- srand函数以时间作为随机数种子,每次刷新到的数都会不同,现在是2,2,10,下次刷新可能会是别的三个数。[提示:在使用srand函数时,若以时间作为随机数种子,则需要头部包含声明
#include <time.h>
] - 如图2:
- srand函数以数字1或者其他数字作为随机数种子,每次保存刷新到的数都是一样的。
十二、类型转换
- (double)i——————————表示将i的值转换成double型。
- (int)(x+y)————————将x+y的值转换成int型。
- (double)1/2————————(double)江湖整数1转成1.0(双精度),1.0/2值为0.5。
- 整数除:若两个数都是整数,则商为整数部分,如1/2=0而不是0.5。
- 实数除:两个数其中一个为实数,则结果为实数,如1.0/2=0.5
十三、