2025計算機二級考試C語言習題及答案
在日常學習和工作中,我們經常跟練習題打交道,學習需要做題,是因為這樣一方面可以了解你對知識點的掌握,熟練掌握知識點!同時做題還可以鞏固你對知識點的運用!你所了解的習題是什么樣的呢?下面是小編為大家整理的2025計算機二級考試C語言習題及答案,歡迎閱讀,希望大家能夠喜歡。
計算機二級考試C語言習題及答案 1
一、 選擇題
(1)下列關于棧敘述正確的是
A)棧頂元素最先能被刪除
B)棧頂元素最后才能被刪除
C)棧底元素永遠不能被刪除
D)以上三種說法都不對
(2)下列敘述中正確的是
A)有一個以上根結點的數(shù)據結構不一定是非線性結構
B)只有一個根結點的數(shù)據結構不一定是線性結構
C)循環(huán)鏈表是非線性結構
D)雙向鏈表是非線性結構
(3)某二叉樹共有7個結點,其中葉子結點只有1個,則該二叉樹的深度為(假設根結點在第1層)
A)3
B)4
C)6
D)7
(4)在軟件開發(fā)中,需求分析階段產生的主要文檔是
A)軟件集成測試計劃
B)軟件詳細設計說明書
C)用戶手冊
D)軟件需求規(guī)格說明書
(5)結構化程序所要求的基本結構不包括
A)順序結構
B)GOTO跳轉
C)選擇(分支)結構
D)重復(循環(huán))結構
(6)下面描述中錯誤的是
A)系統(tǒng)總體結構圖支持軟件系統(tǒng)的詳細設計
B)軟件設計是將軟件需求轉換為軟件表示的過程
C)數(shù)據結構與數(shù)據庫設計是軟件設計的任務之一
D)PAD圖是軟件詳細設計的表示工具
(7)負責數(shù)據庫中查詢操作的數(shù)據庫語言是
A)數(shù)據定義語言
B)數(shù)據管理語言
C)數(shù)據操縱語言
D)數(shù)據控制語言
(8)一個教師可講授多門課程,一門課程可由多個教師講授。則實體教師和課程間的聯(lián)系是
A)1:1聯(lián)系
B)1:m聯(lián)系
C)m:1聯(lián)系
D)m:n聯(lián)系
(9)有三個關系R、S和T如下:
則由關系R和S得到關系T的操作是
A)自然連接
B)交
C)除
D)并
(10)定義無符號整數(shù)類為UInt,下面可以作為類UInt實例化值的是
A)-369
B)369
C)0.369
D)整數(shù)集合{1,2,3,4,5}
(11)計算機高級語言程序的運行方法有編譯執(zhí)行和解釋執(zhí)行兩種,以下敘述中正確的是
A)C語言程序僅可以編譯執(zhí)行
B)C語言程序僅可以解釋執(zhí)行
C)C語言程序既可以編譯執(zhí)行又可以解釋執(zhí)行
D)以上說法都不對
(12)以下敘述中錯誤的是
A)C語言的可執(zhí)行程序是由一系列機器指令構成的
B)用C語言編寫的源程序不能直接在計算機上運行
C)通過編譯得到的二進制目標程序需要連接才可以運行
D)在沒有安裝C語言集成開發(fā)環(huán)境的.機器上不能運行C源程序生成的exe文件
(13)以下選項中不能用作C程序合法常量的是
A)1,234
B)\123
C)123
D)"\x7G"
(14)以下選項中可用作C程序合法實數(shù)的是
A).1e0
B)3.0e0.2
C)E9
D)9.12E
(15)若有定義語句:int a=3,b=2,c=1;,以下選項中錯誤的賦值表達式是
A)a=(b=4)=3;
B)a=b=c+1;
C)a=(b=4)+c;
D)a=1+(b=c=4);
(16)有以下程序段
char name[20];
int num;
scanf("name=%snum=%d",name;&num);
當執(zhí)行上述程序段,并從鍵盤輸入:name=Lili num=1001<回車>后,name的值為
A)Lili
B)name=Lili
C)Lilinum=
D)name=Lili num=1001
(17)if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是
A)必須是邏輯值
B)必須是整數(shù)值
C)必須是正數(shù)
D)可以是任意合法的數(shù)值
(18)有以下程序
#include
main()
{ int x=011;
printf("%d\n",++x);
}
程序運行后的輸出結果是
A)12
B)11
C)10
D)9
(19)有以下程序
#include
main()
{ int s;
scanf("%d",&s);
while(s>0)
{ switch(s)
{ case 1:printf("%d",s+5);
case 2:printf("%d",s+4);break;
case 3:printf("%d",s+3);
default:printf("%d",s+1);break;
}
scanf("%d",&s);
}
}
運行時,若輸入1 2 34 5 0<回車>,則輸出結果是
A)6566456
B)66656
C)66666
D)6666656
(20)有以下程序段
int i,n;
for(i=0;i<8;i++)
{n=rand()%5;
switch (n)
{ case 1:
case 3:printf("%d\n",n); break;
case 2:
case 4:printf("%d\n",n);continue;
case 0:exit(0);
}
printf("%d\n",n);
}
以下關于程序段執(zhí)行情況的敘述,正確的是
A)for循環(huán)語句固定執(zhí)行8次
B)當產生的隨機數(shù)n為4時結束循環(huán)操作
C)當產生的隨機數(shù)n為1和2時不做任何操作
D)當產生的隨機數(shù)n為0時結束程序運行
(21)有以下程序
#include
main()
{ chars[]="012xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=0&&s[i]<=9)n++;
printf("%d\n",n);
}
程序運行后的輸出結果是
A)0
B)3
C)7
D)8
(22)若i和k都是int類型變量,有以下for語句
for(i=0,k=-1;k=1;k++)printf("*****\n");
下面關于語句執(zhí)行情況的敘述中正確的是
A)循環(huán)體執(zhí)行兩次
B)循環(huán)體執(zhí)行一次
C)循環(huán)體一次也不執(zhí)行
D)構成無限循環(huán)
(23)有以下程序
#include
main()
{ char b,c;int i;
b=a; c=A;
for(i=0;i<6;i++)
{ if(i%2) puti+
B);
else puti+
C);
}
printf("\n");
}
程序運行后的輸出結果是
A)ABCDEF
B)AbCdEf
C)aBcDeF
D)abcdef
(24)設有定義:double x[10],*p=x;,以下能給數(shù)組x下標為6的元素讀入數(shù)據的正確語句是
A)scanf("%f",&x[6]);
B)scanf("%lf",*(x+6));
C)scanf("%lf",p+6);
D)scanf("%lf",p[6]);
(25)有以下程序(說明:字母A的ASCII碼值是65)
#include
voidfun(char *s)
{ while(*s)
{ if(*s%2) printf("%c",*s);
s++;
}
}
main()
{ char a[]="BYTE";
fun(a);
printf("\n");
}
程序運行后的輸出結果是
A)BY
B)BT
C)YT
D) YE
(26)有以下程序段
#include
main()
{ …
while( get)!=\n);
…
}
以下敘述中正確的是
A)此while語句將無限循環(huán)
B) get)不可以出現(xiàn)在while語句的條件表達式中
C)當執(zhí)行此while語句時,只有按回車鍵程序才能繼續(xù)執(zhí)行
D)當執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行
(27)有以下程序
#include
main()
{ int x=1,y=0;
if(!x) y++;
else if(x==0)
if (x) y+=2;
else y+=3;
printf("%d\n",y);
}
程序運行后的輸出結果是
A)3
B)2
C)1
D) 0
(28)若有定義語句:char s[3][10],(*k)[3],*p;,則以下賦值語句正確的是
A)p=s;
B)p=k;
C)p=s[0];
D)k=s;
(29)有以下程序
#include
voidfun(char *
C)
{ while(*
C)
{if(*c>=a&&*c<=z) *c=*c-(a-A);
c++;
}
}
main()
{ chars[81];
gets(s);
fun(s);
puts(s);
}
當執(zhí)行程序時從鍵盤上輸入HelloBeijing<回車>,則程序的輸出結果是
A)hello beijing
B)Hello Beijing
C)HELLO BEIJING
D)hELLO Beijing
(30)以下函數(shù)的功能是:通過鍵盤輸入數(shù)據,為數(shù)組中的所有元素賦值。
#include
#define N 10
void fun(intx[N])
{ int i=0;
while(i}
在程序中下劃線處應填入的是
A)x+i
B)&x[i+1]
C)x+(i++)
D)&x[++i]
(31)有以下程序
#include
main()
{ chara[30],b[30];
scanf("%s",a);
gets(
B);
printf("%s\n %s\n",a,
B);
}
程序運行時若輸入:
how areyou? I am fine<回車>
則輸出結果是
A)how areyou?
B)how
I am fine are you? I am fine
C)how areyou? I am fine
D)how are you?
(32)設有如下函數(shù)定義
int fun(intk)
{ if(k<1) return 0;
elseif(k==1) return 1;
else returnfun(k-1)+1;
}
若執(zhí)行調用語句:n=fun(3);,則函數(shù)fun總共被調用的次數(shù)是
A)2
B)3
C)4
D)5
(33)有以下程序
#include
int fun (int x,int y)
{ if(x!=y) return ((x+y)/2);
else return (x);
}
main()
{ inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,
C)));
}
程序運行后的輸出結果是
A)3
B)6
C)8
D)12
(34)有以下程序
#include
int fun()
{ static intx=1;
x*=2;
return x;
}
main()
{ int i,s=1;
for(i=1;i<=3;i++) s*=fun();
printf("%d\n",s);
}
程序運行后的輸出結果是
A)0
B)10
C)30
D)64
(35)有以下程序
#include
#define S(x)4*(x)*x+1
main()
{ intk=5,j=2;
printf("%d\n",S(k+j));
}
程序運行后的輸出結果是
A)197
B)143
C)33
D)28
(36)設有定義:struct {char mark[12];int num1;double num2;} t1,t2;,若變量均已正確賦初值,則以下語句中錯誤的是
A)t1=t2;
B)t2.num1=t1.num1;
C)t2.mark=t1.mark;
D)t2.num2=t1.num2;
(37)有以下程序
#include
struct ord
{ int x,y;}dt[2]={1,2,3,4};
main()
{
struct ord *p=dt;
printf("%d,",++(p->x));printf("%d\n",++(p->y));
}
程序運行后的輸出結果是
A)1,2
B)4,1
C)3,4
D)2,3
(38)有以下程序
#include
struct S
{ inta,b;}data[2]={10,100,20,200};
main()
{ struct Sp=data[1];
printf("%d\n",++(p.a));
}
程序運行后的輸出結果是
A)10
B)11
C)20
D)21
(39)有以下程序
#include
main()
{ unsignedchar a=8,c;
c=a>>3;
printf("%d\n",
C);
}
程序運行后的輸出結果是
A)32
B)16
C)1
D)0
(40)設fp已定義,執(zhí)行語句fp=fopen("file","w");后,以下針對文本文件file操作敘述的選項中正確的是
A)寫操作結束后可以從頭開始讀
B)只能寫不能讀
C)可以在原有內容后追加寫
D)可以隨意讀和寫
二、填空題
(1)有序線性表能進行二分查找的前提是該線性表必須是【1】存儲的。
(2)一棵二叉樹的中序遍歷結果為DBEAFC,前序遍歷結果為ABDECF,則后序遍歷結果為 【2】 。
(3)對軟件設計的最小單位(模塊或程序單元)進行的測試通常稱為 【3】 測試。
(4)實體完整性約束要求關系數(shù)據庫中元組的【4】屬性值不能為空。
(5)在關系A(S,SN,
D)和關系B(D,CN,NM)中,A的主關鍵字是S,B的主關鍵字是D,則稱 【5】 是關系A的外碼。
(6)以下程序運行后的輸出結果是【6】。
#include
main()
{ int a;
a=(int)((double)(3/2)+0.5+(int)1.99*2);
printf("%d\n",a);
}
(7) 有以下程序
#include
main()
{ int x;
scanf("%d",&x);
if(x>15)printf("%d",x-5);
if(x>10)printf("%d",x);
if(x>5)printf("%d\n",x+5);
}
若程序運行時從鍵盤輸入12<回車>,則輸出結果為【7】。
(8)有以下程序(說明:字符0的ASCII碼值為48)
#include
main()
{ charc1,c2;
scanf("%d",&c1);
c2=c1+9;
printf("%c%c\n",c1,c2);
}
若程序運行時從鍵盤輸入48<回車>,則輸出結果為【8】。
(9)有以下函數(shù)
voidprt(char ch,int n)
{ int i;
for(i=1;i<=n;i++)
printf(i%6!=0?"%c":"%c\n",ch);
}
執(zhí)行調用語句prt(*,24);后,函數(shù)共輸出了 【9】 行*號。
(10)以下程序運行后的輸出結果是【10】。
#include
main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d %d\n",x,y);
}
(11)己知a所指的數(shù)組中有N個元素。函數(shù)fun的功能是,將下標k(k>0)開始的后續(xù)元素全部向前移動一個位置。請?zhí)羁铡?/p>
void fun(inta[N],int k)
{ int i;
for(i=k;i }
(12)有以下程序,請在【12】處填寫正確語句,使程序可正常編譯運行。
#include
【12】 ;
main()
{ double x,y,(*p)();
scanf("%lf%lf",&x,&y);
p=avg;
printf("%f\n",(*p)(x,y));
}
double avg(double a,double
B)
{return((a+
B)/2);}
(13)以下程序運行后的輸出結果是 【13】 。
#include
main()
{ int i,n[5]={0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;printf("%d",n[i]); }
printf("\n");
}
(14)以下程序運行后的輸出結果是 【14】 。
#include
#include
#include
main()
{ char *p;int i;
p=(char*)malloc(sizeof(char)*20);
strcpy(p,"welcome");
for(i=6;i>=0;i--) put*(p+i));
printf("\n"); free(p);
}
(15)以下程序運行后的輸出結果是【15】。
#include
main()
{ FILE *fp;int x[6]={1,2,3,4,5,6},i;
fp=fopen("test.dat","wb");
fwrite(x,sizeof(int),3,fp);
rewind(fp);
fread(x,sizeof(int),3,fp);
for(i=0;i<6;i++) printf("%d",x[i]);
printf("\n");
fclose(fp);
}
參考答案
一、選擇題 :
1-5 ABDDB 6-10 ACDCB
11-15 ADAAA 16-20 ADCAD
21-25 BDBCD 26-30 CDCCC
31-35 BBBDB 36-40 CDDCB
二、填空題 :
【1】 有序 【2】 DEBFCA 【3】單元
【4】 主鍵 【5】 D 【6】 3
【7】 1217 【8】 09 【9】 4
【10】 20 0 【11】 i-1
【12】 double avg(double,double);或doubleavg(double a,double B);
【13】 13715 【14】 emoclew 【15】 123456
計算機二級考試C語言習題及答案 2
1. 以下程序執(zhí)行后sum 的值是
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf("%d ",sum);
}
A)15
B)14
C) 不確定
D)0
你所選擇的答案是:C,正確答案是:C √
2. 當調用函數(shù)時,實參是一個數(shù)組名,則向函數(shù)傳送的是
A) 數(shù)組的'長度
B) 數(shù)組的首地址
C) 數(shù)組每一個元素的地址
D) 數(shù)組每個元素中的值
你所選擇的答案是:B,正確答案是:B √
3. 以下只有在使用時才為該類型變量分配√
4. 以下程序的輸出結果是
main()
{ 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
你所選擇的答 案是:C,正確答案是:C √
5. 以下程序的輸出結果是
#define SQR(X) X*X
main()
{ int a=16, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf("d ",a);
}
A) 16
B) 2
C) 9
計算機二級考試C語言習題及答案 3
1.下面對軟件特點描述不正確的是()。
A.軟件是一種邏輯實體,具有抽象性
B.軟件開發(fā)、運行對計算機系統(tǒng)具有依賴性
C.軟件開發(fā)涉及軟件知識產權、法律及心理等社會因素
D.軟件運行存在磨損和老化問題
【答案】D
【解析】軟件具有以下特點:①軟件具有抽象性,是一種邏輯實體;②軟件沒有明顯的制作過程;③軟件在使用期間不存在磨損、老化問題,④對硬件和環(huán)境具有依賴性;⑤軟件復雜性高,成本昂貴;⑥軟件開發(fā)涉及諸多的社會因素。D項描述是硬件存在的問題。答案選擇D選項。
2.下面描述不屬于軟件特點的是()。
A.軟件是一種邏輯實體,具有抽象性
B.軟件在使用中不存在磨損、老化問題
C.軟件復雜性高
D.軟件使用不涉及知識產權
【答案】D
【解析】軟件具有以下特點:①軟件是一種邏輯實體,具有抽象性;②軟件沒有明顯的制作過程,③軟件在使用期間不存在磨損、老化問題;④軟件對硬件和環(huán)境具有依賴性;⑤軟件復雜性高,成本昂貴,⑥軟件開發(fā)涉及諸多的社會因素,如知識產權等。答案選擇D選項。
3.下面對軟件特點描述錯誤的是()
A.軟件沒有明顯的制作過程
B.軟件是一種邏輯實體,不是物理實體,具有抽象性
C.軟件的開發(fā)、運行對計算機系統(tǒng)具有依賴性
D.軟件在使用中存在磨損、老化問題
【答案】D
【解析】軟件的特點有:①具有抽象性,是邏輯實體;②沒有明顯的制作過程;③在使用期間不存在磨損、老化問題;④對硬件和環(huán)境具有依賴性;⑤復雜性高,成本昂貴;⑥開發(fā)涉及諸多的社會因素。答案選擇D選項。
4.軟件按功能可以分為:應用軟件、系統(tǒng)軟件和支撐軟件(或工具軟件)。下面屬于系統(tǒng)軟件的是()。
A.編輯軟件
B.操作系統(tǒng)
C.教務管理系統(tǒng)
D.瀏覽器
【答案】B
【解析】系統(tǒng)軟件是控制和協(xié)調計算機及外部設備,支持應用軟件開發(fā)和運行的軟件,操作系統(tǒng)是系統(tǒng)軟件;支撐軟件是支撐各種軟件的`開發(fā)與維護的軟件,又稱為軟件開發(fā)環(huán)境,瀏覽器屬于支撐軟件;應用軟件是用戶可以使用的各種程序設計語言,以及用各種程序設計語言編制的應用程序的集合,編輯軟件、教務管理軟件屬于應用軟件。答案選擇B選項。
5.軟件按功能可以分為應用軟件、系統(tǒng)軟件和支撐軟件(或工具軟件),下面屬于應用軟件的是()。
A.學生成績管理系統(tǒng)
B. C語言編譯程序
C. UNIX操作系統(tǒng)
D.數(shù)據庫管理系統(tǒng)
【答案】A
【解析】應用軟件是為解決特定領域的應用而開發(fā)的軟件,如事務處理軟件,工程與科學計算軟件,學生成績管理系統(tǒng)、教務管理系統(tǒng)、瀏覽器、編輯軟件等應用性質不同的各種軟件。系統(tǒng)軟件是計算機管理自身資源,提高計算機使用效率并服務于其他程序的軟件,如操作系統(tǒng),編譯程序,匯編程序,數(shù)據庫管理系統(tǒng)等。支撐軟件是介于系統(tǒng)軟件和應用軟件之間,協(xié)助用戶開發(fā)軟件的工具性軟件,包括輔助和支持開發(fā)和維護應用軟件的工具軟件,如需求分析工具軟件,設計工具軟件,編碼工具軟件,測試工具軟件,維護工具軟件等。答案選擇A選項。
6.數(shù)據庫管理系統(tǒng)是()。
A.操作系統(tǒng)的一部分
B.在操作系統(tǒng)支持下的系統(tǒng)軟件
C.一種編譯系統(tǒng)
D.一種操作系統(tǒng)
【答案】B
【解析】系統(tǒng)軟件主要包括:①操作系統(tǒng)軟件;②各種語言的解釋程序和編譯程序;③各種服務性程序;④各種數(shù)據庫管理系統(tǒng)。數(shù)據庫管理系統(tǒng)是一種系統(tǒng)軟件,負責數(shù)據庫中的數(shù)據組織、數(shù)組操縱、數(shù)據維護、控制和保護以及數(shù)據服務等。答案選擇B選項。
7.數(shù)據庫管理系統(tǒng)是()。
A.操作系統(tǒng)的一部分
B.在操作系統(tǒng)支持下的系統(tǒng)軟件
C.一種編譯系統(tǒng)
D.一種通信軟件系統(tǒng)
【答案】B
【解析】系統(tǒng)軟件主要包括:①操作系統(tǒng)軟件;②各種語言的解釋程序和編譯程序;③各種服務性程序;④各種數(shù)據庫管理系統(tǒng)。數(shù)據庫管理系統(tǒng)是一種系統(tǒng)軟件,負責數(shù)據庫中的數(shù)據組織、數(shù)組操縱、數(shù)據維護、控制和保護以及數(shù)據服務等。答案選擇B選項。
8.下列選項中,不屬于數(shù)據管理員(DBA)職責的是()。
A.數(shù)據庫維護
B.數(shù)據庫設計
C.改善系統(tǒng)性能,提高系統(tǒng)效率
D.數(shù)據類型轉換
【答案】D
【解析】數(shù)據庫管理員對數(shù)據庫進行規(guī)劃、設計、維護、監(jiān)視等,其主要工作有:①數(shù)據庫設計,主要是對數(shù)據模式進行設計,②數(shù)據庫維護,對數(shù)據庫中的數(shù)據安全性、完整性、并發(fā)控制及系統(tǒng)恢復、數(shù)據定期轉儲等進行實施與維護;③改善系統(tǒng)性能,不斷調整內部結構,提高系統(tǒng)效率。答案選擇D選項。
9.數(shù)據庫系統(tǒng)的核心是()。
A.數(shù)據模型
B.軟件開發(fā)
C.數(shù)據庫設計
D.數(shù)據庫管理系統(tǒng)
【答案】D
【解析】數(shù)據庫系統(tǒng)包括四個部分:數(shù)據庫、數(shù)據庫管理系統(tǒng)、數(shù)據庫應用程序、數(shù)據庫管理員。其中DBMS是為數(shù)據庫的建立、使用和維護而配置的軟件,是數(shù)據庫系統(tǒng)的核心。答案選擇D選項。
10.下列敘述中正確的是()。
A.數(shù)據庫系統(tǒng)是一個獨立的系統(tǒng),不需要操作系統(tǒng)的支持
B.數(shù)據庫技術的根本目標是要解決數(shù)據的共享問題
C.數(shù)據庫管理系統(tǒng)就是數(shù)據庫系統(tǒng)
D.數(shù)據庫系統(tǒng)由數(shù)據庫應用系統(tǒng)、數(shù)據庫和數(shù)據庫管理系統(tǒng)組成。
【答案】B
【解析】A項錯誤,數(shù)據庫需要調用操作系統(tǒng)的接口,需要操作系統(tǒng)的支持;C項錯誤,數(shù)據庫管理系統(tǒng)(DBMS)是數(shù)據庫系統(tǒng)的核心,負責數(shù)據庫中的數(shù)據組織、數(shù)據操作、數(shù)據維護、控制及保護和數(shù)據服務等;D項錯誤,數(shù)據庫應用系統(tǒng)是數(shù)據庫系統(tǒng)再加上應用軟件及應用界面這三者所組成,具體包括:數(shù)據庫、數(shù)據庫管理系統(tǒng)、數(shù)據庫管理員、硬件平臺、軟件平臺、應用軟件、應用界面。答案選擇B選項。
【計算機二級考試C語言習題及答案】相關文章:
2016計算機二級c語言習題及答案07-05
2017計算機二級考試C語言復習題及答案08-09
2017計算機二級考試C語言練習題及答案07-20
2017計算機二級考試C語言習題09-04
計算機二級考試C語言試題及答案10-11
計算機二級考試C語言試題與答案10-27
計算機二級C語言考試試題及答案10-09
計算機二級C語言考試真題及答案09-30
計算機等級考試二級C語言試題及答案10-31