C语言-两个库函数

【写在开头:】

函数:从名称上来说是一个数学名词,是莱布尼兹在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。(此处引自http://c.biancheng.net/cpp/html/55.html)

}

两个库函数

目录

--------------------------

--1-- printf函数
--2-- scanf函数

--------------------------

--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", 18888); //位数大于域宽 原样输出

    printf ("%5d\n",10); //     10 (1前面补了3个空格)

  m的取值有两种(正数和负数):

  m>0 从左侧补空格

  m <0 从右侧开始补空格

  

  2)%0md(遍历图片时很常用)

  %0md是%md的升级版,表示不足部分补0

    printf("%02d\n", 1); //01

  

2)转义字符

    printf("\\\n"); //-->\

    printf("%%\n"); //-->%
    printf("\"\n"); //-->"
    printf("\t制表符\n");  //制表符

--2--scanf函数

2.1 介绍

sacnf函数是阻塞式函数,原型包含在标准输入输出头文件<stdio.h>中,用于接收键盘输入的内容。

格式:scanf("格式控制字符串",输入项的地址列表);

scanf常见的格式控制符:

2.2 作用

从键盘接受输入的内容,保存到指定的变量中

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 = -1, b = -1;
    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之路。一路艰辛,一路跌跌撞撞,却也有一路的风景。

直到有一天,到了个十字路口,没有红绿灯。于是我茫然的在岔口徘徊,我知道,我始终是要做一个选择,可是我这时明白,有时选择太多,却也不见得是一件的好事。

如果是你,我想,你会往前走。

如果是你,我想,你会停下来。

如果是你,我想,你会往回走。

而我,却不是你。

时间: 2024-10-17 11:55:10

C语言-两个库函数的相关文章

C语言字符串处理库函数

http://blog.csdn.net/pipisorry/article/details/36898405 使用C语言字符串处理的库函数,务必包含头文件string.h,即#include <string.h> 1. 比较字符串大小函数   1) 忽略大小写---strcasecmp 函数原型: int strcasecmp (const char *s1, const char *s2); 函数说明: 用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异 2)忽略大小写-stric

C/C++语言的标准库函数malloc/free与运算符new/delete的区别

概括地说 1.malloc与free是C++/C的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存. 2.对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求.对象在创建的同时,要自动执行构造函数,对象在消亡之前要自动执行析构函数.而由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free. 3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符

C++/C语言的标准库函数与运算符的区别new/delete malloc/free

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.下面来看他们的区别. 一.操作对象有所不同 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求. 对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数.由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能把执行构造函数

R语言两种方式求指定日期所在月的天数

             R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m") days31<-c("01","03","05","07","08","10","12") days30<-c("04",&

C语言的比较库函数--qsort

c语言中的库函数:qsort(int *base,int num,int width,int (*compare)(int *void,int *void)): 其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数. 比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名. qsort(a,1000,sizeof(in

C语言常用的库函数

printf和scanf就不说了 字符串输出函数:puts /*  格式: puts(字符数组名)  功能:把字符数组中的字符串输出到显示器. 即在屏幕上显示该字符串.    从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行.puts函数完全可以由 printf函数取代.当需要按一定格式输出时,通常使用printf函数.  */ #include <stdio.h> int main(int argc, const char * argv[]) {     char str

归纳整理Linux下C语言常用的库函数----时间日期数学及算法

在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. 字符串转换 3. 字符测试 4. 文件操作 5. 时间日期 6. 常用数学函数 7. 文件内容操作 8. 文件权限控制 9. 进程操作 10. 线程操作 11. Socket操作 12. 信号处理 13. 数据结构及算法 时间函数归类 /*时间函数归类 * * 函数名 用法 备注 * *1.char

C语言使用gd库函数详细记录

1.绘图函数 (1)绘制一个像素点的函数 void gdImageSetPixel(gdImagePtr im, int x, int y, int color) 参数列表 第一参数:gdImagePtr类型,为对象 第二参数:画图的横坐标 第三参数:画图纵坐标 第四参数:要绘制的颜色 (2)在两个端点之间画一条直线  void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color) 参数列表依次是:对象,两个端

【c语言】模拟库函数strstr

// 模拟库函数strstr #include <stdio.h> #include <assert.h> const char* my_strstr(const char *parent, const char *child) { const char *pgo = parent; const char *cgo = child; const char *pgos = parent; assert(parent != NULL && child != NULL);