C语言编程

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天对应一根蜡烛小图,每天股票价格从开盘到收盘走完一天,在... 股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。

以日K线为例,每天对应一根蜡烛小图,每天股票价格从开盘到收盘走完一天,在一天对应的蜡烛图中,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。

如果收盘价格低于开盘价格,表示为“实心蓝白蜡烛”;
如果收盘价高于开盘价,表示为“空心红蜡烛”;
如果开盘价等于收盘价,则为“十字红蜡烛”;
如果最低价格比开盘价或收盘价低,称为“有下影线”;
如果最高价比收盘价开盘价高,称为“有上影线”。

请编程序,根据给定的四个价格组合,输出当日的蜡烛是一根什么样的蜡烛。

输入输出:
第一行输入案例数T
每一行输入股票的一组四个价格组合(四个小数):开盘价, 收盘价, 最高价, 最低价。

输出当日蜡烛图的名称:
有上影线/有下影线/有上下影线/无影线的实心蓝白蜡烛/空心红蜡烛/十字红蜡烛

样例输入:
3
5.110 5.105 5.250 5.100
5.110 5.110 5.110 5.110
5.110 5.120 5.120 5.100
输出:
有上下影线的实心蓝白蜡烛
无影线的十字红蜡烛
有下影线的空心红蜡烛

以下为源代码
#include <stdio.h>
#include "genlib.h"
#include "simpio.h"
int main(void){
int loop,m,n,ri,s[10];
double a,b,c,d;
scanf("%d",&loop);
for(ri=1;ri<=loop;ri++){
scanf("%f""%f""%f""%f",&a,&b,&c,&d);

if((c>a && c>b) && (d<a || d<b)) printf("有上下影线的");
else{if(c>a && c>b) printf("有上影线的");
else if(d<a || d<b) printf("有下影线的");
else printf("无影线的");
}

if(a<b) printf("空心红蜡烛");
else if(a>b) printf("实心蓝白蜡烛");
else printf("十字红蜡烛");
printf("\n");

}
}

为什么运行时永远是“十字红蜡烛”?
展开
 我来答
匿名用户
2014-12-18
展开全部

首先是scanf读入double要用%lf

其次if else嵌套太多,一定要用花括号{},避免自己搞混

再次,变量名要有意义些

#include <stdio.h>
//#include "genlib.h"
//#include "simpio.h"
int main(void) {
 int loopCount, i;     //后面这些变量没有被用到啊 m, n,  s[10];
 double open, close, max, min;  //给变量起有意义的名字
 double upper, lower;    //箱体的上下边界
 scanf("%d", &loopCount);
 for (i = 0; i < loopCount; i++) { //请遵循c语言从0开始的惯例
  scanf("%lf %lf %lf %lf", &open, &close, &max, &min);
  //判断箱体的上下边界
  if (open > close) {
   upper = open;
   lower = close;
  } else {
   upper = close;
   lower = open;
  }
  //判断有无影线   
  if ((max <= upper) && (min >= lower)) {
   printf("无");
  } else {
   printf("有");
   if (max > upper) {
    printf("上");
   }
   if (min < lower) {
    printf("下");
   }
  }
  printf("影线的");
  //判断是"空心红","实心蓝白"还是"十字红"
  if (open < close) {
   printf("空心红");
  } else {
   if (open > close) {
    printf("实心蓝白");
   } else {// open == close
    printf("十字红");
   }
  }
  printf("蜡烛\n");
 }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
推荐于2016-08-06 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6494万
展开全部
#include <stdio.h>

int main(void){ 
int loop,m,n,ri,s[10];
double a,b,c,d;

scanf("%d",&loop);
for(ri=1;ri<=loop;ri++){
int up=0,down=0; //加两个变量,便于理解
scanf("%lf%lf%lf%lf",&a,&b,&c,&d); //double用%lf longfloat
if(c>a && c>b) up=1;
if(d<a || d<b) down=1;
if( up && down ) printf("有上下影线的");
else{
if ( up ) printf("有上影线的");
else if (down)  printf("有下影线的");
else printf("无影线的"); 
}

if(a<b) printf("空心红蜡烛");
else if(a>b) printf("实心蓝白蜡烛");
else printf("十字红蜡烛");
printf("\n");
}
}
更多追问追答
追问
编译时C:\Users\1\Desktop\testASC_for5\collect2.exe	[Error] ld returned 1 exit status
追答
你是不是有程序在运行没有关闭啊!
关闭所有在执行的程序,然后重新编译运行,还不行,就上图
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式