「C」 函数、运算、流程控制

一、函数

  (一)什么是函数

    任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。

  (二)函数的定义

    目的:将一个常用的功能封装起来,方便以后调用

    步骤:确定函数名,确定函数体,调用

    格式:返回值类型 函数名(形式参数列表)

       {函数体}

  (三)函数的调用 

     示例:  

  (四)函数的参数   

    ①. 形参:定义函数时,函数名后面的参数 如num1和num2

    ②. 实参:调用函数时,传人的具体数据   如a和b

    ③. 形参和实参的个数必须相等

    ④. 函数体内部不能定义和形参同名的变量

    ⑤. 如果是基本的数据类型作为形参,则是纯粹的值传递,修改函数内部形参的值并不会影响到实参的值

    ⑥. 一个函数可以没有形参,也可以有无限个形参

  (五)函数的返回值

    1.return 的作用:

      ①. 退出函数

      ②. 返回一个具体的值给函数的调用者

    2.返回值使用注意:

      ①. C语言是弱语法弱类型的语言,非常不严格

      ②. 如果没有写清楚返回值的类型,则默认为int型的

      ③. void代表没有返回值

      ④. 就算明确声明了返回值类型,也可以不返回任何的值

      ⑤. C语言默认情况下,不允许有两个同名的函数

  (六)函数使用注意

    ①. 默认不允许函数重名

    ②. 函数之间是平等的,不能够嵌套定义

    ③. 函数不可以重复定义,但是可以重复声明,只要是在调用前声明就可以,地方随便

    ④. 函数如果是只要声明没有定义,那么编译可以成功,但链接时会失效

  (七)多人协作开发   

    #include<stdio.h>是一个系统头文件。

    #include<abc.txt>相当于把abc.txt文件中的所有内容以纯文本的方式拷贝到当前位置。

    ""表示文件与.c文件处于同一路径,可以使用相对路径也可以使用绝对路径。左边有/的是绝对路径,没有/则为相对路径。

    注意:自定义的文件使用"",系统文件使用<>。

    函数如果在调用时,函数定义在调用之后,且前面没有进行相应的声明,则编译器报错;

    调用函数,没有函数声明,编译器不会报错,链接时报错,不定义函数反而不报错。

    链接:把项目中所以相关的.o目标文件和c语言的函数库合并在一起,生成可执行文件。

    通常:

      ①. 函数的定义放在.c文件中,函数的声明放在.h文件中

      ②. 如果要是有某个.c文件中定义的函数,只需要包含.c文件对应的.h文件即可

      ③. .h文件生下来就是打酱油被别人拿来拷贝包含的,编译链接时不用写出

  (八)函数的补充   

    (1)main函数

      返回值是返回给操作系统的,0为正常退出,其他值为非正常退出。

    (2)printf函数

      返回值为字符数。如printf("abc");则返回值为3,若printf("abc男\n");的返回值为7,因为一个中文在 Mac OS X 系统中占3个字符。

    (3)scanf函数

      ①.使用前必须加入#include <stdio.h>。

      ②.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待输入数据,并且将输入的数据赋值给地址对应的变量。

      ③.用scanf函数接收多个数值时,数值之间的分隔符是任意的。

      ④.scanf的第一个参数中不要包含\n,比如scanf("%d\n", &a); 这将导致scanf函数无法结束。

二、运算

  (一)算术运算

    C语言一共有34种运算符,包括常见的加减乘除运算  

      ①. 加法:+ 还可以表示正号

      ②. 减法:- 还可以表示负号

      ③. 乘法:* 非数学意义上的X

      ④. 除法:/  注意1/2的值为0,并不是二分之一

      ⑤. 取余(模运算):两个整数相除之后的余数(注意两边都必须是整数,正负性取决于%左侧的数值)

    注意:     

      ①. int a = 10.8;//丢失精度。结果为10——自动类型转换

      ②. int a = (int)10.8;//把10.8强制转换为整型——强制类型转换

      ③. Double c = 10.6 + 6//结果为16.600000。在计算机中,拿两个数值进行运算,如果类型不同则进行自动类型提升。即把6转为6.000000后再参与运算——自动类型提升

  (二)赋值运算

    ①.简单赋值

      int a = 10 + 5;a = b = 10;//从右向左,左边不能为常量

    ②.复合赋值

      a = a + 5; => a += 5;

      a = a * 5; => a *= 5;

      a += 5 * 6 + 4; => a = a +(5 * 6 + 4)

    提示:运算顺序取决于运算符的优先级和结合的顺序。

  (三)自增自减  

    int a = 10;

    把a的值加1有四种方法:

      ①. a = a + 1;

      ②. a += 1;

      ③. a++;

      ④. ++a;

    简单区分a++和++a。

      int b;

      int a = 10;

      b = ++a; //a == 11,b == 11;a先把值加1为11,再赋值给b

      b = a++; //a == 11,b == 10;a先把值10复制给b,a自己再加1为11

      b = (a++) + (++a);  //a1 == 10,a2 == 12,b == 22

      b = (++a) + (a++);  //a1 == 11,a2 == 11,b == 22

    注意:int d = 10++;//这种写法是错误的,因为对常量进行自加和自减没有任何意义。

  (四)sizeof

    作用:用来计算变量,常量或者是一种数据类型所占的内存字节数。

    基本形式:sizeof(变量名|常量|数据类型),完成之后返回一个值。

      ①. Sizeof 变量|常量

      ②. Sizeof (变量|常量)

      ③. Sizeof (数据类型)

    注意:数据类型一定要用括号括起来,不能写成sizeof 数据类型这样的形式。

  (五)关系运算

    (1)条件判断

      默认情况下。在程序中写出的每一句正确的代码都会被执行,但很多时候我们需要在某个条件成立的情形下才执行某一段代码,如登录操作,这种情况可以使用条件语句来完成。

    (2)真假

      在C语言中,条件成立称为“真”,条件不成立称为“假”。

      C语言规定,任何数值都有真假性,任何非0值都为真,只有0才为假,无布尔类型。

    (3)关系比较

      关系运算的结果只有两种情况,如果条件成立就为真,值为1,如果条件不成立就为假,值为0。有6种运算符,分别是:(1) <  (2) <=  (3) >  (4) >=  (5) ==  (6) !=

    (4)使用注意

      ①. == 和 != 优先级相等,其他四个关系运算符的优先级相等,且前者的优先级低于后者。如2 == 3 > 1 应该先计算3 > 1

      ②. 关系运算符中,若优先级相同,则“从左往右”结合。如4 > 3 < 2,先计算4 > 3

      ③. 关系运算符的优先级低于算术运算符。如3 + 4 > 8 - 2 相当于(3 + 4) > (8 - 2)

      ④. 练习5 != 4 + 2 * 7 > 3 == 10 先计算5 != 18 > 3 == 10,5 != 1 == 10,1 == 10,假

  (六)逻辑运算 

    逻辑运算的结果只有两个:真(0)和假(1)

      ①. 逻辑与   &&   条件1 && 条件2 只有的那个条件1和条件2都成立时,才为真否则为假。

      ②. 逻辑或   ||   条件1 || 条件2  当条件1或条件2中有一个成立时就为真,都不成立时为假。

      ③. 逻辑非   !    !条件   取反

    注意:逻辑运算符在进行运算时,只要能够确定整体的真假性,后面的条件就不再进行而是直接忽略。

    int a = b = 10;

    int c = (a > 5) && (++b >= 11);//此时a == 10,b == 11,c == 1

    int c = (a < 5) && (++b >= 11);//此时a == 10,b == 10,c == 0

    提示:在进行逻辑运算时,如果搞不清楚各个符号的优先级,可以使用()。

  (七)三目运算    

    双目:需要两个值参与运算

    单目:1个数值参与运算  如!5

    三目:需要3个数值参与

    格式:条件?数值1:数值2

    先判断?前的条件,若条件成立则返回数值1,若条件不成立则返回条件2。

    要求比较a和b的值,把数值大的存入到c中  c = a > b ? a : b

    比较a,b,c三个数的值,把最大的值存入到d中

    int  abmax = (a > b) ? a : b;

    d = abmax > c : abmax : c;

三、流程控制

(一)流程控制结构

  (1)顺序结构:按照书写顺序执行每一条语句。

  (2)选择结构:对给定的条件进行判断,根据判断结果来决定执行哪一段代码。

  (3)循环结构:在给定条件成立的情况下,反复执行某一段代码。

(二)选择结构 - if  

  (1)if简单使用

    1) 第一种结构:

      如果条件为真,就执行后面的语句,否则不执行。

      if(条件)

      {

        语句1;

        语句2;

        ……

      }

    2) 第二种结构:

      如果条件成立就执行语句1,否则执行语句2。

      if(条件)

      {

        语句1;

      }

      else

      {

        语句2;

      }

    3) 第三种结构:

      先判断条件1,若成立则执行语句1,其它不执行;若条件1不成立,则检查条件2……

      【注意】如果条件3成立,则说明前面的都不成立。所有的语句块只有一个会被执行。

      if(条件1)

      {

        语句1;

      }

      else if(条件2)

      {

        语句2;

      }

      else (条件3)

      {

        语句3;

      }

    4) 第四种结构:

      在这种情况下,当条件成立,只执行语句1,语句2不属于次条件结构,但不推荐此种写法。

      if(条件)

      语句1;

      语句2;

  (2)if使用注意

    ①.推荐使用if(0==a)这种写法。

    ②. 注意赋值运算符,不要把==写成是=。

    ③. If(条件)后面不要加分号。

    ④. 注意作用域的问题,如果要在if后面定义新的变量,则一定要使用大括号。

  (3)if练习   

    输入一个整数score代表分数,根据分数输出等级(A-E)

    A:90~100  B:80~89  C:70~79  D:60~69  E:0~60

1 #include<stdio.h>
 2
 3 int main(){
 4
 5     //定义变量存储分数值
 6
 7     int score;
 8
 9     //提示输入
10
11     printf("请输入分值:\n");
12
13     //接受输入
14
15     scanf("%d",&score);
16
17     //判断等级
18
19     if(score>=90&&score<=100)
20
21         printf("A\n");
22
23     else if(score>=80)
24
25         printf("B\n");
26
27     else if(score>=70)
28
29         printf("C\n");
30
31     else if(score>=60)
32
33         printf("D\n");
34
35     else
36
37         printf("E\n");
38
39     return 0;
40
41 }

(三)选择结构 - switch

  (1)switch结构

    switch(值) //通常是变量

    {

      case数值1:

        语句1;

        break;

      case数值2:

        语句2;

        break;

      case数值3:

        语句3;

        break;

      default :

        语句4;

        break;

    }

    解说:该结构把数值与数值1进行比较,若相等,则执行后面的所有语句,直到遇见break语句跳出整个循环,若前面的条件都不满足,则最终会执行default后面的语句。如果不写break语句,则后面的语句会接连执行,直到遇到break语句或者是全部语句执行完毕,只要前面的条件成立,则后面的判断就直接被忽略。

  (2)switch使用注意

    char c=‘A’;

    switch(c)

    {

      case‘A’:

        语句1;

        break;

      case 65://不能这样写,因为‘A’的ASCII值就是65,会报错

        语句2;

        break;

      case数值3:

        int a=10;

        //a的作用域不明确报错,c语言检查变量的作用域根据{}决定,这里可以加{}

        break;

      default :

        语句4;

        break;

    }

    注意:如果要在case后面的语句中定义变量,则必须使用大括号包住。

  (3)switch练习

    输入一个整数seore代表分数,根据分数输出等级(A-E)。

    A 90-100  B 80-89  C 70-79  D 60-69  E 0-60 

 1 #include<stdio.h>
 2
 3 int main()
 4 {
 5     // 定义一个变量score,用来存储用户输入的分数
 6     int score ;
 7
 8     printf("请输入你的分数:");
 9
10     scanf("%d",&score);
11
12     //用switch语句判断用户输入的分数是什么等级
13     switch (score/10) {
14         case 10://100分
15         case 9://90~99分
16             printf("等级是 A \n");
17             break;
18         case 8://80~89分
19             printf("等级是 B \n");
20             break;
21         case 7://70~79分
22             printf("等级是 C \n");
23             break;
24         case 6://60~69分
25             printf("等级是 D \n");
26             break;
27         default://0~59分
28             printf("等级是 E \n");
29             break;
30     }
31     return 0;
32 }
33
34 

  【对比】if与switch:

  1. if语句能够完成的功能,switch有时并不能够完成,如判断if(a>100)

  2. 在有些情况下,if语句和switch语句可以互换

  3. switch语句能完成的功能,if语句都可以完成

(四)循环结构-while

  (1)while结构

    while(条件)

    {

      语句;

    }

    解说:判断条件是否成立,成立则执行(判断条件 -> 执行代码块 -> 判断条件 -> 执行代码块……)

      1.首先确定循环执行的操作,2.在确定约束条件,即需要循环多少次,3.定义一个变量来记录循环的次数。

    提示:在while循环体内使用if...break(跳出整个循环)或if...continue语句(跳出本次循环,继续下一次循环判断)。

    while结构的运行原理:

      ①. 如果一开始条件不成立,则永远不会执行循环体。

      ②. 如果条件成立,则执行一次循环体,执行完毕后再次判断条件是否成立。

      ③. break:直接退出整个循环。

      ④. continue:结束当前循环体,进行下一轮循环判断。

  (2)使用注意

    1) while(1){.....}是一个死循环

    2) while(a<10);{...}在条件后面加逗号表示循环体是一个空语句,而非{}部分

    3) while条件语句后推荐使用{},否则只有第一条语句时循环体

    4) 最简单的死循环  while(1);//永远执行空语句,让程序崩溃

  (3)while练习

    编程实现,提示输入一个正整数n,计算1+2+3+...n的值。

 1 #include<stdio.h>
 2
 3 int main(){
 4
 5     //定义变量保存用户输入的整数
 6
 7     int n;
 8
 9     while(n<=0){
10
11         //提示输入
12
13         printf("请输入一个正整数:\n");
14
15         //接受输入
16
17         scanf("%d",&n);
18
19     }
20
21     int sum=0;
22
23     int number=0;//默认被加的数值
24
25     while(number<n){
26
27         number++;
28
29         sum=sum+number;
30
31     }
32
33     printf("计算结果为:%d\n",sum);
34
35     return 0;
36
37 }

(五)循环结构-do while

  do

  {

    语句

  }while(条件)

  特点:do while循环至少会执行一次循环体

(六)循环结构-for

  (1)基本使用

    for(语句1,条件,语句2)

    {

      循环体

    }

    语句1:一般为初始化语句

    语句2:一般为增量语句(执行完循环体后再执行的语句)

    for循环原理:

      1) for循环一开始就会执行语句1(整个for循环只会执行一次)

      2) 判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环

      3) 顺序为:(语句1 -> 判断条件 -> 循环体 -> 语句2 -> 判断条件 -> 循环体……)

    【对比】for和while:

      在性能上,for循环稍胜一筹,因为while循环只能使用外部的变量,而for循环可以对变量进行及时回收。

  (2)for使用注意

    ①. 不要随便在for语句后面写上分号,如for();{....}

    ②. 定义变量的作用域不明确错误

      for(int i = 0;i < 5;i++)

      int a = 10; //编译器报错,变量作用域不明确

    ③. for语句中最简单的死循环for(;;);

    ④. 需要注意变量定义的作用域

      int a = 10;

      for(int i = 0,int a = 9;i < 5;i++)

      {

        int a = 10;

        printf(“a = %d\n”,a);//这里打印的a的值是多少?

      }

  (3)for循环嵌套

    用以输出特定格式的内容,如QQ好友列表等,提升可扩展性。

    for(in i = 0;i < 5;i++)

    {

      //外面的循环控制行数

      printf(“好友列表%d\n”,i);

      //内部的循环控制列数

      for(int j = 1;j< = 6;j++)

      {

        printf(“好友%d\n”,j);

      }

    }

  (4)for练习

    使用for循环输出九九乘法表。//先控制行数,在控制列数

    代码:

 1 #include<stdio.h>
 2
 3 int main()
 4
 5 {
 6
 7     for(int i=1;i<=9;i++)
 8
 9     {
10
11         for(int j=1;j<=i;j++)
12
13         {
14
15             printf("%dx%d=%d\t",i,j,i*j);
16
17         }
18
19         printf("\n");
20
21     }
22
23     return 0;
24
25 } 

时间: 2024-11-05 02:47:32

「C」 函数、运算、流程控制的相关文章

视图,触发器,事务,存储过程,函数与流程控制,索引

一.视图 1.什么是视图 虚拟表:在硬盘中没有的,通过查询在内存中拼接的表 视图:通过查询得到一张虚拟表,保存下来,下次可直接使用 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 4.删除视图 drop view teacher2course; 5.强调

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

C语言基础之函数和流程控制

函数和流程控制也是每个编程语言的基本概念,函数是划分模块的最小单位,良好的函数规划能直接提升软件的质量,C语言的流程控制主要由以下几个语句组成,条件分支语句.选择语句.循环语句.goto语句.return语句等. 函数的定义 一个函数包含返回值.函数名和参数列表,如下定义了一个返回值为 int 函数名为show拥有一个int类型参数的函数 int show(int param) {     printf("这是一个名为show的函数");     return 0; } 再来定义个没有

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的

视图,触发器,事物,储存过程,函数,流程控制

一视图  建表 create database o; use o; create table teacher( tid int primary key auto_increment, tname char(32) ); insert into teacher(tname) values ('张磊老师'),('李平老师'),('刘海燕老师'),('朱云海老师'),('李杰老师'); create table course( cid int primary key auto_increment, c

视图,触发器,事务,存储过程,函数,流程控制,

一,视图1,什么是视图? 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的话直接使用即可2,为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询3,怎么用? 在查询前面加 create view 视图名称 as sql语句 create view teacher_view as select tid from teacher where tname='李平老师': 强调:在硬盘中,视图只有表结构文件,没有数据文件 视图开发尽量不用 因为是在mysql里面 ,视图通常用于插叙,尽量不要

Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)

一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦

视图、触发器、事物、存储过程、函数、流程控制

一.视图 视图是一张虚拟表,并不是真是存在的,用户可以直接使用创建完的视图名称获取结果集,该结果集可当表使用. 1.创建视图 语法:create view 视图名称  as sql语句 注意:字段名不能重复    视图是存放至数据库当中的,且视图是为了简化查询的sql语句,但是不应该更改视图中的记录.若更改了视图中的记录,有可能会影响到原来数据库中的记录. mysql> select * from t; +----+--------+----------+ | id | NAME | passw

四十二、视图、触发器、事务、储存过程、函数、流程控制和索引等知识的应用

一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么用视图 当反复用到两张表的连接操作时,可以将连成的表当做视图保存下来,下次直接使用 3.怎么用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 删除视图:drop view teacher2course 4.注意: 在硬盘中,视图只