两个C++选择题,一个结果题,请大神帮忙解释一下,答案我知道,求解题过程。

若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则()不是对a数组元素的正确引用(其中0≤i<10)。A.p[i]B.*(*(a+i))C... 若有语句int
a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i]     B.*(*(a+i)) C.a[p-a] D.*(&a[i])

以下程序的输出结果是( )。

#include <iostream.h>

void main()

{ char
s[]="12134211",*p;

int
v1=0,v2=0,v3=0,v4=0; v1 v2 v3 v4

for
(p=s;*p;p++) 4 7 5 8

switch(*p)

{

case
'1':v1++;

case
'3':v3++;

case
'2':v2++;

default: v4++;

}

cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;

}

A.4,2,1,1 B.4,7,5,8 C.7,3,2,1 D.8,8,8,8

#include<iostream.h>

void trans(int x)

{ char a[10];

int i=0, rem;

do {

rem=x%16;

x=x/16;

if(rem<10) a[i]=48+rem; // '0'字符的ASCⅡ48

else a[i]=55+rem; // 'A'字符的ASCⅡ65

i++;

}while(x!=0);

while(i>=0)cout<<a[--i];

cout<<endl;

}

void main()

{ int n=168;

trans(n);

}
展开
 我来答
jiguochao888
2013-05-03
知道答主
回答量:20
采纳率:0%
帮助的人:16.3万
展开全部

1、B为二维数组指针,详情参考:http://zhidao.baidu.com/question/363334059.html

2、

#include <iostream.h>
void main()
{
char s[]="12134211",*p;
int v1=0,v2=0,v3=0,v4=0;
for(p=s;*p;p++)
{
switch(*p)
{
case'1':v1++; //若为1则执行词句,由于没有break语句,程序继续向下执行,v1~v4都加1
case'3':v3++; //若为2则执行词句,由于没有break语句,程序继续向下执行,v3,v2,v4都加1
case'2':v2++; //若为3则执行词句,由于没有break语句,程序继续向下执行,v2和v4都加1
default: v4++; //若为其他则执行词句,由于没有break语句,程序继续向下执行,v4都加1
}
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}

数组中:

四个1,v1-v4加4次,

一个3,v3,v2,v4各加1次

两个2,v2和v4各2次

一个4,v4加1次

故最后v1=4,v2=7,v3=5,v4=8

3、显示A8

#include<iostream.h>
void trans(int x)
{
char a[10];
int i=0, rem;
do {
rem=x%16; //求除以16的余数
x=x/16; //求整除16的数
if(rem<10) a[i]=48+rem; // '0'字符的48,求出小于10的ASCⅡ
else a[i]=55+rem; // 'A'字符的ASCⅡ65,求出大于等于10的ASCⅡ
i++;
}while(x!=0);//直到x为0
while(i>=0)cout<<a[--i];//按序号从大到小显示a[i]的值
cout<<endl;
}
void main()
{
int n=168;
trans(n); //第一次rem=8<10,+48,为8的ASCⅡ码
//x=10≠0循环,第二次rem=10,+55,即为65,A 的ASCⅡ码
}
//故最后显示为A8
追问
最后一题如果我写结果等于8A可以么?
还有第一题,a+i表示的是a数组中的第i个元素,加上指针符号,意思为表示第i个元素的值,这时在加上括号外的指针符号就没有意义了,我这么说对么?
追答
不可以的,输出时从后往前输出,这个题中是连续输出a[1],a[0]即A8
第一题,我说错了,*(*(a+i)) 其中*(a+i)表示a[i]的值,,但是,*(*(a+i)) 我试了试提示错误,但它最后肯定是指针了,所以你说的也对
White_MouseYBZ
2013-05-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:8162万
展开全部
int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( B )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i]     B.*(*(a+i)) C.a[p-a] D.*(&a[i])//B把a的元素当地址取其值了,错。

以下程序的输出结果是( B )。//注意没有break的csse要顺序向下执行就可得出结果。
#include <iostream.h>
void main(){
char s[]="12134211",*p;
int v1=0,v2=0,v3=0,v4=0;
for(p=s;*p;p++)
switch(*p){
case'1': v1++;
case'3': v3++;
case'2': v2++;
default: v4++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,7,5,8 C.7,3,2,1 D.8,8,8,8

#include<iostream.h>此题输出A8。这是个把十进制变为16进制的代码。
void trans(int x){
char a[10];
int i=0, rem;
do {
rem=x%16;
x=x/16;
if(rem<10) a[i]=48+rem; // '0'字符的ASCⅡ48
else a[i]=55+rem; // 'A'字符的ASCⅡ65
i++;
}while(x!=0);
while(i>=0)cout<<a[--i];
cout<<endl;
}

void main(){
int n=168;
trans(n);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式