一个计算c语言下的if语句的练习题,提示数据转换出错,打括号出错,为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个计算c语言下的if语句的练习题,提示数据转换出错,打括号出错,为啥?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int daikei(int a,int b,int h);
float circle(float r);

void main()

float a=10,b=15,h=20,f;
float s,r=3.0;
printf("1:daikei;!1:circle \n");
scanf("%d",&f);
if(f==1)

s=daikei(a,b,h);
printf("daikei s=%d\n",s);

else

s=circle(r);
printf("circle s=%f\n",s);



int daikei(int a,int b,int h)

int s;
s=(a+b)*h/2;
return s;

float circle(float r)

float s;
float pi=3.1416;
s=r*r*pi;
return s;


>------ ビルド开始: プロジェクト: if_else.c, 构成: Debug Win32 ------
1> test2.c
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(14): warning C4244: '関数' : 'float' から 'int' への変换です。データが失われる可能性があります。
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(14): warning C4244: '関数' : 'float' から 'int' への変换です。データが失われる可能性があります。
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(14): warning C4244: '関数' : 'float' から 'int' への変换です。データが失われる可能性があります。
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(14): warning C4244: '=' : 'int' から 'float' への変换です。データが失われる可能性があります。
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(27): error C2449: '' を见つけました (関数のヘッダーがないかもしれません)。
1>g:\oshanlab\desktop\c++\if_else.c\if_else.c\test2.c(31): error C2059: 构文エラー : ''
========== ビルド: 0 正常终了、1 失败、0 更新不要、0 スキップ ==========

参考技术A 这句错了 scanf("%d",&f);
%d用来表示 int, 你的f是float, 应该写 scanf("%f",&f);
格式错误读到的数据当然会错.

错了两次
参考技术B 你这个怎么是日语啊,看不懂,不过看你代码应该是函数daikei()传参的时候出问题吧。你参数定义的是int型的,而你穿进去的是float型的,可以试下强制转换 参考技术C 我在我这里编译通过了。你看看是不是由于编译器的原因,或许你可以试试把main函数改为int main试试 。然后你最好是把你的函数形参的定义和实参类型对应。追问

但是圆的面积我想用float,所以不能单纯把main函数更改吧。我按廖北伯 的方法
scanf("%d",&f);改为了scanf("%f",&f);
并将if语句中s=daikei(a,b,h);改为了s=(float)daikei(a,b,h);
此时关于数据类型的警告没有了,但是依然大括号问题:
编译器问题是什么意思,软件本身的问题吗?

追答

有的编译器会默认main是int型的。例如devc++。加上int试试不行的话再找别的原因

本回答被提问者采纳
参考技术D 我复制过来进行编译也没有问题。
楼主,你下面那一排是日语吗?我看不懂,能换成中文吗?
第5个回答  2012-07-09 日语是什么情况

Shell脚本练习----条件语句(if case语句的应用)

**1. 检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

  1. 提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于13秒的进入选拔赛,大于13秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
  2. 用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
  3. 提示用户输入内容,使用if 语句判断输入的内容是否为整数。
  4. 根据上一题再判断输入的内容是奇数还是偶数。
  5. 用if 语句判断主机是否存活
  6. 用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 start|stop|status|restart”。**

1. 检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

#!/bin/bash
if [ -f ~/test.sh ];then
    echo "test.sh文件存在"
  if [ -x ~/test.sh ];then
    echo "test.sh文件有执行权限"
  else
    echo "test.sh文件没有执行权限"
fi
  else
    echo "test.sh文件不存在"
fi

2. 提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于13秒的进入选拔赛,大于13秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

#!/bin/bash
read -p "请输入你100米赛跑的秒数(整数):" time
  if [ $time -gt 0 -a $time -le 13 ];then
    echo "恭喜你进入选拔赛"
read -p "请输入你的性别(男或女):" sex
  if [ $sex = 男 ];then
    echo "恭喜你进入男生组"
  elif [ $sex = 女 ];then
    echo "恭喜你进入女生组"
  else
    echo "输入有误,请重新输入"
fi
  elif [ $time -gt 13 ];then
    echo "抱歉,你被淘汰了"
  else
    echo "输入有误,请重新输入"
fi

3. 用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

#!/bin/bash
read -p "请输入压缩包完整名称:" name
case $name in
*tar.gz)
  echo "开始解压gz格式tar包"
    tar zxvf $name -C /opt
  echo "解压完成"
 ;;
*tar.bz2)
  echo "开始解压bz2格式tar包"
    tar jxvf $name -C /opt
  echo "解压完成"
 ;;
*)
  echo "格式有误"
esac

4. 提示用户输入内容,使用if 语句判断输入的内容是否为整数。然后在判断是奇数还是偶数。(0是偶数)

#!/bin/bash
read -p "输入数字:" num
if [ $num == 0 ];then
  echo "0既是整数又是偶数"
  else
    expr $num + 1 &> /dev/null
  if [ $? =  0 ];then
    echo "输入的是整数"
      if [ $[$num % 2] = 0 ];then
        echo "输入的是偶数"
      else
        echo "输入的是奇数"
      fi
else
    echo "输入的不是整数,请重新输入"
  fi
fi

有修改,以文字为主,图片没及时换!

6. 用if 语句判断主机是否存活

#!/bin/bash
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null
  if [ $? -eq 0 ];then
    echo "host is online"
  else
    echo "host is offline"
fi

7. 用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 start|stop|status|restart”

#!/bin/bash
read -p "输入start|stop|status|restart:来管理防火墙:" firewalld
case $firewalld in
"start")
  systemctl start firewalld
  echo "防火墙已开启"
;;
"stop")
  systemctl stop firewalld
  echo "防火墙已关闭" 
;;
"restart")
  systemctl restart firewalld
  echo "防火墙已重启"
;;
"status")
  systemctl status firewalld
  echo "防火墙状态查看"
;;
*)
  echo "用法:$0start|stop|status|restart"
;;
esac

以上是关于一个计算c语言下的if语句的练习题,提示数据转换出错,打括号出错,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

C语言if语句练习题

C语言if语句练习题

转换器练习:跳过 if 和 else if 语句 [关闭]

大一c语言 小学生算数出题系统 的设计与实现?

c语言入门教程–-9循环与条件语句习题与总结

一元二次方程 C语言IF语句嵌套问题