史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   c++作業請幫幫我 (http://forum.slime.com.tw/thread221778.html)

vp6662 2007-12-08 04:58 PM

c++作業請幫幫我
 
計程車跳錶,前二公里80元,
偶後每0.5公里加5元
超過30公里以後再打八折
請寫一程式,讓使用者輸入金額
計算他可以坐多遠的車
(用到while ,if )

猜謎人 2007-12-09 11:47 AM

語法:

#include<stdio.h>
#include<stdlib.h>
int main(){
    float money,mile;
    printf("請輸入你的車資:\n");
    scanf("%f",money);
    if(money<80){printf("抱歉!你的車資不夠:\n");}
    if(money=80){
                mile=2;
                printf("你可以坐公里%f",mile);}
    if(money >80){
                mile=2;
                money=money-80;
                while(money<=0){
                                money=money-5;
                                mile=mile+0.5;
                                if(mile>30){
                                            money=money-4;
                                            mile=mile+0.5;}}}       
printf("你可以坐公里%f",mile);
system("PAUSE");
return 0;
}

我的邏輯如此
但不知如何不能編譯
可否會的人看一下

a19870504 2007-12-10 12:15 PM

小弟的寫法 很新手 ="=
 
#include <iostream>
using namespace std;

int main()
{
float n; float m=2;
cout <<"請輸入搭乘預算:\n";
cin >> n ;

while(((((n*1.25)-80)/5)*0.5)+m >= 30 ) //判斷預算是否可達30公里
for( n = n*1.25-80; n > 0 ; n-=5){
m += 0.5;} //以打八折的金額去計算基本上跟下面的一樣

n -= 80 ;
for( n; n > 0; n -= 5 ){ //預算沒有到達30公里的loop
m += 0.5;
}

cout <<"您的預算只可以搭乘"<< m <<"公里\n ";
return 0;
}


小弟用途手只驗算了三個情況
一個是剛剛好跑了30公里要多少錢 以及160塊跟100塊的情況
如果有錯請糾正一下 因為已經翹課了
還沒去想給零錢時要怎麼辦 且總感覺寫的還不夠好 敢去上課先~

mini 2007-12-10 03:43 PM

遇到這種問題
先把變數設定好
錢是 N
跑幾公里是 x
計價單位 y
每單位花多少錢 n
暫存變數 tmp

再來是先寫外圈
while (N>0) {
 x=x+y;
 N=N-n;
}

接著再在圈內寫條件及改寫
語法:

if (N>=80) { //必須至少有 80元

  /* 前面是2公里內,每公里 80元,題指個人是這麼解釋,如有誤那這一段就要改了*/
  y=1;
  n=80;
  while (N>0) {
    x=x+y;
    if (x>2) {
      x=2;
      break; //離開 while 迴圈
      }

    //試算是否可以跑下一個單位
      tmp=N-n;
    if (tmp>0) {
      N=tmp; //扣款成立
      }else {
      x=x-y; //錢變負的,之前跑得y公里要扣回
          break;
    }
  } //第一段的 while迴圈結尾

  if (x>=2) { //需跑到2公里才可套用以下算式

      /* 後面是以每0.5公里 加5元來算,*/
    y=0.5;
    n=5;
    while (N>0) {
      x=x+y;
      //試算是否可以跑下一個單位
        tmp=N-n;
      if (tmp>0) {
        N=tmp; //扣款成立
          }else {
        x=x-y; //錢變負的,之前跑得y公里要扣回
              打折副程式;
        break;
      }

      if (打折副程式==1) break;
    }
  } //第二段的 while迴圈結尾
}

int 打折副程式()
{
  if (x>=30) {

    //試算 是否還有錢可以跑 0.5公里
      tmp=N*0.8; //八折
        if ((N-tmp)<5) { //至少要剩五元
            N=tmp;
        打折副程式=1;
    }
  }
}


猜謎人 2007-12-10 04:29 PM

請問mini大
我的程式為什麼無法編譯?
可否告知?下次才可注意!

a19870504 2007-12-10 05:22 PM

看來小弟功力還是很淺 沒有辦法像各位大哥那樣很有條理的寫出來 真是慚愧 :on_51:

猜謎人 2007-12-10 06:37 PM

引用:

作者: a19870504 (文章 1857882)
看來小弟功力還是很淺 沒有辦法像各位大哥那樣很有條理的寫出來 真是慚愧 :on_51:

我無法跑,還不知原因:on_74:

a19870504 2007-12-10 07:51 PM

編譯的時後不是會有錯誤訊息出來嗎?? 從那下手看看

再看自己設的變數或是迴圈哪裡有分號沒有加到 或是變數設定錯誤

我發現我每次寫完不能編譯幾乎都是因為少了分號或是變數設錯

mini 2007-12-10 08:13 PM

引用:

作者: 猜謎人 (文章 1857860)
請問mini大
我的程式為什麼無法編譯?
可否告知?下次才可注意!

個人不常寫 c/c++
填到編譯器可以發現
scanf("%f",money);
應該寫成
scanf("%f",&money);

scanf 要賦值 需要用 &號 以記憶體位址方式
(這是規定沒得商量,除非你用 指標變數,才可省略 &)

再來還有一個錯誤
if(money=80)
比對的話要用兩個 =號
if(money==80)

猜謎人 2007-12-10 08:17 PM

引用:

作者: mini (文章 1857944)
個人不常寫 c/c++
填到編譯器可以發現
scanf("%f",money);
應該寫成
scanf("%f",&money);

scanf 要賦值 需要用 &號 以記憶體位址方式
(這是規定沒得商量,除非你用 指標變數,才可省略 &)

再來還有一個錯誤
if(money=80)
比對的話要用兩個 =號
if(money==80)

對啊!沒想到
感謝大大教導:on_28:

猜謎人 2007-12-10 08:23 PM

還是一樣

他無法編譯的原因是
permission denied
ld returned 1 exit status

heavenheaven 2007-12-11 07:07 AM

猜大是用Dev-C++來寫的嗎??
預設開的檔是要用C++來寫喔
看猜大寫的語法是C
在下是用File -> New Project,再選C
貼上猜大的內容
Compile後再Run是ok的

猜謎人 2007-12-11 10:15 AM

引用:

作者: heavenheaven (文章 1858150)
猜大是用Dev-C++來寫的嗎??
預設開的檔是要用C++來寫喔
看猜大寫的語法是C
在下是用File -> New Project,再選C
貼上猜大的內容
Compile後再Run是ok的

了解啦
感謝天堂大的教導
:on_28::on_28::on_28:


所有時間均為台北時間。現在的時間是 01:32 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1