c语言函数题 求助大佬 毕竟我也是个c语言大佬
c语言程序题求大佬帮忙
#include
int main()
{int n,i,j,s=0;
struct stud{
char id[10];
char name[10];
int score;
}stu[10];
scanf("%d",&n);
for(i=j=0;i {scanf("%s %s %d",stu[i].id,stu[i].name,&stu[i].score); s+=stu[i].score; if(stu[i].score>stu[j].score)j=i; } printf("The average score=%.2f\n",(float)s/n); printf("The student who has the highest score is:%s %s %d",stu[j].id,stu[j].name,stu[j].score); return 0; } 思路也很简单。 设定一个一维数组,数组长度为n-1。因为第n个人为Taylor本人,他本人肯定知道自己的秘密。其初始值全部为0,表示还不知道秘密。 再设定一个一维数组,长度为n,用来接收传递规则。 再设一个bool变里,是否已全部找到。初始值为false 现在开始for循环,没有找到且在循环次数内,就循环。循环次数,就是需要经过多少轮。最多不会超过n轮。当然经过一些深入分析,可以减少循环轮数。这里不管了。 第二层for循环,长度就是n。循环传递规则 依次从规则数组里把传递对象取出来, 这里要判断一下传的对象是不是n,是n代表本人,到了本人了就去遍历一下秘密数组其组是否全部为1。如果全部为1,表示已全部知道秘密了,并置找到的bool变量为true,并结束本层循环。 如果不是n,则把秘密数组对应的值 设为1。 另外如何判断秘密数组全部是1? 遍历秘密数组,如果是0就break。如果是1就不管。 本for循环结束后,判断循环变量是不是大于n-1.如果是则表明for是由次数超标而结束,则是全部是1。如果不大于n-1。则表明是由于break结束的。肯定是没有全部找到。 如果循环变里从,0和从1开始循环要注意。 #include <math.h> double area(int a, int b, int c); int main() { 度int a, b, c; double S=0; while (1) { 专printf("第一条边:"); scanf_s("%d", &a); printf("第二条边:"); scanf_s("%d", &b); printf("第三条边:"); scanf_s("%d", &c); if ((a + b > c) && (b + c > a) && (a + c > b)) { S = area(a, b, c); break; } else { printf("三条边不构成三角形属,重新输入\n"); } } printf("三角形的面积:%.2lf\n", S); system("pause"); } double area(int a, int b, int c) { //海伦公式 int s = 0; s = (a + b + c) / 2; return sqrt(s*(s - a)*(s - b)*(s - c)); } 是因为第一次输入的*号后面还有个回车符,所以运行到第二次的时候,程序就把那个回车符读入作为i的值了。解决办法:可以在scanf语句后加一行getchar();吸收掉回车符就行了。求助c语言大佬,有hiht的问题,最好有代码
C语言求助大佬们,注意要求?
C语言问题!!求助大佬~~不知道为什么程序运行第二次及以上会出现同一句话重复出现两次的情况。程序如下