电子商务网站建设规划的内容,软件技术专业月薪多少,区块链开发语言和工具,佛山 网站关键词优化1.第一题
1、指出下列代码的缺陷#xff08; #xff09;【多选】
float f[10];
// 假设这里有对f进行初始化的代码
for(int i 0; i 10;)
{if(f[i] 0)break;
} A: for(int i 0; i 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是…1.第一题
1、指出下列代码的缺陷 【多选】
float f[10];
// 假设这里有对f进行初始化的代码
for(int i 0; i 10;)
{if(f[i] 0)break;
} A: for(int i 0; i 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是f[i] D: 没有缺陷 答案及解析
答案BC A选项错误因为我们i值的更新在内部 B选项正确一般float型只能精确到小数后六位即1e-6所以我们应该将float型数据的绝对值与1e-6比较来判断是否为零 float的精度误差在1e-6double精度误差在1e-15所以要判断一个float型数if(fabs(f)1e-6)要判断一个double型数if(fabs(f)1e-15)若满足则为零。 C选项正确我们的数组越界了。 D选项错误代码有缺陷。 第二题
2、请指出以下程序的错误 【多选】
void GetMemory(char **p, int num)
{if(NULL p num 0) //1return;*p (char*)malloc(num);return;
}
int main()
{char *str NULL;GetMemory(str, 80); //2if(NULL ! str){strcpy(str, hello); //3printf(str); //4}return 0;
} A: 1 B: 2 C: 3 D: 4 答案及解析
答案AC 第1处两种情况之一成立都是要返回的应该用或此处用的是与 所以错误。 第2处在语句GetMemory(str,80);中传入str的地址在语句char*strNULL;中str初始化为空指针但是str指针变量也有地址所以参数char**p里面的p保存的是指针变量str的地址所以调用GetMemory函数之后动态开辟的空间的地址存放在了str中在函数返回之后没有释放内存但是这不会导致程序错误只会导致内存泄漏。 第3处用str是错的应该直接用str是刚申请下来的空间首地址可以用来接收字符串的copy。 第4处printf可以直接打印字符串 第三题
3、请问下列代码的输出结果有可能是哪些 【多选】
#include stdio.h
typedef union
{int a;struct{short b;short c;};
}X;
int main()
{X x;x.a 0x20150810;printf(%x,%x\n, x.b, x.c);return 0;
} A: 2015,810 B: 50810,201 C: 810,2015 D: 20150,810 答案及解析
答案AC 对于0x20150810 如果按照大端模式存储 从低地址到高地址20 15 08 10 输出从低地址到高地址20 15 08 10 如果按照小端模式存储 从低地址到高地址10 08 15 20 输出从高地址到低地址08 10 20 15 此数以int类型赋值给联合体x.a而以结构成员b和c分开访问 分别拿到低地址的2个字节和高地址的2个字节 大端下是2015和810小端下是810和2015 第四题
4、下面这个程序执行后会有什么错误或者效果 【多选】
#define MAX 255
int main()
{unsigned char A[MAX], i;for(i 0; i MAX; i)A[i] i;return 0;
} A: 数组越界 B: 死循环 C: 栈溢出 D: 内存泄露 答案及解析
答案AB 数组下标越界数组大小255但是当a[255]就是256个元素导致越界了。 死循环这个是因为无符号字符型的变量大小在0-255之间所以说i永远不可能大于255的是个死循环。 内存泄漏创建的临时变量在栈中会由系统自动释放所以是不存在内存泄漏的问题。 栈溢出属于缓冲区溢出的一种。栈溢出是由于C语言系列没有内置检查机制来确保复制到 缓冲区的数据不得大于缓冲区的大小因此当这个数据足够大的时候将会溢出缓冲区的范围 第五题
5、请问下列程序的输出是多少
#includestdio.h
int main()
{unsigned char i 7;int j 0;for(;i 0;i - 3){j;}printf(%d\n, j);return 0;
} A: 2 B: 死循环 C: 173 D: 172 答案及解析
答案C 本题就是找规律计算什么时候能遇到0 unsigned char 8位数据位范围在0-255所以-2时变成254同理-1时变成255最后减到0时不满足循环条件for停止。刚好173次。 7 4 1 共(7-1)/313次1-3-2即254继续循环 254 251 ... 5 2 共(254-2)/3185次2-3-1即255继续循环 255 252 ... 6 3 共(255-5)/3185次3-30退出循环 所以总共173次