C语言-两个库函数
两个库函数
--1-- printf函数1.1 printf 函数的介绍
1.2 格式控制字符串
1.3 %f输出精度的问题
1.4 printf 函数使用注意事项
--2-- scanf函数2.1 介绍
2.2 scanf的作用
2.3 sanf函数注意事项
2.4 输入缓存区
-------------------------------
【写在开头:】
『函数:从名称上来说是一个数学名词,是莱布尼兹在1694年开始使用的,用来描述跟曲线相关的一个量,如曲线的斜率或者曲线上的某一点。
在面向过程的C语言中,用来完成一些特定的功能。
而在OC或Java等一些面向对象的语言中,称之为方法。表示某个对象所具有的行为。
方法也好,函数也罢,首先要明白他是干什么的?
简单的说--> C语言函数就是用来实现程序功能的
C语言不但提供了丰富的库函数,还允许用户定义自己的函数。每个函数都是一个可以重复使用的模块,通过模块间的相互调用,有条不紊地实现复杂的功能。可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言。可以说C程序的全部工作都是由各式各样的函数完成的,所以C语言也称为函数式语言。
标准C语言(ANSI C)共定义了15 个头文件,称为“C标准库”,所有的编译器都必须支持,如何正确并熟练的使用这些标准库,可以反映出一个程序员的水平。
- 合格程序员:<stdio.h>、<ctype.h>、<stdlib.h>、<string.h>
- 熟练程序员:<assert.h>、<limits.h>、<stddef.h>、<time.h>
- 优秀程序员:<float.h>、<math.h>、<error.h>、<locale.h>、<setjmp.h>、<signal.h>、<stdarg.h>
以上各类函数不仅数量多,而且有的还需要硬件知识才能使用。
还应该指出的是,在C语言中,所有的函数定义,包括主函数main在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数,被调用者称为被调函数。函数还可以自己调用自己,称为递归调用。
main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有、也只能有一个主函数main。』
--1-- printf函数
1.1 printf 函数的介绍
printf 是一个标准的输出库函数,能够以精确的格式输出程序的运算结果。
格式:printf(“格式控制字符串”,输出项列表(变量列表));
输出项列表:必须与格式控制符在类型和数量上完全对应。当有多个输出项时,各个输出项之间用“,”隔开。
1.2 格式控制字符串
规定数据输入的格式,由格式控制符和普通字符组成,和%一起使用,用来说明输入数据的数据类型(格式字符)。
需要接受数据的变量地址,输入项与格式控制字符串在类型和数量上要对应,当有多个输入项时,各个地址名之间用”,“隔开,输入格式和变量类型要保持一致。
使用说明:
%d 输出一个10进制的整数
%f 输出一个实数类型数据(不能输出整型数据),默认输出6位小数
%c 输出一个字符
%s输出一个字符串
%o把一个数以八进制的格式输出
%x把一个数以十六进制的格式输出
%p 输出内存地址
%ld:输入输出double(实型)类型的实型数值
%u:输入输出unsigned(无符号)类型的数值
1.3 %f输出精度的问题
float f1 = 3.1415926f;
float a = 1111.111111;
float b = 2222.22222; printf("f1 = %f\n",f1); //-->3.1415923 默认输出小数点后6位 /*
注意,%f打印出来后,精度小数点后6位,有效数字是7位所以最后的数“5”是个无效数字。
这里使用floalt是打不出小数点后的第七位的,有效数字后的数字是无效的。
*/
printf("f1=%.7f\n",f1); //-->3.1415925 printf("a + b= %f\n", a+b); //-->3333.333252 有效位数(7位)之后的数字都是无效的。 %f输出精度示例
解决方案
要打印更大精度的就只有使用double类型
double默认的是精度小数点后7位,有效数字是15位。
有效位数是小数点前面和后面的位数总和,不包含小数点。
1.4 printf 函数使用注意事项
1)域宽问题
1)%md问题(设置域宽(列数)问题)
m为一个数字,可为正,也可以为负。
如果要输出的数的位数 >域宽m -->则按照数据的实际位数输出
如果位数 < 域宽m -->则要补空格
printf("%3d\n", ); //位数大于域宽 原样输出 printf ("%5d\n",); // 10 (1前面补了3个空格)
m的取值有两种(正数和负数):
m>0 从左侧补空格
m <0 从右侧开始补空格
2)%0md(遍历图片时很常用)
%0md是%md的升级版,表示不足部分补0
printf("%02d\n", ); //
2)转义字符
printf("\\\n"); //-->\ printf("%%\n"); //-->%
printf("\"\n"); //-->"
printf("\t制表符\n"); //制表符
--2--scanf函数
2.1 介绍
sacnf函数是阻塞式函数,原型包含在标准输入输出头文件<stdio.h>中,用于接收键盘输入的内容。
格式:scanf("格式控制字符串",输入项的地址列表);
scanf常见的格式控制符:
2.2 scanf的作用
从键盘接受输入的内容,保存到指定的变量中
2.3 sanf函数注意事项
1)scanf函数当遇到回车的时候,结束执行
2)接受单个变量值时,在输入值之前,如果输入了空格、回车、tab 、这些都会被忽略。
3)非法的格式输入
3.1)输入用逗号”,“隔开
输入:12,45-->age=12, 则num未赋值
3.2)混合空格输入
scanf("%d,%c,%d",&a,&ch,&b); //输入:12,a,45
printf("%d,%c,%d\n",a,ch,b); //与预计的输出不同 实际输出-->12, ,-1
解决方案:需原样输入
4)关于*号的使用
int a = -, b = -;
printf("请输入a和b的值:\n");
//%*d 跳过一个整数,%*c忽略一个字符
scanf("%d%*d%d",&a,&b); //输入 1990 11 20 printf("a = %d, b = %d\n", a, b); //a = 1990, b = 20
2.4 输入缓存区
当用户输入内容后,输入内容会被存到scanf的输入缓存区,然后scanf会根据格式控制的字符的要求,从输入缓冲区依次取它想要的内容
如果从缓冲区中取得内容和指定的格式要求一致,则把值赋给变量
如果格式不一致,则不修改变量的值
【写在结尾:】
『
在网上看到一张图
想到了自己曾经的Java之路。一路艰辛,一路跌跌撞撞,却也有一路的风景。直到有一天,到了一个十字路口,没有红绿灯。于是我茫然的在岔口徘徊,我知道,我始终还是要做一个选择的,可是我这时明白,有时选择太多,却也不见得是一件的好事。
如果是你,我想,你会往前走。
如果是你,我想,你会停下来。
如果是你,我想,你会往回走。
而我,却不是你。
』
C语言-两个库函数的更多相关文章
- C/C++语言的标准库函数malloc/free与运算符new/delete的区别
概括地说 1.malloc与free是C++/C的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存. 2.对于非内部数据类型的对象而言,只用malloc/free无 ...
- C++/C语言的标准库函数与运算符的区别new/delete malloc/free
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.下面来看他们的区别. 一.操作对象有所不同 malloc与free是C++ ...
- R语言两种方式求指定日期所在月的天数
R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m& ...
- C语言math.h库函数中atan与atan2的区别
源: C语言math.h库函数中atan与atan2的区别 C语言中的atan和atan2
- C语言中使用库函数解析命令行参数
在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...
- 【c语言】模拟库函数strstr
// 模拟库函数strstr #include <stdio.h> #include <assert.h> const char* my_strstr(const char * ...
- C#语言————两值交换
//两值交换 public static void Show(ref int num1,ref int num2) { int num=num1; num1=num2; num2=num; } sta ...
- C语言常用标准库函数
数学函数: 在math.h中 abs(x) :求整型数x的绝对值 cos(x):x(弧度)的余弦 fabs(x):求浮点数x的绝对值 ceil(x):求不小于x的最小整数 floor(x):求不大于x ...
- 归纳整理Linux下C语言常用的库函数----时间日期数学及算法
在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. ...
随机推荐
- Linux Vsftpd 连接超时解决方法(被动模式)
http://blog.csdn.net/qq_15766181/article/details/46554643 使用 FileZilla FTP Client 连接 Vsftpd FTP,在没有配 ...
- Mybatis与Spring整合,使用了maven管理项目,作为初学者觉得不错,转载下来
转载自:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype ...
- BZOJ 3365 Distance Statistics 点分治
这道题是一道点分治的题目,难度不大,可以拿来练手. 关键是对于找出来的重心的删除操作需要删掉这条边,这很重要. 还有每次找重心的时候,不但要考虑他的子节点的siz,还要考虑父节点的siz. 然后就A了 ...
- oauth基本流程和原理
组装loginurl->去第三方登录验证->回调callbackurl+code(票据)->本地根据code+appid+appkey组装url隐式curl获取用户信息->完成 ...
- [dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)
对例子IP Fragmentation的熟悉,使用,以及源码分析. 功能: 该例子的功能有二: 一: 将IP分片? 二: 根据路由表,做包转发. 路由表如下: IP_FRAG: Socket : ad ...
- HTML:document.activeElement
今天遇到一个很郁闷的问题: document.activeElement获取当前获得焦点的元素,在chrome总是得到body,后来经过试验得到结果如下: document.activeElement ...
- C# 构造post参数一种看起来直观点的方法[转]
因为本人经常爱用C#做一些爬虫类的小东西,每次构造post参数的时候,都是直接字符串拼接的方式的,有时候改起来不太方便. 场景: 需要post一个地址 参数列表 : username:管理员 pass ...
- xargs -I
xargs -i 参数或者-I参数配合{}即可进行文件的操作. -I replace-str Replace occurrences of replace-str ...
- javascript中的正则表达式学习
一.前言 关于正则表达式自身的语法这里不做过多介绍(详情可参见http://www.php100.com/manual/unze.html),这里仅仅解释javascript中和正则表达式相关的几个方 ...
- ios 三种对话框拉伸方法