printf("enter grades:\n");scanf("%f", &grade[i]);while (grade[i] !=-1){i++;scanf("%f", &grade[i]);n++;}你用的do-while循环先无条件执行了括号里的内容,再判断while里的条件。这样会导致n值出错。