C语言复习(易错点)

发布时间:2024年01月16日

?

?

?

?

?

结构顺序(3种):顺序结构,循环结构(3个循环结构),选择结构(if和switch)

  • 注意:如果题目中要求“打印一组数的后几位”,需要用到“取余”,例如:打印15626的后三位,只需15626%1000即可。
  • 重定义引起的报错


  • #define和printf都不是C语句

=和==不一样!







变量的类型通常指存储类型和数据类型两种


数组名作为函数调用的参数,实际上传递给形参的是数组的地址


C语言中,每个函数都可以被其他函数调用(包括main函数)


有三个实参: 第一个是a+b,这是表达式,结果是一个值????????

??? ? ? ? ? ? ? ? ? ? 第二个是(x,y),这是逗号表达式,数值等于y的值

?? ? ? ? ? ? ? ? ? ? ?第三个是fun(n+k,d,(a+b)),这是函数调用,结果是一个值


C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。


表达式语句和表达式是有区别的


C语言程序实现与其他高级语言一样也要经过编辑、编译连接何运行


C语言中数组名代表数组首地址,他的值在运行期间是不变的,是常量。常量是不能出现在赋值号=左边作为左值的

指针是变量,是用来存储变量地址值的变量


一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(有且仅有一个main函数),C语言源程序的基本组成单位是函数


?一个算法必须满足5大特性:

  1. 有穷性:一个算法必须执行有穷步后结束
  2. 确定性:对于每种情况下所应执行的操作,在算法中都应该有确切的规定,不会产生二义性,使得算法的执行者和阅读者都能明确其含义以及何时执行
  3. 可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现
  4. 输入:一个算法应该有0个、一个或多个输入
  5. 输出:一个算法应该有一个或多个输出

评价算法的优劣的4个基本标准:

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效性

在C语言中,char型数据是将一个字符常量放到一个字符变量中?,并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码放到存储单元中去



6、在C语言中,char型数据在内存中的存储形式是?(?? D? )?????????

A、 补码?????? B、反码?????? C、源码?????? D、ASCII码


前置、后置的区别


?结构化设计中的三个基本结构是:顺序结构、分支结构、循环结构

C语言中的实型变量分为两种类型:单精度型(float型)、双精度型(double型)


  • 指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
  • 整形指针加一,地址向后移了4位,字符指针加一,地址向后移了1位;即,指针的类型决定了指针向前或者向后走一步有多大(距离)
  • 野指针:指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
  • 导致出现野指针的原因:1.指针未初始化;2.指针越界访问(内存越界,访问非法空间);3.指针指向的空间释放;

如何规避野指针:1.指针初始化,如果不知道初始化成什么,初始化为NULL(空指针);2.小心指针越界;3.指针指向空间释放,使用NULL;4.指针使用之前检查有效性

只有当同一类型的指针指向同一数组时,才能进行比较大小或相减,大指针减小指针得到的结果是中间元素的个数




一个C程序的执行是从本程序的main函数开始,到main函数结束


标识符,需注意:

  1. 不能以数字开头
  2. 不能是关键字
  3. 严格区分大小写
  4. 可以是汉字或其他合法字符命名,但不推荐


A:字符型常量的十进制ASCII码值0~255,297超过此范围

B、C:都加了双引号,表示字符串常量

D:单引号,表示字符型常量


这里%d格式的作用是以十进制整数的形式输出变量.

%2d表示输出的变量列宽为2.

如果这里的列宽值小于实际变量列宽,输出时就会自动补全,即以实际为准.

如果列宽值大于实际,就左端补空格


a,b,\012,\\,n5个字符



空语句:


任何表达式语句都是表达式加分号组成的


增一减一运算符的前缀运算和后缀运算的表达式值不相同


函数的实参可以是常量,变量或表达式


函数返回值的类型是由在定义函数时所指定的函数类型


对于int n=3;执行n + = n - = n*n;输出的值为-12


定义int a=b=c=5;是错的而int a,b,c;a=b=c=5;是正确的。(可以连续赋值)


在函数的定义和调用过程中,形式参数和实在参数数目必须保持一致


C语言中,在一个函数内部不可以定义另一个函数(不能嵌套定义,可以嵌套调用)


029在C语言中是一个非法常量,因为C语言中规定,以0开头的数字都是一个8进制的数字,而后面的数字为0~7,所以029是一个非法的常量

十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x0X(不区分大小写)开头


?逻辑运算符&& || ! 的运算顺序是!优先于&&优先于||


执行语句++i;i=3;后变量i的值不是4,而是赋值后的3


强制转换不能改变变量的类型


循环for(;;)的循环条件始终为真


数组名代表该数组的首地址


++(i+1);是非法的赋值语句,增1和减1是一元运算符,操作数必须是变量,不能是常量或表达式。


?用C语言编写的代码程序是源程序,必须经过编译、连接后才能执行





C语言是高级语言,因此用C语言编写的源程序必须经过编译(即把源程序翻译成二进制形式的"目标程序")才可运行;?C源程序经编译形成的二进制代码还必须与系统提供的库函数等连接后才可运行;?C语言中的main()函数可以单独进行编译;


?C语言中,用指数形式表示实数时,字母e(或E)之前必须有数字,且e后面必须有整数类型的指数

C语言语法规定:
字母e或E之前必须要有数字,且e或E后面的指数必须为整数。

注意:在字母e或E的前后以及数字之间不得插入空格。



这一段代码的正确解读:b=2,a=1,b大于a,为真,所以n=1,k=n=1,后面的不执行,所以m=0


?C语言中用于结构化程序设计的三种基本结构是顺序结构、选择结构、循环结构




在C语言中没有逻辑型数据,以1代表“真”,以0代表“假”。本题中a>b为真,所以a>b等于1,所以a>b>c假。c-1等于2,所以c-1>=d为真,所以(c-1>=d)==1为真,最后程序应该输出的结果是d+1


i--表示在使用i之后,使i的值减1,++j表示在使用j之前,先使i的值加1。



?在C程序中的所有语句都必须由一个分号“;”作为结束

Printf并没有以分号结束,所以不是一条语句。

?在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。这些预期处理命令组成的顾处理命令行必须在一行的开头以“#”号开始,每行的末尾不得加“;”号,以区别于C语句



细节








?d:输出带符号的十进制整型

?o:以八进制无符号形式输出整型数(不带前导0

?x:以十六进制无符号形式输出整型数(不带前导 0x或0X)对于x用abcdef输出,对于X用ABCDEF输出


?C语言中的“=”是赋值运算符,用它既可以进行赋值操作,又可组成一个表达式。赋值号左边必须是变量,或代表一个存储单元的表达式;右边是一个表达式。该运算符具有自右至左的结合性。在使用该运算符时,要注意同一变量(或表达式)在赋值号两边具有不同的含义。

??? 因此在选项A中,将a的值赋值给b,然后将b的值赋值给c,也就是将a的值赋值给b、c。因此A不是本题答案。同理D也不是本题答案。

??? 在选项B中,||是或运算符,因为c不等于0,所以仅仅将a=c赋值,则a也不等于0,为真,或表达式的值就不再执行其后面的表达式。

??? 选项C中,&&是逻辑与运算符,因此要先执行这两个表达式,将c的值分别赋值给a、b。




在本题程序中,首先将s的初值赋为a。在for循环中,循环开始时b=1,循环终止时b=c实际上循环体执行了c次,每次执行循环体s都累加1,因此循环结束后,s累加的数值为c,所以说本题程序段等价的赋值语句为s=a+c



??? C语言规定,凡不加类型说明的函数,一律自动按整型处理


注意实际编写代码时不要用B,因为两个变量之和可能会超过变量类型能表示的最大范围

a=a+b;? b=a-b;? a=a–b;? // 这种方式考虑溢出

a ^= b;? b ^= a;? a ^= b;? // 不需要考虑溢出? ? a ^= b, 此时 a 中记录了a和b两个数中,各个二进制位的异同情况,1表示不同,0表示相同。已知b和各个二进制位的异同情况a,则 b ^= a;可以求得a值,然后赋值给b,实现交换。


数组虽然可以有很多个元素,但算成一个值。


*(&a[0][0]+4)=a[1][0]=3



一个算法应具有以下特点:

  • 有穷性
  • 确定性
  • 有零个或多个输入
  • 有一个或多个输出
  • 有效性


典型例题:


不可以用关系运算符对字符数组中的字符串进行比较


在c语言中只能给变量赋值,不能给表达式赋值;

=在C语言中是赋值运算符,等号左边的变量,必须是已以定义好的变量才可以。

int a=b=1 ; 中,若b已经定义,则是正确的。否则,b未定义,这样写就错了。






选项A)在C语言中是一个合法的关系表达式,但它并不代表数学式0<=x<100。计算0<=x<100时,从左到右结合,先计算0<=x,其结果只能是0或1,然后再比较0< 100或1<100。

根据运算符的优先级,选项B)先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。

选项C)中,(char)(65+3)为类型强制转换,将整数型数据转换为字符型。

选项D)是将一个数据赋给一个表达式,等号左边不合要求,所以错误。


错误

定义函数可以有多个返回值,但结果只会返其中回一个


下面的几个表达式都在
int i=0;
的基础上运算
int j = i++;这里i=0、表达式的值j=1;
int j = ++i;这里i=1、表达式的值j=1;
int j = i--;这里i=0、表达式的值j=-1;
int j = --i;这里i=-1、表达式的值j=-1;
其实就是两个重点
1:前缀会在表达式运算前获得新值、后缀在表达式运算后获得新值
2:表达式和变量的值是两个概念,要注意分离



文章来源:https://blog.csdn.net/2301_80802299/article/details/135059690
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。