『壹』 怎樣將編譯通過的 vb程序 製作成一個可安裝程序的
點擊VB的菜單 「外接掘啟程序」——「外接程蠢散賣帶逗序管理器」,拖到最後有一個「打包和展開向導」,雙擊它,點確定。
然後再次點擊菜單 「外接程序」,你會發現菜單里就多了一個「打包和展開向導」,點擊它,按提示操作就可以生成安裝程序了。
『貳』 請教:51單片機C51語言中的16位--8位的表示和替換問題
參考:
接觸單片機快兩年了,不過只是非常業余的興趣,實踐卻不多,到現在還算是個初學者吧。這幾天給自己的任務就是搞定步進電機的單片機控制。以前曾看過有關步進電機原理和控制的資料,畢竟自己沒有做過,對其具體原理還不是很清楚。今天從淘寶網買了一個EPSON的UMX-1型步進電機,此步進電機為雙極性四相,接線共有六根,外形如下圖所示:
拿到步進電機,根據以前看書對四相步進電機的了解,我對它進行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色的線,然後用5伏電源的地線分別和另外四根線(紅、蘭、白、橙)依次接觸,發現每接觸一下,步進電機便轉動一個角度,來回五次,電機剛好轉一圈,說明此步進電機的步進角度為360/(4×5)=18度。地線與四線接觸的順序相反,電機的轉向也相反。
如果用單片機來控制此步進電機,則只需分別依次給四線一定時間的脈沖電流,電機便可連續轉動起來。通過改變脈沖電流的時間間隔,就可以實現對轉速的控制;通過改變給四線脈沖電流的順序,則可實現對轉向的控制。所以,設計了如下電路圖:
C51程序代碼為:
代碼一
#include <AT89X51.h>
static unsigned int count;
static unsigned int endcount;
void delay();
void main(void)
{
count = 0;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設定時器0和1為16位模式1
ET0 = 1; //定時器0中斷允許
TH0 = 0xFC;
TL0 = 0x18; //設定時每隔1ms中斷一次
TR0 = 1; //開始計數
startrun:
P1_3 = 0;
P1_0 = 1;
delay();
P1_0 = 0;
P1_1 = 1;
delay();
P1_1 = 0;
P1_2 = 1;
delay();
P1_2 = 0;
P1_3 = 1;
delay();
goto startrun;
}
//定時器0中斷處理
void timeint(void) interrupt 1
{
TH0=0xFC;
TL0=0x18; //設定時每隔1ms中斷一次
count++;
}
void delay()
{
endcount=2;
count=0;
do{}while(count<endcount);
}
將上面的程序編譯,用ISP下載線下載至單片機運行,步進電機便轉動起來了,初步告捷!
不過,上面的程序還只是實現了步進電機的初步控制,速度和方向的控制還不夠靈活,另外,由於沒有利用步進電機內線圈之間的「中間狀態」,步進電機的步進角度為18度。所以,我將程序代碼改進了一下,如下:
代碼二
#include <AT89X51.h>
static unsigned int count;
static int step_index;
void delay(unsigned int endcount);
void gorun(bit turn, unsigned int speedlevel);
void main(void)
{
count = 0;
step_index = 0;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設定時器0和1為16位模式1
ET0 = 1; //定時器0中斷允許
TH0 = 0xFE;
TL0 = 0x0C; //設定時每隔0.5ms中斷一次
TR0 = 1; //開始計數
do{
gorun(1,60);
}while(1);
}
//定時器0中斷處理
void timeint(void) interrupt 1
{
TH0=0xFE;
TL0=0x0C; //設定時每隔0.5ms中斷一次
count++;
}
void delay(unsigned int endcount)
{
count=0;
do{}while(count<endcount);
}
void gorun(bit turn,unsigned int speedlevel)
{
switch(step_index)
{
case 0:
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
break;
case 1:
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 2:
P1_0 = 0;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 3:
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
break;
case 4:
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 0;
break;
case 5:
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
break;
case 6:
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
break;
case 7:
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
}
delay(speedlevel);
if (turn==0)
{
step_index++;
if (step_index>7)
step_index=0;
}
else
{
step_index--;
if (step_index<0)
step_index=7;
}
}
改進的代碼能實現速度和方向的控制,而且,通過step_index靜態全局變數能「記住」步進電機的步進位置,下次調用 gorun()函數時則可直接從上次步進位置繼續轉動,從而實現精確步進;另外,由於利用了步進電機內線圈之間的「中間狀態」,步進角度減小了一半,只為9度,低速運轉也相對穩定一些了。
但是,在代碼二中,步進電機的運轉控制是在主函數中,如果程序還需執行其它任務,則有可能使步進電機的運轉收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改進:
代碼三
#include <AT89X51.h>
static unsigned int count; //計數
static int step_index; //步進索引數,值為0-7
static bit turn; //步進電機轉動方向
static bit stop_flag; //步進電機停止標志
static int speedlevel; //步進電機轉速參數,數值越大速度越慢,最小值為1,速度最快
static int spcount; //步進電機轉速參數計數
void delay(unsigned int endcount); //延時函數,延時為endcount*0.5毫秒
void gorun(); //步進電機控制步進函數
void main(void)
{
count = 0;
step_index = 0;
spcount = 0;
stop_flag = 0;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設定時器0和1為16位模式1
ET0 = 1; //定時器0中斷允許
TH0 = 0xFE;
TL0 = 0x0C; //設定時每隔0.5ms中斷一次
TR0 = 1; //開始計數
turn = 0;
speedlevel = 2;
delay(10000);
speedlevel = 1;
do{
speedlevel = 2;
delay(10000);
speedlevel = 1;
delay(10000);
stop_flag=1;
delay(10000);
stop_flag=0;
}while(1);
}
//定時器0中斷處理
void timeint(void) interrupt 1
{
TH0=0xFE;
TL0=0x0C; //設定時每隔0.5ms中斷一次
count++;
spcount--;
if(spcount<=0)
{
spcount = speedlevel;
gorun();
}
}
void delay(unsigned int endcount)
{
count=0;
do{}while(count<endcount);
}
void gorun()
{
if (stop_flag==1)
{
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
return;
}
switch(step_index)
{
case 0: //0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
break;
case 1: //0、1
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 2: //1
P1_0 = 0;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 3: //1、2
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
break;
case 4: //2
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 0;
break;
case 5: //2、3
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
break;
case 6: //3
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
break;
case 7: //3、0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
}
if (turn==0)
{
step_index++;
if (step_index>7)
step_index=0;
}
else
{
step_index--;
if (step_index<0)
step_index=7;
}
}
在代碼三中,我將步進電機的運轉控制放在時間中斷函數之中,這樣主函數就能很方便的加入其它任務的執行,而對步進電機的運轉不產生影響。在此代碼中,不但實現了步進電機的轉速和轉向的控制,另外還加了一個停止的功能,呵呵,這肯定是需要的。
步進電機從靜止到高速轉動需要一個加速的過程,否則電機很容易被「卡住」,代碼一、二實現加速不是很方便,而在代碼三中,加速則很容易了。在此代碼中,當轉速參數speedlevel 為2時,可以算出,此時步進電機的轉速為1500RPM,而當轉速參數speedlevel 1時,轉速為3000RPM。當步進電機停止,如果直接將speedlevel 設為1,此時步進電機將被「卡住」,而如果先把speedlevel 設為2,讓電機以1500RPM的轉速轉起來,幾秒種後,再把speedlevel 設為1,此時電機就能以3000RPM的轉速高速轉動,這就是「加速」的效果。
在此電路中,考慮到電流的緣故,我用的NPN三極體是S8050,它的電流最大可達1500mA,而在實際運轉中,我用萬用表測了一下,當轉速為1500RPM時,步進電機的電流只有90mA左右,電機發熱量較小,當轉速為60RPM時,步進電機的電流為200mA左右,電機發熱量較大,所以NPN三極體也可以選用9013,對於電機發熱量大的問題,可加一個10歐到20歐的限流電阻,不過這樣步進電機的功率將會變小。
由於在下淺薄,錯誤和問題難免,請各位不吝賜教!
『叄』 這個程序為什麼能通過編譯 卻不能運行啊
你好,你寫羨櫻的程碼殲序沒有問題,所以能夠通過編譯,但是程序的邏遲派沖輯是有問題的,所以電腦按照你的邏輯是無法判斷計算出結果的。如下:
if(x<1.0) y=x;
else if(x<10.0) y=2*x-1;
我建議將上面的條件判斷改為:
if(x<1.0) y=x;
else if(1.0<x<10.0) y=2*x-1;
你可以改後再試一下。
『肆』 c語言預處理命令中的include可以做標識符嗎
不可以
標志符一定不可以與"關鍵詞"或"准關鍵詞"宴唯盯相同(其中關鍵詞有32個,准關鍵詞有include line undef等).
如果標志符與上述的次相同,那麼在程序的檢測晌和過程中會出錯.
不過,你可以用Include 或iNclude等做為山悉符,不會出錯,但是未了程序運行的安全起見最好不要用.
注意:還不是完整的文檔,太長了不能全帖完。要的話找我!^_^
《Java程序設計》練習題
一、判斷題
1、 Java語言採用面向對象的思想編程,具有跨平台、分布式、多線程等優點。 ( )
2、 一個Java源程序可有多個類,但只僅有一個public類,而且程序名與public類名相同。 ( )
3、方法中的形參可以和方法所屬類的屬性同名。 ( )
4、介面無構造器,不能有實例,也不能定義常量。 ( )
5、利用File對象可以判斷一個文件或目錄是否存在。 ( )
6、JFrame,JPanel,JApplet和JButton四種組件都屬於容器組件。 ( )
7、BorderLayout是面板的預設布局管理器。 ( )
8、BorderLayout最多可以使用5個組件。 ( )
9、一個面板(JPanel)不能被加入另一個面板(JPanel)中。 ( )
10、菜單需要一個JMenuBar對象,以使他們能被添加到JFrame。 ( )
11、線程可以用yield使同優先順序的線程運行。 ( )
12、System.in是標准輸入流,能用read方法讀取鍵盤的輸入。 ( )
13、數據流就是數據通信通道,指在計算機的輸入輸出之間運動的數據序列。( )
二、填空題
1、設x,y,z的值分別為ture、false和false,試計算下列邏輯表達式的值:
(1) x &&y||!z&&ture (2) !x||!y&&!z
(3) (!x&&!y)||(!y&&!z) (4) x&&y||true&&!z
2、求下面表達式的值:
(1) 已知x=2、y=6、z=5.0,求x+(int)y/2*z%4
(2) 已知x=123,求x/100+x%100/10+x%10
(3) 已知x=160、y=2.8、z=5,求(byte)x +(int)y+(float)z;
(4) 設 int x=17,y=5; 執行語句 x%=x++/--y 後x的值為 。
(5) 設 int a=7,b=6,c=5;,表達式 (a+b)>(c*c)&&b==c||c>b 的值為 。
(6) 設 int a=3,b=5,c=7;,表達式a>c||c>b!=0&&c==b+a 的值為 。
3、下列表達式中n和x被賦值為多少?
int n=0;
int x=1;
n=x++ + x++; //這里n= , x=
n=n++ - x--; //這里n= , x=
n=x-- + -x++; //這里n= , x=
n=++x + x++; //這里n= , x=
4、使用 方法為組件設置布局管理器,JFrame的預設布局管理器是 ,內容面板的預設布局管理器是 。
5、寫出4個常見的異常例子: 、 、 和 。重新拋出一個異常用 語句。
6、線程通過 方法可以休眠一段時間,然後恢復運行,當 時,線程進入死亡狀態。
7、編寫一個線程可以用 和 來實現。
8、創建文件(c:\test.txt)對象的語句是 ,DataInputStream對象提供 方法可以按行讀取文件內容。
9、Container 的________方法可以將_______組件加入容器。
10、在執行Java線程的程序中,程序通過調用_______方法啟動線程,隨後又調用________方法。
11、使用 方法為組件設置布局管理器,JFrame的預設布局管理器是 ,內容面板的預設布局管理器是 。
12、Java.swing.JFrame.getContentPane()的返回類型是 。
13、數據越界拋出的異常類是 ,整數除零拋出的異常類是 ,算術溢出拋出的異常類是 。
三、選擇題
1、 下面哪些是不合法的變數名稱? ( )
A) 2D B) True C) _name D) T1 E) while-ture
2、下列變數定義不正確的是: ( )
A) boolean status=false; B) float d = 45.6;
C) char c = 「a」; D) int k = 1+』1』; E) float f=1/4;
3、下列數組的定義不合法的是: ( )
A) char c[][]=new char[2][3];
B) char c[][]=new char[6][];
C) char [][]c=new char[3][3];
D) char [][]c=new char[][4];
E) int []a[] = new int[10][10];
4、對於下列代碼:
public class Example{
String str=new String("hello");
char ch[]={'d','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.println(ex.str+"and"+ex.ch[0]);
}
public void change(String str,char ch[]){
str="world";ch[0]= 'a';
}
}
輸出結果是: ( )
A) hello and d B) hello and a
C) world and d D) world and a
5、下列說法哪個是正確的? ( )
A) 子類不能定義和父類同名同參數的方法
B) 子類只能繼承父類的方法,而不能重載
C) 重載就是一個類中有多個同名但有不同形參和方法體的方法
D) 子類只能覆蓋父類的方法,而不能重載
6、如果一個程序段中有多個catch,則程序會按如下哪種情況執行? ( )
A) 找到合適的例外類型後繼續執行後面的catch
B) 找到每個符合條件的catch都執行一次
C) 找到合適的例外類型後就不再執行後面的catch
D) 對每個catch都執行一次
7、以下哪一項不是File類的功能: ( )
A) 創建文件
B) 創建目錄
C) 刪除文件
D) 拷貝文件
8、下列說法哪個是正確的? ( )
A) BorderLayout是面板的預設布局管理器
B) 當滑鼠指針位於一個GUI組件的邊上時,發生一個MouseOver事件
C) 一個面板(Jpanel) 不能被加入到另一個面板(Jpanel)中
D) 在BorderLayout中,添加到NORTH區的兩個按鈕將並排顯示。
9、在java程序中,下列關於線程的說法錯誤的是: ( )
A) run方法是運行線程的主體
B) 多個進程運行時執行順序是按順序執行的
C) 如果線程死亡,它便不能運行
D) 在java中,高優先順序的可運行線程會搶占低優先順序線程
10、關於JDBC訪問資料庫的說法錯誤的是: ( )
A) 建立資料庫連接時,必須載入驅動程序,可採用Class.forName()實現
B) 用於建立與某個數據源的連接可採用DriverManager類的getConnection方法
C) 建立資料庫連接時,必須要進行異常處理
D) JDBC中查詢語句的執行方法必須採用Statement類實現
四、程序閱讀題
1、閱讀下面的程序,程序保存為Test.java:
1) public class Test
2) {
3) public static void main(String[] args)
4) {
5) System.out.println(args[2]);
6) }
7) }
以上程序經編譯後用java Test 1 2 3 運行得到的輸出結果是什麼?
2、閱讀下面的程序:
① public class Test{
② public static void main(String[] a){
③ int i = Integer.parseInt(a[0]);
④ switch (i) {
⑤ case 1:System.out.println("Frist season");break;
⑥ case 2:System.out.println("Second season");
⑦ case 3:System.out.println("3th season");break;
⑧ case 4:System.out.println("Last season");
⑨ }
⑩ }
⑪ }
上面的程序編譯是否成功?如果編譯出錯,指出哪行出錯,並說明理由;如果編譯正確,用java Test 2 運行得到的輸出結果是什麼?
3、閱讀下面的程序:
① public class Test{
② public static void main(String[ ] args) {
③ int x,y=2,i=0,j=0;
④ if(args.length<2) System.exit(-1);
⑤ x = Integer.parseInt(args[1]);
⑥ switch(x){
⑦ case 1:switch(y){
⑧ case 1:i++;break;
⑨ case 2:j++;break;
⑩ default:i++;j++;
⑪ }
⑫ case 2:i++;j++;break;
⑬ default:i++;j++;
⑭ }
⑮ System.out.println("i="+i);
⑯ System.out.println("j="+j);
⑰ }
⑱ }
上面的程序編譯是否成功?如果編譯出錯,指出哪行出錯,並說明理由;如果編譯正確,用java Test 1 2 3 運行得到的運行結果是什麼?
4、閱讀下面的程序,程序保存為Test.java:
1) public class Test
2) {
3) short mValue;
4) public static void main(String[] args)
5) {
6) int a = 32;
7) int b = 56;
8) Test os = new Test(a+b);
9) os.Show( );
10) }
11) protected Test(short aValue) { mValue = aValue; }
12) public void Show( ) { System.out.println(mValue); }
13) }
上面的程序編譯是否成功?如果編譯出錯,指出哪行出錯,並說明理由;如果編譯正確,運行結果是什麼?
5、閱讀下面的程序:
class test
{
public static void main(String[] args)
{
int i = 1;
int All = 0;
for (;i<=10;i++)
{
if (i%6==0) break;
if(i%2==0) {i=i+2;continue;}
All = All + i;
}
System.out.println(All);
}
}
上面的程序編譯是否成功?如果編譯出錯,指出哪行出錯,並說明理由;如果編譯正確,運行結果是什麼?
6、閱讀下面的程序,程序保存為Test.java:
1) public class Test
2) {
3) public static void main(String[] args)
4) {
5) int i = 100;
6) int j = 0;
7) boolean b = true;
8) while (b)
9) {
10) if (b||(i<50)) b = false;
11) else b = true;
12) j=j+1;
13) i=i-1;
14) }
15) System.out.println(j);
16) }
17) }
上面的程序經編譯,運行後輸出的結果是什麼?
7、閱讀下面的程序:
1) public class test
2) {
3) public static void main(String argv[])
4) {
5) Bird b = new Bird();
6) b.Fly(3);
7) }
8) }
9) class Bird
10) {
11) static int Type = 2;
12) private void Fly(int an_Type)
13) {
14) Type = an_Type;
15) System.out.println("Flying..."+Type);
16) }
17) }
上面的程序編譯是否成功?如果編譯出錯,指出哪行出錯,並說明理由;如果編譯正確,運行結果是什麼?
8、閱讀下面的程序:
1) abstract class Base{
2) abstract public void myfunc();
3) public void another(){
4) System.out.println("Another method");
5) }
6) }
7) public class Abs extends Base{
8) public static void main(String argv[]){
9) Base b = new Abs();
10) b.another();
11) }
12) public void myfunc(){
13) System.out.println("My Func");
14) }
15) public void another(){
16) myfunc();
17) }
18) }
以上程序經編譯後,運行結果是什麼?
9、閱讀下面的程序:
1) class Super{
2) public int i=0;
3) public Super(){
4) i=1;
5) }
6) }
7) public class Sub extends Super{
8) public Sub(){
9) i=2;
10) }
11) public static void main(String args[]){
12) Sub s=new Sub();
13) System.out.println(s.i);
14) }
15) }
上面的程序經編譯後,運行結果是什麼?
10、閱讀下面的程序,程序保存為Test.java:
1) public class Test {
2) public static void main(String[ ] args) {
3) int index=0;
4) while (index<=100) {
5) index+=10;
6) if (index==40)
7) break;
8) System.out.println("The index is "+index);
9) }
10) }
11) }
上面的程序經編譯,運行後輸出的結果是什麼?
五、問答題
1、 設int類型變數x和y分別初始化為3和100,下列語句的循環體共執行幾次?執行完下列語句後x和y的值分別是多少?
(1) while(x<=y) x=2*x;
(2) while(y/x>5) if(y-x>25) x=x+1; else y=y/x;
(3) do{x=2*x;} while(x<y);
(4) do{x=y/x;y=y-x;}while(x>=y);
(5) do{y=y/x-1; if(y>=x) y=x;} while(y>=1);
2、簡述對象、類的概念。
3、簡述封裝、繼承性和多態性的概念。
4、根據以下的設計要求編寫java源代碼。
類名: Circle
實例數據(均為private):
radius(double) //圓的半徑
方法:
構造方法(沒有參數,設置radius的值為10.0)
setRadius(有一個double參數,將radius的值設為這個新值),
getRadius (沒有參數,返回radius的值)
sameSize(有一個參數,是另一個Circle對象的引用,如果兩個Circle對象的radius的差小於0.001,則返回true)
5、下面的代碼使用上題的Circle類,請回答下面的問題:
public class CircleTester {
public static void main(String[] args) {
Circle c1,c2,c3;
c1 = new Circle();
c2 = new Circle();
System.out.println(「are same is: 「+c1.sameSize(c2));
c2.setRadius(20.0);
compare.reset();
System.out.println(「are same is: 「+c1.sameSize(c2));
}
}
問題:
(1) 共創建了幾個Circle對象?
(2) 程序運行的結果是什麼?
6、假設已有一個ArrayMethods 類,包含以下的方法:
public static void replace(double[] a, int p, double v)
將數組a中下標為p的元素的值替換為v.
public static void fill(double[] a, int p, double v)
將數組a中的前p個元素用value值填充(即將數組a的前p個元素的值,設成v),如果數組的長度小於p,則全部元素都設成v
public static void display(double[] a)
在屏幕上顯示數組a的內容
現在假設你在main()方法中已經聲明了如下變數:
double[] array1={4.5, 6.0, 0.1, 2.2};
double[] array2;
double num1;
int pos=3;
要求對下面的3組語句,先回答是否合法(即沒有編譯錯誤),如果是合法的,請描述程序運行的效果,如果不合法,請說明理由.
1) num1 = array1[2];
ArrayMethods.replace(array1, pos, num1);
ArrayMethods.display(array1);
2) num1 = array1[0];
ArrayMethods.fill(array1, pos, num1);
ArrayMethods.display(array1);
3) num1 = array1[1];
array2=new double[num1];
ArrayMethods.display(array2);
六、編程題
1、分別利用for、while、do~while編寫計算正整數n1到n2的累加和。
2、編寫一個編程,給定一個t的值(t的值也可通過命令行輸入),按下式計算y值並輸出,要求分別寫作if語句和switch語句。
t2-1 0≤t<1
t3-2•t-2 1≤t<3
y= t2-t•sint 3≤t<5
t+1 5≤t<7
t-1 其它
3、設計一個類TestArraySum,定義一個含有10個元素的int類型數組a,10個數組元素的值是11~20,再定義一個方法arraySum(int[] a),返回數組所有元素的和,最後用main方法實現在屏幕上輸出數組a所有元素的和。
4、編寫一個java程序Suansu.java,定義兩個整型變數a和b,使用構造函數初始化a為10,b為5,並定義求出a與b的和(方法名為AddAB)、差(方法名為SubAB)、積(方法名為MultiAB)、商 (方法名為DivAB)的方法。
用另一個java程序TestSuansu.java測試Suansu.java定義的方法,並在屏幕上輸出結果。
5、創建一個名為Rectangle的類來表示一個使用寬度和高度來改變數的矩形,矩形的寬度和高度由構造方法來確定。為Rectangle類創建下列方法:
getArea返回矩形的面積,要求長和高的范圍為0~50;
getPerimeter返回矩形的周長;
Draw使用星號(*)作為描繪字元畫出該矩形(假設寬度和高度為整數);
在另一個類TestRectangle中編寫main方法來測試Rectangle類。
6、用面向對象的思想定義一個介面Area,其中包含一個計算面積的方法CalsulateArea(),然後設計MyCircle和MyRectangle兩個類都實現這個介面中的方法CalsulateArea(),分別計算圓和矩形的面積,最後寫出測試以上類和方法的程序。
7、創建一個Frame,有兩個Button按鈕和一個TextField,點擊按鈕,在TextField上顯示Button信息。
8、創建下圖的GUI程序(注意:不需要提供任何功能)。
9、編寫一個文件拷貝的程序,將文件C:\test1.txt的內容拷貝到C:\test2.txt中。
10、編寫一個程序,統計給定文件中每個字母出現的頻率。
11、編寫一個程序,統計給定文件中包含的單詞數目,並按單詞表的順序顯示統計結果。
12、用圖形界面設計一個簡單的計算器。
13、用圖形界面實現簡單的銀行櫃台業務,包含創建新帳戶、取款、存款、查詢帳戶余額等業務。
『陸』 #include<stdio.h> #include<string.h> void main() { void sortString(char s[][100], int ArraySize); c
你的程序有問題,你想一下定純遲義的是腔褲亂二維數組,可你在輸入伍檔時只是一維的,輸入有問題,接下來肯定不會運行的!
『柒』 簡述將源程序編譯成可執行程序的過程
一個源程序到一個可執行程序的過程:預編譯、編譯、匯編、鏈接。其中,編譯是主要部分,其中又分為六個部分:詞法分析、語法分析、語義分析、中間代碼生成、目標代碼生成和優化。
預編譯:主要處理源代碼文件中的以「#」開頭的預編譯指令。處理規則如下:
1、刪除所有的#define,展開所有的宏定義。
2、處理所有的條件預編譯指令,如「#if」、「#endif」、「#ifdef」、「#elif」和「#else」。
3、處理「#include」預編譯指令,將文件內容替換到它的位置,這個過程是遞歸進行的,文件中包含其他文件。
4、刪除所有的注釋,「//」和「/**/」。
5、保留所有的#pragma 編譯器指令,編譯器需要用到他們,如:#pragma once 是為了防止有文件被重復引用。
6、添加行號和文件標識,便於編譯時編譯器產生調試用的行號信息,和編譯時產生編譯錯誤或警告是能夠顯示行號。
(7)上面的程序將通過編譯擴展閱讀:
編譯過程中語法分析器只是完成了對表達式語法層面的分析,語義分析器則對表達式是否有意義進行判斷,其分析的語義是靜態語義——在編譯期能分期的語義,相對應的動態語義是在運行期才能確定的語義。
其中,靜態語義通常包括:聲明和類型的匹配,類型的轉換,那麼語義分析就會對這些方面進行檢查,例如將一個int型賦值給int*型時,語義分析程序會發現這個類型不匹配,編譯器就會報錯。
『捌』 c語言預處理命令中的include可以做標識符嗎
「include "仿仔橡stdio.h"」這應該是筆誤,少了個#號,我運行過了可以通過,並且結果是正確的。我查了一下相關書籍,上面說,ANSI C規定的32個關鍵字不能再用作各種戚肢標識符。而備旁像Define,include等作為編譯預處理的單詞沒說不可以作為一般的標識符,實踐證明是可以的。但這種習慣不好。
『玖』 麻煩大神們用用通俗的解釋給我解釋一下c++中的虛繼承
C++允許多繼承,一個類可以繼承多個基類,比如:D類繼承了B1和B2兩個類,這本來沒什麼問題。但是,如果這里的兩個基類B1和B2都是從野仔做一個共同的基類B那裡派生出來的,你就遇到了可怕的「菱形」(繼承關系)。造成的問題就是,在D類中,B類的內容繼承了兩份,不但多佔用了空間,還在名稱上出現沖突(盡管可以通過特殊的辦法訪問)。
所戚首謂,「虛繼承」,目的就是為了保證,在這種「菱形」繼承的情況下,在最終子類(如上D類)中,只保留一份從共同基類(如上頌衡B類)繼承來的內容,而這些內容是通過不同的途徑(如上B1和B2)繼承來的。
如果一定要通俗一點,一個不太恰當的比方,就是 B 的孩子B1 和 B2 「近親結婚」,使他們的後代 D 多了一份重復的 B 基因。這會導致很多問題(比如,可能有兩種性別 :) ),虛繼承就是為了解決這樣的問題。
例如,某工廠生產一些產品(Proct),有燈(Lamp),有電話(Phone),兩者組合成帶燈的電話(也許叫帶電話的燈),如果每個產品都有編號,那在組合產品里就出現了多個編號。
classProct{intid;};
classLamp:publicProct{};//Proct::id
classPhone:publicProct{};//Proct::id
classLampPhone:publicLamp,publicPhone{};//Lamp::idandPhone::id不同
考慮到不同產品可能被多繼承的可能性,在繼承中就應當考慮用虛繼承,以避免上述問題。
classProct{intid;};
classLamp:publicvirtualProct{};//Proct::id
classPhone:publicvirtualProct{};//Proct::id
classLampPhone:publicLamp,publicPhone{};//只有一個Proct::id