大学C语言试题6,不懂,我要详细的解答~谢谢

Python026

大学C语言试题6,不懂,我要详细的解答~谢谢,第1张

先分析那个结构体,类型名称为st,只含有两个内容,(1)一个字符c;(2)一个字符串指针s。

再解读那个函数char *f(strct st t):

这个函数的返回值是一个字符串指针,它的自变量是一个结构体变量t(类型为st)。

这的作用是什么?看内部,while(t.s[k]!='\0')是一个循环语句,它遍历t变量中的s字符串的每一个字符,干什么呢?看循环体共两句:

    if(t.s[k]==t.c)return t.s+k

    k++

 }

第一句是把s字符串的第k个字符与c做比较,如果相等,则返回s那个指针,只不过不是第一个字符,而是出现相等的那个字符。注意,一旦相等,就跳出这个函数啦!!

第二句则是让k加1,也就是继续比较下一个字符。

如果很不幸,一直把s的字符全部比较完,也没有一个跟c相同的,那就循环结束了,执行后面的那一句:return t.s。这一次是返回s那个指针,而且是指向第一个字符的了~~

最后分析一下主函数main,定义了一个st类型的数组a,共有4个元素,a[0]~a[3],每一个元素是都有不同的c和s都依次进行了定义。

然后是一个循环,依次用a[0]~a[3]做参数调用f函数,并打印返回的值——从前面的分析我们知道每一次调用都返回一个字符串的指针——也就是打印这个字符串,每个字符串占一行。共打印四行。

分析完程序之后,我们再来看题目:

注意题目有一点bug,21、22、23、24题的问题应该是第一、二、三、四行输出的内容,题目表述都问第一行的输出内容,那不是答案一样嘛?所以应该是题目印错了。

其实每一行输出的内容只跟结构体变量a[k]中的c和s两个变量有关。下面逐行分析:

第一行:c=1,s=123,k=0时第一个字符比较就相等了,所以返回s+k,也就是指向s的第一个字符的指针,所以输出的内容是全部s:123,是为选项C。

第二行:c=2,s=321,比较到第二个字符2(k=1)就相等了,所以返回s+1,也就是指向s的第二个字符2的指针,所以输出的内容是s从2开始的后面全部字符:21,是为选项A。

第三行:c=3,s=123,比较到第三个字符3(k=2)就相等了,所以返回s+2,也就是指向s的第三个字符3的指针,所以输出的内容是s从3开始的后面全部字符:(非常不幸只有一个)3,是为选项A。

第四行:c=4,s=321,比较到最后一个字符也没有发现4,所以返回s,也就是指向s的指针,所以输出的内容是全部s:321,是为选项D。

typedrf struct{

int score[4]

} student

typedef struct node {

student data [20]

int len =3}linknode *linkp

/*手机键盘打的,用了顺序表,有需要链式结构,追问中说明,部分预处理已省略*/

void fun (int l ,linkp lp)

/*取总后直接输出,故暂不设返回值,需要,说明。*/

{int i, j, sum=0

for ( i=0i<=len -1i++){

for (j=0j<=3j++)

sum +=r->data [i].score [j]

printf ("%d",sum )}

}