int a[3]={3*0}为什么不对int m=3;(m++)++;不合法?

今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧。发现一篇讲得不错的文章,编辑了下转来供以后翻阅。

C语言运算符优先级表(由上至下,优先级依次递减)

1、() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了。

2、除了上面的四种运算符之外,接下来就是单目运算符,也就是! ~ ++ -- - (type) * & sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如i++等。

3、接着是双目运算符了,也是C语言运算符优先级中最容易让人混淆的地方了。其实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高,然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算符中,< <= > >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级关系。

4、在双目操作符之后,就是三目操作符了,没有什么好说的了。

5、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里,你就不难记住赋值运算符为什么比三目运算符的优先级低了!

6、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的意思的),自然优先级最低了,我想这个应该不是很容易混淆的。

总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值运算符->逗号运算符 特别在双目运算符中,按 运算符优先级从高到低:算术运算符->移位运算符->关系运算符(其中== 和 !=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻辑与-〉逻辑或)!

      运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, b 的运算, 再执行加c 的运算。除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。关于结合性的概念在其他高级语言中是没有的, 这是C语言的特点之一。

&表示逻辑与或者位运算与。 
&&表示逻辑与,短路计算。

}

题目1:使用函数输出水仙花数

    • 5.判断重新构成的数re_number与number是否相等,若相等,则返回1,否则返回0。

3.本题调试过程碰到问题及PTA提交列表情况说明。

  • 问题:忽略了另一个函数的要求是“按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数”,对n多进行了一次判断。

题目2:使用函数输出指定范围内的Fibonacci数

    • 2.定义整型变量time=0;//用来计算题目给定范围内Fibonacci数的个数;

3.本题调试过程碰到问题及PTA提交列表情况说明。

  • 解决方法:将代码重新编写,第二个函数先算出在题目限制范围内Fibonacci数的个数,然后根据Fibonacci数个数利用循环语句找出[m,n]内的所有Fibonacci数。

    • 5.定义浮点型变量product,定义整型变量i;

3.本题调试过程碰到问题及PTA提交列表情况说明。

本题未遇到困难,定义一个函数计算阶乘,主函数引用三次该函数就可以算出结果。

2.我的代码、互评同学代码截图

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

  • 我的代码:在最后的输出部分利用goto直接跳出所有循环,虽然方便快捷,但我个人觉得有些投机取巧,goto还是尽量少用。
  • 梦冰的代码:梦冰的第一个自定义函数,对素数的判断,其实在p%2==0时就能退出循环,但梦冰的却是一直对p做对i的取余运算;第二个自定义函数的代码比我的简单有效,我用了两个if判断语句和两个for循环语句,使代码显得冗长。
  • 综上,我较喜欢梦冰的代码。

1.1 C语言哪些数据类型?

1.2 字符型数据需要注意地方?

  • 1)字符型整型变量和字符型变量的定义和值都可以互相交换;
  • 2)互换整型变量和字符型变量的定义和值时,整型数据的取值范围是有效的ASCII码;
  • 3)英文字母的大小写是不同的字符型常量。

1.3 自增自减运算符?

  • 1)设n是一个整型变量并已赋值,则n++和++n都相当于n=n+1,不同的是++n表示的是n加一后的值,而n++仍表示原来n的值,但这时n已经等于“n+1”的值。n--与--n同理。
  • 2)自增自减运算符的运算对象只能是变量,不能是变量或表达式。

1.4 运算符优先级?

  • 1)如果操作数两侧运算符的优先级相同,则按结合性决定计算顺序;
  • 2)可以用圆括号改变运算符的执行次序。

1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

  • 1)算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式。
    • 条件表达式的形式: 表达式1?表达式2:表达式3.
    • 逗号表达式的一般形式: 表达式1,表达式2,...,表达式n
      按照顺序计算每个表达式,最后将表达式n的值作为符号表达式的值,将表达式n的类型作为逗号表达式的类型。
  • 2)课堂派第六题,忘记了10和4都是整型常量,尽管x为浮点型,但10/4的结果还是整型,在给x赋值时才变为浮点型。
  • 3)课堂派第九题,自增符号在后面的运算与在前面的运算不一样,j++的结果应该仍为3。

  • C语言中整数的八进制、十六进制的表示方式。
  • 数据类型的自动转换遵循一定规则,在赋值运算时,赋值号两侧数据的类型最好相同,至少右侧数据的类型比左侧数据的类型级别低,或者右侧数据的值在左侧变量的取值范围内,否则会导致运算精度降低,导致结果错误。
  • 数据类型的强制转换,一般形式是(类型名) 表达式,类型转换都只是为了本次运算的需要,对数据类型的临时转换,并没有改变数据的定义。

2.本周的内容,你还不会什么?

  • 对位运算还不是很了解;
  • 对八进制、十六进制的转换也不太懂。

3.1 哪题做错了,怎么改?

  • 1.7-3 二进制的前导的零
    • 忘记十进制转二进制怎么计算,后来纠结在算出的结果是二进制数的逆序。
    • 请教同学,研究后发现就算结果是二进制的逆序数,但位数是相同的而且二进制数除了0,第一位一定是1,那么以此为条件可以算出二进制数的位数,然后与32相减,得出前导的零的个数。
    • 当输入空语句和多个空格时不能正确输出,但目前还未解决。

3.2 考试结果满意么,怎么改进?

不满意,对嵌套循环的是用还是不太熟练,而且这次考试的状态不太好,看到题目时脑子一片空白,注意力不集中,或许是平常做题花的时间太长,以后做题时会更加专注,在读题解题方面也需要加强。

  • 十进制转二进制就是把十进制数不断除二取余直到除以二等于1时停止;
  • 大部分嵌套循环语句的内循环条件依靠外循环的条件。【然而总是忘记】
}

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

}

我要回帖

更多关于 int a[3]={3*0}为什么不对 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信