c/c++的改错练习二
一 .选择
1。给出以下定义:
char acX[] = "abcdefg";
char acY[] = {'a','b','c','d','e','f'','g'};
则正确的叙述为(D)
A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相等
C)数组acX的长度大于数组acY的长度 D)数组acX的长度小于数组acY的长度
acX数组的元素已经确定,但acY的并不确定,无法判断‘g’的下一个元素是什么,不能判定它的‘\0’是不是下一个出现,所以准确来说,D选项也是有问题的
2。void example(char acHello[])
{
printf("%d",sizeof(acHello));
return ;
}
void main()
{
char acHello[] = "hello,51_cc";
example(acHello);
return ;
}
的输出结果是(A)
A) 4 B) 12 C)13 D)不确定
acHello是一个数组,但他作为函数参数传递时,传递的是首元素的地址,也就是相当于一个指针,四个字节
3。以下叙述中不正确的是(C)
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是在栈中保存 //行参在栈中保存,实参在堆
C)在一个函数内定义的变量只在本函数范围内有效 //在它的有效空间里有效,成对出现的括号
D)在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)
4。全局变量可以定义在被多个.c文件包含着的头文件中(B)
A)正确 B)错误
不可以,因为每个.c文件引用该.h文件时,会对.h中的函数重新定义一次。
如果全局变量被定义在可被多个.c文件包含的头文件中时,就会出现重复定义。
所以,应该是在某个.c文件里面定义,在.h中用extern进行声明
5。在X86 下,有如下程序(32位小字节存储)
#include<stdio.h>
void main()
{
union
{
short k;
char i[2];
}*s,a;
s = &a ;
s->i[0] = 0x39;
s->i[1] = 0x38;
printf("%x\n",a.k);
}
输出结果是(A)
A) 3839 B)3938 C)380039 D)不确定
考察大小端问题。首先,不管是大端还是小端都是从低地址开始
大端:高位数据存放在低位地址,低位数据存放在高位地址
小端:高位数据存放在高位地址,低位数据存放在低位地址
6。#define BUF_LEN 2048
struct AAA
{
unsigned long ulLen;
char buf[BUF_LEN];
};
函数PrintBufLen的作用是打印出结构体中buf的实际占用长度,有下面两种实现方法:
方法一:
void PrintBufLen(struct AAA *pBuf)
{
if(NULL == pBuf)
{
printf("Error,pBuf is NULL.\n");
return;
}
printf("len = %u",pBuf->ulLen);
return;
}
方法二:
void PrintBufLen(struct AAA Buf)
{
printf("len = %u \n".Buf.ulLen);
return;
}
以下说法只有一个正确的是(A)
A:优选方法一,原因是以指针作为入参,减少函数参数压栈的系统开销
B: 优选方法二,原因是可以不做入参合法性判断,不容易出错
C: 两种方法一样,可以任选一种
D: 以上说法都不对
///
对程序而言,两种方法都是正确的,第一种用指针调动,第二种以对象调动,显然,方法二用对象调动,会调动它的构造,析构函数,时间,空间都要比指针的大,所以 A正确
7。有如下宏定义和结构定义
#define MAX_SIZE A+B
struct _Record_Struct
{
unsigned char Env_Alarm_ID : 4 //表示位域,表示占了一个字节的四位
unsigned char Paral : 2;
unsigned char state;
unsigned char avail : 1;
}*Env_Alarm_Record;
struct _Record_Struct *Pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);
当A = 2,B = 3时,pointer分配(D)个字节的空间
A) 20 B) 15 C) 11 D)9
如果是结构体,总空间应该是占最大空间元素的整倍数,如果是联合体,直接各元素所占空间直接相加
所以应该是 3×2+3 = 9
8。在X86,VC++6.0环境下,有下列程序
#include<stdio.h>
int main()
{
char c; // 范围是-128~127
unsigned char uc; // 范围是 0~255
unsigned short us;
c = 128; //128 = -128
uc = 128;
us = c + uc; //us= -128 +128 = 0 = 0x0
printf("0x%x", us);
us = (unsigned char)c +uc; //c强转为无符号char型,us= 128+128 = 256 = 0x100
printf("0x%x", us);
us = c + (char)uc; //uc强转成字符型,结果为-128 ,us= -128-128 = -256 以0000 0001 0000 0000 存放,原码为 1111 1111 0000 0000 = 0xff00
printf("0x%x", us);
return 0;
}
输出结果是(A)
A)0x0 0x100 0xff00
B) 0x100 0x100 0xff00
C) 0x100 0x100 0x0
D) 0x0 0x100 0x0
8。#include<stdio.h>
unsigned short *sum (unsigned char a,unsigned char b)
{
unsigned short s = 0;
s = a + b;
return &s;
}
int main()
{
unsigned short *p = NULL;
unsigned char a =1,b =2;
p = sum(a,b);
printf("%u + %u",a,b);
printf("= %u\n",*p);
return 0;
}
程序的执行结果为(A)
A) 1+2 = 0 B) 1+ 2 = 3 C)1 + 2 = NULL D) 不确定
在sum函数中,s是创建的临时变量,函数结束后,s会被释放,作用域消失,返回值就会变得不确定
c/c++的改错练习二相关推荐
- 计算机省二c语言编程改错题,2013年计算机二级C语言上机试题六十九
一.填空题 请补充main函数,该函数的功能是:从键盘输入两个字符串并人别保存在字符数组成str1 t 和str2中,用字符串str2 替换字符串联str1前面的所有字符,注意:str2的长度不大于s ...
- 国二c语言改错题答案,c语言国二考试编程题答案
<c语言国二考试编程题答案>由会员分享,可在线阅读,更多相关<c语言国二考试编程题答案(65页珍藏版)>请在人人文库网上搜索. 1.1m个人的成绩存放在score数组中,请编写 ...
- c语言上机填空改错试题,2013年计算机二级C语言上机试题六十二及答案
2013年计算机二级.一级.三级等更多考试考前培训请进入教育联展网-中国教育培训第一门户,助您顺利通过计算机等级考试! 填空题 请补充main函数,该函数的功能是:从键盘输入一组字符串,以'*'结束输 ...
- C语言国二程序改错,2012计算机国二C语言等级考试题库(内部资料)程序改错
计算机国二C语言等级考试题库(内部资料) 1.给定程序MODI1.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回.例如,给指定精度的变量eps输入0.0005时,应当输出Pi=30140 ...
- 国二c语言成语改错,2014年计算机二级C++上机模拟试题及解析(5)
voidmain() { D3d; /**********found**********/ d.f(); } [参考答案] (1)将class D2:public Base 改为:class D2:v ...
- 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
一,把面向过程的程序改写成面向对象的程序 1.前提 所有的程序都在onload里面 2.改写 不能函数嵌套,可以全局变量 3.onload-------------------->构造函 ...
- 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...
周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...
- 用计算机答题答案提交后能否改错,南京晓庄计算机操作系统习题库含答案全1-5章...
第一章 一. 判断改错题(正确的打√,错误的打×并改正) (1) 实时系统只能应用于生产控制系统,不能应用于信息处理系统.( ) (2) 并发含有"同时进行"的概念,是指两个或者是 ...
- Git《二》时光机穿梭
Git<二>时光机穿梭 零. 目录 时光机 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 总结 一. 时光机 我们已经成功地添加并提交了一个readme.txt文件,现在,是时候 ...
最新文章
- 毒鸡汤真相,你被骗了多少年?
- Android适配难题全面总结
- 样式表中的 element.style样式如何修改
- python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做
- 服务端第三次课程:面向切面编程AOP
- Linux学习总结(66)——CentOS7操作系统SSH安全加固
- 物联网云平台四个功能领域
- Numpy包简单介绍
- Hive安装超详细教程
- 爬虫程序的简单介绍(Python)
- SEO的日常主要工作做哪些
- Windows 11的临时文件清理工具
- Apple应用证书申请过程
- ios 应用闪退原因
- 如何找回存储在DBeaver连接中的数据库密码
- 计算机网络实验报告哈工大_哈工大计算机网络实验报告之五
- 64格棋盘放芝麻,求重量。
- 最不可思议的巧合,这些电影一定是穿越者拍的了!
- Java Base64位加密和解密
- MongoDB管理工具Robomongo如何使用