本人刚入门,各位学长看看我的代码错哪了

以下是错误代码

img

代码如下所示

#include<stdio.h>

int main()
{

printf("按任意键开始\n\n");
int start=1;


do
{
    float e;
    int a, b, c, d, f;
    float s1, s2, s3, s4, s5, s6, s7;
    a = b = c = d = e = f = s1 = s2 = s3 = s4 = s5 = s6 = s7 = 0;
    printf("欢迎使用大学评价系统,请根据提示输入相应的信息\n");
    printf("\n请输入该大学的校友会排名");
    scanf_s("%d", &a);
    if (a<=300) s1=0.5;
    else if (a>300) s1=0.25;

    printf("\n请输入该大学的软科排名");
    scanf_s("%d", &b);
    if (b <= 300) s2=0.5;
    else if (b > 300) s2=0.25;

    printf("\n请输入该大学的US世界排名,如无请输0");
    scanf_s("%d", &c);
    if (c == 0) s3 = 0;
    if (0 <= c <= 1600) s3 = 1;
    if (0 >= 1600) s3 = 0.5;

    printf("\n请输入该大学是否坐落于省会城市");
    printf("\n1.是 2.否");
    scanf_s("%d", &d);
    if (d == 1) s4 = 2;
    else s4 = 1;

    printf("\n请输入该大学的考研率,请以小数的形式输入");
    scanf_s("%f", &e);
    if (e <= 0.1) s5 = 0.5;
    else s5 = 1;

    printf("\n请输入该大学是一本还是二本");
    printf("\n1.一本 2.二本");
    scanf_s("%d", &f);
    if (f == 1) s6 = 5;
    else s6 = 3;

    s7 = s1 + s2 + s3 + s4 + s5 + s6;
    printf("\n该大学是的综合评分是%ld"),s7;
    
}
while (start);

return 0;

}

最后无法得出想要的结果,只会输出以下的结果

按任意键开始

欢迎使用大学评价系统,请根据提示输入相应的信息

请输入该大学的校友会排名1

请输入该大学的软科排名1

请输入该大学的US世界排名,如无请输01

请输入该大学是否坐落于省会城市
1.是 2.否1

请输入该大学的考研率,请以小数的形式输入1

请输入该大学是一本还是二本
1.一本 2.二本1

该大学是的综合评分是1071754304欢迎使用大学评价系统,请根据提示输入相应的信息

请输入该大学的校友会排名


#include <stdio.h>

int main() {
    printf("按任意键开始\n\n");
    int start = 1;

    do {
        float e;
        int a, b, c, d, f;
        float s1, s2, s3, s4, s5, s6, s7;
        a = b = c = d = f = s1 = s2 = s3 = s4 = s5 = s6 = s7 = 0;

        printf("欢迎使用大学评价系统,请根据提示输入相应的信息\n");

        printf("\n请输入该大学的校友会排名: ");
        scanf("%d", &a);
        if (a <= 300)
            s1 = 0.5;
        else if (a > 300)
            s1 = 0.25;

        printf("\n请输入该大学的软科排名: ");
        scanf("%d", &b);
        if (b <= 300)
            s2 = 0.5;
        else if (b > 300)
            s2 = 0.25;

        printf("\n请输入该大学的US世界排名,如无请输0: ");
        scanf("%d", &c);
        if (c == 0)
            s3 = 0;
        else if (0 <= c && c <= 1600)
            s3 = 1;
        else if (c > 1600)
            s3 = 0.5;

        printf("\n请输入该大学是否坐落于省会城市");
        printf("\n1.是 2.否");
        scanf("%d", &d);
        if (d == 1)
            s4 = 2;
        else
            s4 = 1;

        printf("\n请输入该大学的考研率,请以小数的形式输入: ");
        scanf("%f", &e);
        if (e <= 0.1)
            s5 = 0.5;
        else
            s5 = 1;

        printf("\n请输入该大学是一本还是二本");
        printf("\n1.一本 2.二本");
        scanf("%d", &f);
        if (f == 1)
            s6 = 5;
        else
            s6 = 3;

        s7 = s1 + s2 + s3 + s4 + s5 + s6;
        printf("\n该大学的综合评分是:%f", s7);
    } while (start);

    return 0;
}

题主的代码问题,在第 25 26 两行里:
第25行:if (0 <= c <= 1600) s3 = 1; 应修改为: if (0 < c && c <= 1600) s3 = 1;
第26行:if (0 >= 1600) s3 = 0.5; 应修改为:if (c > 1600) s3 = 0.5;

粗略看下去代码中还有一个错误:

printf("\n该大学是的综合评分是%ld"),s7;

在这行代码中,printf函数的格式字符串没有包含格式化参数 %ld,因此在输出时会发生错误

printf("\n该大学是的综合评分是%ld", s7);

这样就将变量s7的值正确地传递给printf函数进行输出了。至于别的逻辑问题楼上有人回答你啦!

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/655180
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想