C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢

17. 若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是_______.
int t[3][3], *pt[3], k;
for (k=0;k<3;k++) pt[k]=&t[k][0];

A. t[2][0]
B. t[2][2]
C. t[l][2]
D. t[2][l]

答案是C 但是我没明白

还有
11. 以下程序执行后sum的值是__________
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}

A. 15
B. 14
C. 不确定
D. 0

为什么答案是C 求指导
19. 以下程序的输出结果是____________.
int d=1;
fun(int p)
{ static int d=5;
d+=p;
printf("%d ",d);
return(d);}
main( )
{ int a=3; printf("%d \n",fun(a+fun(d)));}

A. 6 9 9
B. 6 6 9
C. 6 15 15
D. 6 6 15

这道呢

1 . 首先我们定义的是一个指针数组,pt[3] 它和数组类似,数组名表示的是第一个字符,而指针名则表示第一个指针,所以pt应该是pt[0],而pt[0]对应的是t[0][]
在 *(*(pt+l)+2) 中 先看pt+l 对于数组来说,每一行的内存是连续分配的, 所以pt+l就是pt当前这一行的下一行,即t[1][]
而 *(pt+l)+2 就是指向pt+1这一行的第三个字符 也就是t[1][2] 所以*(*(pt+l)+2) 就是指向t[1][2] 内容的

PS:for 循环中执行的意思就是: pt[0]→ a,b,c
pt[1]→ e,f,g
pt[2]→ h ,i, j
而pt对应的其实就是pt[0]所以 pt+1 =pt[1]
2.定义sum的时候 由于没有对sum进行初始化,所以编译器会对sum进行随机赋值,所以sum将会被分配到一个随机数,而在求和的时候累加之后的和当然不确定

3.C
第一次调用fun函数的时候,fun(a+fun(d)) 应该是在进入参数(a+fun(d)) 的时候遇到fun(d)
这时,由于还没有执行static int d=5 所以 ,传递进去的参数p(也就是d)依然为1 ,然后再执行 d+=p;
这时输出的d就等于6
之后再执行fun(a+fun(d)) 要再进入外层的fun函数 这时参数p就等于a+fun(d) 也就是9
这时候d是等于6的,所以d+=p之后就等于15了,所以,输出了15
然后返回值是d所以也是15
所以最后结果就是6 15 15
PS.需要说明的是static int d=5 这里d被声明为一个静态变量,那么也就是说在编译的时候d这个变量已经被分配好内存,那么重复执行fun()函数的时候,这个d变量是不会被重复定义的,
也就是说,当第二次执行fun函数的时候static int d =5 这一句是不用被执行的
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-21
第一个题,t是一个数组,pt是一个指针数组,做完循环后,指针数组就指向了t这个数组了。即pt和t应该是一个内容,只不过t是const的。*(pt+1)就是t[1],*(*(pt+l)+2)就是t[1][2]了。
第二个题,sum没有初始化,所以答案就选c了。记住一点哦,永远不要使用未初始化的变量!
第三个题,选c,关键是那个static int d,这个地址分配以后,里面的内容直到程序执行结束才释放,这是变量生存期的问题了。

最后多说一句,这些题,最好是自己动手敲到编译器里面执行一下,然后,用调试的功能,观察各变量的变化,这样理解起来会比较容易。本回答被提问者采纳
第2个回答  2012-04-21
呵呵 ,很高兴啊,我刚学完C语言。我看看啊
一:
int t[3][3], *pt[3], k;
for (k=0;k<3;k++) pt[k]=&t[k][0];
其中 *pt[3] :pt是指向一个有四个元素的一维数组
&t[k][0];//是第k行的地址
我们在来分析下执行过程:

for (k=0;k<3;k++) pt[k]=&t[k][0];
第一次 循环:pt[0] = &t[0][0]//把首地址赋给pt; ,*(*(pt+l)+2) 等价于:t[l][2] <因为*(pt+l) 等价于 t[l] ,所以就是t[l]+2 ,再加个* ,就是t[l][2]了
第二次循环:pt[1] = &t[1][0] ........................................(结果一样,,*(*(pt+l)+2) 结果为t[l][2] )
二:
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}
sum 的值 没有初始化,所以他的值 是不可预料的、~
和sum进行运算的后值 肯定也是是不可预料的 哈

要采纳呐~
同学 , 还有什么不懂么?
第3个回答  2012-04-21
17.C *(pt+1)== t[1][0]; *(*(pt+1)+2) = t[1][2]

11.其实一般的编译器答案会是A,但是int sum;是没有初始值的,他得默认值是不是0要根据编译器的情况来决定,所以说是不确定
第4个回答  2012-04-21
17 c *(pt+1)指向的是t【1】【0】再加上2就是了

11 c 题是不确定的,因为初始值是随机的,不确定的

C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢
1 . 首先我们定义的是一个指针数组,pt[3] 它和数组类似,数组名表示的是第一个字符,而指针名则表示第一个指针,所以pt应该是pt[0],而pt[0]对应的是t[0][]在 *(*(pt+l)+2) 中 先看pt+l 对于数组来说,每一行的内存是连续分配的, 所以pt+l就是pt当前这一行的下一行,即t[1][]...

C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢
第一个题,t是一个数组,pt是一个指针数组,做完循环后,指针数组就指向了t这个数组了。即pt和t应该是一个内容,只不过t是const的。*(pt+1)就是t[1],*(*(pt+l)+2)就是t[1][2]了。第二个题,sum没有初始化,所以答案就选c了。记住一点哦,永远不要使用未初始化的变量!第三个题,...

几道简单的C语言编程题,请高手帮忙
printf("最大值为:%d",b);else printf("最大值为:%d",c);}

C语言高手帮忙做这三道题,要详解 谢谢拉!!
1、A while()是判断括号里的是真还是假,若表达式为0,就是假,若表达式非0,就是真。"!"是非逻辑运算符,简单说就是把非0变成0,把0变成1。。。"while(!x)”就是"(!x)"取真是进行循环,就是"!x"的值为非0时,就是"x"的值为0时。所以就是x==0.2、C 这题和上题一样,就是(m...

c语言问题,高手请进谢谢!!!
3、此时前面有两个i等待运行,即i+i--->这两个i些时都是3;而不是一个2,一个3;4。再一个++i 此时i加1得到i,i=3+1=4;由上面的理解知道i此时已经是4,5、由上面四步得到一个i=4,i+i+i的式子,写入数据得到12 今天上课还在纠结这个问题,一看到你的问题突然想起来了!呵呵 ...

一些C语言题目!求高手答疑!谢谢了!!!
我不是高手,但是我也把我的想法说出来看看。1,int和char虽然可以转换,但是如果互相转换了,想得到的原值就不一样了。2,第一条语句语法上应该是错误的;第二条把float类型的f模以int类型的i后,把他们的结果转换成(int)3.double是占8个字节,folat和int都占4个字节,char占一个字节,所以double...

C语言简单编程题目两道,求高手做一下。高分!!!
第1题 :include <stdio.h> include <stdlib.h> define MAX 200 int main(void){ int a[MAX], i = 0;srand(time(NULL)); \/\/ 时间种子, 保证真随机, 每次不会相同 while (i < MAX) { a[i] = rand() % 10000; \/\/ 随机获得10000以下数字, 0-9999 if (a[i] < 1000) { ...

C语言高手请进来11
第一题:运行后,循环第一轮后输出8,第二轮后输出7,第三轮输出6,第四轮时达到要求退出循环,结束程序。选B 第二题:这个是找出小于等于50的整数中能被2、3、7整除的数,这个题直接从答案里找一个,所以选C 第三题:运行到这个时for(j=0;j < 3;j++){ if(j%2) continue;x++;} x++ ...

求高手解答一些简单的C语言题目!(高分悬赏)
After GlobalPlusPlus(), it is 2 2、over!3、(1)printf("Input a year:");scanf("%d",&year);(2)(0==year%4 && 0!=year%100) || 0==year%400 4、(1)s[i]!='\\0'(2)s[j]=s[i];5、include<stdio.h> main(){ int i=1,j=1;for(i=1;i<=9;i++){ for(j=1;...

c语言的几个简单问题 求助~~~
double x1,x2,p;float file1(float a,float b){ x1=(-b+sqrt(p))\/2*a;x2=(-b-sqrt(p))\/2*a;return 0;} float file2(float a,float b){ x1=x2=(-b+sqrt(p))\/2*a;return 0;} main(){ float a,b,c;scanf("%f%f%f",&a,&b,&c);p=b*b-4*a*c;printf("方程...

相似回答
大家正在搜