C语言结构初学的一个小问题,求大神。

C语言 码拜 9年前 (2015-05-11) 867次浏览 0个评论

题目:要求用两个自定义函数input和max起输入编号,姓名,成绩数据和求成绩最大值的功能,然后在主函数输出该学生信息。
我的问题是:
1.在两个自定义函数中,应该怎样写for循环的判断条件?
2.我在max函数中返回了最大值的地址,请问在主函数中该如何输出?
谢谢。

#include <stdio.h>
#define N 10
struct student{
	int num;
	char name[10];
	float point;
};
void input(struct student *p)
{
	for (; (*p).num !=""\0""; p++)
	{
		printf("Input num:");
		scanf("%d", &(*p).num);
		printf("Input name:");
		scanf("%s", &(*p).name);
		printf("Input point");
		scanf("%lf", &(*p).point);
	}
}
struct student *max(struct student *p)
{
	for (; (*p).point!= ""\0""; p++)
	{
		if ((*p).point > (*(p + 1)).point)
		{
			(*(p + 1)).point = (*p).point;
		}
	}
	return p;
}
int main()
{
	struct student *p;
	struct student stu[N];
	input(stu);
	max(stu);
	p = max(stu);
	printf("%d%s%f", &(*p).num, &(*p).name, &(*p).point);
	return 0;
}
20分
#include <stdio.h>
#define N 10
struct student{
    int num;
    char name[10];
    float point;
};
void input(struct student *p)
{
    for (int i=0;i<N;i++)
    {
        printf("%d/%d\n",i+1,N);
        printf("Input num:");fflush(stdout);
        scanf("%d", &p[i].num);
        printf("Input name:");fflush(stdout);
        scanf("%9s", p[i].name);
        printf("Input point");fflush(stdout);
        scanf("%f", &p[i].point);
    }
}
struct student *max(struct student *p)
{
    struct student *v;
    v=p;
    for (int i=1;i<N;i++)
    {
        if (p[i].point > v->point)
        {
            v=p+i;
        }
    }
    return v;
}
int main()
{
    struct student *p;
    struct student stu[N];
    input(stu);
    p = max(stu);
    printf("%d %s %f", p->num, p->name, p->point);
    return 0;
}
15分
1:边界值N应该传入参数,输入的个数可以通过传出参数控制。
2:输出多了&,注意 scanf和printf区别。
scanf(“%lf”, &(*p).point);
printf(“%d%s%f”, &(*p).num, &(*p).name, &(*p).point);

此外注意:
1:数组应该memset初始化下。
2:注意下区别整数,浮点型,char区别。
    for (; (*p).num !=””\0″”; p++)
    for (; (*p).point!= “”\0″”; p++)

引用 1 楼 zhao4zhong1 的回复:
#include <stdio.h>
#define N 10
struct student{
    int num;
    char name[10];
    float point;
};
void input(struct student *p)
{
    for (int i=0;i<N;i++)
    {
        printf("%d/%d\n",i+1,N);
        printf("Input num:");fflush(stdout);
        scanf("%d", &p[i].num);
        printf("Input name:");fflush(stdout);
        scanf("%9s", p[i].name);
        printf("Input point");fflush(stdout);
        scanf("%f", &p[i].point);
    }
}
struct student *max(struct student *p)
{
    struct student *v;
    v=p;
    for (int i=1;i<N;i++)
    {
        if (p[i].point > v->point)
        {
            v=p+i;
        }
    }
    return v;
}
int main()
{
    struct student *p;
    struct student stu[N];
    input(stu);
    p = max(stu);
    printf("%d %s %f", p->num, p->name, p->point);
    return 0;
}

非常感谢,不过我想问如果在input函数里用p++这样的操作能实现吗?

15分
使用p++;可如下:

#include <stdio.h>
#define N 10
struct student {
	int num;
	char name[10];
	float point;
};
void input(struct student *p)
{
	struct student *q = p;
	for (; p != q + N; p++)
	{
		printf("Input num:");
		scanf("%d", &(*p).num);
		printf("Input name:");
		scanf("%s", &(*p).name);
		printf("Input point");
		scanf("%f", &(*p).point);
	}
}
struct student *imax(struct student *p)
{
	struct student *q, *r;
	q = r = p;
	for (p++; p != q + N; p++)
	{
		if ((*p).point > (*r).point) r = p;
	}
	return r;
}
int main()
{
	struct student *p;
	struct student stu[N];
	input(stu);
	imax(stu);
	p = imax(stu);
	printf("%d %s %f", (*p).num, (*p).name, (*p).point);
	return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言结构初学的一个小问题,求大神。
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!