请帮我解析下这几道C语言选择题?
9.4有以下程序:#include<stdio.h>main(){intn[2]={0},i,j,k=2;for(i=0;i<k;i++)for(j=0;j<k;j++)...
9.4 有以下程序:
#include<stdio.h>
main()
{ int n[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++) n[j]=n[i]+1;
printf("%d\n",n[k]);
}
程序的输出结果是:
A不确定的值 B 3 C 2 D 1
答案: A
疑问:为什么不是n[k]=n[2]={0}=0 0
9.10 有以下程序:
#include<stdio.h>
main()
{ int a[5]={2,4,6,8,10},*p,**k;
p=a; k=&p;
printf("%d",*(p++)); printf("%d\n",**k);
}
程序的输出结果是:
A 4 4 B 2 2 C 2 4 D 4 6
答案:C
疑问:怎么不是A 4 4 而是C 2 4
9.11 有以下程序:
#include<stdio.h>
#define N 6
main()
{ char c[N]; int i=0;
for(i=0;i<N;i++) c[i]=getchar();
for(i=0;i<N;i++) putchar(c[i]);
}
当运行以上程序时输入三行,每行都是在第一列上开始,<CR>代表Enter键:
a<CR>
b<CR>
cdef<CR>
则程序的输出结果是:
A abcdef B a C a D a
b b b
c cd cdef
d
e
f
答案:C
不懂C答案的由来?
9.15 有以下程序:
#include<stdio.h>
main()
{ int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];
for(i=0;i<2;i++)
{ if(i==0) aa[i][i+1]=*p+1;
else ++p;
printf("%d",*p);
}
printf("\n");
}
程序的输出结果是:
A 23 B 26 C33 D 36
答案A 23
23如何运算得来? 展开
#include<stdio.h>
main()
{ int n[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++) n[j]=n[i]+1;
printf("%d\n",n[k]);
}
程序的输出结果是:
A不确定的值 B 3 C 2 D 1
答案: A
疑问:为什么不是n[k]=n[2]={0}=0 0
9.10 有以下程序:
#include<stdio.h>
main()
{ int a[5]={2,4,6,8,10},*p,**k;
p=a; k=&p;
printf("%d",*(p++)); printf("%d\n",**k);
}
程序的输出结果是:
A 4 4 B 2 2 C 2 4 D 4 6
答案:C
疑问:怎么不是A 4 4 而是C 2 4
9.11 有以下程序:
#include<stdio.h>
#define N 6
main()
{ char c[N]; int i=0;
for(i=0;i<N;i++) c[i]=getchar();
for(i=0;i<N;i++) putchar(c[i]);
}
当运行以上程序时输入三行,每行都是在第一列上开始,<CR>代表Enter键:
a<CR>
b<CR>
cdef<CR>
则程序的输出结果是:
A abcdef B a C a D a
b b b
c cd cdef
d
e
f
答案:C
不懂C答案的由来?
9.15 有以下程序:
#include<stdio.h>
main()
{ int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];
for(i=0;i<2;i++)
{ if(i==0) aa[i][i+1]=*p+1;
else ++p;
printf("%d",*p);
}
printf("\n");
}
程序的输出结果是:
A 23 B 26 C33 D 36
答案A 23
23如何运算得来? 展开
5个回答
展开全部
第一题,在数组n[k]中,里面的元素是从0开始排到k-1的,所谓的n[k]只是在定义时候申请了k个元素的意思,数组中并不存在n[k]这个元素,所以系统就随机分配一个值。
第二题,用于p++中的++运算是先执行完所有的运算才进行的,即先输出,然后才将p指向下一个元素。如果改成++p就是先指向下一个元素,再输出了。
第三题,很简单,在你输入的时候,在a和b 之后都按了回车键,getchar()将回车作为一个元素读入,所以实际得到的数组就是a,<CR>,b,<CR>,d,e这六个字符,而<CR>在输出时就是换行的作用,这也就是为什么在输出a和b后都换行的原因
第四题,本循环共执行两次。第一次,i=0,所以执行aa[i][i+1]=*p+1,也就是aa[0][1]=*p+1,由于p指向aa[0][0],所以*p也就a[0][0,a[0][1]=*p+1=aa[0][0]+1=2+1=3,在if-else执行完后输出*p,也就是aa[0](=2),然后在第二次循环中执行的是++p,即将p指向下一个元素,也就是aa[0][1],然后输出*p,也就是aa[0][1],注意aa[0][1],在第一次循环中已经算出来等于3,
第二题,用于p++中的++运算是先执行完所有的运算才进行的,即先输出,然后才将p指向下一个元素。如果改成++p就是先指向下一个元素,再输出了。
第三题,很简单,在你输入的时候,在a和b 之后都按了回车键,getchar()将回车作为一个元素读入,所以实际得到的数组就是a,<CR>,b,<CR>,d,e这六个字符,而<CR>在输出时就是换行的作用,这也就是为什么在输出a和b后都换行的原因
第四题,本循环共执行两次。第一次,i=0,所以执行aa[i][i+1]=*p+1,也就是aa[0][1]=*p+1,由于p指向aa[0][0],所以*p也就a[0][0,a[0][1]=*p+1=aa[0][0]+1=2+1=3,在if-else执行完后输出*p,也就是aa[0](=2),然后在第二次循环中执行的是++p,即将p指向下一个元素,也就是aa[0][1],然后输出*p,也就是aa[0][1],注意aa[0][1],在第一次循环中已经算出来等于3,
展开全部
第一题
int n[2]={0},定义的是数组,即n[0]=0,n[1]=0,n[2]并不是数组中定义的,即不确定
第二题
P为指针,指向数组的首地址,*(p++)即运行完*p后,*p=a[0],p再指向下一个元素的首地址,即运行后p=&a[1],此时运行**k,即运行*p,即a[1]
第三题
程序输入6个字符,题目输入时enter键也会被认为一个字符 输入,故六个字符分别是a <CR> b <CR> cd
第四题
if(i==0) aa[i][i+1]=*p+1,这句话是给a[0][1]赋值为2+1=3,而输出的是*p为2,当i=1时, else ++p,此时p指向下一个地址,即 p=&a[0][1],*p=3
int n[2]={0},定义的是数组,即n[0]=0,n[1]=0,n[2]并不是数组中定义的,即不确定
第二题
P为指针,指向数组的首地址,*(p++)即运行完*p后,*p=a[0],p再指向下一个元素的首地址,即运行后p=&a[1],此时运行**k,即运行*p,即a[1]
第三题
程序输入6个字符,题目输入时enter键也会被认为一个字符 输入,故六个字符分别是a <CR> b <CR> cd
第四题
if(i==0) aa[i][i+1]=*p+1,这句话是给a[0][1]赋值为2+1=3,而输出的是*p为2,当i=1时, else ++p,此时p指向下一个地址,即 p=&a[0][1],*p=3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9.4 n[2]={0}只赋了一个值即n[0]=0,而n[1]没赋值,其值不确定,所以最终答案不确定
9.10 printf("%d",*(p++)); 是先输出p所指向的值,然后p才加1,你要搞清楚++和--运算符放在变量前和变量后的区别
9.11 回车也算一个字符
9.15 int aa[3][3]={{2},{4},{6}}只赋值给aa[0][0]=2,aa[1][0]=4,aa[2][0]=6,自己算下
9.10 printf("%d",*(p++)); 是先输出p所指向的值,然后p才加1,你要搞清楚++和--运算符放在变量前和变量后的区别
9.11 回车也算一个字符
9.15 int aa[3][3]={{2},{4},{6}}只赋值给aa[0][0]=2,aa[1][0]=4,aa[2][0]=6,自己算下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9.4选A是因为数组n[2]中只有n[0]和n[1]两个元素,要求输出n[k]越界;
9.11是因为<CR>被当做字符接收到数组中了;
9.15中for语句第一次执行时满足第一个条件i=0故执行aa[0][1]=*p+1,即aa[0][0]+1,得aa[0][1]此时的值为3,到printf时输出aa[0][0]的值2;此时返回for语句i++,i此时不为0了故执行p++,指针p此时指向aa[0][1],输出其值3。;
9.10考察的是p++与++p的区别,*(p++)输出的应该仍然是a[0]的值,自习体会一下。
9.11是因为<CR>被当做字符接收到数组中了;
9.15中for语句第一次执行时满足第一个条件i=0故执行aa[0][1]=*p+1,即aa[0][0]+1,得aa[0][1]此时的值为3,到printf时输出aa[0][0]的值2;此时返回for语句i++,i此时不为0了故执行p++,指针p此时指向aa[0][1],输出其值3。;
9.10考察的是p++与++p的区别,*(p++)输出的应该仍然是a[0]的值,自习体会一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9.4:
数组越界(定义int n[2]; 只有n[0],n[1]两个元素,n[2]越界故值未知)
9.10:
p++为后自增,即先引用一次,后自增1,若为++p则为前自增,先加1,后引用
9.11:
回车也算是一个字符,所以输入的是'a' '\n' 'b' '\n' 'c' 'd' , 回车符也就是'\n',打印出来表现的就是换行,所以是c的答案
9.15:
aa[3][3]赋值等同于{2,0,0},
{4,0,0},
{6,0,0}
for第一次循环i==0,
满足if(i==0)条件,故给aa[0][1]赋值成3.(aa[0][0]+1=2+1=3), 并打印a[0][0],即2
for第二次循环i==1,
不满足i==0条件,故p指针自增1,也就指向aa[0][1](二维数组可以看成是以行为优先的一维数组,所以p+1指向的是a[0][1]),并打印a[0][1],即3,
所以最终结果即为23。
数组越界(定义int n[2]; 只有n[0],n[1]两个元素,n[2]越界故值未知)
9.10:
p++为后自增,即先引用一次,后自增1,若为++p则为前自增,先加1,后引用
9.11:
回车也算是一个字符,所以输入的是'a' '\n' 'b' '\n' 'c' 'd' , 回车符也就是'\n',打印出来表现的就是换行,所以是c的答案
9.15:
aa[3][3]赋值等同于{2,0,0},
{4,0,0},
{6,0,0}
for第一次循环i==0,
满足if(i==0)条件,故给aa[0][1]赋值成3.(aa[0][0]+1=2+1=3), 并打印a[0][0],即2
for第二次循环i==1,
不满足i==0条件,故p指针自增1,也就指向aa[0][1](二维数组可以看成是以行为优先的一维数组,所以p+1指向的是a[0][1]),并打印a[0][1],即3,
所以最终结果即为23。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询