下面程序段的运行结果是 6 6 7 。 int i, j, k = 5, *p; p = &k; i = ++(*p); j = (*p)++; printf("%d %d %d", i, j, k) ; /* 输出的数字之间有一个空格 */
时间: 2024-04-26 19:26:47 浏览: 22
你的回答是正确的!这段程序的运行结果是 6 6 7,解释如下:
1. 首先将指针p指向变量k的地址。
2. 执行i = ++(*p)语句,因为*p的值为5,所以先将*p的值加1,变为6,然后将6赋值给i。
3. 执行j = (*p)++语句,因为*p的值为6,所以先将6赋值给j,然后再将*p的值加1,变为7。
4. 最后执行printf("%d %d %d", i, j, k)语句,将i、j、k的值依次输出,因此输出结果为6 6 7。
相关问题
下面程序段的运行结果是 。 int i, j, k = 5, *p; p = &k; i = ++(*p); j = (*p)++; printf("%d %d %d", i, j, k) ; /* 输出的数字之间有一个空格 */
程序段的运行结果是:6 5 6。
首先,将指针p指向变量k的地址,即*p的值为5。
接着,执行i = ++(*p),先将*p的值加1,即此时*p的值为6,然后再将6赋值给i。
再执行j = (*p)++,先将*p的值(即6)赋值给j,然后再将*p的值加1,此时*p的值为7。
最后,输出i、j、k的值,即6、5、6。
LinkList InitRing(int n, LinkList R) //尾插入法建立单循环链表函数 { ListNode *p, *q; int I; R=q=(LinkNode *)malloc(sizeof(LinkNode)); for(i=1;i<n;i++){ p=(LinkNode *)malloc(sizeof(LinkNode)); q->data=i; q->next=p; q=p; } p->data=n; p->next=R; R=p; return R; } LinkList DeleteDeath(int n, int k, LinkList R) //生者与死者的选择 { int i, j; ListNode *p, *q; p=R; for(i=1; i<n/2; i++){ //删除一半结点 for(j=1; j<k-1; j++) //沿链前进k-1步 p=p->next; q=p->next; p->next=q->next; printf(“%4d”, q->data); free(q); } R=p; return R; } void OutRing(int n, LinkList R){ //输出所有生者 int i; LinkNode *p; p=R; for(i=1;i<=n/2; i++, p=p->next){ printf(“%4d”, p->data) } } 有了上述算法分析和设计之后,实现就比较简单了。首先要定义一个链表结构类型,然后编写一个主函数调用上面已定义好的函数即可。主函数的源程序如下: #include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node * next; }ListNode; typedef ListNode * LinkList; void main(){ LinkList R; int n,k; LinkList InitRing(int n, LinkList R); LinkList DeleteDeath(int n, int k, LinkList R); void OutRing(int n, LinkList R); printf(“总人数n. 报数上限k=”); scanf(“%d%d”,&n, &k); R=InitRing(n, R); R=DeleteDeath(n, k, R); OutRing(n, R); } 5 运行结果 编译运行上述程序,提示:总人数n. 报数上限k= 输入30和9后并“回车”可得出如下结果: 9 18 27 6 16 26 7 19 30 12 24 8 22 5 23 21 25 28 29 1 2 3 4 10 11 13 14 15 17 20
这段代码实现了一个约瑟夫环问题的解法,将人们排成一个环,然后按照报数的规则依次淘汰,直到只剩下一半人。其中,InitRing函数用于初始化单向循环链表,DeleteDeath函数用于实现选出要淘汰的节点,OutRing函数用于输出剩下的生者。
具体来说,InitRing函数采用尾插入法,依次将每个人的编号存储在链表节点中,并将链表首尾相连形成一个单向循环链表。
DeleteDeath函数则是按照约定的报数规则,找到要删除的节点,并删除之。该函数在循环中删除一半的节点,直到只剩下一半节点为止。
最后,OutRing函数用于输出剩下的生者的编号,即链表中剩下的节点。
在主函数中,先读入总人数n和报数上限k,然后调用InitRing函数初始化链表,再调用DeleteDeath函数删除一半节点,最后调用OutRing函数输出剩下的生者的编号。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)