欢迎光临散文网 会员登陆 & 注册

计算机国二错题集(三)

2023-09-03 20:58 作者:独眼的安提柯  | 我要投稿

一 宏define只是简单的没有括号的替换

本题第一个f(2)不加括号 2×M=2×N+1=2×5+1=11 f(1+1)=1+1×M=1+1×N+1=1+6=7 二,static全局变量性质保证每次执行函数时候x不会被重新赋值 也就是第一次定义x为1 执行函数后x变为2再执行函数时候不会再给x赋值一 而是会跳过static后面x=1这个语句

三,字符串比较strcmp函数

O的ASKL码值是<O的阿克斯码 字符串比较只比较第一个不同的字符阿克斯码大小 所以s2>s1 strcmp函数返回值为负数不为0 所以选A 四,结构体定义和生成结构体类型变量的语法格式

A选项REC后面不应该有分号 B选项是对的 C选项错误同A REC后面不加分号 D选项这种定义表示生成无名类新变量REC REC是新变量名 不是结构体类名故不能用来生成结构体类变量t1 t2 五,传值和传地址的区别 1 函数传值(无法通过函数来改变实际参数) 形参a的变化不影响实参a=1 最终打印的是实际参数 为我们可以把形参理解为c(反正形参a和实参a不是一个东西)

注意函数定义最好写到主函数main外面这样防止有的版本他报错 2用指针解引用传地址(实现了通过函数调用改动函数外面的实际参数a)

成功把a从1改到了2 六,交换ab值的可行和不可行方案 ONE 不可行方案一 只传变量值不传址

我们发现变量a b的值没有交换 注意 1最好用swap1作为函数名防止和C库自带的swap函数重名 2 函数两个形参formal parameter 用逗号隔开 Two不可行方案二(传地址但是只改动指针方向未改变指针内容)

实际上这种方法不但没有交换m和n的值m和n的地址也没有交换(因为地址传入也是形参地址是值拷贝真正交换可能要用二级指针) 实际上真正用二级指针也无法交换变量地址变量地址是无法交换的

比如这个程序用了二级指针也交换不了 变量地址和变量名是绑定的没法交换我们只能用指针来改动地址里面的变量改不了变量名和地址 这个方法只交换了形参地址没有交换实际参数地址 3正解利用指针和解引用交换mn的值

注意定义 int temp 而不是定义int 指针temp 错解4 解引用野指针(未初始化的指针是不能直接解引用的) 比如我们可以定义 int 星p; p=地址a; 但不能 int 星p; 星p=a;这是不行的

错误在于创建了一个指向随机的指针temp 我们没有用地址给temp初始化 所以没法给temp解引用 正解5 先给指针temp初始化再用

成功交换 看用指针交换ab值得一个经典选择题

这里函数int t后面前三个语句交换了a和b的值 变成了 a=9 b=0 最后一个语句是b=a的意思 所以b变成了9 现在a=9 b=9 选C 七,一个经典改错题

第一个错误我已经在图片改了 就是fun之前要申明他的返回值数据类型 这里是空所以void 第二个错误就是第一个for循环循环变量是k 所以应该num(k)=0才对 i改成k (给数组num全部初始化为0) 第三个错误,switch(s)改成switch(星号s) 这里s是字符串的首地址 case下面a A都是字符串的元素是单个字符 需要解出引用 知识点switch()和case()括号中的数据类型必须一样 所以应该对地址s解引用得到字符。 八 一些知识点 函数原型声明必须有分号 函数定义最好写在main外面

计算机国二错题集(三)的评论 (共 条)

分享到微博请遵守国家法律