zoukankan      html  css  js  c++  java
  • 「C」 函数、运算、流程控制

     

    一、函数

      (一)什么是函数

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

      (二)函数的定义

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

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

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

           {函数体}

      (三)函数的调用 

        
     1 int average(int num1,int num2)
     2 
     3 {
     4 
     5     return  (num1 + num2)/2;
     6 
     7 }
     8 
     9 int main()
    10 
    11 {
    12 
    13     int a = 1;
    14 
    15     int b = 3;
    16 
    17     int c = average(a,b); //调用函数
    18 
    19     return 0;
    20 
    21 }
    示例:  

      (四)函数的参数   

        ①. 形参:定义函数时,函数名后面的参数 如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 } 

     

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/xiaodong208/p/4210296.html
Copyright © 2011-2022 走看看