鱼C论坛

 找回密码
 立即注册
查看: 1191|回复: 3

[已解决]为什么不能真确运行题目:.从若干个数据元素中找出大于某一个数的所有数据

[复制链接]
发表于 2023-5-20 14:54:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#define N 7   //定义符号常量N
void main()
{
        double w[N] = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 }; //定义一个数组w并赋初值
        double a[N], x;
        int i, count = 0;
        printf("%s", "输入一个实数:");    //也可写成:printf("输入一个实数:”)
        scanf_s("%1f", &x);
        for (i = 0; i < N; i++)
                /*请在下面空白处补充程序*/

        {
                if (w[i] > x)
                {
                        a[count] = w[i];
                        count++;
                }
        }
        printf("count=%d\n", count);

                /*请在上面面空白处补充程序*/
        for (i = 0; i < count; i++)  //输出所有大于x的数组元素
        {
                printf("%.1lf\n", a[i]);
                printf("\n");
        }
}
最佳答案
2023-5-20 14:55:13
问题:为什么无法正确运行这个程序?

答案:这个程序有两个问题。

首先,scanf_s函数的格式化字符串应该是"%lf"而不是"%1f",因为我们要读取一个double类型的变量x。

其次,在第二个for循环中,printf("\n")应该在循环外面,否则每次循环都会输出一个空行。

以下是修改后的代码:
#include <stdio.h>#define N 7void main(){    double w[N] = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 };    double a[N], x;    int i, count = 0;    printf("%s", "输入一个实数:");    scanf_s("%lf", &x);    for (i = 0; i < N; i++)    {        if (w[ i] > x)        {            a[count] = w[ i];            count++;        }    }    printf("count=%d\n", count);    for (i = 0; i < count; i++)    {        printf("%.1lf\n", a[ i]);    }    printf("\n");}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 14:55:13 | 显示全部楼层    本楼为最佳答案   
问题:为什么无法正确运行这个程序?

答案:这个程序有两个问题。

首先,scanf_s函数的格式化字符串应该是"%lf"而不是"%1f",因为我们要读取一个double类型的变量x。

其次,在第二个for循环中,printf("\n")应该在循环外面,否则每次循环都会输出一个空行。

以下是修改后的代码:
#include <stdio.h>#define N 7void main(){    double w[N] = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 };    double a[N], x;    int i, count = 0;    printf("%s", "输入一个实数:");    scanf_s("%lf", &x);    for (i = 0; i < N; i++)    {        if (w[ i] > x)        {            a[count] = w[ i];            count++;        }    }    printf("count=%d\n", count);    for (i = 0; i < count; i++)    {        printf("%.1lf\n", a[ i]);    }    printf("\n");}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 14:55:52 | 显示全部楼层
代码中有一处错误,导致程序无法正确运行。第10行的scanf_s函数中,格式控制字符串中写错了数字1,应该是字母l,即应该为"%lf",表示读入一个双精度浮点数。修改后的代码如下:
#include <stdio.h>
#define N 7   //定义符号常量N
void main()
{
    double w[N] = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 }; //定义一个数组w并赋初值
    double a[N], x;
    int i, count = 0;
    printf("%s", "输入一个实数:");    //也可写成:printf("输入一个实数:”)
    scanf_s("%lf", &x);
    for (i = 0; i < N; i++)
    {
        if (w[i] > x)
        {
            a[count] = w[i];
            count++;
        }
    }
    printf("count=%d\n", count);
    for (i = 0; i < count; i++)  //输出所有大于x的数组元素
    {
        printf("%.1lf\n", a[i]);
        printf("\n");
    }
}
修改后可以正确运行,输入一个实数后,将输出大于这个数的所有数据元素,并输出元素个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 15:12:29 | 显示全部楼层
这段代码能够正确编译和运行,但在输入实数后,程序只输出了符合要求的数据元素个数 count,而没有输出所有大于该实数的数据元素。

要输出所有符合条件的数字,在下面空白处的循环体内应该加上一个语句来输出符合条件的数组元素,如下所示:
for (i = 0; i < N; i++) {
    if (w[i] > x) {
        a[count] = w[i];
        count++;
        printf("%.1lf\n", w[i]); // 添加输出语句
    }
}
这样,在找出符合条件的数组元素后,程序就会将它们逐个输出,并且在最后输出元素个数 count。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表