本文为阅读书籍《明解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所指向的数组。当 s2s1重叠时,作未定义处理
  • 返回值:返回s1的值

strcat()

  • 头文件:#include<string.h>
  • 格式:char *strcat(char *s1, const char *s2);
  • 功能:把s2指向的字符串复制到s1指向的数组的末尾。当 s2s1 重叠时,作未定义处理
  • 代码示例:显示某几个月的日历.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()

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_wdaytm_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语言的更多相关文章

  1. 《明解c语言》已看完,练习代码此奉上

    2016年9月20日至2016年11月12日,从学校图书馆借来的<明解c语言>看完了. 大三第一个学期,前8周,有c语言程序设计的课.课本是学校里的老师编写出版的,为了压缩空间,减少页面, ...

  2. C语言学习书籍推荐《明解C语言》下载

    柴田望洋 (作者), 管杰 (译者), 罗勇 (译者) <明解C语言>是日本的C语言经典教材,自出版以来不断重印.修订,被誉为“C语言圣经”.作者在日本IT界家喻户晓,出版过一系列极富影响 ...

  3. 哨兵查找法(明解c语言) + 函数式宏

    //哨兵法,就是将待查找的元素加入待查找的数组的后面,这样可以提高性能(在数据量很庞大的时候体现出来) #include <stdio.h> #define FAILURE -1 //使用 ...

  4. 明解C语言 入门篇 第五章答案

    练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...

  5. 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示

    #include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...

  6. 明解C语言 入门篇 第四章答案

    练习4-1 #include <stdio.h> int main(void) { int no; int x; do{ printf("请输入一个整数:"); sca ...

  7. 明解C语言 入门篇 第三章答案

    练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...

  8. 明解C语言 入门篇 第二章答案

    练习2-1 #include <stdio.h> int main() { int x; int y; int percent; puts("请输入两个整数"); pr ...

  9. 明解C语言 入门篇 第一章答案

    练习1-1 #include <stdio.h> int main() { int a; a = 15; int b; b = 37; int c; c = a - b; printf(& ...

随机推荐

  1. id拼接保存到单个字段后作为表连接的查询条件

    SELECT q.id, concat(q. NAME) qname, d.id did, d. NAME FROM question_po q LEFT JOIN data_configuratio ...

  2. 关于react框架的一些细节问题的思考

    目录 setState到底是同步的还是异步的? 如何在子组件中改变父组件的state? context的运用,避免“props传递地狱” 组件类里有私有变量a,它到底改放在this.a中还是this. ...

  3. Django - 基于orm实现用户增删改查

    1.基于orm实现用户新增 user_info.html中,增加代码: views.py中,在原user_info函数中,增加判断代码: 备注:最后一句,可以通过return redirect 实现, ...

  4. Unittest加载执行用例的方法总结

    前言 说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目,不同项目的大小及用例的多少自己选择加载 ...

  5. 使用jquery将表单自动封装成json对象 /json对象元素的添加删除和转换

    $.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each(a, function ( ...

  6. mapbox-gl 使用ArcGISServer 发布的栅格切片

    最近使用mapbox 进行数据化展现.刚好用到了超图平台在去三维系统,顺带就用超图平台发布了栅格切片,用来做底图,但是超图平台是试用的许可,栅格切片有SuperMap 的水印,实在不雅观. 在网上搜索 ...

  7. 洛谷——P2504 [HAOI2006]聪明的猴子

    P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...

  8. centos中安装tomcat

    1.先保证centos中安装了jre的环境. 2.上传tomcat的压缩包到root根目录. 3.切换到根目录 输入命令cd ~ , 然后 ll , 查看上传情况: 4.选中复制压缩文件,输入解压命令 ...

  9. sha2 替换sha1 时间表

    由于sha1签名算法进入淘汰阶段,逐渐弃用中,sha1升级为sha2是大势所趋. 微软已经正式发布sha1弃用策略: http://blogs.technet.com/b/pki/archive/20 ...

  10. (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...