为什么不能真确运行题目:.从若干个数据元素中找出大于某一个数的所有数据
#include <stdio.h>#define N 7 //定义符号常量N
void main()
{
double w = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 }; //定义一个数组w并赋初值
double a, x;
int i, count = 0;
printf("%s", "输入一个实数:"); //也可写成:printf("输入一个实数:”)
scanf_s("%1f", &x);
for (i = 0; i < N; i++)
/*请在下面空白处补充程序*/
{
if (w > x)
{
a = w;
count++;
}
}
printf("count=%d\n", count);
/*请在上面面空白处补充程序*/
for (i = 0; i < count; i++)//输出所有大于x的数组元素
{
printf("%.1lf\n", a);
printf("\n");
}
}
问题:为什么无法正确运行这个程序?
答案:这个程序有两个问题。
首先,scanf_s函数的格式化字符串应该是"%lf"而不是"%1f",因为我们要读取一个double类型的变量x。
其次,在第二个for循环中,printf("\n")应该在循环外面,否则每次循环都会输出一个空行。
以下是修改后的代码:
#include <stdio.h>
#define N 7
void main()
{
double w = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 };
double a, x;
int i, count = 0;
printf("%s", "输入一个实数:");
scanf_s("%lf", &x);
for (i = 0; i < N; i++)
{
if (w[ i] > x)
{
a = w[ i];
count++;
}
}
printf("count=%d\n", count);
for (i = 0; i < count; i++)
{
printf("%.1lf\n", a[ i]);
}
printf("\n");
}
代码中有一处错误,导致程序无法正确运行。第10行的scanf_s函数中,格式控制字符串中写错了数字1,应该是字母l,即应该为"%lf",表示读入一个双精度浮点数。修改后的代码如下:
#include <stdio.h>
#define N 7 //定义符号常量N
void main()
{
double w = { 2.6,7.3,4.2,5.4,6.2,3.8,1.4 }; //定义一个数组w并赋初值
double a, x;
int i, count = 0;
printf("%s", "输入一个实数:"); //也可写成:printf("输入一个实数:”)
scanf_s("%lf", &x);
for (i = 0; i < N; i++)
{
if (w > x)
{
a = w;
count++;
}
}
printf("count=%d\n", count);
for (i = 0; i < count; i++)//输出所有大于x的数组元素
{
printf("%.1lf\n", a);
printf("\n");
}
}
修改后可以正确运行,输入一个实数后,将输出大于这个数的所有数据元素,并输出元素个数。 这段代码能够正确编译和运行,但在输入实数后,程序只输出了符合要求的数据元素个数 count,而没有输出所有大于该实数的数据元素。
要输出所有符合条件的数字,在下面空白处的循环体内应该加上一个语句来输出符合条件的数组元素,如下所示:
for (i = 0; i < N; i++) {
if (w > x) {
a = w;
count++;
printf("%.1lf\n", w); // 添加输出语句
}
}
这样,在找出符合条件的数组元素后,程序就会将它们逐个输出,并且在最后输出元素个数 count。
页:
[1]