函数又叫方法,是实现某项功能或完成某项任务的代码块

#include<stdio.h>
void show()
{
  printf("I like c language");
}
int main()
{
  show();
  return 0;
}

上面的show()是自定义函数, int main()的int是要求主函数返回的值为整数,因此函数最后一行使用了return 0

void表示允许函数返回空值,即函数不能有返回值了,也就是说最后不能有return

一个程序中有且只有一个主函数,其他函数都是由主函数调用

#include<stdio.h>
int add(int x,int y)
{
  return x+y;
}

int main()
{
  int a;
  a=add(1,2);
  printf("%d\n",a);
  return 0;
}

int x 和int y 是传递给add函数的两个参数,只有在调用函数add时,x和y才存在,系统才会为x,y分配内存,函数一旦执行完成,系统就收回内存

上面程序的执行过程:首先执行主函数,调用主函数中的add函数,返回x+y的值,回到主函数,赋值给a,打印a的值至屏幕

#include<stdio.h>
int add(int x,int y)
{
  return x+y;
}

int main()
{
  int x;
  x=0;
  printf("%d\n",add(1+2,x));
  return 0;
}

add函数的()中的x和y是形式参数,他们的值是不确定的

而主函数中向add函数传递了两个实际的值1+2和x,x是一个局部变量,定义了它的值为0,局部变量只在本函数中有效

因此参数分为形式参数和实际参数,在函数调用时,实参和形参分别占用了不同的内存空间

注意实际参数和形式参数的数据类型必须保持一致

#include<stdio.h>
int x=567;
void show()
{
  printf("%d\n",x);
}

int main()
{
  show();
  printf("%d\n",x);
  return 0;
}

上面的程序中x是一个全局变量(在所有函数外部定义的变量),可以为程序中所有函数所公用,在整个程序的执行过程中都占有内存,程序执行完成后才释放内存

局部变量跟全局变量同名时,局部变量会覆盖全局变量

如果一个函数要修改全局变量,应该在此修改全局变量的函数前添加注释,该函数修改了哪些全局变量,修改的目的是什么,修改的值又是多少

#include<stdio.h>
int main()
{
  printf("%d+%d\t=%d\n",15,16,15+16);
  printf("%d-%d\t=%d\n",15,16,15-16);
  printf("%d*%d\t=%d\n",15,16,15*16);
  printf("%d/%d\t=%f\n",15,16,(float)15/16);
  return 0;
}

分析一下printf的第一行:

    第一个%d代表15,依次类推,最后一个%d就代表15+16的值,%d代表输出一个整数

    %f代表输出一个浮点数(它包含了小数部分),这里就代表15/16的值,如果15/16的前面没有(float),输出也会是整数,()是转换运算符,()中的float是强制转换的类型

#include<stdio.h>
int main()
{
  int a;
  scanf("%d",&a);
  printf("%d",a);
  return 0;
}

scanf("%d",&a)函数是提示用户输入,并将输入的值保存为整数,&的作用是找到a这个变量在内存中存放的位置,scanf函数会将用户输入的值替换原始变量a的值,scanf是输入函数

接下来printf会将a的值输出到屏幕, printf是输出函数

#include<stdio.h>
int main()
{
  putchar('a');
  return 0;
}

putchar函数是向显示器输出一个字符,‘’的意义是其中有且只能包含单个字符

putchar还可以输出一个变量的值,示例如下:

#include<stdio.h>
int main()
{
  char a;
  a='A';
  putchar(a);
  return 0;
}

char表示变量a是一个字符类型

#include<stdio.h>
int main()
{
  char c;
  c=getchar();
  putchar(c);
  return 0;
}

getchar()函数是从标准输入设备上获得一个字符,c=getchar()表示将getchar()函数获得的字符赋值给c

#include<stdio.h>
int main()
{
  char c;
  c=getchar();
  putchar(c);
  c=getchar();
  putchar(c);
  c=getchar();
  putchar(c);
  return 0;
}

上面的程序允许一次输入三个字符, 比如输入abc, a会被第一个c=getchar()和putchar(c)处理,接下来是b被第二个,c被第三个

上面的c=getchar();  也可以用scanf("%c",&c);代替   %c表示使用字符型变量来保存用户输入的字符,对应“”后面的变量

提取字符时,getchar()函数比scanf()函数要方便

    

学习c编程的第二天的更多相关文章

  1. 学习面向对象编程OOP 第二天

    好,今天继续学习这个面向对象编程.(根据博客园 小炒花生米写的博客学习而来) 一,封装性 a.把对象的全部属性和全部服务(方法)结合在一起,形成一个不可分割的独立单元 =>对象 b.信息隐蔽,尽 ...

  2. 20165205 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165205 2017-2018-2<Java程序设计>结对编程一 第二周总结 设计思路 编写主类Arithmetic4 编写ArithmeticFunc类来实现计算,其中包括:加.减 ...

  3. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  4. 学习 Qt 编程的好书精品推荐!

    最近一段时间,准备开始搞Qt方面的东西,想找几本书看看.网上介绍QT的书籍也有很多,不想浪费时间,所以想找几本精品的书籍来看.花了半天的时间找了几本非常不错的,这里面整理好之后推荐给大家! 下面介绍的 ...

  5. go 学习笔记之学习函数式编程前不要忘了函数基础

    在编程世界中向来就没有一家独大的编程风格,至少目前还是百家争鸣的春秋战国,除了众所周知的面向对象编程还有日渐流行的函数式编程,当然这也是本系列文章的重点. 越来越多的主流语言在设计的时候几乎无一例外都 ...

  6. Java学习——网络编程

    Java学习——网络编程 摘要:本文主要介绍了什么是网络编程,以及如何使用Java语言进行网络编程. 部分内容来自以下博客: https://www.cnblogs.com/renyuan/p/269 ...

  7. [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

    本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...

  8. WCF学习之旅—WCF第二个示例(五)

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...

  9. WCF学习之旅—WCF第二个示例(七)

    三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...

随机推荐

  1. java基础第三篇

    6.Java 中的容器(重点) a.变量:变量是一个容器,它存储的单个值 //int i=3; 1.局部变量:定义在方法中,没有默认值 2.成员变量:定义在类中方法外,这个事物的属性(特征)定义为成员 ...

  2. MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)

    官方好像说过limit已经在5.6版本上支持了动态参数,但是测试时依然还是不行. 那么要解决limit动态参数唯一能做的就是使用字符串SQL拼接的形式,然后再进行执行. 一般有以下方式解决: 1.存储 ...

  3. php curl xml传输和转换

    <?php /** * API * User: sgfoot * Date: 2017/3/20 * Time: 18:05 */ class apiCurl { private $config ...

  4. 如何查看pip安装包的所有版本;以及ipython的安装

    安装ipython很简单,直接使用pip就行 比如mac环境下:pip install ipython:提示安装失败,原因是pip默认安装的ipython版本6.0+不适用python3.3以下版本 ...

  5. python numpy实现多次循环读取文件 等间隔过滤数据

    numpy的np.fromfile会出现如下的问题,只能一次性读取文件的内容,不能追加读取,连续两次的np.fromfile读到的东西一样 如果数据文件太大(几个G或以上)不能一次性全读进去,需要追加 ...

  6. 转:在CentOS下编译安装GCC

    转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术  秋水逸冰  发布于: 2015-09-02  更新于: 2015-09-02  6519 次围观 ...

  7. Cucumber+Rest Assured快速搭建api自动化测试平台

    转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/ 什么是 ...

  8. pwm驱动原理和代码实现

    学这个pwm真是非常曲则,首先是看s3c2440的datasheet,全英文的,并且还有硬件的时序图(非常多是硬件的工作原理,和软件控制不相关). 看了非常久加上网上看了资料才把这个pwm弄通. 当然 ...

  9. http协议的Last-Modified

    $modified_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; if (strtotime($modified_time) + 3600 > time( ...

  10. Spark技术内幕: Task向Executor提交的源代码解析

    在上文<Spark技术内幕:Stage划分及提交源代码分析>中,我们分析了Stage的生成和提交.可是Stage的提交,仅仅是DAGScheduler完毕了对DAG的划分,生成了一个计算拓 ...