C程序设计入门(网易云课堂 -《程序设计入门-C语言》(浙大-翁凯))总结

来源:互联网 发布:复旦投毒案的思考知乎 编辑:程序博客网 时间:2024/06/07 19:00

《程序设计入门-C语言》(翁凯)

简单的计算器

变量

变量的定义:一般形式 <类型名称><变量名称>;

int a = 0;int a, b;

变量的名字

  变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个不同的名字。
  标识符的构造规则:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字(有的地方叫保留字)不可以用做标识符。

赋值和初始化

  定义变量时的赋值叫做初始化,虽然C语言并没有强制要求所有的变量都在定义的地方做初始化,但所有的变量在第一次使用之前应被赋值一次,若未初始化,内存里面是什么就是什么。

  固定不变的数,是常数,直接写在程序里,我们称作直接量literal。更好的方式是定义一个常量 const int AMOUNT = 100; C99!。const变量一般大写,const是一个修饰符,加在int前面,用来给这个变量加上一个const(不变的)属性,这个const属性表示这个变量的值一旦初始化就不能再修改。

表达式

  一个表达式是一系列运算符合算子的组合,用来计算一个值。
  运算符(operator)是指进行运算的动作,比如加法运算符“+”,减法运算符“-”。
  算子(operands)是指参与运算的值,可能是常数,也可能是变量,还可能是一个方法的返回值。

优先级

优先级 运算符 运算 结合关系 举例 1 + 单目不变 自右向左 a*+b 1 - 单目取负 自右向左 a*-b 2 * 乘 自左向右 a*b 2 / 除 自左向右 a/b 2 % 取余 自左向右 a%b 3 + 加 自左向右 a+b 3 - 减 自左向右 a-b 4 = 等于 自右向左 a=b

判断

比较

关系运算

  关系运算符有 ==、!=、>、>=、<、<=,当两个值的关系符合关系运算符的预期时,结果为整数1,否则为整数0;关系运算符的优先级比算术运算的低,但比赋值运算的高,==和!=的优先级比其他的低,连续的关系运算是从左往右进行的。

  以下语句是否可以通过编译:

    if ( 1<=n<=10 );

  结论及分析:1<=n<=10先判断1<=n是否成立;如果成立再判断1<=10是否成立,如果不成立再判断0<=10是否成立,所以最终结果一定是真。

  以下语句是否表示n属于[1,10]:

    if ( 1<=n<=10 );

  结论及分析:显然是错的嘛!因为编程语句不能连写,要分开写,该写成 if(i>=1&&i<=10);

判断

  if和else后面可以没有大括号,这样只对后面一句话有效;在if和else后面总是用{},即使只有一条语句的时候;if只要求( )里的值是0或非0。

if ( 条件 ){    ……} else {    ……}//嵌套的判断if ( code == ready )    if ( count < 20 )        printf("一切正常\n");    else        printf("继续等待\n");//else总是和最近的if匹配,缩进格式不能按时else的匹配//级联的if-else if>if ( exp1 )    st1;else if ( exp2 )    st2;else    st3;// 推荐单一出口的

分支

  switch语句可以看做是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch为止。case不能阻止代码往下执行,一般为每个case配一个break

//switch-caseswitch(控制表达式){    case 常量:        语句;        breakcase 常量:        语句;        breakdefault:        语句;}//控制表达式只能是整数型结果//常量可以是常数,也可以是常数的计算表达式

  例题分析

// 写出程序的输出:int i=1;switch ( i/3 ) {    case 0: printf("zero");    case 1: printf("one");    case 2: printf("two");}// output:zeroonetwo

循环

复合赋值
  5个算术运算符,+-/%,可以和赋值运算符”=”结合起来,形成复合赋值运算符:+=、-=、=、/=、%=

    total +=(sum+100)/2; --> total = total + (sum+100)/2;    total *= sun+12; --> total = total*(sum + 12);

递增递减运算符
  ++–-是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量,这两个运算符分别叫做递增和递减运算符,它们的作用是给这个变量+1或-1。

    count++; count += 1; count = count + 1;

前缀后缀
  ++–-可以放在变量前面,叫做前缀形式,也可以放在变量后面,叫做后缀形式。a++的值是a+1以前的值,++a的值是a+1以后的值。

while循环

while (条件){    语句;}

  循环体内要有改变条件的机会,如果我们把while翻译成当,那么一个while循环的意思就是:当条件满足时,不断的重复循环体内的语句;循环之前判断是否继续循环,所以有可能循环一次也没有被执行;条件成立是循环继续的条件。

do-while循环

do{    <循环体>}while(循环条件);//两种循环的区别是在什么时候做判断,判断的条件是什么

  在进入循环的时候不做检查,而是在执行完循环体的一段代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环
两种循环。
  do-while循环while循环很像,区别是在循环体结束的时候才来判断条件。也就是说,无论如何,循环体都会至少执行一遍,然后再来判断条件。
  与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。

循环控制

for循环

//for循环for(初始值;循环条件;步进){    循环体;}

  for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器达某值之前,重复执行循环体,而每执行一轮循环,计数器就以一定的步进进行调整。

    for (count=10;count>0;count–-)

  对于一开始的count=10,当count>0时,重复做循环体,每一轮循在做完循环体内语句后,使得count–1。
   小套路:做求和的程序时,记录结果的变量应该初始化为0,而做求积的程序时,记录结果的变量应该初始化为1。
  循环控制变量i只在循环里被使用了,再循环外面它没有任何用处。因此我们可以把变量定义写到for语句里面 for(int i=0; i<10; i++) (only C99),同while相同,先做判断,for中每一个表达式都是可以省略的int i=n; for( ; i>1; i--)
  循环的次数

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

  走的次数相同,但i值不同。
  循环的选择
  如果有固定次数 用for;如果必须执行一次 用do-while;其他情况 用while

循环控制

  break:跳出循环;continue:跳过循环这一轮剩下的语句,进入下一轮;breakcontinue都只能对它所在的那重循环做。

  逻辑运算和短路操作(略)

多重循环

  100以内的素数

#include <stdio.h>int main(){    int n;    scanf("%d", &n);    int j =1;    for ( ; j<=n; j++){         int i=2;            int sf = 1;  //是否是素数         for ( ; i<j; i++ ){            if( j%i == 0 ){                sf=0;                break;            }        }        if ( sf ==1 ) {            printf("%d,",j);        }    }    printf("\n");       return 0; }

  离开多重循环

  • 接力break
    这里写图片描述
  • goto(建议只在多重循环的时候使用 )
    这里写图片描述

函数

  函数是一块代码,接受零个或多个参数,做一件事情并返回零个或一个值。C语言的函数可以不返回值,如果要返回值,也只能返回一个值。

函数头:返回类型 函数名 参数表void sum ( int begin, int end ){函数体}调用函数:函数名(参数值)

  ( )起到了表示函数调用的重要作用,即使没有参数也需要()。如果有参数,则需要给出正确的数字和顺序。这些值会被按照顺序依次用来初始化函数中的参数。
  函数返回:函数知道每一次是哪里来调用它,会返回到正确的地方;return停止函数执行,并送回一个值;从函数中返回值:return; 或return 表达式;一个函数里面可以出现多个return语句,但最好单一出口;返回值可以赋值给变量,可以再传递给函数,甚至可以丢掉。
  没有返回值的函数:不能使用带值的的return,也可以没有return;调用的时候不能做返回值的赋值。

void 函数名(参数表)

函数原型

  函数头,以分号;结尾,就构成了函数的原型;函数原型的目的是告诉编译器这个函数长什么样:名称,参数(数量及类型),返回类型; 函数原型声明可以不写参数名称;原型声明一般写在调用它的函数前面。

参数传递

  如果函数有参数,调用函数时必须传递给它数量、类型正确的值;可以传递给函数的值是表达式的结果,包括:字面量,变量,函数的返回值,计算的结果。

本地变量(局部变量、自动变量)

  函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量;定义在函数内部的变量就是本地变量;参数也是本地变量。
  变量的生存期和作用域。生存期:什么时候这个变量开始出现,到什么时候消亡了;作用域:在(代码的)什么范围内可以访问这个变量(这个变量可以起什么作用);对于本地变量,这两个问题的答案是统一的,大括号内——块。
  本地变量规则:本地变量是定义在块内的;它可以定义在函数的块内,也可以定义在语句的块内,甚至可以随便拉一对大括号来定义变量;程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了;块外面定义的变量在块里面仍然有效;块里面定义了和外面同名的变量,则掩盖外面的;不能在一个块内定义同名变量;本地变量不会被默认初始化;参数在进入函数的时候被初始化了。

数组

指针与字符串

阅读全文
0 0
原创粉丝点击