欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 考研C语言程序设计_语法相关(持续更新)

考研C语言程序设计_语法相关(持续更新)

2024/10/26 0:31:40 来源:https://blog.csdn.net/qq_57030936/article/details/142835277  浏览:    关键词:考研C语言程序设计_语法相关(持续更新)

目录

  • 一、语法题
    • strlen+转义字符
    • 内置数据类型
    • 字符串结束标志
    • 局部变量和全局变量名字冲突 局部优先
    • switch语句中的关键字
    • 数组初始化是否正确
    • 注意define不是关键字
    • C语言中不能用连等判断
    • switch( )的括号里可以是什么类型?
    • 关于if
    • 关于switch
    • 关于while
    • 怎么把函数处理的两个数据返回给主调函数
  • 二、程序阅读题
    • 有关static
    • 有关continue
    • 说明代码的功能
    • for循环省略部分条件
    • 计算循环次数
    • 代码阅读(=和==)
    • 关于switch的穿透现象
    • switch嵌套
    • continue跳到哪里去
  • 三、运算式相关
    • 逗号表达式

一、语法题

strlen+转义字符

  • 答案为6 14
  • \t和\62是两个转义字符 注意八进制里是不可能有8的
//程序输出什么?
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef"));//6// \62被解析成一个转义字符printf("%d\n", strlen("c:\test\628\test.c"));//14return 0;
}
  • 这样改一下 就是一个陷阱了
  • 确实是变成了13个字符 但是这道题会直接报错 因为八进制627>127
//程序输出什么?
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef"));// \62被解析成一个转义字符printf("%d\n", strlen("c:\test\627\test.c"));return 0;
}

在这里插入图片描述

  • 这题就是7 \121算一个 而且没超过127
    在这里插入图片描述

内置数据类型

  • C是自定义类型
    在这里插入图片描述

字符串结束标志

在这里插入图片描述

局部变量和全局变量名字冲突 局部优先

在这里插入图片描述

switch语句中的关键字

  • 分支有if和switch两种
  • continue是用于跳过当次循环 进入下一次循环的;break是结束当前这一层循环的
  • 在switch分支里 可以有break(防止case穿透) 但是肯定没有continue
  • continue只可能在循环里出现
    在这里插入图片描述

数组初始化是否正确

  • A没问题 不完全初始化的部分默认为0

  • B绝对错误 哪怕是支持C99也不对! 因为变长数组是不可以显式初始化的!

  • C没问题 虽然没指定大小 但是会根据显式初始化的内容确定大小

  • D字符数组 没问题 注意自带’\0’

  • 选B
    在这里插入图片描述

  • 可以说明VS2022不支持C99标准 也就不支持变长数组
    在这里插入图片描述

  • 就算支持C99 那也不能初始化数组
    在这里插入图片描述

  • 不初始化是下面这种写法
    在这里插入图片描述

注意define不是关键字

  • #define是预处理指令
    在这里插入图片描述

C语言中不能用连等判断

  • 下面那部分不能写成90<=score<=100 就算答案有可能是对的 那也是运气 这种写法逻辑就不对
    在这里插入图片描述

switch( )的括号里可以是什么类型?

  • 注意char的本质还是整型 switch要求的就是整型表达式
  • 故选D
    在这里插入图片描述

关于if

  • B只能说1可以表示真 因为非0都是真 -1也是真
  • C肯定是对的 单选的话就选C
    在这里插入图片描述

关于switch

在这里插入图片描述

关于while

第一次成立 进去循环一次
第二次成立 进去循环一次
第三次不成立 不进去
while判断要比循环多一次
选B
在这里插入图片描述

怎么把函数处理的两个数据返回给主调函数

在这里插入图片描述

  • A肯定不行 这是个逗号表达式 这里返回的是(3,4)这个逗号表达式的值 也就是4
    在这里插入图片描述

  • B可以
    在这里插入图片描述

  • C可以
    在这里插入图片描述

  • D可以
    在这里插入图片描述

二、程序阅读题

有关static

  • 核心在于static修饰的b 没次调用完sum b是不销毁的
  • 而c每次都会重新创建 从0开始
    i:0->1->2
    a:2->2->2->2
    c:0->1->0->1->0->1
    static b:3->5->7->9

结果:
打印8,10,12,14,16
在这里插入图片描述

有关continue

  • 本题打印1 2 3 4之后就开始死循环
  • n=5后 n++再也没机会执行
    在这里插入图片描述

说明代码的功能

  • 如果不是在0~9就不打印
  • 所以是:读取一个数 如果他是0~9的数字 就把他打印出来
  • 在这里插入图片描述

在这里插入图片描述

for循环省略部分条件

请问下面的代码会循环几次?

3*3=9次
在这里插入图片描述

i = 0 的时候 j = 0,1,2,3 最终j变成了3 一共循环三次
然后i = 1 再进入内存循环 j还是3 不会进入循环
然后i = 2 j还是3 不进去 然后i = 3 全都结束
从头到尾只有i = 0的时候 循环了三次
在这里插入图片描述

计算循环次数

  • 中间的表达式2 是for的判断部分
  • k=0是个赋值语句 该表达式的结果恒为0 也就是说判断部分恒为0
  • 恒为假 一次都不循环
  • 0次循环
    在这里插入图片描述

代码阅读(=和==)

  • 每次进入循环 i都被改为5 表达式的值就是5 为真 打印5 然后i++ 6<10 又进去了 又变成了5
  • 所以会死循环的打印5
    在这里插入图片描述

关于switch的穿透现象

  • a就是决定了程序的入口 然后一路上都没有遇到break 所以case 3执行完 没有break的话 default也会执行的
  • 最后返回b 返回0 也就是func(1) = 0
    在这里插入图片描述

switch嵌套

  • 先进入外层switch的case 1
  • 然后进入内层的case 3 也就是default 打印hello
  • 打印完hello 其实相当于是执行完了外层switch的case 1 发现case 1没有break 所以继续执行外层switch的case 2 打印third
  • 故答案是 打印hellothird
    在这里插入图片描述

continue跳到哪里去

  • continue在while里跳到判断部分
  • 在for跳到调整部分 然后进行判断

比如第一次循环a =1 ; b = 1
b = b + 3 = 4之后 continue走到a++ a成2
再判断a<=100成立 然后继续进入循环

过程:
a 1 2 3 4 5 6 7 8break
b 1 4 7 10 13 16 19 22
故打印8
在这里插入图片描述

三、运算式相关

逗号表达式

  • 核心在于 逗号表达式的优先级是所有运算符里最最最低的 比赋值都低!!
  • 先算a = 27 然后a/5的值作为( )里逗号表达式的结果 赋给i 所以i = 5
  • 然后虽然会继续执行一下a+11 但是不会影响i的值
  • 故选A
    在这里插入图片描述
  • 第一步:逗号表达式(a = 3 * 9, a / 5)的值赋给i
  • 第二步:i = (a = 3 * 9, a / 5), a + 11; 这整体是一个逗号表达式 不影响a或者i的值 单纯执行了一遍
    在这里插入图片描述
  • 要这么写的话 m的值就是38了
    在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com