当前位置:首页 » 编程语言 » c语言报数退出
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言报数退出

发布时间: 2022-02-10 10:16:22

A. c语言,报数问题

你这代码想法有问题:消去3的倍数的数,在第一次,还可以,第二次,则不知道该如何消除了,因为,数的排列变化了(有了间隔),而且,你也没有考虑,数到最大值后,程序该怎么办?

B. c语言 退出整个程序或函数的命令是什么

c语言退出整个程序或函数的命令是return、goto 、break 、break。

1、return 返回;

return 表示从被调用函数返回主调函数继续执行,返回时可附带一个返回值,由return后面的参数设定。

2、goto 无条件跳转;

goto语句也称作无条件转移语句,其一般格式为goto语句标号:其中语句标号是按照标识符规定书写的符号,放在某一行语句行的前面,标号后加冒号(:)。

3、break 调处最近一层块;

大多数情况下是终止上一层的循环,C语言中break在switch中执行一条case后跳出语句的作用 使程序跳出switch执行switch以后的语句 如果没有break switch会从满足条件的地方执行到switch结构结束。

(2)c语言报数退出扩展阅读

break语句使用

示例:

#include <stdio.h>

void main()

{

int x=1;

while(x<=4)

{

printf("x=%d ",x);

if (x==3)

{

break;

}

x++;

}

}

C. c语言 报数问题

方法一:(推荐)不受人数限制,因为采用的动态分配
#include <stdio.h>
#include <malloc.h>
/*********************************************************************
*以循环队列的数据结构实现
*时间复杂度T(n)
*采用循环队列数据结构,使得每次对数组的访问次数减少到最少
**********************************************************************/
int main(void)
{

//定义并初始化各种变量
int i=0,//控制变量
num=0,//人数
die=0,//报数值
front,//队头位置
rear,//队尾位置
temp=0;//中间变量
do
{
printf("\n请输入人数(输入小于0退出):");
scanf("%d",&num);
printf("\n请输入报数值:");
scanf("%d",&die);
int *cycle=(int *)malloc((num+1)*sizeof(int));//多申请一个空间,在循环过程中方便处理
//依次编号,一号元素为0,暂时闲置
for(i=0;i<=num;i++)
{
cycle[i]=i;
}
//置队头和队尾的位置
front=1;
rear=num;

i=1;//报数器置1,开始报数
while(front!=rear)//当队列中元素不止一个时,循环
{
//备份出队数据
temp=(rear+1)%(num+1);//在位置rear后预留一个位置,以免有元素入队
cycle[temp]=cycle[front];

front=(front+1)%(num+1);//队头元素出队,队头位置加1

//如果出队的人报数符合条件
if(i==die)
{
i=1;//报数重新置1,开始报数
printf("%d出队\n",cycle[temp]);//显示出队的元素
}
//如果出队的人报数不符合条件
else
{
i++;//报数值增1
//队尾插入刚出队的元素
rear=(rear+1)%(num+1);
cycle[rear]=cycle[temp];
}
}
printf("幸存者是%d\n",cycle[front]);
free(cycle);
}while(num!=0);
return 0;
}

方法二:(按你的要求)
#include <stdio.h>
/*********************************************************************
*以纯粹的思维方法实现
*时间复杂度T(n)
*过程繁琐,而且也不容易理解
*********************************************************************/
void main(void)
{
int result(int *p,int n,int m);
int i=0,m=0,n=0;
int num[50];
int *p;

for(;;)
{
printf("输入人数和报数值:");
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;
cout<<"The last one is NO."<<result(p,n,m)<<endl;
}
}
int result(int *p,int n,int m)
{
int i=0;
for(i=0;i<n;i++)
p[i]=i+1;
i=0; // i为每次循环时计数变量
int k=0; // k为按1,2,3...m报数时的计数变量
int die=0; // die为退出人数
while (die<n-1) // 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if (p[i]!=0) k++; //如果编号为0,就不报数;如果编号不为0,报数加1
if (k==m) // 将退出的人的编号置为0
{
printf("%d退出\n",p[i]);
p[i]=0;
k=0;//重新开始报数
m++;//退出人数加1
}
i++;
if (i==n) i=0; // 报数到尾后,i恢复为0
}
while(*p==0) p++;
return *p;
}

D. C语言编程,报数问题!

#include <stdio.h>
int main()
{
int N,M,*a;
int i,j,position=1,total=0,chage;/*total出队的人数*/
printf("Enter the N and M\n");
scanf("%d%d",&N,&M);
a=(int *)malloc(N*sizeof(int));
for (i=0;i<N;i++)
a[i]=i+1;
while(1)
{
position+=M-1;
while (position>N-total)
position=position-N+total;
chage=a[position-1];
for (j=position;j<N-total;j++)
a[j-1]=a[j];
a[N-total-1]=chage;
total++;
if (total==N)/*出队人数等于N,程序结束*/
{
for (i=0;i<N-1;i++)
printf("%d->",a[N-i-1]);
printf("%d\n",a[0]);
return 0;
}
}
}

E. C语言 报数问题

#include<stdio.h>
int main(void)
{
int a[9999],n,i,count,num,*p;
p=&a[0];
count=1;
n=i=num=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n<=10000)
{
for(i=0;i<n;i++)
a[i]=i+1;
while(num<n-1)
{

count++;
p++; //这里就有越界的可能(p>&a[n-1]),如果这里越界了,那下
面的循环就不会执行了,那么p就一直++,直到num==n-1
if(p>&a[n-1]) //所以这里就要判断一下,或者开始时就把a的所有
元素全部初始化为0,就不用这个判断了
p=&a[0];
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}

if(count%3==0)
{
*p=0;
num++;
}

}
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}
printf("Last No. is:%d",*p);
}
else
printf("%d is out of range of valid values.",n);
return 0;
}

F. C语言有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数)凡报到3的人退出圈子麻烦注释下代码

#include&lt;stdio.h&gt;

#define N 5//人数

void main()

{

int a[N]={0},i=0,out_n=0,call_n=0,*p;

p=a;

while(1){//循环报数

if(*p==0){//如果健在

if(out_n==(N-1))break;//如果仅剩一人

call_n++;//报数

call_n%=3;//最大为3,到了3就从0开始

if(call_n==0){*p=1;out_n++;}//为0(即3)出局

}

p++;if(p==a+N)p=a;//循环转向下一人

}

printf("最后剩余者的编号是:%d ",p+1-a);

}

(6)c语言报数退出扩展阅读:

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。

函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:

printf("&lt;格式化字符串&gt;",&lt;参量表&gt;);

其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

规定符

%d十进制有符号整数

%u十进制无符号整数

%f浮点数

%s字符串

%c单个字符

%p指针的值

%e指数形式的浮点数

%x,%X无符号以十六进制表示的整数

%o无符号以八进制表示的整数

%g把输出的值按照%e或者%f类型中输出长度较小的方式输出

%p输出地址符

%lu 32位无符号整数

%llu 64位无符号整数

G. C语言报数问题,报到3的人退出圈子,我快疯了

下面两种方法是我编写的 供参考

用指针 数组编写
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i=0,j,k,a,q=0,(*p)[2];
printf("请输入学生人数:");
scanf("%d",&n);
p=(int (*)[2])calloc(n+1,sizeof(int (*)[2]));
for(i=0;i<n;i++)
{
*(*(p+i)+0)=1;
*(*(p+i)+1)=i+1;
}
*(*(p+n)+0)=0;
*(*(p+n)+1)=n+1;
for (;n!=1;)
{
for(j=i+2,q=0;j<n-q;j+=2,q++)
{
for(k=j;k<n;k++)
{
*(*(p+k)+0)=*(*(p+k+1)+0);
*(*(p+k)+1)=*(*(p+k+1)+1);
}
}
a=n+3-i;
if(a%3==1)i=-1;
else if(a%3==2)i=-2;
else
i=0;
n=n-q;
}
printf("最后剩下的是%d号同学\n\n",*(*(p+0)+1));
return 0;
}

用链表编写
#include <stdio.h>
#include <stdlib.h>
struct stu
{
int f;
int b;
struct stu *next;
};
int main()
{
struct stu *p,*p1,*head=NULL;
int n,i=0,j,k=0,t=0;
printf("请输入学生人数:");
scanf("%d",&n);
p=(struct stu *)malloc(sizeof(struct stu));
for(i=0;i<n;i++)
{
p1=(struct stu *)malloc(sizeof(struct stu));
p1->f=i+1;
p1->b=1;
if(i==0)
head=p1;
else
p->next=p1;
p=p1;
}
p->next=NULL;
for(j=0;n-t>1;j++)
{
for(p=head;p!=NULL;p=p->next)
{

if((p->b)!=0)
k++;
if(k==3)
p->b=0;
if(k==3)
{
k=0;
t++;
}
}

}for(p=head;p!=NULL;p=p->next)
if(p->b==1)
printf("最后留下的学生编号是:%d\n\n",p->f);
return 0;
}

H. C语言编程报数问题

有n个人a1,a2…,an围成一圈报数,每报到m的人就出队#include<stdio.h> void main() { int i,k,m,n,*p,num[50];

I. c语言:围圈报数123,报三的退出,只剩一人。我用自己思路做了,有个难点,无法解决,望前辈解答。

你的OutRing函数的C语言程序,我帮你改完了,改动的地方比较多,但结构大致没变,你仔细看看吧(主要问题有判断两个数相等要用双等号,变量或指针for循环用后没赋初始值)

#include<stdio.h>

voidOutRing(int*pA,intn)

{

intt=1,i,j,k,summary=n,temp=1,*ptemp0,*ptemp1,*ptemp2,*ptemp3;

ptemp0=pA;

ptemp1=pA;

ptemp2=pA;

ptemp3=pA;

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

{

*ptemp0=1;ptemp0++;/*将数组所有元素赋值为1*/

}

i=0;

while(summary>1)

{

summary=0;

if(*ptemp2==1)

{

if(temp%3==0){*ptemp2=0;}temp++;

}

if(i==n-1){

i=0;

ptemp2=pA;

}else{

i++;

ptemp2++;

}

ptemp1=pA;

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

{

summary+=*ptemp1;

ptemp1++;

}

}if(summary==1)

{

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

{

if(*ptemp3==1){printf("结果是%d",(i+1));return;}

ptemp3++;

}

}

}

intmain()

{

inta[100],n=100;

OutRing(a,n);

return0;

}

J. c语言:有n个人围成一圈,按顺序编号。从第1个人开始报数,数到m时该人退出,下

M