(6)标准库函数
注意:(里面的 *变量名 是指针,里面存放的是一个内存地址值,后面会详讲,大致了解下即可,不用死记下来)
常用标准库函数如 stdio.h,math.h,string.h,ctype.h.stdlib.h,system.h
1、stdio库:主要功能是输入输出操作,包括文件输入输出,标准输入输出。
输出函数: int puts(const char* str) 把一个字符串写出到标准输出
int printf(char *format,args,…) 把args,…的值以format指定的格式输出到标准输出设备,输出字符的个数
用\0替换为\n换行符
输入函数:char gets(char str)从标准输入读一行数据知道换行符才结束
FILE fopen(char filename,char *mode) 以mode指定的方式打开名为filename的文件,返回值:成功,返回文件指针(文件信息区的起始地址),否则返回NULL
将\n替换为\0
2、ctype库
ps:以下几个表格来自于网上资料
调用字符函数时,要求在源文件中包下以下命令行:
\ #include
函数原型说明 |
功能 |
返回值 |
int isalnum(int ch) |
检查ch是否为字母或数字 |
是,返回1;否则返回0 |
int isalpha(int ch) |
检查ch是否为字母 |
是,返回1;否则返回0 |
int iscntrl(int ch) |
检查ch是否为控制字符 |
是,返回1;否则返回0 |
int isdigit(int ch) |
检查ch是否为数字 |
是,返回1;否则返回0 |
int isgraph(int ch) |
检查ch是否为ASCII码值在ox21到ox7e的可打印字符(即不包含空格字符) |
是,返回1;否则返回0 |
int islower(int ch) |
检查ch是否为小写字母 |
是,返回1;否则返回0 |
int isprint(int ch) |
检查ch是否为包含空格符在内的可打印字符 |
是,返回1;否则返回0 |
int ispunct(int ch) |
检查ch是否为除了空格、字母、数字之外的可打印字符 |
是,返回1;否则返回0 |
int isspace(int ch) |
检查ch是否为空格、制表或换行符 |
是,返回1;否则返回0 |
int isupper(int ch) |
检查ch是否为大写字母 |
是,返回1;否则返回0 |
int isxdigit(int ch) |
检查ch是否为16进制数 |
是,返回1;否则返回0 |
int tolower(int ch) |
把ch中的字母转换成小写字母 |
返回对应的小写字母 |
int toupper(int ch) |
把ch中的字母转换成大写字母 |
返回对应的大写字母 |
3、string.h 字符串处理函数库
函数原型说明 |
功能 |
返回值 |
char strcat(char s1,char *s2) |
把字符串s2接到s1后面 |
s1所指地址 |
char strchr(char s,int ch) |
在s所指字符串中,找出第一次出现字符ch的位置 |
返回找到的字符的地址,找不到返回NULL |
int strcmp(char s1,char s2) |
对s1和s2所指字符串进行比较 |
s1<s2,返回负数;s1= =s2,返回0;s1>s2,返回正数 |
char strcpy(char s1,char *s2) |
把s2指向的串复制到s1指向的空间 |
s1 所指地址 |
unsigned strlen(char *s) |
求字符串s的长度 |
返回串中字符(不计最后的'\0')个数 |
char strstr(char s1,char *s2) |
在s1所指字符串中,找出字符串s2第一次出现的位置 |
返回找到的字符串的地址,找不到返回NULL |
4、math.h 数学库
函数原型说明 |
功能 |
返回值 |
说明 |
int abs( int x) |
求整数x的绝对值 |
计算结果 |
|
double fabs(double x) |
求双精度实数x的绝对值 |
计算结果 |
|
double acos(double x) |
计算cos-1(x)的值 |
计算结果 |
x在-1~1范围内 |
double asin(double x) |
计算sin-1(x)的值 |
计算结果 |
x在-1~1范围内 |
double atan(double x) |
计算tan-1(x)的值 |
计算结果 |
|
double atan2(double x) |
计算tan-1(x/y)的值 |
计算结果 |
|
double cos(double x) |
计算cos(x)的值 |
计算结果 |
x的单位为弧度 |
double cosh(double x) |
计算双曲余弦cosh(x)的值 |
计算结果 |
|
double exp(double x) |
求ex的值 |
计算结果 |
|
double fabs(double x) |
求双精度实数x的绝对值 |
计算结果 |
|
double floor(double x) |
求不大于双精度实数x的最大整数 |
||
double fmod(double x,double y) |
求x/y整除后的双精度余数 |
||
double frexp(double val,int *exp) |
把双精度val分解尾数和以2为底的指数n,即val=x*2n,n存放在exp所指的变量中 |
返回位数x0.5≤x<1 |
|
double log(double x) |
求㏑x |
计算结果 |
x>0 |
double log10(double x) |
求log10x |
计算结果 |
x>0 |
double modf(double val,double *ip) |
把双精度val分解成整数部分和小数部分,整数部分存放在ip所指的变量中 |
返回小数部分 |
|
double pow(double x,double y) |
计算xy的值 |
计算结果 |
|
double sin(double x) |
计算sin(x)的值 |
计算结果 |
x的单位为弧度 |
double sinh(double x) |
计算x的双曲正弦函数sinh(x)的值 |
计算结果 |
|
double sqrt(double x) |
计算x的开方 |
计算结果 |
x≥0 |
double tan(double x) |
计算tan(x) |
计算结果 |
|
double tanh(double x) |
计算x的双曲正切函数tanh(x)的值 |
计算结果 |
5、stdlib.h
字符串转换
double atof (const char*);
int atoi (const char*);
long atol (const char*);
double strtod (const char*, char**);
long strtol (const char*, char**, int);
unsigned long strtoul (const char*, char**, int);
随机数
内存管理
环境接口:
void abort (void);
void exit (int);
int atexit (void (*)(void));
int system (const char*);
char getenv (const char);
2.控制语句
1.顺序结构(我们之前打的代码都是顺序结构的)
2.分支结构(读者可以自寻一些题目来做或看书上的)
(1)if语句
主要是用来判断一些事务的
下列代码中,if(){}语句一定要有,其他都可有可无,视情况而定
#include <Stdio.h> int main() { if(条件){ //条件为真执行此条语句 //条件为假执行else if } else if (条件){ //条件为真执行此条语句 //条件为假执行下条else if } else if (条件){ //条件为真执行此条语句 //条件为假执行else } else{ //执行语句 //结束 } }
下面我们用一个简单例子详细说明
#include <Stdio.h> int main() { int n; scanf("%d",&n); if(n){//这单独一个n是什么意思呢,其实等同与if(n!=0),也就是n不等于0,n不等于0的时候执行这if里面的代码 //不止是if语句可以这样,while,dowhile循环都可以这样,for循环这样用的比较少 printf("n不等于0~"); } else if(n==1){//这里是个陷阱 //如果n等于1,那么n是不等于0的,那肯定就属于if里面的条件了,所以直接在if语句那就被截断了 //这个else if语句也就当然是执行不出来的 printf("n等于1"); } else{ //上面if语句条件n不等于0,这里else你可以看成汉语的否则的意思,如果上面n不等于0,就执行if里面的代码,否则就执行else里面的代码 printf("CSDN"); } }
示例1:
输入:1
输出: n不等于0~
示例2:
输入:45
输出:n不等于0~
示例3:
输入:0
输出:CSDN
(2) switch()语句
解析:
基础架构
#include <Stdio.h> int main() { int a; scanf("%d",&a); /*switch(表达式){ //表达式的值只能时整型,字符型和枚举型 case 常量表达式1: //常量表达式值的类型必须与表达式值的类型相同,如,a时int类型,常量的值也要时int类数据 语句1; //这里语句不止可以跟一条,还可以增添任意条语句在语句1之后 break; //break时退出当前循环,即退出switch语句. //如果没有break语句,就会一直执行下去,比如下面去掉所有break,就会有a=1a=2a=3a=1这种结果. case 常量表达式2: 语句2; break; case 常量表达式n: 语句n; break; default://default语句最多出现一次,位置最好是放在末尾,便于阅读 语句n+1; }*/ switch(a){ case 1: printf("a=1"); break; case 2: printf("a=2"); break; case 3: printf("a=3"); break; default: printf("a的值:%d",a);//如果a不是1,2,3就输出这条语句 } }
3.循环结构(do ..while , while,for )循环体内可以有若干条语句
(1)do..while循环
(先执行循环体部分一次,再进行判断是否满足下次循环的条件)
#include <Stdio.h> int main() { int a = 0; int b = 10; /*do{ 循环体; }while(条件);*/ do{ a++; b--; }while(a<10); printf("%d %d",a,b);//结果:10 0 }
解析:先执行一遍,a和b--,在判断a是否超过10,如果超过10则退出,执行printf语句.若没有超过则继续a和b--,直到a超过10
(2)while循环
(先进行判断是否满足条件,如果满足条件,则执行循环体内容,直到不满足条件为止,如果刚开始就不满足条件,则直接跳过while循环)
#include <Stdio.h> int main() { int a = 0; int b = 10; /*do{ 循环体; }while(条件);*/ /*while(条件){ 循环体; }*/ while(a<5){ a++; b--; } printf("%d %d",a,b);//结果:5 5 }
(3)for循环
(最好用于循环次数确定的情况)
#include <Stdio.h> int main() { int a = 0; /* do{ 循环体; }while(条件); */ /* while(条件){ 循环体; } */ /* for(表达式1;条件1;表达式2){ 循环体; } */ int count = 0; for(int i = 1;i<=10;++i){ a++; count++; printf("第%d次a为%d\n",count,a);//从 第1次a为1 一直到 第10次a为10 } }
注意! int i=1,这一句定义i,可以放在循环体外定义,如果要这样定于i,你就要用c99的特性,devc++中要在工具-编译选项-中点击编译时添加以下命令,加入 -std=c99即可
解析:
我们这里确定了循环次数,即循环10此,每次加1,所以可以用for循环,当然其他循环也是可以的,视情况而定.
i为1时满足条件i<=10,再执行循环体,循环体执行完之后,再执行++i,判断是否满足条件i<=10,满足继续循环体.
总结:1.先声明一个循环变量还构造一个循环
2.再就是条件->循环体->表达式2->条件->循环体->表达式2之间的循环了
3.i超出条件时就可以退出了
(4)关键字
(1)break;
#include <Stdio.h> int main() { int count = 0; for (int i = 1; i <= 5; ++i) { for (int j = 1; j <= 5; ++j) { printf("%d\n", count); count++; } if (count == 10) { printf("到10就退出了~"); break; } } }
结果:
0
1
2
3
4
5
6
7
8
9
到10就退出了~
解析:即可以看到退出的是最外层的for循环,当count为10的时候就执行if判断语句了,此时break是退出最外层的for循环.
(2)continue;
continue一般用于循环跳出一次(即此次循环不执行,直接执行下一次的循环),并且在continue语句之后的语句都不会执行了
#include <Stdio.h> int main() { int count = 0; for (int i = 1; i <= 15; ++i) { count++; if (count == 10) { printf("碰到10了继续下一次for j循环~\n"); continue; } printf("%d\n", count); } }
结果:
1
2
3
4
5
6
7
8
9
碰到10了继续下一次for j循环~
11
12
13
14
15
解析:此时可以看到当count为10的时候,就会执行if语句的内容,并且不执行之后的语句了