二級c語言上機題
『壹』 計算機二級c語言上機改錯題考點總結
對上機考試改錯題的做題方法和總結,改錯題的錯誤主要分為以下幾類:
1、if或while語句
若錯誤行是if或者while語句,則要注意以下點:
1)首先判斷是否正確書寫if或while關鍵字;
2)然後看有沒有用小括弧把整個表達式括起來,若沒有則加上小括弧;
3)若條件表達式中有指針變數而且沒有指針運算符時,則加上指針運算符;
4)若if條件表達式中只有一個等於號即數學等號(=),則要改寫成兩個等於號即邏輯等號(= =);
5) 若if條件表達式為其他的比較運算符,則一般是進行逆轉或加一個等於號;
2、for語句
若錯誤行是for語句,則要注意以下幾點:
1)首先判斷for有沒有書寫正確;
2)然後看for中的表達式是不是用分號(;)隔開,若不是則改為分號。
記住是分號(;),不是逗號(,)!
3) 再者,分析for中的三個表達式,是否符合題意;
第一個表達式表示起始條件,
第二個表達式表示終止條件,
第三個表達式表示循環變數的變化。
3、return語句
若錯誤行為return語句,則要注意以下幾點:
1)首先看是不是正確書寫return關鍵字;
2)然後看是不是缺少分號,若是則加上分號即可;
3)再者判斷return後的變數或表達式是否正確;
這種錯誤需要根據題意來分析,分析返回變數或表達式的值和類型。
4、賦值語句
若錯誤行是賦值語句,則要看賦值是否正確,然後看賦值運算符是否寫正確。
5、定義語句
若錯誤行是定義語句,則要注意:
1)首先分析變數類型名是否寫對;
2)然後分析給變數賦初值是否正確;
3)若以上均不是,則看是不是少定義了某個變數或少了花括弧;
6、表達式錯誤問題:
若錯誤行中有整數1除以某個表達式或變數時,必須把整數1改為1.0;若變數或表達式是整型時,則只能進行強制類型轉換。
7、字元串類問題
若錯誤行中有字元串結束符,則特別要要注意結束符有沒有寫錯。但是要區分清楚字元『o』和數字』0』。
8、指針類問題
若錯誤行中有指針變數,並且該變數名之前沒有指針運算符,則一般都是加上指針運算符;
9、函數首部類問題:
若錯誤行是函數首部,則要注意:
1)首先看該行最後有沒有分號,若有則刪掉分號;若中間有分號則要改為逗號;
2)形參和實參類型不一致問題
①若實參是個地址或數組名或指針變數名,則對應的形參肯定是指針或數組;
②若實參是二維數組名,則對應的形參應該是指針數組或是二維數組;
③若後面用到某形參的時候有指針運算符,則該形參比為指針類型;
④若形參是二維數組或指向M個元素的`指針變數,則該二維的長度必須與main中對於數組的第二維的長度相同。
3)函數類型不一致問題
①若函數中沒有return語句,則函數類型為void;
②若函數中有return語句,則函數的類型必須與rerun後的變數類型一致;
記住,調用函數的類型與main中的該函數的類型一致!
10.語法錯誤問題:
1)語句缺少分號。若錯誤號中語句沒有以分號結束則加上分號;
2)變數名不一致。C語言是區分大小寫的,若錯誤行中有大寫字母一般都改為小寫字母;
11.邏輯錯誤問題:
這種題型主要是表達式錯誤,占的題量比較多而且我們沒有統一的做題方法,需要我們具體問題具體分析。
12.書寫錯誤問題:
特別注意我們的注釋部分,注釋是以/*開始,以*/結尾,不能有多餘的,有也只能在/*和*/裡面。注意,比如「/***注釋部分*****/*/」是錯誤的!
『貳』 二級C語言的一道上機題
「對第三位小數進行四捨五入後處理」
你處理的只是輸出方式,而沒處理數本身
『叄』 關於全國計算機二級C語言上機問題
共三題;
1.程序填空題
例如:在主函數中從鍵盤輸入若干個數放入數組a中,用0結束輸入但不計入數組。下列給定程序中,函數fun的功能是:輸出數組元素中小於平均值的元素。
例如,數組中元素的值依次為34、54、675、456、453、121,則程序的運行結果為34、54、121。
請在程序的下劃線處填入正確的內容並把下劃線刪除,使程序得出正確的結果。
注意:不得增行或刪行,也不得更改程序的結構!
#include <conio.h>
#include <stdio.h>
void fun(___1___,int n)
{
double count=0.0;
double average=0.0;
int i=0;
for(i=0;i<n;i++)
___2___;
average=___3___;
for(i=0;i<n;i++)
if(a[i]<average)
{
if(i%5==0)
printf("\n");
printf("%d,",a[i]);
}
}
main()
{
int a[1000];
int i=0;
printf("\nPlease enter datas(end with 0):");
do
{
scanf("%d",&a[i]);
}while(a[i++]!=0);
fun(a,i-1);
}
2.程序修改題
例如:給定程序中,函數fun的功能是:根據整型形參m,計算如下公式的值:
y=1+1/(2*2)+1/(3*3)+1/(4*4)+…+1/(m*m)
例如:若m中的值為5,則應輸出1.463611。
請改正程序中的錯誤,使其能得出正確的結果。
注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!
#include <stdio.h>
double fun(int m)
{
double y=1.0;
int I;
/**********found**********/
for(i=2;i<m;i++)
/**********found**********/
y+=1/(i*i);
return(y);
}
main()
{
int n=5;
printf("\nThe result is %lf\n", fun(n));
}
3.程序設計題
例如:函數fun的功能是:將s所指字元串中除了下標為偶數、同時ASCII值也為偶數的字元外,其餘的全都刪除;串中剩餘字元所形成的一個新串放在t所指的數組中。
例如,若s所指字元串中的內容為「ABCDEFG 123456」,其中字元A的ASCII碼值為奇數,因此應當刪除;其中字元B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字元2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最後,t所指的數組中的內容應是「246」。
注意:部分源程序已給出。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括弧中填入所編寫的若干語句。
#include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
{
}
main()
{
char s[100],t[100];
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s,t);
printf("\nThe result is: %s\n",t);
}
『肆』 9月計算機二級《C語言》上機考題及答案
1、以下選項中屬於C語言的數據類型是()。
A. 復合型
B. 雙精度型
C. 邏輯型
D. 集合型
2、以下說法中正確的是()。
A. C語言程序總是從第一個的函數開始執行
B. 在C語言程序中,要調用的函數必須在main()函數中定義
C. C語言程序總是從main()函數開始執行
D. C語言程序中的main()函數必須放在程序的開始部分
3、選出下列標識符中不是合法的標識符的是()。
A. hot_do
B. cat1
C. _pri
D. 2ab
4、下列描述中不正確的是()。
A、字元型數組中可能存放字元串。
B、可以對字元型數組進行整體輸入、輸出。
C、可以對整型數組進行整體輸入、輸出。
D、 不能在賦值語句中通過賦值運算符“=”對字元型數組進行整體賦值。
5、若已定義:int a[9], *p=a;並在以後的語句中未改變p的值,不能表示a[1]地址的表達式為()。
A. p+1
B. a+1
C. a++
D. ++p
6、設有如下定義: int x=10,y=3,z; 則語句printf("%d ",z=(x%y,x/y)); 的輸出結果是()。
A. 1
B. 0
C. 4
D. 3
7、定義如下變數和數組: int i, x[3][3]={1,2,3,4,5,6,7,8,9};則下面語句for(i=0;i<3;i++) printf("%d",x[i][2-i]); 的輸出結果是()
A. 1 5 9
B. 1 4 7
C. 3 5 7
D. 3 6 9
8、讀出以下語句的輸出結果是()。
int x=10,y=10;
printf(“%d %d ”,x--,--y);
A. 10 10
B. 9 9
C. 9 10
D. 10 9
9、兩次運行下面的程序,如果從鍵盤上分別輸入6和3,則輸出結果是()。
if(x++>5) printf("%d",x);
else printf("%d ",x - -);
A. 7和5
B. 6和3
C. 7和4
D. 6和4
10、設有如下定義:char *aa[2]={"abcd","ABCD"};則以下說法中正確的是()。
A)aa數組成元素的值分別是"abcd"和ABCD"
B)aa是指針變數,它指向含有兩個數組元素的字元型一維數組
C)aa數組的兩個元素分別存放的是含有4個字元的一維字元數組的`首地址
D)aa數組的兩個元素中各自存放了字元’a’和’A’的地址
11、以下語句的輸出結果是()。
int a=-1,b=4,k;
k=(+ +a<0)&&!(b - -<=0);
printf("%d,%d,%d ",k,a,b);
A. 1,0,4
B. 1,0,3
C. 0,0,3
D. 0,0,4
12、下列程序的輸出結果是()。
char *p1="abcd", *p2="ABCD", str[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s",str);
A. xyabcAB
B. abcABz
C. ABabcz
D. xycdBCD
13、執行下面的程序後,a的值是()。
#define SQR(X) X*X
main()
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d ",a); }
A. 10
B. 1
C. 9
D. 0
14、設A為存放(短)整型的一維數組,如果A的首地址為P,那麼A中第i 個元素的地址為()。
A.P+i*2
B. P+(i-1)*2
C. P+(i-1)
D. P+i
15、下列程序執行後輸出的結果是()。
int d=1;
fun (int p)
{ int d=5;
d + =p + +;
printf("%d,",d); }
main()
{ int a=3;
fun(a);
d + = a + +;
printf("%d ",d); }
A. 8, 4
B. 9, 6
C. 9, 4
D. 8, 5
16、表達式:10!=9的值是()。
A. true
B. 非零值
C. 0
D. 1
17、若有說明: int i,j=7, *p=&i;, 則與i=j; 等價的語句是()。
A. i= *p;
B. *p=*&j;
C. i=&j;
D. i=* *p;
18、不能把字元串:Hello!賦給數組b的語句是()。
A. char b[10]={’H’,’e’,’l’,’l’,’o’,’!’};
B. char b[10]; b="Hello!";
C. char b[10]; strcpy(b,"Hello!");
D.char b[10]="Hello!";
19、在C程序中有如下語句:char *func(int x,int y); 它是()。
A. 對函數func的定義。
B. 對函數func的調用。
C.對函數func的原型說明。
D. 不合法的。
20、以下程序的輸出結果是()。
char str[15]=”hello!”;
printf(“%d ”,strlen(str));
A. 15
B. 14
C. 7
D. 6
參考答案:
1、B 2、C 3、D 4、C 5、C 6、D 7、C 8、D 9、C 10、D
11、D 12、D 13、B 14、B 15、A 16、D 17、B 18、B 19、C 20、D
『伍』 9月計算機二級《C語言》上機試題及答案
(1)一個棧的初始狀態為空。現將元素1、2、3、4、5、A、B、c、D、E依次入棧,然後再依次出棧,則元素出棱的順序是( )。
A.12345ABCDE
B.EDCBA54321
C.ABCDEl2345
D.54321EDCBA
(2)下列敘述中正確的是( )。
A.循環隊列有隊頭和隊尾兩個指針,因此,循環隊列是非線性結構
B.在循環隊列中,只需要隊頭指針就能反映隊列中元素的動態變化情況
C.在循環隊列中,只需要隊尾指針就能反映隊列中元素的動態變化情況
D.循環隊列中元素的個數是由隊頭指針和隊尾指針共同決定的
(3)在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是( )。
A.0(n)
B.D(n2)
C.O(1092n)
D.0(nl092n)
(4)下列敘述中正確的是( )。
A.順序存儲結構的存儲一定是連續的,鏈式存儲結構的存儲空間不一定是連續的
B.順序存儲結構只針對線性結構,鏈式存儲結構只針對非線性結構
C.順序存儲結構能存儲有序表,鏈式存儲結構不能存儲有序表
D.鏈式存儲結構比順序存儲結構節省存儲空間
(5)數據流圖中帶有箭頭的線段表示的是( )。
A.控制流
B.事件驅動
C.模塊調用
D.數據流
(6)在軟體開發中,需求分析階段可以使用的工具是( )。
A.N—s圖
B.DFD圖
C.PAD圖
D.程序流程圖
(7)在面向對象方法中,不屬於“對象”基本特點的是( )。
A.一致性
B.分類性
C.多態性
D.標識唯一性
(8)一間宿舍可住多個學生,則實體宿舍和學生之間的聯系是( )。
A.一對一
B.一對多
C.多對一
D.多對多
(9)在數據管理技術發展的三個階段中,數據共享最好的是( )。
A.人工管理階段
B.文件系統階段
C.資料庫系統階段
D.三個階段相同
(10)有三個關系R、S和T如下:
由關系R和S通過運算得到關系T,則所使用的運算為( )。
A.笛卡爾積
B.交
C.並
D.自然連接
(11)下列敘述中錯誤的是( )。
A.C程序可以由多個程序文件組成
B.一個c語言程序只能實現一種演算法
C.c程序可以由一個或多個函數組成,
D.一個C函數可以單獨作為一個C程序文件存在(12)以下選項中,能用作數據常量的是( )。
A.115L
B.0118
C.1.5el.5
D.0115
(13)按照c語言規定的用戶標識符命名規則,不能出現在標識符中的是( )。
A.大寫字母
B.下劃線
C.數字字元
D.連接符
(14)設變數已正確定義並賦值,以下正確的表達式是( )。
A.X=Y+z+5,++Y
B.int(15.8%5)
C.X=Y*5=X+Z
D.X=25%5.0
(15)設有定義:int X=2;,以下表達式中,值不為6的是( )。
A.2*x.x+=2
B.x++,2*x
C.x*=(1+x)
D.x*!x+1
(16)有以下程序:
程序運行後的輸出結果是( )。
A.2,3,3
B.2,3,2
C.2,3,1
D.2,2,1
(17)有以下程序:
已知字母A的ASCIl碼為65,程序運行後的輸出結果是( )。
A)E.68B.
B)D,69
C.E,D
D.輸出無定值
(18)若有定義int x,y;並已正確給變數賦值,則以下選項中與表達式(x—y)?(x++):(y++)中的條件表達式(x—Y)等價的是( )。
A.(x—Y<01Ix—Y>O)
B.(x—y<0)
C.(x—Y>0)
D.(x—Y==0)
(19)有以下程序:
程序運行後的輸出結果是( )。
A.3
B.2
C.1
D.0
(20)若有定義:float x=1.5;int a=1,b=3,c=2;則正確的switch語句是( )。
『陸』 c語言二級考試上機題一共幾道
3道,第一道是填空,一般3個空或者兩個空。第二道是改錯,一般也是兩個到三個錯誤,第三道是編程,不是所有都要你寫,只要你根據題意吧主程序寫出來就可以了,分值分別為30分,30分和40分。你可以買題庫,一共100套,只要你都做完,上機肯定可以通過,因為考試題是從那裡面出的。
『柒』 一道二級c語言上機題
從結果上看你的答案是沒有問題,我也不知道你哪裡錯了,但我發現你在邏輯上犯了錯誤!就順便給你說說,M是字元串的最大長度,不是實際長度,當字元串實際長度小於M時,多餘的部分用ASCII的0還是用隨機數來填充,不得而知,這個要看編輯器是哪個,C語言編輯器有好幾個,同一個邏輯錯誤在不同編輯器上表現也不同,有的就對,有的就錯,也可能是你機器上的C調試工具和模擬系統的調試工具不一樣,恰好你的這個邏輯錯誤在你的工具上沒表現出初錯誤,而在模擬系統上檢測時就出現問題!
所以不建議這樣寫for(i=0;i<M;i++)
if(ss[i]==c) k++; return k;
推薦:for(i=0;ss[i];i++) 代替循環,這樣嚴謹些!你可以試試。
當然這種可能有,但不一定是,希望對你有幫助,自學畢竟不可能曉得一個特別容易被忽略的地方。
『捌』 二級C語言上機題目
只要數組a或數組b結束了,也就是出現'\0',循環停止。
機改的吧!好像是用軟體讀取生成的一個叫dat的文件。
『玖』 計算機二級C語言的上機題的編程題怎麼給分啊
不管你程序寫怎麼樣。只看結果。對了滿分不對0分。編程題滿分為24分。
如果有out.dat文件,將該文件和標准答案的out.dat文件對比,看相符的比例是多少而給分,如果完全相同則是100分,如果沒有out.dat文件,則比較考生編寫的代碼和標准答案的代碼的相符情況,按相符度給分。
評分程序先是讀取考生文件夾下的擴展名為.DAT的文件,再其中的數據與評分程序中的提供的數據進行對比,因此,考生在編程後,一定要運行程序,以生成擴展名為.DAT的輸出文件。
(9)二級c語言上機題擴展閱讀:
考試注意事項:
1、審題要仔細。
2、一定要考慮除零、溢出、類型轉換、精度等細節問題。
3、不要使用快捷鍵。
熱鍵在考試的時候是很危險的,因為UCDOS的熱鍵和TC的沖突,CTRL+F9變成了全形半形轉換。
4、不要載入任何輸入法。
上機考試用的DOS環境內存十分有限,如果你載入了任何一個輸入法,都有可能造成編譯程序的時候出現out of memory 內存不足的情況,到那時就麻煩了。