两道C语言的简单题目不懂~求解答~为什么选c,d特别是第十题求详细解题方法。谢啦~

如题所述

A a是1行4列的数组,而赋值列表中有5个元素,是放不下的
B 定义二维数组的时候要求列数不能为空,而行数可以由后面的赋值列表决定,若没有赋值列表那么行数也不能为空
C b是2行3列的数组,而赋值列表中有3行(1个{}就是一行的数据),超过数组定义的行数
D 正确,相当于定义了一个1行3列的数组,y[0][0]=0,y[0][1]=0,y[0][2]=0追问

谢谢,想请问一下这道题。执行以下程序段后,m的值是 ?
int a[]={2,1,3,5,4};
int m=10,k,*ptr=a; for(k=0;k<5;k++) m+=*(ptr+k);

追答

m+=*(ptr+k);等价于m=m+*(ptr+k);
*(ptr+k)实际上就是ptr指向数组a的第k个单元,即a[k]
k=0 m=m+*(ptr+0)=m+a[0]=10+2=12;
k=1 m=m+*(ptr+1)=m+a[1]=12+1=13;
k=2 m=m+*(ptr+2)=m+a[2]=13+3=16;
k=3 m=m+*(ptr+3)=m+a[3]=16+5=21;
k=4 m=m+*(ptr+4)=m+a[4]=21+4=26;
k=5 退出循环
所以程序的功能就是将m与数组a的所有元素加起来后再赋给m

追问

*(ptr+k) ,k只代表循环次数而没有加进去咯。

追答

ptr+k表示的是ptr偏移k个单元对应的那个单元,由于ptr指向的数组a的起始地址,所以ptr偏移k个单元实际上就是a[k]的地址

*(ptr+k)就是取出地址为ptr+k的单元的内容,也就是a[k]的值

追问

谢谢你~~

想再请问下这题~若要打开当前目录中的文本文件abc.txt进行只读操作,则下面符合此要求的函数调用是?A. fopen("abc.txt","rb");
B. fopen("abc.txt","r");
C. fopen("abc.txt","a");
D. fopen("abc.txt","w");

为什么选b呢

双引号难道不是选a么

追答

A 是要以二进制读方式打开文件,不符合要求,对文本文件的只读操作就用"r"

追问

那为什么不是a,w呢?r是有特殊意义吗

追答

r表示只读
w表示可写
a表示追加

追问

哦哦,好吧〒_〒谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-18
会去把如何定义二维数组学习下,你就明白了追问

那这个呢?执行以下程序段后,m的值是 ?
int a[]={2,1,3,5,4};
int m=10,k,*ptr=a; for(k=0;k<5;k++) m+=*(ptr+k);

追答

哈哈我只是初学者而已,刚学到指针

追问

一样是初学者~

追答

把a地址赋给ptr意味着*ptr=a[0] *(ptr+1)=a[1]
m=m+*(ptr+k)
当k=0时,m=10+a[0]=12 其他依次类推就可以算出结果

k=1时,m=12+a[1]=13

追问

谢谢你= ̄ω ̄=

追答

没有事情我今天刚学到这里

最后是不是25?

我口算得

追问

26吧

追答

哈哈,你算下啊

方法就是那样

追问

m+=*(ptr+k);等价于m=m+*(ptr+k);
*(ptr+k)实际上就是ptr指向数组a的第k个单元,即a[k]
k=0 m=m+*(ptr+0)=m+a[0]=10+2=12;
k=1 m=m+*(ptr+1)=m+a[1]=12+1=13;
k=2 m=m+*(ptr+2)=m+a[2]=13+3=16;
k=3 m=m+*(ptr+3)=m+a[3]=16+5=21;
k=4 m=m+*(ptr+4)=m+a[4]=21+4=26;
k=5 退出循环
所以程序的功能就是将m与数组a的所有元素加起来后再赋给m

嗯嗯,

追答

最后21+4=26?

追问

嗯,我原题貌似有问题a应该是12345吧

ptr+k表示的是ptr偏移k个单元对应的那个单元,由于ptr指向的数组a的起始地址,所以ptr偏移k个单元实际上就是a[k]的地址

*(ptr+k)就是取出地址为ptr+k的单元的内容,也就是a[k]的值

追答

实在不行程序计算机上执行下

追问

嗯嗯,好的

追答

不用记得那么麻烦

实际上就是ptr[i]=a[i]

=*(ptr+i)=*(a+i)

就是把ptr当做和a一模一样

追问

嗯嗯对哈,这样很容易看懂~

追答

你搞哪样是理解但很绕

追问

嗯嗯

那你知道为什么这题选b么?~若要打开当前目录中的文本文件abc.txt进行只读操作,则下面符合此要求的函数调用是?A. fopen("abc.txt","rb");
B. fopen("abc.txt","r");
C. fopen("abc.txt","a");
D. fopen("abc.txt","w");

追答

我虽然没有学过这个函数,但是明显他考察你的记忆

我虽然没有学过这个函数,但是明显他考察你的记忆

r等于英文的read

w=英文write

就是读写意思呵呵

其实这个东西你翻下书就可以啊没有必要问,完全属于记忆题目

你其实通过题目可以看出你那块不懂返回书本去学会,要是只为做题没有意义

追问

〒_〒好吧