2道c语言问题求教 !

2道c语言问题求教 !流程解释一下
2024-11-17 10:44:03
推荐回答(4个)
回答1:

第一题

第一个循环的时候,把x[i].a(i取0 1 2)分别赋值为1,2,3,x[i].b分别赋值为5,6,7

而x[i].next总是指向下一个数值,最后一个则指向第一个,是一个循环

第二个循环里输出一个x[0].a,然后输出下一个数x[1].b,然后是下一个x[2].a,然后是x[0].b.....以此循环

为了形象点,我们把x[i].a和x[i].b写成两行,

3 4 5 3 4 5

5 6 7 5 6 7

输出就是

按这张图的红线依次输出,循环3次,每次输出两个,就是输出6个数,结果是365547


第二题

是求一个数能不能表示成两个素数相加,pr函数的功能是判断一个数是否是素数,每次循环判断k和m-k是不是都是素数,都是素数说明该数可以表示成两个素数相加

输入30,输出就是30=7+23

回答2:

把第一个for循环后的x的内容搞清楚就好办了!
x[0].a==3,x[0].b==5,x[0].next==&x[1];
x[1].a==4,x[1].b==6,x[1].next==&x[2];
x[2].a==5,x[2].b==7,x[2].next==&x[0]——最后这一项由x[2].next=x;完成。
第二个for循环中p=x使p==&x[0],下面由i控制作3次循环:
i==0时:输出p->a,就是x[0].a为3;接着p=p->next;使p指向x[1],所以输出x[1].b为6;再做一次p=p->next;使p指向x[2]。本次循环结果输出36……
i==1时:输出p->a,就是x[2].a为5;接着p=p->next;使p指向x[0],所以输出x[0].b为5;再做一次p=p->next;使p指向x[1]。本次循环后输出结果是3655……
i==2时:输出p->a,就是x[1].a为4;接着p=p->next;使p指向x[2],所以输出x[2].b为7;再做一次p=p->next;使p指向x[0]。本次循环后输出结果是365547。
i==3时循环结束,所以最后结果是365547。
////////////////////////////////////////////////////////////
本题的自定义函数pr是判断n是否为素数,是则返回1,反之返回0。输入30时,由k和30-k拆分为两个数,当k和30-k都为素数时输出30=系数1+系数2的表达。主函数中k=3开始,步长为2增至<30/2==15,所以k的取值是3,5,7,9,11,13,显然只有7+23,11+19,13+17三组都是系数,所以最后结果是30 = 7 + 23,30 = 11 + 19,30 = 13 +17。供参考……

回答3:

第二道题目:

这道题的pr()函数是检测输入的n值是不是质数;如果是返回1,否则返回0;整个函数功能其实就是写出一个数字由两个质数相加的形式;例如,你输入30,就会出现;30=7+23;30=11+13;30=13+17;如果你输入20,他就会输出20=3+17,20=7+13;如果输入的数字无法写成两个质数相加,则不会输出;你可以实际编程检测;

回答4:


第一题