帮忙看下这道C语言指针的题目谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:49:22
#include <stdio.h>
#define max 50
void main()
{
int a[max],n,*pa,i,k,m;
do{
printf("\n请输入班级人数:");
scanf("%d",&n);
if(n>50)
{
printf("班级最大人数50人");
}
}while(n>50);
for(i=0,pa=a;i<n;i++,pa++)//这里将学号从1到N放入数组当中。
{
*pa=i+1;
}
printf("班级人数排列如下:\n");
for(i=0,pa=a;i<n;i++,pa++)
{
printf("%d ",*pa);
}
for(i=0,k=0,m=0,pa=a;m<n-1;i++,pa++)//k控制记数 到3归0 m是控制K为3的时候把当轮比较的数归0
{
if(*pa!=0)
{
k++;
}
if(k==3)
{
k=0;
*pa=0;
m++;
}
if(i==n)
{
i=0;
pa=a;
}

}

while(*pa==0)
{
pa++;
}
printf("\n班长为%d号",*pa);
printf("\n");
}

到46就算不成了 ..而且前面好象也有问题...
谢谢
题目:有几个人围成一圈,顺序排号,从第一个开始报数,(从

楼主,你把你的for循环改成如下的样子,你的错误在于你之前每次都把第一个元素跳过了。你自己好好想想,如果看不懂发消息问我。
for(i=0,k=0,m=0,pa=a;m<n-1;) {
if( *pa )
k++;
if(k==3) {
k=0;
*pa=0;
m++;
}
if(i==n-1) {
i=0;
pa=a;
}
else {
i++;
pa++;
}
}
pa = a; /* 指针需要归位到数组的起始,否则下面的访问有溢出的可能,而且你也需要从头到尾扫描一遍才知道班长编号的具体位置 */
while(*pa==0)
pa++;

你的*PA未符初始值.

可能算法有问题吧。不过
do{
printf("\n请输入班级人数:");
scanf("%d",&n);
if(n>50)
{
printf("班级最大人数50人");
}
}while(n>50);
是不是应该为:
do{
printf("\n请输入班级人数:");
scanf("%d",&n);
if(n>50)
{
printf("班级最大人数50人");
}
else
break;
}while(n>50);