Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:C语言笔记

C语言中的函数-全局变量和局部变量-学习笔记-19

发表于 2018-09-11 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 31

引入

我们之前说过变量,可以改变的量即变量,变量还拥有很多种类型,但今天我们要说的是全局变量和局部变量。出了变量类型、变量名、变量的值还有就是变量的作用范围,根据作用范围不同,我们将变量分为全局变量和局部变量两种。
由于之前我们写的程序基本上都在 main 函数中,并且变量一般都在函数开头的地方定义,因为变量要先声明再使用,在 main 函数中的变量,或者说在函数开头声明的变量,只在该函数内有效,也就是只能在该函数内引用。
那么如果我们需要一个变量,能够在多个函数间使用呢?这就引出了变量作用域这个问题了。

三种定义变量的情况

我们线回顾一下,定义变量时,一般有如下三种情况:

  1. 在函数开头处定义,这是我们最常用的
  2. 在函数内的复合语句内定义,例如 for 语句的计次变量
  3. 在函数的外部定义。
阅读全文 »

C语言中的函数-数组作为函数参数-学习笔记-18

发表于 2018-09-11 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 40

数组作为函数参数

在使用有参函数是,我们需要向函数提供参数,参数分为实参和形参。其中实参可以是常量、变量或者表达式,而数组元素和变量用法相同,使用变量时可以使用数组元素代替。所以,数组元素也可以代替函数中的参数,向形参传递数据。

数组元素作为函数的实参

因为数组元素可以代替变量使用,所以在函数参数中的变量,也可以使用元数组素代替使用。但是,数组元素不能作为形参使用,因为形参是函数被调用时的临时分配的存储单元。可以这么理解,函数中的形参,就是一个接收地址,不能是具体的值,随时待命接收实参单向传递来的信息。

例子

我们从一个例子里来看看,数组元素如何作为实参来使用的。
问题:向一个数组中输入10个数,要求设计并使用一个 max 函数,输出其中的最大值。

#include <stdio.h>
int main(){
    int max(int a, int b);
    int num[10];
    int big;
    printf("请输入10个数,程序将返回其中的最大值:\n");
    for (int i=0;i<10;i++){
        scanf("%d",&num[i]);
    }
    big=max(num[0],num[1]);
    for (int i = 2;i<10;i++){
        big=max(big,num[i]);  //这里我们使用 num 数组元素作为 max 函数的实参
    }
    printf("输入的10个数的最大值是:%d\n",big);
}

int max(int a, int b){
    int z;
    z=a>b ? a:b;
    return (z);
}
阅读全文 »

C语言中的函数-函数的递归-学习笔记-17

发表于 2018-09-07 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 16

引入递归

在调用函数的过程中又出现直接或者间接调用函数本身,称为函数的递归调用。
直接调用:

int test(int x){
int a,b;
b=test(a);
return(2*b);
}

这就是直接调用,即在本函数体内,再次调用其自身。

间接调用:

int test (int x){
int test2(int z);
int a,b;
b=test2(a);
return (2*b);
}
int test2 (int z){
int c=2*z;
test(c);
}

上面就是间接调用了,虽然函数体本身并没有调用自身函数,但是调用了其他函数,其他函数又掉用了其主调函数,这就是简介的进行递归。

阅读全文 »

C语言中的函数-函数的声明和嵌套-学习笔记-16

发表于 2018-09-06 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 32

函数声明

前面我们说,要使用一个函数必须经过两个步骤,声明函数和定义函数,现在我们来讲讲函数的声明。

#include <stdio.h>
int main(){
int max ( int x, int y);  //这里就是对 max 自定义函数的声明
......
return 0
}

上面我们声明了一个函数,函数的名字叫做 max ,返回值类型为 int ,含有两个参数,两个参数的类型都是 int 型。将这些信息告诉编译器之后,编译器就能知道 max 的作用了。

注意
函数声明需要在主调函数内进行,但是如果已经在之前(主调函数前)声明的函数,第二次调用时,不用再次声明。
总之,原则就是,先定义再使用,如果后定义,那就先声明再使用。声明之后,声明位置之后的函数再次调用,不必再次声明。

阅读全文 »

C语言中的函数-定义和调用函数-学习笔记-15

发表于 2018-09-06 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 28

引入

前面我们讲到为何要使用函数,以及为何要把功能封装到函数中,今天我们就来讲如何来定义和使用函数。

定义函数

为什么要定义函数呢?因为在 C 语言中,所用到的所有函数,都必须先定义,后使用。先要将函数的一些基本信息通知编译系统,这样在程序执行该函数时,编译系统才能按照预先指定的功能执行。

定义函数的四要素

定义函数需要包括一下几个内容:

  1. 指定函数的名字,用于在后期调用。
  2. 指定函数的类型,也就是函数返回值的类型。
  3. 指定函数的参数的名字和类型,在后期调用时,向其传递数据,当然了,也可以没有参数。
  4. 指定函数的功能,即函数需要做什么,对数据进行什么样的处理。这事最重要的,也是函数体中的主要内容。
阅读全文 »

C语言中的函数-引入函数的概念-学习笔记-14

发表于 2018-09-05 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 25

为什么要用函数

说起函数,我们最熟悉的就是main 函数因为我们写 C 语句的时候,必须包含 main 函数。我们的输入、输出甚至数据的处理都从一个 main 函数中进行,但是随着程序的规模越来越大,单纯使用 main 函数已经无法满足后期维护和编写的需求。并且我们在程序运行中,需要重复使用某个功能时,要一遍又一遍的写,非常麻烦,所以我们就引入函数这个概念。把一个庞大程序的功能封装到一个一个函数中,然后把各种功能的函数组装在一起,实现我们程序所需要的功能。

函数

函数是从英文 function 中翻译过来的,function 在英文中也有功能的意思,所以我们的函数也就是功能,函数就是用来完成一个又一个的功能的。

从一个例子引入

现在,我们要输出这样的一条信息

**********************
       Function
**********************
阅读全文 »

C语言中的循环之练习题-学习笔记-13

发表于 2018-09-04 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 38

斐波那契数列

因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34…
即开始有一对儿兔子,然后3个月后兔子长大了,这对兔子会生一对儿兔子,之后的每个月这对儿兔子又生一对儿,假设兔子不会死亡,那么 N 个月后有多少对儿兔子。

理解

数列:1、1、2、3、5、8、13、21、34…
找到数列的规律之后,我们发现,3号数是1号+2号,6号数是4号+5号,即该数前两个数的和。

解题

#include <stdio.h>
int main(){
    int f1=1,f2=1,f3;
    //将第1、2个月的数先赋值,作为计算基底
    printf("%12d\t%12d\t",f1,f2);
    //由于已经赋值了,所以就先输出
    for(int i=3;i<41;i++){
        f3=f1+f2;
        printf("%12d\t",f3);
        //利用循环输出第三个月的数,也就是前两个月的和
        if(i%4==0){
            printf("\n");
        }
        //判断换行
        f1=f2;
        f2=f3;
        //将用于相加的两个数向前推移
    }
}
阅读全文 »

C语言中的循环之高级循环 (下)-学习笔记-12

发表于 2018-09-03 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 34

更加灵活的利用循环

我们刚才讲了,如何使用 C 语言中的两种循环语句,For循环和do...while循环,那么这些循环能否像if...else...语句一样能够彼此嵌套呢?答案是肯定到,循环也可以进行嵌套,并且通过嵌套,我们可以更加灵活的使用循环的各种特点。当然了,我们甚至也可以改变循环的执行状态,让循环在我们需要的时候跳出。

几种循环的比较

首先我们先看看几种循环的比较,找到这些循环的特点。
1、三种循环的运行机制都差不多,计次、执行循环体、增量变量,所以可以相互替换使用。
2、while 循环和do...while循环都是在 while 后面的括号中增加判断条件,来判断是否执行下一轮循环,所以在循环体中,要对这个判断条件施加一些设定,让循环能够及时的退出。
3、凡是用 while 循环写的,都可以用 for 循环实现。
4、while 循环、do...while循环和for 循环都可以使用 break 语句跳出循环,使用 continue 语句结束本次循环。(这两个语句详见下方)

阅读全文 »

C语言中的循环之 for 循环 (中)-学习笔记-11

发表于 2018-08-31 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 39

引入 for 循环

在看完了 while 循环之后,我们发现,一个循环最重要的有三件事,循环次数、判断条件、循环后递增条件。比如我们在使用 while 循环的时候,就要实现定义一个计次变量,然后每次循环后累加这个变量,使得我们能够在满足条件时及时的跳出循环。而 for 循环则是将这一切变得更容易了!

fro 循环

我们先看一个例子,来对比一下 for 循环和 while 循环,同样是那个1~30累加的例子。

//以下是 while 循环的写法
#include <stdio.h>
int main(){
int i=1;result=0;
while(i<=30){
result=result+i;
i++;
}
printf("1~30的累加结果是:%d\n",result);
return 0;
}

//以下是 for 循环的写法
#include <stdio.h>
int main(){
    int result=0;
    for(int i=1;i<=30;i++){
        result=result+i;
    }
    printf("1~30的累加结果是:%d\n",result);
    return 0;
}
阅读全文 »

C语言中的循环之 do...while循环 (上)-学习笔记-10

发表于 2018-08-30 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 41

引入循环

为什么需要循环呢?比如,你遇到了…
1+2+3+4+5
遇到这样的数累加,加到5加到10可能都没问题,加到10000呢..
1+2+3+...+10000
是不是就崩溃了…
为了能让计算机能够进行多次运算,所以就有了循环的出现。
在 C 语言中,一共有两种循环,一种是 while 循环另一种是 for 循环,我们先来说 while 循环。

从一个例子开始

如果我们需要计算1~30的累加,即1+2+3+...+30该如何写呢?
如果是以前,我们可能要一个一个的输入,但是现在我们引入了 while 循环,就可以通过一个循环来完成这件事了~

#include <stdio.h>
int main(){
    int result=0;
    int i=1;
    while(i<=30){
        result=result+i;
        i++;
    }
    printf("1~30的累加结果是:%d\n",result);
}
//执行结果是『1~30的累加结果是:465』
阅读全文 »
上一页 1 ... 5 6 7 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号