首页 > 其他分享 >浙大翁恺-C语言入门-第二周②

浙大翁恺-C语言入门-第二周②

时间:2023-12-02 16:23:31浏览次数:34  
标签:count 优先级 int 浙大 C语言 运算符 -- 翁恺 赋值

但现在,我不再畏惧。-Faker《不死者》

---

运算符(符号)、算子(进行计算的量)
  C语言,开始的时候是用的打字机,打字机没有乘除号,所以用星号*和右斜杠/分别代表乘,除。这样就有了加减乘除四则运算。

  另外特殊的取余操作,用的百分号%,取余获得两个数相除的余数。C=A%B;

思考问题:计算时间差,给出两个时刻,计算他俩的时间差。

当我们在一个问题怎么用计算机解决时,思考两个问题?

  1.数据(保存)

    我们处理的时候,会得到什么样的数据?我们输入的数据是怎样的?(所以,想我们程序里需要什么样的变量,怎么把输入的变量保存下来,怎么把输出的结果保存下来,数据保存)

  2.计算(方法)

    我们得到输入的数据之后,怎么进行计算?(算法,方法)

---

  整数计算是有好处的,计算两时刻的时间差,可以把时刻变成分钟,两个分钟数相减得到整数,再把整数对60取余计算,余数是分钟,整数是小时。妙~

  数据有多又少,计算的方法有简单,有复杂。

运算法的优先级

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

 

  不同的运算符之间也有优先级,优先级数字越小,优先级越高,乘除(取余)比加减优先级高,单目加减比乘除高。(单目加减其实就是正负号),跟数学上的优先级是一样的。

  单目运算法的算子一定出现在运算符右边,所以单目运算法是从右向左结合,双目运算法有两个算子,所以从左向右结合。

  同优先级的运算符并列时,一般从左往右进行结合。单目+-和赋值=,自右往左结合。

  赋值优先级比所有的四则运算都要低,所以=右边先计算出结果,再进行赋值给左边。赋值优先级很低。

  运算符都有结果,赋值也是一个运算符,而不是一个特殊的语句。

  赋值A=6本身这个式子有意义,A=6这步运算根据成功与否,成功则返回1。所以A=B=6 → A=(B=6),A的值是B=6这个式子赋值是否成功,A=0或者A=1。

· 不要做嵌入式赋值,不利于阅读,也不利于赋值。

int  a=6;
int b;
int c =1+(b=a);  //嵌入式赋值

· 也不要写不好阅读的表达式,计算式。

result=a=b=3+c; //b=3+c,a=(b=3+c),a的值是b赋值是否成功,同理result的结果是a是否赋值成功
result=2;
result=(result=result*2)*6*(result=3+result); //这个式子很难判断,result在计算中有没有变过。很难阅读

交换两个变量

int a=6;
int b=8;
a=b;
b=a;     //这样交换不了a,b的值,a=8,b=8;

  思考一下,交换两个数的值,也就是交换两个杯子里面的水,所以需要第三个杯子c作为临时中介。

int  a=6;
int  b=8;
int c;    //作为临时中介
c=a;    //在a被赋值之前,提前保存a中的值。
a=b;
b=c;

  思考一下,还有没有其他方式?异或!

 编程,你光学习C语言中一些语法,规则是不够的,你还要学习别人是怎么做的,别人是怎么说的?跟学外语一样,要多读多看多写,才能学好。

复合赋值

  机器语言中的五则运算符【+-*/%】都是可以跟赋值号【=】结合的,所以C作为一种底层语言也要实现的。

a+=b; // 等于a=a+b;
a-=b;  // a=a-b;
a*=b; // a=a*b;
a/=b; //  a=a/b;
a%=b; //a=a%b;

递增递减运算符,起源早期及其的INC,DEC键。

  ++,--,有前缀形式,也有后缀形式,前缀形式和后缀形式的表达式含义不同。前缀形式代表先执行加减运算,完成自增或者自减,然后再执行。后缀形式,先不改变变量的值,先执行,执行结束了,再改变变量的值,后手。

int acc=10;
printf("a++=%d\n",a++);  //10,输出a=10后,再给a+1,a=11
printf("++a=%d\n",++a);  //12,先给a+1,a=12,然后在输出a的值。先手
printf("a--=%d\n",a--);  //12,输出a=12后,再给a-1,a=11
printf(“--a=%d\n”,--a);  //10,先给a-1,a=10完成运算,然后输出a的值,先手
表达式 运算 表达式的值
count++ 给count+1 count本身,未自增之前
++count 先给count+1 count+1,count自增之后的值
count-- 给count-1 count本身,未自减之前
--count 先给count-1 count-1,count自减之后的值

  复合赋值,递增递减运算符都是一种缩写形式,早期用来提高速度,降低内存用的,现在还有没有必要继续用?

  现在推荐是还是单独使用,但是不推荐放入到组合表达式中,不利于阅读。

  另外,自增自减,组合表达式现在很多编译器,就算是你写的是那种最长的类型,都是可以帮你优化成最简最快速的形式,如果是开发,不是急速开发的话,似乎对这方面要求也不是很高。

  再另外,审核说现在有些CPU都不支持这种复合赋值,自增自减命令,那么说,现在随着算力的增高这种自增自减,还有必要吗?

  有必要,为了写出更好的程序出来。但是更好的程序既要有好的运行速度,还要有很好的阅读性。

  代码简洁高效之道。

++i++-->?
i++++-->?
a=b+=c++-d--e/-f? //可读性太差了。

  这么看老卢当时确实不怎么擅长讲课。

 浙大PAT平台,PAT等OJ在线评判平台,给的都是很死板的格式,所以为了通过,一定要把格式用对了。

闲谈:for循环跟While循环一样,刚开始都要判断循环条件的。

  满足循环条件,才能启动for循环,不是do-while。

	int n=10,i,length=0;;
	int a[10001]={0};
	scanf("%d",&n);
	for(i=0; n>length; n--){
		printf("n=%d\n",n);
	}

  

标签:count,优先级,int,浙大,C语言,运算符,--,翁恺,赋值
From: https://www.cnblogs.com/Azzero/p/17839257.html

相关文章

  • 学生成绩管理--C语言
    #学生成绩管理系统效果1.菜单选项voidwelcome()//菜单{printf("欢迎使用学生管理系统\n");printf("1.增加学生信息\n");printf("2.展示学生信息\n");printf("3.删除学生信息\n");printf("4.修改学生信息\n");printf("......
  • 【运算符和表达式】关系运算符 -C语言-2023/11/29
    //比较后会返回两种结果:用数字0意思为“假”,用数字1意思为“真”。这里强调”意思为“。比如:我写个6>8<9这样一个式子结果显示1意思为真因为这里计算机先执行6>8结果为0,变为0之后再执行0<9变为1意思为真. ......
  • 逻辑运算符-C语言-2023/12/2
    ......
  • PTA|C语言|数组练习题
    --------------------------------------------------------------------------------求最大值及其下标本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式:在一行......
  • 一文带你掌握C语言的循环结构
    C语言循环结构详解在C语言中,循环结构是一种重要的控制结构,它允许我们重复执行一段代码,以达到特定的目的。循环结构可以帮助我们简化重复性的任务,提高代码的效率。本篇文章将深入探讨C语言中的循环结构,包括while循环、for循环、do-while循环以及循环中的控制语句。1.while......
  • C语言的一些类型声明符
    基本类型:char:字符类型int:整数类型float:单精度浮点数类型double:双精度浮点数类型void:无类型修饰符:short:短整数类型long:长整数类型signed:有符号类型unsigned:无符号类型复合类型:struct:结构体类型union:共用体类型enum:枚举类型类型定义:type......
  • 【C语言】【二级】移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p的数组元
    题目请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。考点一维数组、......
  • 【C语言】【二级】将所指字符串中所有下标为奇数位置上的字母转换成大写
    题目请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFG",则应输出"aBc4EFG"。考点考点:指针、ASCII码、数组和循环语句。解法:通过循环语句依次判断数组下标为奇数的元素是否为小写字母......
  • [good]c语言中各种类型
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdarg.h>#include<assert.h>#include<math.h>#include<time.h>#include<limits.h>#include<float.h>#include<ctype.h>#i......
  • C语言小项目-通讯录
    对C语言的学习研究也有一段时间了,今天做一个小项目“通讯录”,来回顾之前所学。文件结构通讯录这个项目需要三个文件:1.test.c用于测试2.contact.c用于实现3.contact.h声明函数需求描述1.该通讯录要能存放1000个好友的信息2.信息要包含:姓名、电话、性别、住址、年龄3.增加好友信息......