c语言编程问题? 80

求大神给我写一下过程,我不知道哪错啊... 求大神给我写一下过程,我不知道哪错啊 展开
 我来答
自我编程
2020-03-14 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

1、输入有范围,两个变量输入都需要验证,方法变量处置范围以外,循环判断输入。

2、天数循环计数,日期0~6周期自增。用变量累加计数结果。

下面是演示代码:

#include<stdio.h>

int main()

{

    int i,j,a=7,n=366,cnt=0;

    while(a<0 || a>6)

        printf("请输入a的值(0~6):"),scanf("%d",&a);

    while(n<0 || n>365)

        printf("请输入n的值(0~365):"),scanf("%d",&n);

    for(i=0,j=a;i<n+1;i++,j++)

    {

        if(j==4) cnt++;

        if(j==6) j=-1;

    }

    printf("上机次数%d次\n",cnt);

    return 0;

}

DavidCai0316
2020-03-14 · TA获得超过974个赞
知道小有建树答主
回答量:311
采纳率:85%
帮助的人:106万
展开全部

对于这种类似于OJ的问题,输入和输出不能含有多余的字符,否则提交就会不通过,要严格按照题目要求进行输入和输出。

第一题分析:

  1. 这题求平均值,题目没有结束输入的条件(标记),该条件一般有多种形式,例如可以输入某个值结束输入(例如-1),或者先输入一个 n ,然后再用循环输入 n 个数。在这里就使用输入 -1 结束输入来编写代码。

  2. 整个题目的思路还是比较清晰。

  3. 先求全班人数和平均值,再求高的人数和平均值,再求低的人数和平均值。

  4. 这里需要注意最后一行的提示,如果平均值是一个整数,应该输出一个整数,例如平均值为 98.00,则应该输出 98,否则保留两位小数输出。

  5. 细节方面就是输入数据的问题。例如如果输入 -1,则人数、平均值全为 0。如果输入的分数都相同,则所有人都大于或等于全部平均分,此时低于全班平均分的人数为 0,根据求平均值公式(平均分=总分÷人数),此时出现除数为 0 的情况。

第一题求解过程:

  1. 声明一个数组(整型、浮点型都行)用来保存输入的分数。

  2. 在输入分数的同时可以累计班级总分和班级人数。

  3. 根据班级总分和班级人数求班级平均分。

  4. 再循环遍历数组,把高于平均分或低于平均分和相应的人数和分数统计出来。

  5. 再求出这两批的平均分。

  6. 最后输出数据。

第一题测试代码

第一题测试结果

第一题测试代码:

#include <stdio.h>

int main()

{

     int a[1000] = {0}, L = 0, mid = 0, R = 0;

     float sum = 0, Lsum = 0, Rsum = 0;

     float Laver = 0, aver = 0, Raver = 0;

     while (a[mid] != -1)

     {

          sum += a[mid];

          scanf("%d", &a[++mid]);

     }

     if (mid > 1) aver = sum / --mid;

     else --mid;

     for (int i = 1; i <= mid; i++)

     {

         if (a[i] < aver)

         {

             R++;

            Rsum += a[i];

         }

     }

     Lsum = sum - Rsum;

     L = mid - R;

     if (L > 0) Laver = Lsum / L;

     if (R > 0) Raver = Rsum / R;

    

     printf("%d ", mid);

     if (aver == (int)aver) printf("%.f\n", aver);

     else printf("%.2f\n", aver);

    

     printf("%d ", L);

     if (Laver == (int)Laver) printf("%.f\n", Laver);

     else printf("%.2f\n", Laver);

    

     printf("%d ", R);

     if (Raver == (int)Raver) printf("%.f\n", Raver);

     else printf("%.2f\n", Raver);

    return 0;

}

第二题分析:

  1. 这题可以完全用数学来解决。能用数学解决的,最好用数学来解决,运行速度快。

  2. 变量 a 表示 0 ~ 6,也代表星期一 ~ 星期日。

  3. 变量 n 是后面的有 n 天。

  4. a + 1 + n,其实就是总的天数,除以 7 的结果就是有多少周,1 周有一个星期五,所以除以 7 的结果就是能上机的次数。但是考虑到有余数的问题,如果余数是 5 或 6,说明还有一次上机的机会。

第二题运算过程:

  1. 声明变量和输入数据。

  2. int sum = a + 1 + n 求得总的天数。

  3. int cnt = sum / 7 求得上机的次数。

  4. if (sum % 7 >= 5) cnt++,求是否还有一次上机的机会。

  5. 输出结果。

第二题测试结果

第二题测试代码:

#include <stdio.h>

int main()

{

     int a, n;

     scanf("%d %d", &a, &n);

     int sum = a + 1 + n;

     int cnt = sum / 7;

     if (sum % 7 >= 5) cnt++;

     printf("%d", cnt);

     return 0;

}

追问
你好,我想问一下如果用Ctrl+Z加回车结束数据输入该怎么修改
还有一个问题,我第一个提交的结果是REG.

不好意思,又麻烦你了,我输出的数字好像不太对

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
candyweiyi2
2020-03-14 · 超过23用户采纳过TA的回答
知道答主
回答量:104
采纳率:70%
帮助的人:15万
展开全部
假设班级人数最多200人,输入数据时,以输入-1代表输入结束,如下代码:
int main()
{
float r1,r2,r3;
int a[200];
int i,j,k,m;
k=0;
m=0;
r1=0;
r2=0;
r3=0;
for(i=0;i<200;i++)
a[i]=0;
for(i=0;i<200;i++)
{ a[0]=0;
if(a[i]!=-1) { scanf("%d",&a[i+1]); } else break; } for(j=1;j<=i-1;j++) r1=r1+a[j]; r1=r1/(i-1); printf("%d %.2f\n",i-1,r1); for(j=1;j<=i-1;j++) { if(a[j]>=r1) { k++; r2=r2+a[j]; } } printf("%d %.2f\n",k,r2/k); for(j=1;j<=i-1;j++) { if(a[j]<r1) { m++; r3=r3+a[j]; } } printf("%d %.2f\n",m,r3/m); return 0;}
实际运行满足题目要求,望采纳
更多追问追答
追问
谢谢,但是我怎么判断是整数输出整数,不是整数才出现float
谢谢,但是我怎么判断是整数输出整数,不是整数才出现float
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2020-03-14 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include <stdio.h>

int isprime(int n)

{ for(int i=2; i*i<=n; i++)

    if(n%i==0)return 0;

  return n>1;

}

int main()

{ int i,n,s,s1,n1,s2,a[200];

  s=s1=s2=n=n1=0;

  while((scanf("%d",&a[n]))==1)s+=a[n++];

  float av=(float)s/n;

  for(i=0; i<n; i++)

    a[i]>=av?s1+=a[i],n1++:s2+=a[i];

  printf("总人数=%d\t平均分=%.2f\n",n,av);

  printf("达到平均分的人数=%d\t平均分=%.2f\n",n1,(float)s1/n1);

  printf("未达平均分的人数=%d\t平均分=%.2f\n",n-n1,(float)s2/(n-n1));

  return 0;

}

追问
请问这个是怎么回事 F:\c语言\3\main.c|27|error: lvalue required as left operand of assignment|
追答
请仔细对照,你抄错了。重点检查等号的左边
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式