本文目錄一覽:
- 1、tc圖形函數 是什么
- 2、電腦中常說的“系統文件”意思
- 3、高三英語單選題
tc圖形函數 是什么
圖形函數
Turbo C提供了非常豐富的圖形函數, 所有圖形函數的原型均在graphics. h
獨立圖形運行程序的建立
Turbo C對于用initgraph()函數直接進行的圖形初始化程序, 在編譯和鏈接
時并沒有將相應的驅動程序(*.BGI)裝入到執行程序, 當程序進行到intitgraph()
語句時, 再從該函數中第三個形式參數char *path中所規定的路徑中去找相應的
驅動程序。若沒有驅動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在,
將會出現錯誤:
BGI Error: Graphics not initialized (use 'initgraph')
因此, 為了使用方便, 應該建立一個不需要驅動程序就能獨立運行的可執行
圖形程序,Turbo C中規定用下述步驟(這里以EGA、VGA顯示器為例):
1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA
此命令將驅動程序EGAVGA.BGI轉換成EGAVGA.OBJ的目標文件。
2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。
3. 在程序中initgraph()函數調用之前加上一句:
registerbgidriver(EGAVGA_driver):
該函數告訴連接程序在連接時把EGAVGA的驅動程序裝入到用戶的執行程序中。
如不初始化成EGA或CGA分辨率, 而想初始化為CGA分辨率, 則只需要將上述
步驟中有EGAVGA的地方用CGA代替即可。
.屏幕顏色的設置和清屏函數
對于圖形模式的屏幕顏色設置, 同樣分為背景色的設置和前景色的設置。在
Turbo C中分別用下面兩個函數。
設置背景色: void far setbkcolor( int color);
設置作圖色: void far setcolor(int color);
其中color 為圖形方式下顏色的規定數值, 對EGA, VGA顯示器適配器, 有關
顏色的符號常數及數值見下表所示。
表3 有關屏幕顏色的符號常數表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
符號常數 數值 含義 符號常數 數值 含義
———————————————————————————————————
BLACK 0 黑色 DARKGRAY 8 深灰
BLUE 1 蘭色 LIGHTBLUE 9 深蘭
GREEN 2 綠色 LIGHTGREEN 10 淡綠
CYAN 3 青色 LIGHTCYAN 11 淡青
RED 4 紅色 LIGHTRED 12 淡紅
MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅
BROWN 6 棕色 YELLOW 14 黃色
LIGHTGRAY 7 淡灰 WHITE 15 白色
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
對于CGA適配器, 背景色可以為表3中16種顏色的一種, 但前景色依賴于不同
的調色板。共有四種調色板, 每種調色板上有四種顏色可供選擇。不同調色板所
對應的原色見表4。
表4 CGA調色板與顏色值表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
調色板 顏色值
——————————— ——————————————————
符號常數 數值 0 1 2 3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C0 0 背景 綠 紅 黃
C1 1 背景 青 洋紅 白
C2 2 背景 淡綠 淡紅 黃
C3 3 背景 淡青 淡洋紅 白
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
清除圖形屏幕內容使用清屏函數, 其調用格式如下:
voide far cleardevice(void);
有關顏色設置、清屏函數的使用請看例8。
例8:
#includestdio.h
#includegraphics.h
int main()
{
int gdriver, gmode, i;
gdriver=DETECT;
registerbgidriver(EGAVGA_DRIVER);/*建立獨立圖形運行程序*/
initgraph(gdriver, gmode", "");/*圖形初始化*/
setbkcolor(0); /*設置圖形背景*/
cleardevice();
for(i=0; i=15; i++)
{
setcolor(i); /*設置不同作圖色*/
circle(320, 240, 20+i*10); /*畫半徑不同的圓*/
delay(100); /*延遲100毫秒*/
}
for(i=0; i=15; i++)
{
setbkcolor(i); /*設置不同背景色*/
cleardevice();
circle(320, 240, 20+i*10);
delay(100);
}
closegraph();
return 0;
}
另外, TURBO C也提供了幾個獲得現行顏色設置情況的函數。
int far getbkcolor(void); 返回現行背景顏色值。
int far getcolor(void); 返回現行作圖顏色值。
int far getmaxcolor(void); 返回最高可用的顏色值。
4. 基本圖形函數
基本圖形函數包括畫點, 線以及其它一些基本圖形的函數。本節對這些函數
作一全面的介紹。
一、畫點
1. 畫點函數
void far putpixel(int x, int y, int color);
該函數表示有指定的象元畫一個按color所確定顏色的點。對于顏色color的
值可從表3中獲得而對x, y是指圖形象元的坐標。
在圖形模式下, 是按象元來定義坐標的。對VGA適配器, 它的最高分辨率為
640x480, 其中640為整個屏幕從左到右所有象元的個數, 480 為整個屏幕從上到
下所有象元的個數。屏幕的左上角坐標為(0, 0), 右下角坐標為(639, 479), 水
平方向從左到右為x軸正向, 垂直方向從上到下為y軸正向。TURBO C 的圖形函數
都是相對于圖形屏幕坐標, 即象元來說的。
關于點的另外一個函數是:
int far getpixel(int x, int y);
它獲得當前點(x, y)的顏色值。
2. 有關坐標位置的函數
int far getmaxx(void);
返回x軸的最大值。
int far getmaxy(void);
返回y軸的最大值。
int far getx(void);
返回游標在x軸的位置。
void far gety(void);
返回游標有y軸的位置。
void far moveto(int x, int y);
移動游標到(x, y)點, 不是畫點, 在移動過程中亦畫點。
void far moverel(int dx, int dy);
移動游標從現行位置(x, y)移動到(x+dx, y+dy)的位置, 移動過程中不畫點。
二、畫線
1. 畫線函數
TURBO C提供了一系列畫線函數, 下面分別敘述:
void far line(int x0, int y0, int x1, int y1);
畫一條從點(x0, y0)到(x1, y1)的直線。
void far lineto(int x, int y);
畫一作從現行游標到點(x, y)的直線。
void far linerel(int dx, int dy);
畫一條從現行游標(x, y)到按相對增量確定的點(x+dx, y+dy)的直線。
void far circle(int x, int y, int radius);
以(x, y)為圓心, radius為半徑, 畫一個圓。
void far arc(int x, int y, int stangle, int endangle, int radius);
以(x, y)為圓心, radius為半徑, 從stangle開始到endangle結束(用度表示)
畫一段圓弧線。在TURBO C中規定x軸正向為0度, 逆時針方向旋轉一周, 依次為
90, 180, 270和360度(其它有關函數也按此規定, 不再重述)。
void ellipse(int x, int y, int stangle, int endangle, int xradius,
int yradius);
以(x, y)為中心, xradius, yradius為x軸和y軸半徑, 從角stangle 開始到
endangle結束畫一段橢圓線, 當stangle=0, endangle=360時, 畫出一個完整的
橢圓。
void far rectangle(int x1, int y1, int x2, inty2);
以(x1, y1)為左上角, (x2, y2)為右下角畫一個矩形框。
void far drawpoly(int numpoints, int far *polypoints);
畫一個頂點數為numpoints, 各頂點坐標由polypoints 給出的多邊形。
polypoints整型數組必須至少有2倍頂點數個無素。每一個頂點的坐標都定義為x,
y, 并且x在前。值得注意的是當畫一個封閉的多邊形時, numpoints 的值取實際
多邊形的頂點數加一, 并且數組polypoints中第一個和最后一個點的坐標相同。
2. 設定線型函數
在沒有對線的特性進行設定之前, TURBO C用其默認值, 即一點寬的實線,
但TURBO C也提供了可以改變線型的函數。線型包括:寬度和形狀。其中寬度只有
兩種選擇: 一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函
數。
void far setlinestyle(int linestyle, unsigned upattern, int
thickness);
該函數用來設置線的有關信息, 其中linestyle是線形狀的規定, 見表5。
表5. 有關線的形狀(linestyle)
━━━━━━━━━━━━━━━━━━━━━━━━━
符號常數 數值 含義
—————————————————————————
SOLID_LINE 0 實線
DOTTED_LINE 1 點線
CENTER_LINE 2 中心線
DASHED_LINE 3 點畫線
USERBIT_LINE 4 用戶定義線
━━━━━━━━━━━━━━━━━━━━━━━━━
thickness是線的寬度, 見表6。
表6. 有關線寬(thickness)
━━━━━━━━━━━━━━━━━━━━━━━━━
符號常數 數值 含義
—————————————————————————
NORM_WIDTH 1 一點寬
THIC_WIDTH 3 三點寬
━━━━━━━━━━━━━━━━━━━━━━━━━
對于upattern, 只有linestyle選USERBIT_LINE 時才有意義( 選其它線型,
uppattern取0即可)。此進uppattern的16位二進制數的每一位代表一個象元, 如
果那位為1, 則該象元打開, 否則該象元關閉。
void far getlinesettings(struct linesettingstype far *lineinfo);
該函數將有關線的信息存放到由lineinfo 指向的結構中, 表中
linesettingstype的結構如下:
struct linesettingstype{
int linestyle;
unsigned upattern;
int thickness;
}
例如下面兩句程序可以讀出當前線的特性
struct linesettingstype *info;
getlinesettings(info);
void far setwritemode(int mode);
該函數規定畫線的方式。如果mode=0, 則表示畫線時將所畫位置的原來信息
覆蓋了(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現在特性的線
與所畫之處原有的線進行異或(XOR)操作, 實際上畫出的線是原有線與現在規定
的線進行異或后的結果。因此, 當線的特性不變, 進行兩次畫線操作相當于沒有
畫線。
有關線型設定和畫線函數的例子如下所示。
例10.
#includestdlib.h
#includegraphics.h
int main()
{
int gdriver, gmode, i;
gdriver=DETECT;
registerbgidriver(EGAVGA_driver);
initgraph(gdriver, gmode, "");
setbkcolor(BLUE);
cleardevice();
setcolor(GREEN);
circle(320, 240, 98);
setlinestyle(0, 0, 3); /*設置三點寬實線*/
setcolor(2);
rectangle(220, 140, 420, 340);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1); /*設置一點寬用戶定義線*/
line(220, 240, 420, 240);
line(320, 140, 320, 340);
getch();
closegraph();
return 0;
}
5. 封閉圖形的填充
填充就是用規定的顏色和圖模填滿一個封閉圖形。
一、先畫輪廓再填充
TURBO C提供了一些先畫出基本圖形輪廓, 再按規定圖模和顏色填充整個封
閉圖形的函數。在沒有改變填充方式時, TURBO C以默認方式填充。 下面介紹這
些函數。
void far bar(int x1, int y1, int x2, int y2);
確定一個以(x1, y1)為左上角, (x2, y2)為右下角的矩形窗口, 再按規定圖
模和顏色填充。
說明: 此函數不畫出邊框, 所以填充色為邊框。
void far bar3d(int x1, int y1, int x2, int y2, int depth, int
topflag);
當topflag為非0時, 畫出一個三維的長方體。當topflag為0時, 三維圖形不
封頂, 實際上很少這樣使用。
說明: bar3d()函數中, 長方體第三維的方向不隨任何參數而變, 即始終為
45度的方向。
void far pieslice(int x, int y, int stangle, int endangle, int
radius);
畫一個以(x, y)為圓心, radius為半徑, stangle為起始角度, endangle 為
終止角度的扇形, 再按規定方式填充。當stangle=0, endangle=360 時變成一個
實心圓, 并在圓內從圓點沿X軸正向畫一條半徑。
void far sector(int x, int y, int stanle, intendangle, int
xradius, int yradius);
畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑, stangle
為起始角, endangle為終止角的橢圓扇形, 再按規定方式填充。
二、設定填充方式
TURBO C有四個與填充方式有關的函數。下面分別介紹:
void far setfillstyle(int pattern, int color);
color的值是當前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的
符號常數如表7所示。
表7. 關于填充式樣pattern的規定
━━━━━━━━━━━━━━━━━━━━━━━━━━━
符號常數 數值 含義
———————————————————————————
EMPTY_FILL 0 以背景顏色填充
SOLID_FILL 1 以實填充
LINE_FILL 2 以直線填充
LTSLASH_FILL 3 以斜線填充(陰影線)
SLASH_FILL 4 以粗斜線填充(粗陰影線)
BKSLASH_FILL 5 以粗反斜線填充(粗陰影線)
LTBKSLASH_FILL 6 以反斜線填充(陰影線)
HATCH_FILL 7 以直方網格填充
XHATCH_FILL 8 以斜網格填充
INTTERLEAVE_FILL 9 以間隔點填充
WIDE_DOT_FILL 10 以稀疏點填充
CLOSE_DOS_FILL 11 以密集點填充
USER_FILL 12 以用戶定義式樣填充
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
除USER_FILL(用戶定義填充式樣)以外, 其它填充式樣均可由setfillstyle()
函數設置。當選用USER_FILL時, 該函數對填充圖模和顏色不作任何改變。 之所
以定義USER_FILL主要因為在獲得有關填充信息時用到此項。
void far setfillpattern(char * upattern,int color);
設置用戶定義的填充圖模的顏色以供對封閉圖形填充。
其中upattern是一個指向8個字節的指針。這8個字節定義了8x8點陣的圖形。
每個字節的8位二進制數表示水平8點, 8個字節表示8行, 然后以此為模型向個封
閉區域填充。
void far getfillpattern(char * upattern);
該函數將用戶定義的填充圖模存入upattern指針指向的內存區域。
void far getfillsetings(struct fillsettingstype far * fillinfo);
獲得現行圖模的顏色并將存入結構指針變量fillinfo中。其中fillsettingstype
結構定義如下:
struct fillsettingstype{
int pattern; /* 現行填充模式 * /
int color; /* 現行填充模式 * /
};
有關圖形填充圖模的顏色的選擇, 請看下面例程。
例11:
#includegraphics.h
main(){
char str[8]={10,20,30,40,50,60,70,80}; /*用戶定義圖模*/
int gdriver,gmode,i;
struct fillsettingstype save; /*定義一個用來存儲填充信息的結構變量*/
gdriver=DETECT;
initgraph(gdriver,gmode,"c:\\tc");
setbkcolor(BLUE);
cleardevice();
for(i=0;i13;i++)
{
setcolor(i+3);
setfillstyle(i,2+i); /* 設置填充類型 *
bar(100,150,200,50); /*畫矩形并填充*/
bar3d(300,100,500,200,70,1); /* 畫長方體并填充*/
pieslice(200, 300, 90, 180, 90);/*畫扇形并填充*/
sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/
delay(1000); /*延時1秒*/
}
cleardevice();
setcolor(14);
setfillpattern(str, RED);
bar(100,150,200,50);
bar3d(300,100,500,200,70,0);
pieslice(200,300,0,360,90);
sector(500,300,0,360,100,50);
getch();
getfillsettings(save); /*獲得用戶定義的填充模式信息*/
closegraph();
clrscr();
printf("The pattern is %d, The color of filling is %d",
save.pattern, save.color); /*輸出目前填充圖模和顏色值*/
getch();
}
以上程序運行結束后, 在屏幕上顯示出現行填充圖模和顏色的常數值。
一、圖形窗口操作
象文本方式下可以設定屏幕窗口一樣, 圖形方式下也可以在屏幕上某一區域
設定窗口, 只是設定的為圖形窗口而已, 其后的有關圖形操作都將以這個窗口的
左上角(0,0)作為坐標原點, 而且可為通過設置使窗口之外的區域為不可接觸。
這樣, 所有的圖形操作就被限定在窗口內進行。
void far setviewport(int xl,int yl,int x2, int y2,int clipflag);
設定一個以(xl,yl)象元點為左上角, (x2,y2)象元為右下角的圖形窗口, 其
中x1,y1,x2,y2是相對于整個屏幕的坐標。若clipflag為非0, 則設定的圖形以外
部分不可接觸, 若clipflag為0, 則圖形窗口以外可以接觸。
void far clearviewport(void);
清除現行圖形窗口的內容。
void far getviewsettings(struct viewporttype far * viewport);
獲得關于現行窗口的信息,并將其存于viewporttype定義的結構變量viewport
中, 其中viewporttype的結構說明如下:
struct viewporttype{
int left, top, right, bottom;
int cliplag;
};
注明:
1. 窗口顏色的設置與前面講過的屏幕顏色設置相同, 但屏幕背景色和窗口
背景色只能是一種顏色, 如果窗口背景色改變, 整個屏幕的背景色也將改變這與
文本窗口不同。
2. 可以在同一個屏幕上設置多個窗口, 但只能有一個現行窗口工作, 要對
其它窗口操作, 通過將定義那個窗口的setviewport()函數再用一次即可。
3. 前面講過圖形屏幕操作的函數均適合于對窗口的操作。
二、屏幕操作
除了清屏函數以外, 關于屏幕操作還有以下函數:
void far setactivepage(int pagenum);
void far setvisualpage(int pagenum);
這兩個函數只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage() 函數
是為圖形輸出選擇激活頁。 所謂激活頁是指后續圖形的輸出被寫到函數選定的
pagenum頁面, 該頁面并不一定可見。setvisualpage()函數才使pagenum 所指定
的頁面變成可見頁。頁面從0開始(Turbo C默認頁)。如果先用setactivepage()
函數在不同頁面上畫出一幅幅圖像,再用setvisualpage()函數交替顯示, 就可以
實現一些動畫的效果。
void far getimage(int xl,int yl, int x2,int y2, void far *mapbuf);
void far putimge(int x,int,y,void * mapbuf, int op);
unsined far imagesize(int xl,int yl,int x2,int y2);
這三個函數用于將屏幕上的圖像復制到內存,然后再將內存中的圖像送回到
屏幕上。首先通過函數imagesize()測試要保存左上角為(xl,yl), 右上角為(x2,
y2)的圖形屏幕區域內的全部內容需多少個字節, 然后再給mapbuf 分配一個所測
數字節內存空間的指針。通過調用getimage()函數就可將該區域內的圖像保存在
內存中, 需要時可用putimage()函數將該圖像輸出到左上角為點(x, y)的位置上,
其中getimage()函數中的參數op規定如何釋放內存中圖像。
關于這個參數的定義參見表8。
表8. putimage()函數中的op值
━━━━━━━━━━━━━━━━━━━━━━━━━━
符號常數 數值 含 義
——————————————————————————
COPY_PUT 0 復制
XOR_PUT 1 與屏幕圖像異或的復制
OR_PUT 2 與屏幕圖像或后復制
AND_PUT 3 與屏幕圖像與后復制
NOT_PUT 4 復制反像的圖形
━━━━━━━━━━━━━━━━━━━━━━━━━━
對于imagesize()函數, 只能返回字節數小于64K字節的圖像區域, 否則將會
出錯, 出錯時返回-1。
本節介紹的函數在圖像動畫處理、菜單設計技巧中非常有用。
例13: 下面程序模擬兩個小球動態碰撞過程。
#includestdio.h
#includegraphics.h
int main()
{
int i, gdriver, gmode, size;
void *buf;
gdriver=DETECT;
initgraph(gdriver, gmode, "");
setbkcolor(BLUE);
cleardevice();
setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1, 10);
circle(100, 200, 30);
floodfill(100, 200, 12);
size=imagesize(69, 169, 131, 231);
buf=malloc(size);
getimage(69, 169, 131, 231,buf);
putimage(500, 269, buf, COPY_PUT);
for(i=0; i185; i++){
putimage(70+i, 170, buf, COPY_PUT);
putimage(500-i, 170, buf, COPY_PUT);
}
for(i=0;i185; i++){
putimage(255-i, 170, buf, COPY_PUT);
putimage(315+i, 170, buf, COPY_PUT);
}
getch();
closegraph();
}
電腦中常說的“系統文件”意思
WINDOWS與其自帶的工具、服務、軟件、支持庫等都為系統文件。刪除了某項功能就不能用了。
高三英語單選題
1.應該選C,因為對于將要發生的事情還沒有發生的話不能用didn't,所以需要用haven't
但是對于這個問題有以下幾種說法:
情態動詞+動詞完成時,即情態動詞+have+done.表示對過去的行為或動作進行推測,評論或者判斷.
1.must have done.
表示對過去某事的肯定猜測,其否定或疑問形式都用can/could來表示。
例如:since the road is wet,it must have rained last night.
2;當然對現在發生或者將來發生的事情,要用must do表示猜測,否定為can’t do
he must understand that we mean business.
you must be hungry after a long walk.
反意疑問句中含有Must的情況主要有以下幾種:
1)作為情態動詞表“必須”,這時反意疑問句直接用mustn'/needn't
2)當must表示推測時又分以下幾種情況:
a:對現在事實的推測,反意疑問句與must后面的動詞呼應,如:
You must be joking,aren't you ?
b:對過去事實的推測,表示動作的時候用did 當助動詞,表示狀態時用was,如:
Mr Green must have been punished for his being rude at the meeting,didn‘t he ?(格林先生一定因為昨天在會上魯莽的行為被處罰了,是嗎?) 被處罰表示一個動作
She must have been a policeman ,wasn't she ?(她過去一定是個警察,是嗎?) 是警察表示一種狀態
對現在情況的推測,問句部分用主動詞(do,be)一般現在時的適當形式。若是現在進行時,問句部分用現在進行時的適當形式表示。若是there be結構,問句用isn't/aren't there。如:
1)He must be there,isn't he?
2)He must have a big family,doesn't he?
3)He must be waiting outside,isn't he?
4)There must be some students in the room,aren't there?
對已發生的過去情況的推測,若陳述句謂語部分有“must have done”,而且有表示過去的時間狀語,問句部分用didn't;若沒有表示過去的時間狀語,問句部分用haven't或hasn't。如:
1)They must have gone there last night,didn't they?
2)They must have arrived by now,haven't they?(根據by now來判斷)
3)They must have been to the Great Wall,haven't they?
若是被動,應按被動結構來處理。如:
1)The room must have been cleaned yesterday,wasn't it?
2)The room must have been cleaned,hasn't it?
若句中有表示過去完成時的時間狀語,問句部分應用hadn't.如:
They must have learnt 5000 English words by the end of last term,hadn't they?
(本題中must表推測,如果將它去掉,還原為真實句就是They had learnt 5000 English words by the end of last term.因此,反意問句是hadn't)
這是一個老師對這個問題的考據貼
這是咱中國老師特喜歡出的考題。
He must have come yesterday, (mustn't he, didn't he, hasn't he)?
我曾經在網上請教過本族語英語老師,他們眾說紛紜,最后不了了之。其中一位加拿大老師堅持用mustn't he,理由是反意疑問句的作用就是要求對方證實,根據語法規則,上半句用哪個助動詞,反意疑問句還用哪個助動詞;另一位加拿大老師堅持用didn't he, 理由是mustn't he = mustn't he have come yesterday?因為must表示邏輯推斷不用于疑問句,所以不對。通過他們的沒有結論的辯論透露出一個信息:本族語的人們在講話中說到He must have come yesterday,很肯定,很少會要求對方證實。帶著這個猜測,我上reference.com的網頁,鍵入"must have come", 得到40500個結果,再鍵入 "must have come, mustn't"和"must have come, didn't",must have come, hasn't, 結果竟然都是零!
但下面這個句子就很合理:
You could have left it on the bus, couldn't you? 這個句子來自《牛津高階英漢雙解詞典》could條,說話人并沒有用didn't you進行反意提問。這難道不發人深思嗎?建議我們中國老師不要出
He must have come yesterday, (mustn't he, didn't he)?
這樣的題目為難學生了。我希望能夠有更多的老師能夠教學生以實踐語言中真正有用的東西,而不是以按語法規則造句甚至以游戲語法規則為樂。
2.B,選B是因為突出強調東西就是不工作,will表示意愿而不是將要干某事
3.B,表示將要得到,,上邊已經說不要擔心了,所以肯定會有書的,不能選may.
SHALL用法如下
shall
(尤其注意第四條,常考!!)
1. (用于第一人稱,表示將來)將,會
I shall be thirty next year.
明年我就三十歲了。
2. (用在問句中表示征求對方意見,主要用于第一、第三人稱)...好嗎?要不要...?
Shall we begin now?
我們現在開始好嗎?
Shall I wait outside?
我在外面等好嗎?
Shall I turn on the lights?
我開燈好嗎?
3. (用于陳述句中的第二、第三人稱,表示說話人的意圖、允諾、警告、命令、決心等)必須,應,可
You shall have it back next week.
下星期一定還你。
He shall stay in bed.
他必須躺在床上。
He says he won't go, but I say he shall.
他說他不去,但我說他必須去。
4. (用在條約、規章、法令等文件中表示義務或規定,一般用于第三人稱)應,必須
Intruders shall be punished.
非法闖入者將遭處罰。
4.D,這個意思是說,有一點事情你是可以確認的,就是英國人喜歡說天氣。can在這表示可以,能夠
5.whatever=no matter what