---------------------- Java培训、Android培训、iOS培训、.Net培训,期待与您交流! ---------------------
一、流程控制
流程控制分为以下三种:
顺序结构:默认的流程结构,按照书写的顺序执行每一条语句。
选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
循环结构:在给定条件成立的情况下,反复执行某一段代码。
1. 选择结构
(1)if
if(表达式) 语句1;
if(表达式) 语句1; else 语句2;
if(表达式) { }
if(表达式) { } else { }
if(表达式1) { } else if(表达式2) { } else { }
(2)switch
switch(表达式) { case 数值1: break; … default: break;}
注意:不能忘了break;语句。
2. 循环结构
(1)while
while(表达式) { }
注意:只有条件成立才会执行循环体。
(2)do-while
do{ } while(表达式)
注意:循环体一定会执行一次,再进行表达式判断。
(3)for
for(初始化语句; 条件表达式; 渐变语句) { }
注意:for循环体内部变量的作用域。
3. break和continue
(1)break
使用场合:switch、循环结构
(2)continue
使用场合:循环结构
二、函数
函数可以把不需要了解的具体操作细节隐藏起来,从而使整个程序结果更加清晰,并降低修改程序的难度。
1. 定义函数
定义的目的:将一个常用的功能封装起来,方便以后调用。
定义形式:
返回值类型 函数名(参数声明列表)
{
声明和语句
}
2. 函数调用
函数调用前,得先声明函数。
不能重复定义函数,但可以重复声明函数。
只有函数声明、没有定义,编译警告、链接报错。
3. 函数的参数
形参和实参的参数个数一致;参数的传递时值传递。
4. 函数的返回
函数的返回类型可以是任何类型。
函数的弱语法:
1》如果没有写返回值类型,则默认是int
2》如果写了返回值类型,也可以直接return;
3》void,不返回任何值
4》return (表达式);,表达式的值返回之前将转换为函数的类型
5. 头文件
一般我们把.h文件都称为头文件。别的源文件只要包含了头文件,就可以使用头文件里面声明的函数了,但是编译的时候还是要把引用的函数定义的文件一起编译。
6. static和extern关键字
(1)对函数
外部函数:定义的函数能被本文件和其他文件访问。
1》默认情况下,所有的函数都是外部函数。
2》不允许有同名的外部函数。
内部函数:定义的函数只能被本文件访问。
1》允许不同文件中有同名的内部函数。
static对函数的作用:
1》定义一个内部函数
2》声明一个内部函数
extern对函数的作用:
1》完整地定义一个外部函数
2》完整地声明一个外部函数
(默认情况下,声明和定义的函数都是外部函数,所以extern可以省略)
(2)对变量
全局变量分2种:
外部变量:定义的变量能被本文件和其他文件访问
1》默认情况下,所有的全局变量都是外部变量
2》不同文件中的同名外部变量,都代表同一个变量
内部变量:定义的变量只能被本文件访问
1》不同文件中的同名内部变量,互不影响。
static对变量的作用:
定义一个内部变量
extern对变量的作用:
声明一个外部变量
(3)static修饰局部变量
1》延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁
2》并没有改变局部变量的作用域
3》所有的test()函数都共享一个变量b
static修饰局部变量的使用场合:
一个函数被调用很多次,且某个变量值固定不变
7. 函数的补充
(1)递归
函数的递归调用,就是说函数可以直接或间接调用自身。
递归并不节省存储器的开销,因为递归调用过程中国必须在某个地方维护一个存储处理值的栈。递归的执行速度并不快,但递归代码比较紧凑,并且比响应的非递归代码更易于编写且好理解。在描述树、图等数据结构方面,使用递归很是方便的。
(2)标准输入/输出函数
标准输入/输出函数在头文件<stdio.h>中有定义。
int getchar(void) :在每次调用时返回下一个输入字符。若遇到文件结尾,则返回EOF。
int putchar(int) :将字符送到标准输出上,默认情况标准输出为屏幕显示。如果没有发生错误,则函数putchar将返回输出的字符;如果发生错误,则返回EOF。
(3)格式化输入/输出
1》格式化输出 ——printf函数
输出函数printf将内部数值转换为字符的形式。
int printf(char *format, arg1, arg2, ...);
函数printf在输出格式format的控制下,将其参数进行格式化转化,并在标准输出设备上打印出来。它的返回值为打印的字符数。
2》格式化输入 ——scanf函数
int scanf(char *format, arg1, arg2, ..);
scanf函数从标准输入中读取字符序列,按照format中的格式说明对字符序列进行解释,并把结果保存到其余的参数中。
当scanf函数扫描完格式串或遇到无法与格式说明匹配的输入时,scanf函数将会终止,同时,返回成功匹配并赋值的输入项的个数作为函数的返回;如果到达文件结尾,scanf将返回EOF。
注:空格、制表符、换行符、回车符和换页符在格式串处理过程中将被忽略。
(4)文件访问函数
<stdio.h>中定义了一个包含文件信息的结构FILE。
FILE *fp = fopen(char *name, char *mode);
fp是一个指向结构FILE的指针,fopen函数返回一个指向结构FILE的指针。
fopen的第一个参数是一个字符串,它包含文件名。第二个参数是访问模式,也是一个字符串,用于指定文件的使用方式,模式包括:读("r")、写("w")、追加("a")。
int fclose(FILE *fp);
执行与fopen相反的操作,它断开由fopen函数建立的文件指针和外部名之间的连接,并释放文件指针以供其他文件使用。
注意:有fopen,就有fclose。
(5)字符串操作函数
函数在头文件<string.h>中定义:
strcat(char *s, char *t);
将t指向的字符串连接到s指向的字符串的末尾。
strncat(char *s, char *t, int n);
将t指向的字符串中前n个字符连接到s指向的字符串的末尾。
strcmp(char *s, char *t);
根据s指向的字符串小于(s<t)、等于(s==t)或大于(s>t)t指向的字符串的不同情况,分别返回负整数、0、或正整数。
strncmp(char *s, char *t, int n);
同strcmp,单只在前n个字符中比较。
strcpy(char *s, char *t);
将t指向的字符串复制到s指向的字符串的位置。
strncpy(char *s, char *t, int n);
将t指向的字符串中的前n个字符复制到s指向的位置。
strlen(char *s);
返回s指向的字符串的长度。
strchr(char *s, char c);
在s指向的字符串中查找c,若找到。则返回指向它第一次出现的位置的指针,否则返回NULL。
strrchr(char *s, char c);
在s指向的字符串中查找c,若找到。则返回指向它最后一次出现的位置的指针,否则返回NULL。
(6)字符类别测试和转换函数
在头文件<ctype.h>中定义:其中c为unsigned char类型
isalpha(c);
若c是字母,则返回一个非0值,否则返回0。
isupper(c);
若c是大写字母,则返回一个非0值,否则返回0。
islower(c);
若c是小写字母,则返回一个非0值,否则返回0。
isdigit(c);
若c是数字,则返回一个非0值,否则返回0。
isalnum(c);
若isalpha(c)(是字母)或isdigit(c)(是数字),则返回一个非0值,否则返回0。
isspase(c);
若c是空格、制表符、换行符、回车符或换页符,则返回一个非0值,否则返回0。
toupper(c);
返回c的大写形式。
tolower(c);
返回c的小写形式。
(7)命令执行函数
system(char *s);
执行包含在字符串s中的命令。然后继续执行当前程序。s很大程度上与所用的操作系统有关。
system("date");
system("pause");
(8)存储管理函数
函数malloc和calloc用于动态地分配存储块。
void *malloc(size_t n);
当分配成功时,返回一个指针,指针指向n字节长度的未初始化的存储空间,否则返回NULL。
void *calloc(size_t n, size_t size);
当分配成功时,返回一个指针,指针指向的存储空间足以容纳n个指定长度size的对象组成的数组,否则返回NULL。该空间被初始化为0。
free(p);
释放指针p指向的存储空间,p是之前malloc或calloc过的指针。
(9)数学函数
头文件<math.h>中声明:
double sin(double x);
x的正弦函数,其中x用弧度表示。
double cos(double x);
x的余弦函数,其中x用弧度表示。
double atan2(double y, double x);
y/x的反正切函数,其中x和y都用弧度表示。
double exp(double x);
指数函数e的x次方。
double log(double x);
x的自然对数(以e为底),其中x>0。
double log10(double x);
x的常用对数(以10为底),其中x>0。
double pow(double x, double y);
计算x的y次方的值。
double sqrt(double x);
x的平方根(x>=0)。
double fabs(double x);
x的绝对值。
(10)随机数发生器函数
函数rand()生成介于0和RAND_MAX之间的伪随机整数序列。其中RAND_MAX是在头文件<stdlib.h>中定义的符号常量。
#define frand() ((double) rand() / (RAND_MAX+1.0));
生成大于等于0但小于1的随机浮点数。