C语言问题 为什么结果不正

来源:百度知道 编辑:UC知道 时间:2024/05/15 03:07:49
#include<stdio.h>
float less_60(float *pointer)
{
int m=0,j=0;

float *point=pointer;
printf("不及格名单为:");
while(*point>=0)
{
if((*point)<60)
{
j++;
(point)++;
}

}
printf("不及格人数为:%d",j);

}
main()
{
int a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
less_60(a);
}

你这个程序有点小问题,首先:你传递的参数类型不匹配,main中是定义了整型指针,less_60(float *pointer)中却又用了float来定义指针,另外less_60(float *pointer)你前面加了float,但却又没有return语句,所以也会产生警告,这里要改成void less_60(int *pointer).其次,你的
while(*point>=0)
{
if((*point)<60)
{
j++;
(point)++;
}
这个里面也有问题,在if((*point)<60)这里,如果我输入的数字比60大,那么point就不会自加,指针不变,那就是说它一直指向那个比60大的数字,形成死循环,应该把(point)++; 语句放到if结构的外面,然后你的while循环条件也有问题.while(*point>=0),我们知道当你执行到最后一个数字的时候,point还会自加一次,也就是超出了数组的范围,但是在那个内存中也是有数值的(随机),所以循环条件应该控制在数组范围内,那句改成while(point-pointer<=5)则必定保证了指针一旦超出数组范围就不进行循环判断了,经过以上修改,你的程序如下:
#include<stdio.h>
void less_60(int *pointer)
{
int m=0,j=0;
int *point=pointer;
printf("不及格名单为:");
while(point-pointer<=5)
{
if((*point)<60)
{
j++;
}
(point)++;
}
printf("不及格人数为:%d",j);
}

main()
{
int a[5],i;
for(i=0;i<5;i++)