明解C语言
本文为阅读书籍《明解C语言-中级篇》所积累的知识点及编译书本代码时遇到的问题。部分对应代码在\Code_2018\BK_明解C语言目录下。每个代码内都含有程序功能、思路、疑惑点等内容,如有疑问指出。
rand()
- 头文件:
#include<stdlib.h> - 格式:
int rand(void); - 功能:生成伪随机数,基于种子值(
seed,默认为1),按照特定规律生成的随机数 - 代码示例:随机数生成.cpp
srand()
- 头文件:
#include<stdlib.h> - 格式:
void srand(unsigned seed); - 功能:给后续调用的
rand()设置种子(seed),用于生成新的伪随机数序列 - 代码示例:随机数生成.cpp
- 备注:常把时间当种子,
srand(time(NULL))
clock()
- 头文件:
#include<time.h> - 格式:
clock_t clock(void); - 功能:求处理器调用某个进程所花费的时间(设定起点终点算差值)
- 返回值:从定义与程序启动相关的编程环境的时间点起,用处理器系统的最佳逼近返回程序占用处理器的时间。为了以秒为计量单位,需要将返回值除以
CLOCK_PER_SEC宏的值(默认为1000)。如果无法获取处理器调用该进程所花费的时间,或者无法显示数值,就返回(clock_t)-1 - 代码示例:计算处理所需时间.cpp
isprint()
- 头文件:
#include<ctype.h> - 格式:
int isprint(int c) - 功能:判断c是否为含有空白字符
(' ')的显示字符 - 返回值:如果判断成立,就返回0以外的值(真),否则返回0
- 代码示例:简单猜拳游戏_switch语句.cpp
把字符型转换为数值
atoi():将你输入的字符串形式的整数转为int型atol():将你输入的字符串形式的整数转换为long型atof():将你输入的字符串形式的整数转换为double型- 代码示例:字符串转换为数值.cpp
字符类别的判断
iscntrl:控制字符isspace:空白字符isprint:显示字符isdigit:十进制数字isxdigit:十六进制数字isgraph:除空白符以外的显示字符issupper:大写英文字母islower:小写英文字母isalpha:英文字母isalnum:英文字符或数字字符ispunct:除空白符、数字字符、英文字符以外的显示字符上述任何一个函数只要判断成立就返回除0以外的值,不成立则返回0
数字字符和数值间的转换
整数值x(0~9) --- x+'0'-->数字字符c('0'~'9')
整数值x(0~9) <-- c-'0'---数字字符c('0'~'9')
strcmp()
- 头文件:
#include<string.h> - 格式:
int strcmp(const char *s1, const char *s2); - 功能:比较s1所指的字符串和s2所指的字符串的大小关系(从第一个字符开始逐一比较,当出现不同的字符时,以这对不同字符的大小关系为准)
- 返回值:若s1和s2相等返回0;若s1大于s2则返回正值;若s1小于s2则返回负值
strncmp()
- 头文件:
include<string.h> - 格式:
int strncmp(const char *s1, const char *s2, size_t); - 功能:比较s1所指额字符串和s2所指额字符串的前n个字符的大小关系(从第一个字符开始逐一比较,当出现不同的字符时,以这对不同字符的大小关系为准)
- 返回值:若s1和s2相等返回0;若s1大于s2则返回正值;若s1小于s2则返回负值
strcpy()
- 头文件:
#include<string.h> - 格式:
char *strcpy(char *s1, const char *s2); - 功能:把s2指向的字符串复制到s1所指向的数组。当 s2与s1重叠时,作未定义处理
- 返回值:返回s1的值
strcat()
- 头文件:
#include<string.h> - 格式:
char *strcat(char *s1, const char *s2); - 功能:把s2指向的字符串复制到s1指向的数组的末尾。当 s2与s1 重叠时,作未定义处理
- 代码示例:显示某几个月的日历.cpp
scanf()
- 头文件:
#include<stdio.h> - 格式:
int scanf(const char * restrict format,...); - 功能:格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
- 说明:函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。(在实际编程中传入的地址容易搞错)
- 返回值:
scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF - 代码示例:为整数数组动态分配储存空间.cpp
- 此外有例如
scanf("%*s")的格式,* 是scanf函数中的一种修饰符,表示输入项输入后不转送给任何向量,解析:c语言中 scanf("%*s"); 的具体意思
calloc()
- 头文件:
#include<stdlib.h> - 格式:
void *calloc(size_t nmemb, size_T size); - 功能:为nmemb个大小为size字节的对象分配储存空间,该空间的所有位都会初始化为0
- 返回值:若分配成功,则返回一个指向已分配的空间的开头的指针;若分配失败,则返回空指针
- 代码示例:为整数数组动态分配储存空间.cpp
malloc()
- 头文件:
#include<stdlib.h> - 格式:
void *malloc(size_t size); - 功能:为大小为size字节的对象分配储存空间,此储存空间的初始值不确定
- 返回值:若分配成功,则返回一个指向已分配的空间的开头的指针;若分配失败,则返回空指针
- 代码示例:把键盘输入的值存入动态分配的储存空间.cpp
free()
- 头文件:
#include<stdlib.h> - 格式:
void free(void *ptr); - 功能:释放ptr所指向的空间,让这部分空间能继续用于之后的动态分配
- 返回值:无
- 代码示例:把键盘输入的值存入动态分配的储存空间.cpp
time()
- 头文件:
#include<time.h> - 格式:
time_t time(time_t *timer); - 功能:决定当前的日历时间。未定义该值得表现形式
- 返回值:用所在编程环境中的最佳逼近返回求出的日历时间。若日历时间无效则返回值
(time_t)-1,当timer不为空指针时,将返回赋给timer指向的对象 - 代码示例:显示当前时间_显示结构体信息
- 几种时间类型示意图:几种时间类型.jpg
localtime()
- 头文件:
#include<time.h> - 格式:
struct tm *localtime(const time_t *timer); - 功能:把timer指向的日历时间转换成本地时间表示分解时间
- 返回值:返回指向转换后的对象的指针
- 代码示例:显示当前时间_显示结构体信息
gmtime()
- 头文件:
#include<time.h> - 格式:
struct tm *gmtime(const time_t *timer); - 功能:把timer指向的日历时间转换成协调世界时表示的分解时间
- 返回值:返回指向转换后的对象的指针
- 代码示例:显示当前时间(协调世界时UTC格式)
asctime()
- 头文件:
#include<time.h> - 格式:
char *asctime(const struct tm *timeptr); - 功能:把timeptr指向的结构体的分解时间转换成这种形式的字符串
Sun Sep 12 13:02:41 2018\n\0 - 返回值:返回指向转换后的对象的指针
- 代码示例:显示当前时间(asctime函数)
ctime()
- 头文件:
#include<time.h> - 格式:
char *ctime(const time_t *timer); - 功能:把
timer指向的日历时间转换成与asctime函数具有相同字符串形式的本地时间,等价于asctime(localtime(timer)) - 返回值:返回以分解时间为实际参数的
asctime函数返回的指针
difftime()
- 头文件:
#include<time.h> - 格式:
double difftime(time_t time1, time_t time0); - 功能:计算两个日历时间的差time1-time0
- 返回值:以秒为单位表示求得的时间差,将其作为double型返回
mktime()
- 头文件:
#include<time.h> - 格式:
time_t mktime(struct tm *timeptr); - 功能:把表示timeptr指向的结构体中的本地时间的分解时间转换成与timer函数的返回值具有相同表现形式的日历时间。忽略结构体 tm_wday与tm_yday元素的值。
- 返回值:把指定的分解时间转换成time_t型的值得表现形式并返回。当无法用日历时间表示时,函数会返回值(time_t)-1
- 代码示例:求星期几(mktime函数)
sprintf()
- 头文件:
#include<stdio.h> - 格式:
int sprintf(char *s, const char *format,...); - 功能:除了数据的写入方向是s指向的数组而不是标准输出流之外,其他与printf函数相同。虽然在已入的输出字符串的末尾会添加空字符,但统计返回字符数时不会将该空字符计算在内。在空间重叠的对象间进行复写操作时,作未定义处理
- 返回值:返回已写入数组的不包含空字符的字符数
- 代码示例:显示某几个月的日历
toupper()
- 头文件:
#include<ctype.h> - 格式:
int toupper(int c); - 功能:把小写英文字母转换成对应的大写英文字母
- 返回值:如果c是小写英文字母,就返回转换成大写英文字母的值,否则直接返回c
tolower()
- 头文件:
#include<ctype.h> - 格式:
int tolower(int c); - 功能:把大写英文字母转换成对应的小写英文字母
- 返回值:如果c是大写英文字母,就返回转换成小写英文字母的值,否则直接返回c
getch()
- 头文件:
#include<conio.h> - 格式:
int getch(void); - 功能:直接从键盘读取字符而不需要再键入回车,且不显示读取的字符
- 返回值:返回读取的字符的值(ASCII码),错误则返回EOF
- 代码示例:getch的使用示例
getchar()
- 头文件:
#include<stdio.h> - 格式:
int getchar(void); - 功能:用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。
- 返回值:返回读取的字符的值(ASCII码),错误则返回EOF
关于 gets/getch/getchar 这几种简单函数区别见 get类函数区别.cpp
kbhit()
- 头文件:
#include<conio.h> - 格式:
int kbhit(void); - 功能:检查当前是否有键盘输入
- 返回值:若有则返回一个非0值,否则返回0
- 代码示例:kbhit.c
putch()
- 头文件:
#include<conio.h> - 格式:
int putch(int c); - 功能:在画面上显示字符c(在一些特殊的环境中,如果c是换行符就只换行而不进行返回操作)
- 备注:其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以为char定义好的一个字符型变量
- 返回值:显示成功后返回字符c,错误则返回EOF
putchar()
- 头文件:
#include<stdio.h> - 格式:
int putchar(int c); - 功能:向 stdout 输出一个字符,stdout 是输出流,可以到屏幕(默认),也可以到打印机等。
- 备注:其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是事先用char定义好的一个字符型变量
- 返回值:当输出成功返回字符c,错误则返回EOF
关于 puts/putch/putchar 这几种简单函数区别见 put类函数区别.cpp
运行错误及解决办法:
一些在VS 2017下运行出错的情况,及解决方法。
Error C4996:
- 错误原因:VS认为该C函数不安全
- 解决办法:在VS
项目-xxx属性-配置属性-C/C++-预处理器-预处理器定义内添加_CRT_SECURE_NO_WARNINGS或 在文件顶部加入#define _CRT_SECURE_NO_WARNINGS - 备注:设置非永久性,遇到就得设置
Error C2440:
- 错误原因:VS下无法从
void *转换为int * - 解决办法:强制转换为同一类型,例如:
(int *)(void *) - 备注:有强制转换为显式类型转换(C++),无强制转换为隐式类型转换(C/C++),显示类型转换较为妥当。
明解C语言的更多相关文章
- 《明解c语言》已看完,练习代码此奉上
2016年9月20日至2016年11月12日,从学校图书馆借来的<明解c语言>看完了. 大三第一个学期,前8周,有c语言程序设计的课.课本是学校里的老师编写出版的,为了压缩空间,减少页面, ...
- C语言学习书籍推荐《明解C语言》下载
柴田望洋 (作者), 管杰 (译者), 罗勇 (译者) <明解C语言>是日本的C语言经典教材,自出版以来不断重印.修订,被誉为“C语言圣经”.作者在日本IT界家喻户晓,出版过一系列极富影响 ...
- 哨兵查找法(明解c语言) + 函数式宏
//哨兵法,就是将待查找的元素加入待查找的数组的后面,这样可以提高性能(在数据量很庞大的时候体现出来) #include <stdio.h> #define FAILURE -1 //使用 ...
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示
#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...
- 明解C语言 入门篇 第四章答案
练习4-1 #include <stdio.h> int main(void) { int no; int x; do{ printf("请输入一个整数:"); sca ...
- 明解C语言 入门篇 第三章答案
练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...
- 明解C语言 入门篇 第二章答案
练习2-1 #include <stdio.h> int main() { int x; int y; int percent; puts("请输入两个整数"); pr ...
- 明解C语言 入门篇 第一章答案
练习1-1 #include <stdio.h> int main() { int a; a = 15; int b; b = 37; int c; c = a - b; printf(& ...
随机推荐
- 扩增子图表解读8网络图:节点OTU或类Venn比较
网络图 Network 网络图虽然给人高大上的感觉,但是由于信息太多,无法给读者提供读有效的可读信息或是读者不知道该理解什么,总是让人望尔却步.那是因为大家太不了解网络,自己读不懂网络想表达的意思及其 ...
- Photoshop如何实现图片相对画布居中
先按ctrl+A,再选择要居中的图层,然后就会发现居中按钮被激活了
- IDEA 基本配置
idea使用基本配置 1配置JDK开发环境 File->project structure: 2取消自动更新 file->setting:Appearance &Behavior下 ...
- adjtimex和时钟的几个概念tick,freq,ppm,jiffies
adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...
- 《AlwaysRun!》第八次团队作业:Alpha冲刺 第二天
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 Always Run! 作业学习目标 (1)掌握软件测试基础技术. ( ...
- Maven学习总结(7)——eclipse中使用Maven创建Web项目
Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...
- [HZOI 2016]tree—增强版
[HZOI 2016]tree—增强版 注意事项 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对 ...
- Nginx不转发http header
使用nginx做http代理时,在Header中使用了一个名为api_key的属性,碰到http header不转发的问题. 问题源码: rc = ngx_http_parse_header_line ...
- 机器学习1k近邻
自己一直学习计算机视觉方面的东西,现在想学习一下数据挖掘跟搜索引擎,自己基础也有点薄弱,看朱明的那本数据挖掘,只能片面的了解这个数据挖掘.不过最近有一本书 机器学习实战,于是乎通过实战的形式了解一下基 ...
- JS 仿淘宝幻灯片 非完整版 小案例
仿淘宝幻灯片,基础版,后期效果是要做到每次点击小圆点,切换都无缝 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...