C语言编程问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程问题相关的知识,希望对你有一定的参考价值。

描述
学校给高一(三)班分配了一个名额,去参加奥运会的开幕式。每个人都争着要去,可是名额只有一个,怎么办?班长想出了一个办法,让班上的所有同学(共有n个同学)围成一圈,按照顺时针方向进行编号。然后随便选定一个数m,并且从1号同学开始按照顺时针方向依次报数,1, 2, …, m,凡报到m的同学,都要主动退出圈子。然后不停地按顺时针方向逐一让报出m者出圈,最后剩下的那个人就是去参加开幕式的人。
要求:用环形链表的方法来求解。所谓环形链表,即对于链表尾结点,其next指针又指向了链表的首结点。基本思路是先创建一个环形链表,模拟众同学围成一圈的情形。然后进入循环淘汰环节,模拟从1到m报数,每次让一位同学(结点)退出圈子。
输入
输入只有一行,包括两个整数n和m,其中n和 m的含义如上所述。
输出
输出只有一个整数,即参加开幕式的那个人的编号。
输入样例
8 3
输出样例
7

参考技术A #include <stdio.h>
#include <malloc.h>

typedef struct _list_student

int num;
struct _list_student *next;
list_student;

void list_create(list_student **head, int n)

int i = 0;
list_student *p = NULL, *q = NULL;

for(i = 0; i < n; ++i)

p = (list_student *)malloc(sizeof(list_student));
p->num = (i + 1);
if(0 != i)

q->next = p;

else

*head = p;

p->next = *head;
q = p;


return ;


void list_free(list_student *head)

list_student *p = head, *q = head;

if(!p)
return ;

do

p = p->next;
q->next = NULL;
free(q);
q = p;
while(head != p);

return ;


void list_print(list_student *head)

list_student *p = head;

if(!p)
return ;

do

printf("%d ", p->num);
p = p->next;
while(head != p);
putchar('\n');

return ;


void get_result(list_student **head, int m)

int i = 0;
list_student *p = *head, *q = *head;

if(!p)
return ;

while(p != p->next)

while(p != q->next)

q = q->next;


for(i = 1; i < m; ++i)

q = p;
p = p->next;


p = p->next;
q->next->next = NULL;
free(q->next);
q->next = p;

list_print(p);


*head = p;

return ;


int main(void)

int n = 0, m = 0;
list_student *list = NULL;

do

printf("n: ");
scanf("%d", &n);

if(n < 1)

printf("请输入正整数!\n");

continue;


break;
while(1);
do

printf("m: ");
scanf("%d", &m);

if(m < 1)

printf("请输入正整数!\n");

continue;


break;
while(1);

list_create(&list, n);
list_print(list);

get_result(&list, m);
printf("result = %d\n", list->num);

list_free(list);

return 0;
本回答被提问者采纳

c语言问题

题目是输入一串英文,把每个单词的首字母变成大写 并输出
我写的是
#include <stdio.h>
#include <string.h>
#define NUM 100
main()

int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
c[0]=c[0]-32;
for(i=0;i<NUM;i++)
if(c[i]=' ')
c[i+1]=c[i]-32;


puts(c);


不知道哪错了

参考技术A #include <stdio.h>
#include <string.h>
#define NUM 100
main()
int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
for (i=0;i<NUM;i++) /*用循环变量来控制数组的下标*/
if(c[i]>='a'&& c[i]<='z') c[i]=c[i]-32;/*判断数组元素是不是小写,是的话转换为大写*/
puts(c);
参考技术B #include <stdio.h>
#include <string.h>
#define NUM 100
void main()

int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
c[0]=c[0]-32;
for(i=0;i<strlen(c);i++) // i 的上限要以字符串的实际长度为准
if(c[i]==' ') //逻辑判断要用两个"="号
c[i+1]=c[i+1]-32;


puts(c);
本回答被提问者和网友采纳
参考技术C #include <stdio.h>
#include <string.h>
#include <ctype.h>
#define NUM 100
main()

int i;
char c[NUM];
printf("请输入字符串:");
gets(c);

i=0;
if(islower(c[i]))
c[i]-=32;
while(c[i])

if(c[i]==' '&&c[i++]&&islower(c[i]))
c[i]-=32;



puts(c);
参考技术D 怎么回不了啊

以上是关于C语言编程问题的主要内容,如果未能解决你的问题,请参考以下文章

c语言问题

c语言问题

C语言数组问题?

C语言编程 集合子集问题

c语言问题?????????

兔子繁殖问题 C语言编程