Board logo

主題: [C&C++] [問題]vc++的問題 已放上那3題MFC跟其他資料 [打印本頁]

發表人: h80053    時間: 2006-3-16 12:36 PM     主題: [問題]vc++的問題 已放上那3題MFC跟其他資料

請問大家如何用VC++用螢幕顯示出下面的畫面

1
2  2
3  3  3
4  4  4  4
5  5  5  5



我只知道用
COUT<<...................
COUT<<...................
COUT<<...................
COUT<<...................
COUT<<...................

可是老師說不能用那種寫法@@
所以想問大家能否用FOR IF這些指令打出來
謝謝

======================================================

以放入

http://webhd.xuite.net/main.php?


帳號 b0986025055  密0937792834

請自取

[h80053 在  2006-6-22 06:01 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-16 01:24 PM

可能寫得不是很好看

for ( int number = 1; number <= 5; number++ )
{
        for ( int counter = 0; counter < number; counter++ )       
        {
                if ( counter < 4 )
                {
                        cout << number << " ";
                }
        }
        cout << endl;
}
發表人: h80053    時間: 2006-3-16 05:18 PM

謝謝你  送花
發表人: h80053    時間: 2006-3-16 05:26 PM

大大實在太強了能否解釋一下for ( int counter = 0; counter < number; counter++ )這段因為我不清楚這樣寫怎麼會變成

1
2  2
3  3  3
4  4  4  4
5  5  5  5

謝謝  (語言不行@@)
發表人: Johnny Brove    時間: 2006-3-16 10:41 PM

代表在第"number"行會印出"number"個數字

counter從0到(number-1)

而裡面的if則是為了限定次數在4次以下
發表人: h80053    時間: 2006-3-17 12:56 PM

謝謝了 研究完不會在問
發表人: h80053    時間: 2006-3-17 05:04 PM

#include<iostream.h>


void main()

{
int a,b;
for(a=1;a<=5;a++)
{
    for(b=2;b<=5;b++)

cout<<a<<'\n'<<b<<endl;
   
   

}


我是這樣寫,我想說這樣能變成


1
2  2
3  3
4  4  
5  5  


但是結果是
1
2
1
3
1
.
.
.
.
.   請問是哪裡有問題 謝謝
發表人: Johnny Brove    時間: 2006-3-18 05:43 PM

for(b=2;b<=5;b++)

cout<<a<<'\n'<<b<<endl;

這代表不管你之前的a是多少

你的b從2跑到5共4次

而你的cout則是先跑出a再斷行

接著跑出b又再斷行

於是跑出:

a1
2
a1
3
a1
4
a1
5
a2
2
a2
3
a2
4
a2
5
以此類推

要寫成
1
2 2
3 3
4 4
5 5

我的作法是把a當行數,b當次數

所以在a跑完一圈之前斷行就夠了

而b則跟著a跑,在第幾行,他就跑第a個數字

[Johnny Brove 在 2006-3-18 05:55 PM 作了最後編輯]
發表人: h80053    時間: 2006-3-19 04:20 PM

#include<iostream.h>
#include<math.h>

void main()
{   int i;
        for(i=1;i<=20;i++)
    cout<<"一到一百間五的倍數"<<i*5<<endl;
}


這是我寫的1到100間五的倍數的程式
我執行後發現會這樣
一到一百間五的倍數5
一到一百間五的倍數10
...................  15
..................  20
..................... 25


請問如果要讓文字只出現一次的話是先將i*5 放在COUT的最前面嗎?

還有謝謝Johnny Brove  不送花不行
而b則跟著a跑,在第幾行,他就跑第a個數字??

[h80053 在 2006-3-19 04:23 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-19 04:28 PM

把cout<<"一到一百間五的倍數"拿到for迴圈外面

而b則跟著a跑,在第幾行,他就跑第a個數字??:

即第1行跑出來的是1

第2行是2,以此類推
發表人: h80053    時間: 2006-3-19 04:38 PM

謝謝拉
發表人: h80053    時間: 2006-3-21 07:07 PM

寫一個程式,重複以cin輸入整數,並成以mul變數中,當輸入為0時則結束


請問大大這要怎麼打?THANKS
發表人: Johnny Brove    時間: 2006-3-21 11:21 PM

for ( int multiple = 1; multiple != 0; cout << mul )
{
        cin >> multiple;
        mul *= multiple;
}
發表人: h80053    時間: 2006-3-23 12:02 PM

multiple != 0  中的 ! 是指?
因為我們用FOR的話是FOR(變數=數值:數值<=數值;數值++)
因此
for ( int multiple = 1; multiple != 0; cout << mul )
我看不懂@@


另外void main()   這是做什麼的??




先謝謝大大拉 送花

[h80053 在 2006-3-23 12:04 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-23 12:32 PM

!=是"不等於"的意思

void main()則是declare"不傳回value"的主函數
發表人: h80053    時間: 2006-3-23 05:34 PM

for ( int multiple = 1; multiple != 0; cout << mul )
我看不懂@@
發表人: Johnny Brove    時間: 2006-3-23 06:03 PM

在multiple不等於零的情況下

會一直重複進行for迴圈

並且每跑一次會執行一次cout << mul
發表人: h80053    時間: 2006-3-23 07:27 PM

原來FOR也能這樣用 現在才知道=.=



1.試設計一程式可以輸入十個同學的姓名座號成績 輸入完後可以依 A座號 B分數高低 二種格式輸出

    以下是我寫的但是問題好像很多  希望大大能指導一下看缺少了什麼或是問題
#include<iostream.h>
void main()
{  
int d,e,f;
int a[10],b[10];
    char c[10];

    cout<<"請輸入座號"<<f<<endl;
    cin >>a[d]>>endl;
   
cout<<"請輸入姓名"<<endl;
     cin >>c[e]>>endl;
   
cout<<"請輸入分數"<<endl;
     cin >>b[f]>>endl;
    for(d=0;d<=10;d++)
    cout<<a[d]<<"\n"<<c[e]<<"\n"<<b[f]<<endl;


   謝謝
發表人: Johnny Brove    時間: 2006-3-23 08:20 PM

首先在declaration方面,分數和座號可以只需要一個Number&Score[2][10]的array

然後在姓名方面最好不要用char(因為只能讀入一個字元)

可以使用字串型態

#include <string>
using std::string;
using std::getline;

string Name[10];

getline( cin, Name[n] )

配合for迴圈跑十次(n從0到9)
發表人: h80053    時間: 2006-3-24 04:18 PM

所以說int d,e,f;
可以不用定義嘛??
字串我們還沒教到      CHAR那行有問題嘛??

FOR 是指讓姓名座號分數都跑十次嘛??
都寫for(d=0;d<=10;d++) 這樣

先謝過
發表人: Johnny Brove    時間: 2006-3-24 08:06 PM

char當然不好啦

它一次只能存入一個字元啊(例如"G"或"5"等)

至於for寫一個就好啦:

for ( int StudentNum = 0; StudentNum < 10; StudentNum++ )
{
         cin >> Name[ StudentNum ];
         cin >> Number&Score[ 0 ][ StudentNum ];
         cin >> Number&Score[ 1 ][ StudentNum ];
}
發表人: h80053    時間: 2006-3-26 04:24 PM

#include<iostream.h>
void main()
{  
    int d,e,f;
    int a[10][2];
    char c[10];
    for(a=0;a<=10;a++)
          cout<<"請輸入座號"<<endl;
       cin>>a[0]>>endl;
   
       cout<<"請輸入姓名"<<endl;
        cin>>c>>endl;
   
       cout<<"請輸入分數"<<endl;
       cin>>[1]>>endl;
   
       cout<<a[0]<<"\n"<<c<<"\n"<<a[1]<<endl;
       


}



修改後,還是有錯誤以下是C++所顯示的錯誤

C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2440: '=' : cannot convert from 'const int' to 'int [10][2]'
        There are no conversions to array types, although there are conversions to references or pointers to arrays
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2446: '<=' : no conversion from 'const int' to 'int (*)[2]'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2040: '<=' : 'int [10][2]' differs in levels of indirection from 'const int'
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2105: '++' needs l-value
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(9) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'int [2]' (or there is no acceptable conversion)
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(15) : error C2059: syntax error : '['
Error executing cl.exe.



[ ] 這個東西好像不能被C++接受??

謝謝
發表人: Johnny Brove    時間: 2006-3-26 04:40 PM

首先,for指令必須用{}把敘述包起來

你這樣只會重複執行cout<<"請輸入座號"<<endl;

還有int a[10]的話,裡面數字是從0~9,不能跑到10

接著,a[][]是個二元array,不能cin>>a[N]這樣用

最後,你要讓它跑loop,需要把variable弄到[]裡面
發表人: h80053    時間: 2006-3-26 07:30 PM

修改一下有好一點但是只有跑出       請輸入座號輸入10次後  才跑出請輸入姓名      謝謝

#include<iostream.h>
#include<conio.h>
void main()

{  
        int d,e,f;
        int a[10],b[10];
        char c[10];

               
          
          cout<<"請輸入座號"<<endl;
          for(d=0;d<=9;d++)   //設定a[10]時位址為0到9
                          cin>>a[d];   

          cout<<"請輸入姓名"<<endl;
          for(e=0;e<=9;e++)
                          cin>>c[e];

        cout<<"請輸入分數"<<endl;
         for(f=0;f<=9;f++)
                         cin>>b[f];   
            

        cout<<a[d]<<"\n"<<c[e]<<"\n"<<b[f]<<endl;  
          

   

       
   
   

}

[h80053 在 2006-3-26 07:44 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-26 11:13 PM

把array中的variable都設定成一樣

全部只需要用一個for就好啦= =|||

然後設定其scope包含住你想要重複的地方
發表人: h80053    時間: 2006-3-27 08:49 AM

#include<iostream.h>
#include<conio.h>
void main()

{  
        int d;
        int a[10],b[10];
        char c[10];

                for(d=0;d<=9;d++)    //設定a[10]時位址為0到9

                {
                          
              cout<<"請輸入座號"<<endl;
                        
                           cin>>a[d];   
                       
               cout<<"請輸入姓名"<<endl;
                       
                           cin>>c[d];  

               cout<<"請輸入分數"<<endl;
                 
                           cin>>b[d];     }
            

                  cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;  
                       
                       
                                                                 
   
       
   
   

}

改過的結果,請問一下如果要 A座號 B分數高低 二種格式輸出??
現在已經可以正常輸入了              謝謝
發表人: Johnny Brove    時間: 2006-3-27 04:04 PM

使用bubble sort:

紅字的部分是表示當a[counter+1] < a[counter]

則兩個value會swap

for ( int counter = 0, limit = 9; counter < 9; counter++, limit-- )
        {               
                for ( int counter = 0; counter < limit; counter++ )
                {
                        if ( a[counter+1] < a[counter] )
                        {
                                int temp = a[counter+1];
                                a[counter+1] = a[counter];
                                a[counter] = temp;
                        }
       
                }
        }
發表人: h80053    時間: 2006-3-28 06:32 PM

如果這樣寫  照號碼排
#include<iostream.h>
#include<conio.h>
void main()

{  
        int d,e;
        int a[10],b[10];
        char c[10];

                for(d=0;d<=9;d++)    //設定a[10]時位址為0到9

                {
                           
              cout<<"請輸入座號"<<endl;
                        
                           cin>>a[d];   
                        
               cout<<"請輸入姓名"<<endl;
                       
                           cin>>c[d];  

               cout<<"請輸入分數"<<endl;
                 
                           cin>>b[d];     }
            

                  cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;

                   for(e=0;e<9;e++)
                   if(a[e]<a[d])
                   cout<<a[e]<<[d]<<endl;
              

}

[h80053 在 2006-3-28 06:38 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-28 06:47 PM

這樣不行啊

如果a[e]>=a[d]不就沒東西跑出來了?

還是先從排序下手吧

另外在用bubble sort時,記得要把a[],b[],c[]都一起swap

我寫的那個只有swap一個array而已
發表人: h80053    時間: 2006-3-28 07:06 PM

如果要照號碼排列的話,我已經在一開始設了for(d=0;d<=9;d++) 讓{}裡面東西跑10次.
要照號碼的話是要在內洄圈外面再多加上一個FOR的敘述嗎


                                  int d,e;
                                  int a[10],b[10];
                                  char c[10];

                                            for(d=0;d<=9;d++)  
         這裡 在多加一個=>        for(                       )


                     謝謝
發表人: Johnny Brove    時間: 2006-3-28 11:11 PM

for(d=0;d<=9;d++)只是輸入啊

要照號碼排列的話

我之前不是寫了一個bubble sort的example了嗎?

主要是兩兩比較,然後不斷的把大的(或小的)往上推
發表人: h80053    時間: 2006-3-29 06:27 AM

for ( int counter = 0, limit = 9; counter < 9; counter++, limit-- )
        {               
                for ( int counter = 0; counter < limit; counter++ )
                {
                        if ( a[counter+1] < a[counter] )
                        {
                                int temp = a[counter+1];
                                a[counter+1] = a[counter];
                                a[counter] = temp;
                        }        
                }
        }

counter是指??l  imit是指??

[h80053 在 2006-3-29 06:29 AM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-29 08:08 AM

算了

你把它改成這樣就好了

for ( int counter = 0; counter < 9; counter++ )
        {               
                for ( int counter = 0; counter < 9; counter++ )

如同我之前講的,就是一直把較大的往上疊
發表人: h80053    時間: 2006-3-29 01:41 PM

#include<iostream.h>
void main()
{  
int d,e=10,f,g;
int a[10],b[10];
    char c[10];
for(d=0;d<=9;d++)
{   cout<<"請輸入座號"<<endl;
    cin >>a[d];
   
cout<<"請輸入姓名"<<endl;
     cin >>c[d];
   
cout<<"請輸入分數"<<endl;
     cin >>b[d];
}





   
    cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;

  for(d=0;d<e-1;d++)
          for(f=d;f<e;f++)
   if(a[d]>a[f])
   {     g=a[d];
         a[d]=a[f];
                 a[f]=g;
                 }


   cout<<"座號"<<"姓名"<<"分數";
    for(d=0;d<e;d++)
                cout<<a[d]<<c[d]<<b[d];







}
發表人: Johnny Brove    時間: 2006-3-29 06:46 PM

for ( d = 0; d < e - 1; d++ )
{
       for ( f = d; f < e; f++ )
       {   
              if ( a[d] > a[f] )
              {
                     g = a[d];
                     a[d] = a[f];
                     a[f] = g;
              }
       }
}

這樣你一次只會交換a[]

其他的當然不會動啦

另外,請注意code的排版

這樣子寫真的很不好看
發表人: h80053    時間: 2006-3-29 08:17 PM

如果說要讓此程式一成績高低跑的話

還要加什麼CODE??   

氣泡排序中的內洄圈外洄圈能吼請大大指導一下
看的花花的



謝謝

[h80053 在 2006-3-29 08:21 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-29 08:44 PM

外洄圈只是跑n次內迴圈罷了

而run"內迴圈"是利用兩兩大小比較而互換

把最大值浮到最上面

接著run則是把次大值浮到第二個

以此類推

所以要修改的話

if ( a[d] > a[f] )
{
         g = a[d];
         a[d] = a[f];
         a[f] = g;
}

就從這裡著手啊

把所有的array都一同變換
發表人: h80053    時間: 2006-3-29 10:03 PM

意思是說
if ( a[d] > a[f] )
{
         g = a[d];
         a[d] = a[f];
         a[f] = g;
}

把a[d]裡的變數改成a[b]ora[c]

謝謝
發表人: Johnny Brove    時間: 2006-3-30 12:29 AM

看你決定要用那個array去判斷啊

此外,雖然只用一個判斷

但是必須三個array同時調換啊

不然以你寫的為例

a[d]變成了a[f]

而c[d]及b[d]沒一起調換

那就號碼不對姓名及分數了

最後,想學程式還是得買本書來看

我這樣講也不能說得很明白

"頂多"幫你除個錯罷了
發表人: h80053    時間: 2006-3-30 12:30 PM

再請問大大一下 如果說我的cout<<"請輸入姓名"<<endl; 這一個我如果要輸入 中文字的話那
int d,e=10,f,g;
int a[10],b[10];
    char c[10];  ==> 這一個要怎麼修改??
因為我的cout<<"請輸入姓名"<<endl;  這一個只能輸入數字

我看了課本他是寫說    char 字串變數[字串長度]="字串資料":
但是如果這麼打的話   我就不能自己輸入要的姓名

下面這個是依照大大的說法後改的(依成績排列)



#include<iostream.h>
void main()
{  
     int d,e=10,f,g;
     int a[10],b[10];
     char c[10];
     for(d=0;d<=9;d++)
{    cout<<"請輸入座號"<<"\t"<<"請輸入姓名"<<"\t" <<"請輸入分數"<<endl;

     cin >>a[d];
   
     cin >>c[d];
   
     cin >>b[d];
}

          for(d=0;d<e-1;d++)
          for(f=d;f>e;f++)
          if(b[d]>b[f])
    {      g=b[d];
               b[d]=b[f];
                 b[f]=g;

                 }

   
          for(d=0;d<e;d++)
          cout<<"座號"<<a[d]<<"\t"<<"姓名"<<c[d]<<"\t"<<"分數"<<b[d]<<endl;;     


   
   
  


}


我照這樣run不可以照成績順序排列


先謝謝大大了

[h80053 在 2006-3-30 12:38 PM 作了最後編輯]
發表人: Johnny Brove    時間: 2006-3-30 05:52 PM

第一個問題我說過了

用string來做型態(需include string的header file)

第二個的bug在此

for ( d = 0; d < e - 1; d++ )
{
          for ( f = d; f > e; f++ )
       {         
               if ( b[d] > b[f] )
              {      
                     g = b[d];
                     b[d] = b[f];
                     b[f] = g;
              }
       }
}

另外,我講過第三遍了

你array沒有三個同時排序

一定會出現號不對名的情形

最後,請一定做好程式排版

你這樣子寫出來的程式

看的人一定會受不了

[Johnny Brove 在 2006-3-30 05:55 PM 作了最後編輯]
發表人: h80053    時間: 2006-3-30 08:52 PM

我在想想看要怎麼做程式這東西還真不好懂


也謝謝大大的指導

[h80053 在 2006-3-30 08:54 PM 作了最後編輯]
發表人: h80053    時間: 2006-3-30 11:13 PM

for(d=0;d<e-1;d++)

{     for(f=d;f>e;f++)
       if(a[d]>a[f])       
     {   g=b[d];
          b[d]=b[f];
          b[f]=g;
      }


   將符號改過後還是指照號碼排列
   同時排序已經知道少什麼了
   謝謝
發表人: Johnny Brove    時間: 2006-3-30 11:50 PM

我用紅字弄出來,你沒看到嗎?

for ( f = d; f > e; f++ )
發表人: h80053    時間: 2006-3-31 09:11 AM

我把F>E改掉後還是無法照呈機高低排列??
發表人: Johnny Brove    時間: 2006-3-31 11:51 AM

請先仔細想想為什麼要改

不改的話又會怎樣子?

你才能知道要改成什麼
發表人: h80053    時間: 2006-4-1 10:05 AM

我的想法是一開始用座號排列的話是由小到大,當換成分數排列的話是由大而小.所以我想如果比符號改掉,讓IF的比較相反
  使高的分數往上推.如果沒改的話還是會照排座號一樣.從一號開始排
發表人: Johnny Brove    時間: 2006-4-2 02:28 PM

如果你是要由大而小

最簡單的方法就是把cout的順序倒過來就好了

不然就是把內迴圈所跑的方向reverse
發表人: adolclistin    時間: 2006-4-4 02:49 AM

請問
怎麼獲得影像中每個點的R,G,B值呢@@"
發表人: aaron71101433    時間: 2006-4-5 01:27 AM

MFC的話,參考CImage類別,BCB的話,請參考TImage類別,如果要自己寫程式讀取的話,那要看檔案格式來決定...
發表人: adolclistin    時間: 2006-4-5 03:47 AM

那如果要自己寫一各讀取BMP圖檔格式
並紀錄每各點的R G B三個顏色值呢?
現在只會用範例程式把圖片讀取出來
但是卻不會獲得每各點的資訊值
發表人: aaron71101433    時間: 2006-4-5 01:12 PM

BMP的格式請參考
http://web.uccs.edu/wbahn/ECE102 ... S/bmpfileformat.htm
BMP是沒經過壓縮的格式,所以讀檔是沒什麼技巧可言的,就是按照檔案格式讀取而已,所以沒必要的話,用現成的API就行了,而JPEG這類有經過DCT轉換的格式,要自己弄又更麻煩了,可能要有點數學基礎才有辦法實作...
發表人: adolclistin    時間: 2006-4-6 09:21 PM

謝謝你~我試試看~
感激不盡ˊˇˋ
發表人: h80053    時間: 2006-4-28 12:23 AM

問一下這題    tan28*tan62+tan^35-sec^35=

老師說答案要是0 可是我寫出來的程式是-1

tan28*tan62===>1    tan^35-sec^35===>-1
只算三角函數值的整數值 的話結果會是1-1=0        以下是我寫的程式算出來是-1


    #include<iostream.h>
    #include<math,h>

      int o,g,r,t;
    double x,y,q,w;
    x=(3.14)/180*28;
    y=(3.14)/180*62;             
    q=(3.14)/180*35;         
    w=(3.14)/180*35;             
                
             o=tan(x);
             g=tan(y);
           
                    r=1/cos(w)*1/cos(w);          
        t=tan(q)*tan(q);           
           
           cout<<"tan28*tan62+tan^35-sec^35="<<floor(o)*floor(g)+floor(t)-floor(r)<<endl;;


謝謝

[h80053 在 2006-4-28 12:28 AM 作了最後編輯]
發表人: aaron71101433    時間: 2006-4-29 02:56 PM

參考一下這程式吧

double x,y,q,w;       
double PI = 3.1415926;
x=28.0 / (180.0 / PI);
y=62.0 / (180.0 / PI);              
q=35.0 / (180.0 / PI);         
w=35.0 / (180.0 / PI);              
       
                     
printf("tan28*tan62 = %f, tan^35-sec^35= %f, tan28*tan62+tan^35-sec^35=%d\n",
                tan(x) * tan(y),
                tan(q) - 1/cos(w),
                floor(tan(x)*tan(y))+floor(tan(q)-1/cos(w)));
發表人: h80053    時間: 2006-4-29 04:05 PM

謝謝喔
發表人: h80053    時間: 2006-4-30 07:12 PM

我RUN了一下好像是-1說
發表人: aaron71101433    時間: 2006-5-1 12:49 PM

tan28*tan62 = 1.000000, tan^35-sec^35= -0.520567, tan28*tan62+tan^35-sec^35=0
這是我的執行結果...
發表人: h80053    時間: 2006-5-10 08:30 PM

在問個問題

#include<iostream.h>
#include<conio.h>



struct score
{ int n;
  char na[10];
  int chi;
  int eng;
  int mat;
  double are;

} ;


void main()

{int a,u;
  score c[10];
  
  cout<<"請輸入學生座號姓名及小考期中期末成績"<<endl;
  cin>>u
  switch (u)
  {
case 1:
       
for(a=0;a<3;a++)
{ cout<<"座號=";
    cin>> c[a].n;
          cout<<"姓名=";
    cin>>c[a].na;
    cout<<"小考=";
    cin>>c[a].chi;
        cout<<"期中=";
    cin>>c[a].eng;
        cout<<"期末=";
    cin>>c[a].mat;
    c[a].are=(c[a].chi+c[a].eng+c[a].mat)/3;
}

for(int b=0;b<3;b++)
for(int d=b+1;d<4;d++)
         if(c[b].are<c[d].are)
         {score temp=c[b];
          c[b]=c[d];
      c[d]=temp;
         }

      cout<<"按照成績高低排序後"<<endl;
          for(int e=0;e<3;e++)
     
      cout<<"座號"<<c[e].n<<"\t"<<"姓名"<<c[e].na<<"\t"<<"小考"<<c[e].chi<<"\t"<<"期中"<<c[e].eng<<"\t"<<"期末"<<c[e].mat<<"\t"<<"總平均"<<c[e].are<<endl;
  

case 2:
        cout<<"1111"<<endl;
  
          


      
                }


}


編譯以後他會說CASE2有問題  不知道是不是SWITCH用錯還是怎樣的  只要沒有用到CASE2錢一個程式是ok的

請大大們幫忙一下  謝謝
發表人: h80053    時間: 2006-5-16 06:12 PM

有人能幫忙解答嗎??
發表人: Johnny Brove    時間: 2006-5-16 06:57 PM

如果是用switch,在最後要寫一個default

另外,除非是需要重疊使用

不然要在每個case間使用break
發表人: h80053    時間: 2006-5-17 01:40 PM

Compiling...
1111.cpp
C:\Documents and Settings\USER\桌面\1111.cpp(55) : error C2360: initialization of 'y' is skipped by 'case' label
        C:\Documents and Settings\USER\桌面\1111.cpp(49) : see declaration of 'y'
C:\Documents and Settings\USER\桌面\1111.cpp(55) : error C2360: initialization of 'b' is skipped by 'case' label
        C:\Documents and Settings\USER\桌面\1111.cpp(40) : see declaration of 'b'
Error executing cl.exe.

1111.obj - 2 error(s), 0 warning(s)
發表人: Johnny Brove    時間: 2006-5-17 05:54 PM

是最近的程式碼嗎?

compile除了cin>>u未加;

並未有其他問題吧(compiler不同?)

還有你的y是哪裡來的?
發表人: h80053    時間: 2006-5-17 07:40 PM

我想說變數換其它的來看看 會不會就OK  我CIN有加:  還是有錯誤   謝謝
發表人: Johnny Brove    時間: 2006-5-17 08:53 PM

這樣我就可以compile了

還會出錯嗎?

(break及default為個人習慣而加的,不影響compile結果)

CODE:
[Copy to clipboard]
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

#include<conio.h>

struct score
{
        int n;
        char na[10];
        int chi;
        int eng;
        int mat;
        double are;
};

void main()
{
        int a,u;
        score c[10];

        cout<<"請輸入學生座號姓名及小考期中期末成績"<<endl;
        cin>>u;
        switch (u)
        {
        case 1:
                for(a=0;a<3;a++)
                {
                        cout<<"座號=";
                        cin>> c[a].n;
                        cout<<"姓名=";
                        cin>>c[a].na;
                        cout<<"小考=";
                        cin>>c[a].chi;
                        cout<<"期中=";
                        cin>>c[a].eng;
                        cout<<"期末=";
                        cin>>c[a].mat;
                        c[a].are=(c[a].chi+c[a].eng+c[a].mat)/3;
                }

                for(int b=0;b<3;b++)
                        for(int d=b+1;d<4;d++)
                                if ( c[ b ].are < c[ d ].are )
                                {
                                        score temp=c[b];
                                        c[b]=c[d];
                                        c[d]=temp;
                                }

                cout<<"按照成績高低排序後"<<endl;
                for(int e=0;e<3;e++)
                        cout<<"座號"<<c[e].n<<"\t"<<"姓名"<<c[e].na<<"\t"<<"小考"<<c[e].chi<<"\t"<<"期中"<<c[e].eng<<"\t"<<"期末"<<c[e].mat<<"\t"<<"總平均"<<c[e].are<<endl;
                break;
        case 2:
                cout<<"1111"<<endl;
                break;
        default:
                break;
        }
}
[Johnny Brove 在 2006-5-17 09:16 PM 作了最後編輯]
發表人: h80053    時間: 2006-5-18 07:15 AM

謝謝  拿去C上面試試            
using std::cin;
using std::cout;
using std::endl;
這3行是指??

編譯以後的結果  還是一樣狀況 不知道是哪有問題

Compiling...
125.cpp
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(111) : error C2360: initialization of 'e' is skipped by 'case' label
        c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(105) : see declaration of 'e'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(111) : error C2360: initialization of 'b' is skipped by 'case' label
        c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(85) : see declaration of 'b'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(117) : error C2361: initialization of 'e' is skipped by 'default' label
        c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(105) : see declaration of 'e'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(117) : error C2361: initialization of 'b' is skipped by 'default' label
        c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(85) : see declaration of 'b'
Error executing cl.exe.

125.obj - 4 error(s), 0 warning(s)




剛剛請同學試了一下他說:
如果要用switch 就不能在迴圈內直接定義ex: (for int 變數 .......);

結果把INT拿掉就沒錯了=.=

[h80053 在 2006-5-18 09:39 PM 作了最後編輯]
發表人: Acute    時間: 2006-5-18 09:58 PM

應該可以的, 你嘗試看看 (我比較懶, 懶得去嘗試)
程式寫成:
case 1:
{
   for (int i=0; i < 100 ; i++ )
      ...
}

使用{} 將區段格出來, 通常一些怪怪限制都會消失
其實那是compiler 沒寫好, 並非語言定義不行那樣寫

Acute.
發表人: h80053    時間: 2006-5-19 12:18 PM

謝謝你的指教  我在試試看


試過的結果是 他會說你的CASE2是不合法的??

[h80053 在 2006-5-19 12:21 PM 作了最後編輯]
發表人: Acute    時間: 2006-5-19 12:50 PM

你用哪一國的C++ compiler

寫法上應該是:
case 1:
{
.....
}

case 2:
{
.......
}

也就是, 每個case 的內容獨立包起來

Acute.
發表人: Johnny Brove    時間: 2006-5-19 01:22 PM


引用:
Acute寫到:
寫法上應該是:
case 1:
{
.....
}

case 2:
{
.......
}

也就是, 每個case 的內容獨立包起來


可是一般的C++參考書並沒有這樣寫啊

應該是不一定必要吧?

紅字的部份都算是case1的敘述

case 1:
        ...............;
        ...............;
        break;

發表人: Acute    時間: 2006-5-19 02:27 PM


引用:
Johnny Brove寫到:

引用:
Acute寫到:
寫法上應該是:
case 1:
{
.....
}

case 2:
{
.......
}

也就是, 每個case 的內容獨立包起來


可是一般的C++參考書並沒有這樣寫啊

應該是不一定必要吧?

紅字的部份都算是case1的敘述

case 1:
        ...............;
        ...............;
        break;


這種寫法, 其實是為了C, 而不是為了C++, 只是一種相容的應用
早期C 並不能像C++ 一樣, 要使用時才宣告變數
但是C 有local 變數的規範與範疇
所以, 為了讓程式碼在移植不同C/C++ compiler 過程沒有問題
最快速的方法, 就是把有新寫法的程式碼框起來

程式語言說穿了, 就是看compiler 是不是做到符合標準
當你遇到一個不夠標準的compiler, 又必須使用他
唯一的方法就是去適應他, 因為你不可能去改compiler
但是, 修改過程, 總不可能把程式重寫一次 (學生作業例外, 反正很短)
所以, 適當了解程式語言的機制, 利用語言其他輔助機制, 讓程式相容於不同的compiler
這種東西, 永遠不會出現在書本裡面

況且, 程式語言很多定義也常常被人所忽略
我曾經在讀書會版面發布過一篇我以前研究C 的文章 (擷取自我發表於雜誌與書本的內容)
裡面就針對K&R C & ANSI C 差異性進行探討
該文章發布的原因, 就是ANSI C 被制定後,
發現很多工程師對於移植K&R C to ANSI C 過程中, 總是無法順利解決問題
原始目的是給同僚看, 後來大家都覺得不錯, 就修飾&擴充內容後, 發表於雜誌
最後又收錄到我無聊寫的書本裡面

Acute.
發表人: h80053    時間: 2006-5-19 05:50 PM

這一段真是深奧  看不懂@@  謝謝


--------------------Configuration: 結構排序 - Win32 Debug--------------------
Compiling...
結構排序.cpp
C:\Documents and Settings\TOKKO\My Documents\重佑のC++專區\2006 5.17最新的作業(結構排序)\結構排序.cpp(66) : error C2046: illegal case
Error executing cl.exe.

結構排序.obj - 1 error(s), 0 warning(s)

[h80053 在 2006-5-19 05:53 PM 作了最後編輯]
發表人: Acute    時間: 2006-5-19 07:23 PM

結論就是... 你用的C++ compiler 實在不標準到令人受不了的地步
你就乖乖把變數都宣告到function 開始的位置, 回復傳統寫法, 就好了, 呵
不然, 就是換個compiler

Acute.
發表人: Johnny Brove    時間: 2006-5-19 07:38 PM


引用:
Acute寫到:
況且, 程式語言很多定義也常常被人所忽略
我曾經在讀書會版面發布過一篇我以前研究C 的文章 (擷取自我發表於雜誌與書本的內容)
裡面就針對K&R C & ANSI C 差異性進行探討
該文章發布的原因, 就是ANSI C 被制定後,
發現很多工程師對於移植K&R C to ANSI C 過程中, 總是無法順利解決問題
原始目的是給同僚看, 後來大家都覺得不錯, 就修飾&擴充內容後, 發表於雜誌
最後又收錄到我無聊寫的書本裡面


請問在那裡?

我滿想看的!
發表人: Acute    時間: 2006-5-20 09:01 PM

就在"讀書會"的版面裡面囉
我記得... 標題是... 小神童C 語言筆記... 之類的, 呵
論壇只要人多, 我很難逛論壇, 慢的跟龜一樣, so, 自己找吧 ^^"

Acute.
發表人: Johnny Brove    時間: 2006-5-20 09:26 PM

找到了
http://twed2k.org/viewthread.php?tid=49786&fpage=1

果然是程式高手

可惜您年紀太大了

不然我也很願意叫你小神童
發表人: Acute    時間: 2006-5-21 07:14 AM


引用:
Johnny Brove寫到:
找到了
http://twed2k.org/viewthread.php?tid=49786&fpage=1

果然是程式高手

可惜您年紀太大了

不然我也很願意叫你小神童

我才13歲... 怎會年紀大

Acute.
發表人: h80053    時間: 2006-6-7 06:54 PM

1.試設計一台灣樂透彩開獎模擬程式,按開獎可開出6組一般號及一特別號,排序輸出則可將一般號由小到大排序輸出。

2.試設計一程式可以執行積分cos2拍dt的計算,其中起始時間及終止時間可於下列畫面中輸入,按積分計算按鈕可輸出積分值。

3.試設計一密碼登錄程式,可輸入三個使用者,a1,a2,a3,其密碼分別為asd,qwe,hhf,若輸入正確,則顯示出登入成功的訊息視窗,若輸入錯誤則顯示出登入錯誤的訊息視窗。





謝謝
發表人: h80053    時間: 2006-6-9 12:25 PM

有高手能幫忙一下嗎??謝謝啦

[h80053 在  2006-6-11 08:08 PM 作了最後編輯]
發表人: swimman    時間: 2006-7-13 02:22 AM


引用:
Johnny Brove寫到:
for ( int multiple = 1; multiple != 0; cout << mul )
{
        cin >> multiple;
        mul *= multiple;
}

個人覺得這個是無窮迴圈
還是用while來寫語意比較明確
發表人: eleachaose    時間: 2006-11-1 01:49 PM


引用:
h80053寫到:
1.試設計一台灣樂透彩開獎模擬程式,按開獎可開出6組一般號及一特別號,排序輸出則可將一般號由小到大排序輸出。

2.試設計一程式可以執行積分cos2拍dt的計算,其中起始時間及終止時間可於下列畫面中輸入,按積分計算按鈕可輸出積分值。

3.試設計一密碼登錄程式,可輸入三個使用者,a1,a2,a3,其密碼分別為asd,qwe,hhf,若輸入正確,則顯示出登入成功的訊息視窗,若輸入錯誤則顯示出登入錯誤的訊息視窗。





謝謝


請問一下 撰寫的程式碼是必須包含你的視窗的專案  還是僅止要開獎程式碼就OK
發表人: h80053    時間: 2006-11-1 10:36 PM

都需要包含   謝謝




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0