西华师范大学2022年C语言期末模拟(共六卷)及答案_第1页
西华师范大学2022年C语言期末模拟(共六卷)及答案_第2页
西华师范大学2022年C语言期末模拟(共六卷)及答案_第3页
西华师范大学2022年C语言期末模拟(共六卷)及答案_第4页
西华师范大学2022年C语言期末模拟(共六卷)及答案_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西华师范大学2022年C语言期末模拟(一)

总分:150分考试时间:120分钟

注意事项:

>题目包括五大部分,单项选择题,判断题,填空题,程序分析题,编程题,请按要

求在规定时间内作答。

>考试中途不能无端离场,否则视为放弃。考试过程中如遇问题请及时向监考老师反

馈。

一、单项选择题(每小题2分,共40分)

1、设x、y、z、t均为int型变量,则执行以下语句后,t的值为

.x=y=z=l;t=++x|I++y&&++z;

A、不定值

B、4

C、1

D、0

2、请选出可以作为c语言用户标识符的一组标识符号

A、voiddefineWORD

B、a3_b3_123IF

C、for-abccase

D、2aDOsizeof

3、以下不正确的if语句形式是o

A、if(x>y&&x!=y);

B、if(x==y)x+=y;

C、if(x!=y)scanf("%d",&x)elsescanf("%d",&y);

D、if(x<y){x++;y++;}

4、能正确表示a210或aWO的关系表达式是。

A、a>=10ora<=0

B、a>=10|ia<=0

C、a>=10|a<=0

D、a>=10&&a<=0

5、以下不正确的是o

A、语句for(i=0:;i++)表示无限循环

B、for(;;)表示无限循环

C、for()也表示无限循环

D、while(1)表示无限循环

6、关于c语言中print。函数与scanf()函数,下列描述中正确的是。

A、printfO函数可以向任何地方输出数据

B、printfO只向控制台输出数据

C、scanf()只能输入英文字母和数字

D、scanfO函数可以识别输入的空格

7、设i是int型变量,f是float型变量,用下面的语句给这2个变量输入值。

为了将,100和765.12分别赋给i和f,则正确的输入为。

scanf("i=%d,f=%f",&i,&f);

A、100<空格>765.12〈回车〉

B、i=100,f=765.12V回车〉

C、100〈回车>765.12〈回车〉

D、x=100V回车〉y=765,12V回车》

8、若二维数组a有m歹工则计算任一元素在数组中位貉的公式为(假

设a[0][0]位于数组的第一个位谿上)o

A、i*m+j

B、j*m+i

C、i*m+j-l

D、i*m+j+l

9、结构化程序由三种基本结构组成,三种基本结构组成的算法

A、可以完成任何复杂的任务

B、只能完成部分复杂的任务

C、只能完成符合结构化的任务

D、只能完成一些简单的任务

10、下面各语句行中,能正确进行给字符串赋值操作的语句行是O

A、charst[4][5]={"ABCDE"};

B、chars[5]={'A','B','C,'D','E');

C、char*s="ABCDE";

D、char*s;scanf("%s",*s);

11、下面程序输出的结果是.

#include<stdio.h>

voidmain()

(

inti,j,x=O;

staticinta[6]={l,2,3,4,5,6};

for(i=0,j=l;iV5;++i,j++)x+=a[i]*a[j];

printf("%d\n",x);

)

A、数组a中首尾的对应元素的乘积

B、数组a中首尾的对应元素的乘积之和

C、数组a中相邻各元素的乘积

D、数组a中相邻各元素的乘积之和

12、c语言程序的三种基本结构是顺序结构、选择结构和结构.

A、循环

B、递归

C、转移

D、嵌套

13、现代计算机中采用二进制数制是因为二进制数的优点是。

A、代码表示简短,易读

B、物理上容易实现且简单可靠;运算规则简单;适合逻辑运算

C、容易阅读,不易出错

D、只有0,1两个符号,容易书写

14、在下面的函数声明中,存在着语法错误的是<,

A、voidBC(inta,in

B、voidBD(int,in

C、voidBE(int,intt=5)

D、intBF(intx;int

15>语句charstrl[20]="a\0",str2[10]="programe\0";

strlen(streat(strl,str2))执行的结果是。

A、1

B、9

C、10

D、20

16、结构化程序所要求的基本结构不包括()。

A、顺序结构

B、GOTO跳转

C、选择(分支)结构

D、重复(循环)结构

17、已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定

structa*f(inttl,int*t2,structat3,structa*t4)structap,*p1;

inti;

则正确的函数调用语句为

A、&p=f(10,&i,p,pl);

B、pl=f(i++,(int*)pl,p,&p);

C>p=f(i+1,&(i+2),*p,p);

D、f(i+1,&i,p,p);

18、设有以下程序

main()

intnl,n2;

scanf("%d",&n2);

while(n2!=0)

(

nl=n2%10;

n2=n2/10;

printf("%d",nl);

程序运行后,如果从键盘上输入1298,则输出结果为o

A、892

B、8921

C、89

D、921

19、有如下说明:inta[10]=l,2,3,4,5,6,7,8,9,10,*p=a;则数值为9的表达

式是O

A、*p+9

B、*(p+8)

C、*p+=9

D、p+8

20、下面说法正确的是o

A、文件指针变量的值是文件当前正在处理的字节地址

B、文件指针变量的值是文件中包含的字符个数

C、文件指针的类型是一种指针类型

D、文件指针的类型是结构体类型

二、判断题(每小题2分,共20分)

()1、若有定义和语句:

inta;

charc;

floatf;

scanf(M%d,%c,%f,&a,&c,&f);

若通过键盘输入:10,a,12.5则a=通,c='a',f=12.5。

()2、若有正确变量定义,表达式x=y=l符合c语言语法。

()3、关系表达式的值是一个逻辑值,即"真"或"假",并且用0表示"假",用1表示"真

()4、在嵌套循环(多层循环)中,每一层循环都应该使用自己的循环变量,以免互相干

扰。

()5、c语言中字符串的结束符是'\0'。

()6、c语言标准格式输入函数scanf的参数表中要使用变量的地址值。

()7、在程序设计中,一组具有相同数据类型的变量集合称为数组。

()8、fseek函数一般用于二进制文件。

()9、chara="string"是合法的数组定义语句。

()10、一个源程序可使用多个文件包含命令,但一个文件包含命令只能包含一个文件。

三、填空题(每小题4分,共20分)

1、已知charstr[]="happy!",则strlen(str)的值为。

2、在C语言中,以作为字符串结束标志。

3、下列程序段的运行结果是。

main()

(

intn,s=0;

for(n=l;n<=5;n++)

{

if(n%2!=0)continue;

s=s+i;

}

printf("%d\n",n);

)

4、ferror函数用来检测文件读写时是否发生错误,若未发生读写错误,则返回

值是O

5、字符读写函数是用于把一个字符写入磁盘文件。

四、程序分析题(每小题5分,共20分)

1、下列程序段的运行结果是。

charsi[20]="abcdefM,s2[5]="abc";

strcpy(sl,s2);

printf("%c”,si[5]);

2、执行下列程序段后,输出的a的值是o

main()

(

inta=2;

switch(a)

(

case0:a-;

break;

case1:a++;

break;

case2:a=a+5;

break

)

printf(M%dn,a);

}

3、以下程序段的定义语句中,x[l]的初值是.一程序运行后输出的内容

是o

#include<stdio.h>

main()

(

intx[]={l,2,3,4,5,6,7,8,9,10,ll,12,13,14,15,16},*p[4],i;

for(i=0;i<4;i++)

(

p[i]=&x[2*i+l];

printf(M%dM,p[i][0]);

)

printf(n\n,f);

4、请补充main。函数,该函数的功能是:从键盘输入一个字符串及一个指定字

符,然后把这个字符及其后面的所有字符全部删除。结果仍然保存在原串中。

例如,输入"abcdefg",指定字符为“d“,则输出”abe"。注意:部分源程序给出如

下。请勿改动main。函数和其他函数中的任何内容,仅在main。函数的横线上

填入所编写的若干表达式或语句。试题程序:

#defineM80

voidmain()

(

inti=0;

charstr[M];

charch;

system("CLS");

printf\nInputastrin9:\nn);

gets(str);

printf(H\nInputacharator;\n");

scanf("%c”,&ch);

while(str[i]!='\0')

(

if(str[i]=ch);

)

strLi]=;

printf(H\n***displaystring***\n");

puts(str);

)

五、编程题(每小题分,共50分)

1、用*号输出字母C的图案。(本题12分)

2、编写程序:字符串反转,如将字符串"abc-123-xyz"反转为"zyx-321-

cba"。(本题18分)

3、定义一个结构体变量(包括年、月、日)。编写一个函数days,计算该日期

在本年中是第几天(注意闰年问题)。由主函数将年月日传递给days函数,计算

之后,将结果传回到主函数输出。(本题20分)

【2022年C语言期末模拟(一)参考答案1

一、单项选择题

1、c

2、B

【解析】本题考核的知识点是用户标识符的定义。在C语言中,合法的标识符可以由字

母、数字和下划线组成,其中关键字不能作为用户的标识符,且开头的第一个字符必须为

字母或下划线。选项A中void为关键字,故选项A不正确:选项C中for和case为关键

字,故选项C不正确:选项D中sizeof为关键字,故选项D不正确。所以,4个选项中选

项B符合题意。

3、C

4、B

5、C

6、B

【解析】printfO是向控制台输出的函数

7、B

8、D

9、A

10、C

11、D

12、A

13、B

【解析】二进制数只用“0”和“1”来存储,因此物理上容易实现且简单可靠,运算规

则简单,适合逻辑运算。但不容易阅读,易出错。

14、D

【解析】函数声明时,可以指定其形参的默认值,不过要从右向左指定;可以省略形参

名,仅以形参类型表示;形参表之间用逗号分割。因此,本题答案为D。

15、B

16、B

17、B

【解析】本题目中函数f的返回值为结构类型的指针,函数的四个形参分别为:tl为整

型,t2为整型的指针,t3为structa类型,t4为structa类型的指针。在进行函数调

用的时候,函数的实参必须要与形参说明相对应,函数的返回值也要赋给相应类型的变

量。选项A)函数的返回值不能赋给一个常量;选项C)&(i+2)没有什么意义;选项D)返回

值没有传递给任何变量,向函数传递的应该是structa类型的指针,可是传的却是变量。

18、B

19、B

【解析】当指针指向数组的首地址时,数组内各元素地址为p+n(数组下标从0开始到n-

1结束),n为数组下标,取数组元素值为*(p+n)。

20、C

【解析】文件指针变量的值是文件所在的地址,选项AB错误;文件指针也是一种指针,

属于指针类型不是结构体类型,选项C正确,D错误;本题答案为C

二、判断题

1、正确

2、正确

3、正确

4、正确

5、正确

6、正确

7、正确

8、正确

9、错误

10,正确

三、填空题

1、6

2、

3、6

4、0#零

5、fputcttfputc()#putc#putc()

四、程序分析题

1、f

2、7

3、「2','2468']

4、________break;

________i++,\0,

五、编程题

1、程序分析:可先用'*'号在纸上写出字母C,再分行输出。

程序源代码:

#include"stdio.h"

main()

(

printf(HHelloC-world!\nH);

printf(H****\n");

printf(H*\n");

printfC1*\nH);

printf(H****\n");

)

2、#include<stdio.h>

voidreverse(char*s)

(

//获取字符串长度

intlen=0;

char*p=s;

while(*p!=0)

(

len++;

p++;

)

//交换...

inti=0;

charc;

while(i<=len/2-1)

(

c=*(s+i);

*(s+i)=*(s+len-1-i);

*(s+len-1-i)=c;

i++;

)

)

intmain()

(

chars[]=Habc-123-xyzH;

printf(°=>\nH,s);

reverse(s);//反转字符串

printf(H'%s'\n",s);

return0;

i

【解析】质数(primenumber)又称素数,有无限个。一个大于1的自然数,除了1和

它本身外,不能被其他自然数整除。

3、ttinclude<stdio.h>

structDate

intday;

intmonth;

intyear;

);

intmain()

(

voiddays(structDatedatel,int*q);

structDatedatel;

structDate*p;

intn;

printf("请输入年份:");

scanf("%d”,&datel.year);

printf(”请输入月份月);

scanf("%d",ftdatel.month);

printf(”请输入日期:”);

scanf(H%dH,&datel.day);

p=fedatel;

days(*p,&n);/*使指针指向变量n,存放计算的总天数*/

printf("d年外d月%d日是该年的第%d天。\n",datel.year,datel.month,

datel.day,n);

return(0);

)

voiddays(structDatedatel,int*q)

(

intmonth2;

if(datel.year%400=0(datel.year%100!=0&&datel.year%4==

0))

month2=29;/*判断为润年,其该年的二月为29天*/

elsemonth2=28;

switch(datel.month)

(

case1:*q=datel.day;break;

case2:*q=31+datel.day;break;

case3:*q=month2+31+datel.day;break;

case4:*q=31*2+month2+datel.day;break;

case5:*q=31*2+month2+30+datel.day;break;

case6:*q=31*3+month2+30+datel.day;break;

case7:*q=31*3+30*2+month2+datel.day;break;

case8:*q=31*4+30*2+month2+datel.day;break;

case9:*q=5*31+30*2+month2+datel.day;break;

case10:*q=5*31+3*30+month2+datel.day;break;

case11:*q=6*31+3*30+month2+datel.day;break;

case12:*q=6*31+4*30+month2+datel.day;

)/*把计算的总天数赋值给*p*/

)

西华师范大学2022年C语言期末模拟(二)

总分:150分考试时间:120分钟

注意事项:

>题目包括五大部分,单项选择题,判断题,填空题,程序分析题,编程题,请按要

求在规定时间内作答。

>考试中途不能无端离场,否则视为放弃。考试过程中如遇问题请及时向监考老师反

馈。

一、单项选择题(每小题2分,共40分)

1、表示一条指令的存储单元的符号地址称o

A、标号

B、变量

C、偏移量

D、类型

2、若变量已正确定义且k的值是4,计算表达式(j=4,k-)后,j和k的

值为____

A、j=3,k=3

B、j=3,k=4

C、j=4,k=4

D、j=4,k=3

3、设有定义:intx=2;,以下表达式中,值不为6的是o

A、x*=x+l

B、x++,2*x

C、x*=(l+x)

D、2*x,x+=2

4、下列if语句中,不正确的是o

A、if(x>y);

B、if(x==y)x+=y;

C,if(x!=y)scanf("%d",&x)elsex=l;

D、if(x

5、以下for语句中不是死循环的是o

A、for(inti=0;i<l;i++);

B、for(inti=0;i++);

C、for(inti=l;i>0;++i);

D、for(;;);

6、若定义语句:intb[]={1,2,3,4,5),*p=b;

则表达式*p++的值是o

A、1

B、2

C、b[0]的地址

D、b[l]的地址

7、下列程序段执行后x、y和z的值分别是

intx=10,y=20,z=30;if(x>y)z=x;x=y;y=z;

A、10,20,30

B、20,30,30

C、20,30,10

D、20,30,20

8、以下叙述中正确的是o

A、数组下标的下限是1

B、数组下标的下限由数组中第一个非零元素的位置决定

C、数组下标的下限由数组中第一个被赋值元素的位置决定

D、charcl,c2,*c3,c4[40]是合法的变量定义语句

9、数据的存储结构是指o

A、存储在外存中的数据

B、数据所占的存储空间量

C、数据在计算机中的顺序存储方式

D、数据的逻辑结构在计算机中的表示

10、请读程序片段(字符串内没有空格字

符):printf("%d\n",strlen("ats\n012\l\\"));

上面程序片段的输出结果是O

A、11

B、10

C、9

D、8

11、关于数组和指针,以下说法错误的是O

A、数组名本身就是一个指针,指向数组内存的起始位置

B、既可以读入数据到数组中,也可以读入数据到未赋初值的指针中

C、可以让一个指针指向一个同类型的数组

D、指针可以指向同类型的数组中的任意一个元素

12、以下程序的输出结果是。

#include<stdio.h>

intm=13;

intfun(intx,inty){

intm=2;

return(x*y-m);

main()

inta=7,b=6;

printf("%d",fun(a,b)/m);

A、1

B、3

C、7

D、10

13、若变量已正确定义并赋值,符合c语言语法的表达式是。

A、a=a+7:

B、a=7+b+e,a++

C、int(12.3%4)

D、a=a+7=c+b

14、在c语言中,当内部函数与外部函数重名时,下列描述中正确的是

A、当调用时,会调用内部函数

B、当调用时,会调用外部函数

C、当调用时,会调用两次,先调用内部函数再调用外部函数

D、都不调用,会报错

15、请读程序:

main()

(

inta=l,b=2;

printf(""%d\n"",a=a+l,a+6,b+2);

)

则上面程序的输出结果是o

A、2

B、3

C、4

D、1

16、以下不是无限循环的语句为o

A、for(y=0,x=l;x>++y;x=i++)i=x;

B、for(;;x++=i);

C、whilel){x++;}

D、for(i=10;;i--)sum+=i;

17、有以下程序

#include<stdio.h>

main()

(

structstu

(

charname[9];

charsex;

doublescore[2];

)

>

structstua={,fzhaoH,1m1,85.0,90.0},b={MqianM,r,95.0,92.0};

b=a;

printf(M%s,%c,%2.Of,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);

)

程序的运行结果是O

A、Qian,f,95,92

B、Qian,m,85,90

C、Zhao,f,95,92

D、Zhao,m,85,90

18、有以下程序

main()

(

inta=l,b=2,m=0,n=0,k;

k=(n=b>a)|I(m=a<b);

//短路问题printf(n%d,%d\nw,k,m);

)

程序运行后的输出结果是O

A、0,0

B、0,1

C、1,0

D、1,1

19、对于代码charcl[8];

scanf(M%sH,cl);

printf(n\n%sn,cl);

在程序运行时,输入了"thisprettyboy",则对应的运行输出显示结果是

A、thispre

B、this

C、thisprettyboy

D、数组越界,不能显示

20、设有以下说明语句:

typedefstructstu

(

inta;

floatb;

)

stutype;

则下面叙述中错误的是o

A、struct是结构类型的关键字

B、structstu是用户定义的结构类型

C、a和b都是结构成员名

D、stutype是用户定义的结构体变量名

二、判断题(每小题2分,共20分)

()1、c语言中sizeof是函数,而不是运算符。

()2、变量的类型通常指存储类和数据类型两种。

()3、在switch语句中,可以根据需要使用或不使用break语句。

()4、do…while循环语句中的循环体至少会执行一次。

()5、在标准c语言中,字符串是以'0'结束的,故字符串的长度也包括‘0'。

()6、若函数的返回值与return表达式类型不一致时,以return表达式类型为准。

()7、charcl[]={'1','2",'3','4','5');

是合法的数组定义语句。

()8、在定义函数时,必须要指定函数中的参数列表。

()9、设p是指向数组a的指针变量,则a[i]和p[i]等价.

()10、c语言对文件读、写之前不必先打开文件,在使用文件之后无需关闭该文件。

三、填空题(每小题4分,共20分)

1,若变量x,y已定义为int类型且x的值为99,y的值为9,请将输出语句

printf(,x/y);

补充完整,使其输出的计算结果形式为:x/y=ll。

2、函数swap(arr,n)可完成对arr数组从第一个元素到第n个元素两两交

换。在运行调用函数中的如下语句后,a[0]和a[l]的值分别为【1】,

原因是【2】oa[0]=l,a[l]=2;

swap(a,2);

3、结构化程序设计的3种基本结构是:顺序结构、结构、循环结构,这

三种基本结构构成了复杂的c语言程序。

4、c语言规定,可执行程序的开始执行点是。

5、C语言中,一个函数一般由两个部分组成,它们是—和函数体。

四、程序分析题(每小题5分,共20分)

1、以下程序运行后的输出结果是O

main()

(

intx=0210;

printf("%x\n",x);

)

2、函数fun的功能是计算xndoublefun(doublex,intn)

{

inti;

doubley=l;

for(i=l;i<=n;i++)y=y*x;

returny;

)

主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4+b4-

(a+b)3o实现这一计算的函数调用语句为o

3、以下程序的输出结果是。

#include<stdio.h>

main()

inti;

for(i二a;jVf;i++,i++)printf(H%c,f,i-'a'+'a');

printfC'\n");

)

4、有以下程序

main()

(

charc;

while((c=getchar())!=t?t)putchar(-c);

)

程序运行时,如果从键盘输入:ydg?n?〈回车〉,则输出结果为o

五、编程题(每小题分,共50分)

1、输入三个数字,输出他们的最大值。(本题12分)

2、有一篇文章,共有多行文字(不超过10行),最后一行为end。要求分别

统计出其中英文大写字母、小写字母、空格以及其它字符的个数。统计结果不

包括最后一行的endo(本题18分)

3、若有以下银行卡信息:

structcard{

intid;〃银行卡号

intbonus;〃金额

);

请编写程序,从键盘输入5条银行卡记录,使用结构体数组存

储这些数据,并按金额升序排序,输出排序后的结果。

【输入形式】5条银行卡记录分行输入,每行数据用空格间隔

【输出形式】分5行输出数据,每行数据均使用空格间隔

【输入样例】

100120

100280

100350

100410

100640

【输出样例】

100410

100120

100640

100350

100280(本题20分)

[2022年C语言期末模拟(二)参考答案】

一、单项选择题

1、A

【解析】标号表示一条指令的存储单元的符号地址。

2、D

3、D

4、C

5、A

【解析】考查循环语句for的使用。

[解题要点]for循环的一般格式为for(初始化部分;终止条件判断部分;迭代部分){循环

体;}说明如下:for循环开始时,首先执行初始化操作,然后判断终止条件是否满足,如

果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条

件。

[错解分析]在for语句中,如果省略了终止条件判断部分,开且在语句中没有break,或

者是终止条件判断部分始终没有终止,都将出现死循环。

[考点链接]for循环语句可由while循环语句来代替。

6、A

7、B

【解析】题干中,条件表达式“x>y”的值为假,所以不执行语句“z=x;",而按顺序

执行语句"x=y;y=z;”,即x=20,y=39,z=30,故本题选B。

8、D

【解析】数组下标的下限是0,因此D选项正确。

9、D

【解析】数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数

据的物理结构,所以选项D正确。

10、C

11、B

【解析】C语言中,数组名本身就是一个指针,指向数组内存的起始位置,选项A正确;可

以将一个指针指向一个同类型的数组,选项C正确;指针指向一个数组后,可以通过移动指

针,指向该数组中的任意一个元素,选项【)正确;已经定义的数组被分配了内存空间,所以可

以读入数据到数组中,未赋初值的指针没有分配内存空间,所以不可以读入数据,选项B错

误,本题答案为B

12、B

【解析】本题考查的是函数调用时的参数的作用域。在函数调用时,当全局变量和局部

变量的名称相同时,在局部变量的作用域内,局部变量起作用,因而在fun函数内m的应

该等于2,main中的m为13,所以返回值为7X6-2=40,而fun(a,b)/m值为40/13=3。

13、B

14、A

15、A

16、A

17、D

18、C

19、B

20、D

二、判断题

1、错误

2、正确

3、正确

4、正确

5、错误

6、错误

7、正确

8、错误

9、正确

10、错误

三、填空题

1.['"x/y=%d"']

2.[1]2,1【2】地址传递对形参的改变能改变实参的值

3、选择#分支

4、main函数

5、函数首部

四、程序分析题

1、['88']

2、['fun(a,4)+fun(b,4)-fun(a+b,3);

']

3、['abcde']

4、['xcf999']

五、编程题

1、#include<stdio.h>

voidmainO

inta,b,c,d;

scanf("%d,%d,%d",&a,&b,&c);

d=max(a,b,c);

printf(Hmax=%dM,d);

getch();/*暂停看运行结果*/

}

intmax(intx,inty,intz)

(

intu;

if(x>=y&&x>=z)

u=x;

elseif(y>=x&&y>=z)

u=y;

else

u=z;

return(u);

}

2、#include<stdio.h>

#include<string.h>

intmain()

(

chars[10][80];

inti=0,j,space=0,lwr=0,upr=0,number=0,other=0;

while(1){

gets(s[i]);

if(strcmp(s[i],HendH)!=0){1++;}

elsebreak;

}

for(i=i-l;i>=0;i一){

for(j=0;s[i][j]!=,\0,;j++)

{if(s[i][j]=='')

space++;

elseif(s[i][j]>='a'&&s[i][j]<='z')

lwr++;

elseif(s[i][j]>='A'&&s[i][j]<=2)

upr++;

elseif(s[i][j]>='O'&&s[i][j]<='9')

number++;

else

other++;

printf("大写字母有%d个\n",upr);

printf("小写字母有%d个\n",Iwr);

printf("数字有%d个\n",number);

printf("空格有%d个\n",space);

printf("其他字符有%(1个",other);

)

3^#include<stdio.h>

#include<stdlib.h>

structcard

(

intid;〃银行卡号

intbonus;〃金额

}a[5],tamp;

intmain()

(

inti,j;

for(i=0;i<5;i++)

scanf(M%d%dn,&a[i].id,bonus);

for(i=1;i<5;i++)

(

for(j=0;j<5-i;j++)

(

if(a[j].bonus>a[j+l].bonus)

(

tamp=a[j];

a[j]=a[j+l];

a[j+l]=tamp;

)

)

)

for(j=0;j<5;j++)

(

printf(,r%d%d\n",a[j].id,a[j].bonus);

)

)

西华师范大学2022年C语言期末模拟(三)

总分:150分考试时间:120分钟

注意事项:

>题目包括五大部分,单项选择题,判断题,填空题,程序分析题,编程题,请按要

求在规定时间内作答。

>考试中途不能无端离场,否则视为放弃。考试过程中如遇问题请及时向监考老师反

馈。

一、单项选择题(每小题2分,共40分)

1、关于异常的含义,下列描述中最正确的一个是。

A、程序编译错误

B、程序语法错误

C、程序自定义的异常事件

D、程序编译或者运行时发生的异常事件

2、下面表达式为假的是o

A、(4>3)

B、((40r(3>2))=l)

C、((4And(3<2))=l)

D、(Not(3>=4))

3、以下程序段中,变量c的二进制值是chara=2,b=4,c;

c=a+b<<2;

A、00000011

B、00010100

C、00011100

D、00011000

4、若所用变量都已正确定义,则在以下选项中,非法的表达式是0

A、a!=4I|b==l

B、'a'%3

C、'a'=l/2

D、'a'+32

5、分析下列程序,其最终执行结果是o

main()

{

intn[3],i,j,k;

for(i=0;i<3;i++)n[i]=o;

k=2;

for(i=0;i<k;i++)for(j=0;j<k;j++)n[j]=n[i]-l;

printf("%d\n",n[0]);

)

A、—2

B、-1

C、0

D、-3

6、若有定义:char*pl,*p2,*p3,*p4,ch;则不能正确赋值的程序语句为

A、pl=&ch;scanf("%c",pl);

B、p2=(char*)malloc(1);scanf("%c",p2);

C、*p3=getchar();

D、p4=&ch;*p4=getchar();

7、以下合法的赋值语句是o

A、X=Y=100

B、D-;

C、X+Y;

D、C=int(A+B)

8、关于数组的叙述中,下列说法不正确的是o

A、数组是最简单的复合数据类型,是有限元素的有序集合

B、数组的元素可以是值(基本数据类型)、对象或其他数组

C、定义数组时,必须分配内存

D、一个数组中的元素都必须是相同的类型

9、对于ascii码在机器中的表示,下列说法正确的是o

A、使用8位二进制代码,最右边一位是0

B、使用8位二进制代码,最右边一位是1

C、使用8位二进制代码,最左边一位是0

D、使用8位二进制代码,最左边一位是1

10、在c语言中,不允许有常量的数据类型是o

A、整型

B、结构型

C、字符型

D、字符串

11、对于定好的数组,系统会自动为该数组分配内存空间,charc[20>

{"helloworld"}对于c对应的内存中的地址编号是2000,则c[4]对应的内存

地址的编号为。

A、2004

B、200A

C、2010

D、2008

12、结构化程序设计方法的三种基本控制结构中不包括(.)o

A、循环结构

B、递归结构

C、顺序结构

D、选择结构

13、下列不属于简单数据类型的是o

A、整数类型

B、类

C、浮点数类型

D、布尔类型

14、下列对字符串的定义中,错误的是<,

A、charstr[7]="FORTRAN";

B、charstr[]="FORTRAN";

C、char*str="FORTRAN";

D、charstr[]={'F','O','R','T','R','A','N',0};

15、若有以下程序段(n所赋的是八进制数)intm=32767,n=032767;

printf("%d,%o\n",m,n);

执行后输出结果是o

A、32767,32767

B、32767,032767

C、32767,77777

D、32767,077777

16、以下程序的输出结果是

main()

(

inta,b;

for(a=l,b=l;a<=100;a++)

(

if(b>=10)break;

if(b%5==l)

(

b+=5;

continue;

printf("%d\n",a);

)

A、101

B、6

C、4

D、3

17、在c语言中,系统为一个结构体变量分配的内存是o

A、各成员所需内存量的总和

B、结构体第一个成员所需的内存量

C、成员中占内存量最大者所需的容量的整数倍

D、结构体中最后一个成员所需的内存量

18、有以下程序

main()

(

inta;

charc=10;

floatf=100.0;

doublex;

a=f/=c*=(x=6.5);

printf(n%d%d%3.If%3.lf\nH,a,c,f,x);

)

程序运行后的输出结果是o

A、16516.5

B、1651.56.5

C、1651.06.5

D、2651.56.5

19、下列对c语言字符数组的描述中正确的是o

A、任何一个一维数组的元素在引用时,其下标可以是整型、实型或字符型

常量

B、一维数组的元素实质上就是一个变量,代表内存中的一个存储单元

C、如果要引用数组中的每一个元素,则直接使用该数组名称即使

D、以上都不对

20、有以下程序:

structstu

{

charnum[10];

floatscore[3];

main()

structstus[3]={{,r2002rr,90,95,85},{“20022”,95,80,75},

{"20023”,100,95,90}},*p=s;

inti;

floatsum=0;

for(i=0;i<3;i++){

sum=sum+p->score[i];

)

printf("%6.2f\n",sum);

)

程序运行后的输出结果是o

A、260

B、270

C、280

D、285

二、判断题(每小题2分,共20分)

()1、c程序中的常量就是在程序运行过程中其值不能被改变的量。

()2、表达式语句和表达式没有什么区别。

()3、在标准c中,逻辑表达式中只允许出现逻辑型数据。

()4、for语句只能用于循环次数已经确定的情况

()5、用strcat(字符串1,字符串2)连接两个字符串函数时,字符串1的存储空间没有

限制。

()6、tc中函数调用时,函数参数求值顺序是从右到左的。

()7、在标准c语言中,二维数组在内存中的存放次序是以行序为主序。

()8、函数形参的存储单元是动态分配的。

()9、在用数组名作为函数实参时,传递的是数组的起始地址,所以就不允许使用形参数

组的形式

()10、编写c语言程序的流程是:新建项目、添加源文件、编写代码、运行程序。()

三、填空题(每小题4分,共20分)

1、字符串函数用于从指定的磁盘文件中读出一个字符串。

2、在c语言中,标识符是由英文字母、数字、组成的。

3、结构化程序三种结构为。

4、读取文件的函数名是[1L

5、C语言对数组下标的引用一般从开始。

四、程序分析题(每小题5分,共20分)

1,以下程序的输出结果是—

#inlcude<stdio.h>

main()

{

intc=67;

putchar(c+30);

)

2、下列给定程序中,函数ptocO的功能是:利用插入排序法对字符串中的字符

按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素

进行排序,然后把第3个字符插入前两个字符中,插入后前3个字符依然有序;

再把第4个字符插入前三个字符中,待排序的字符串已在主函数中赋予。请添

加合适的语句,使它能得出正确的结果。注意:不要改动main。

函数,不得增行或删行,也不得更改程序的结构。试题程序:

#defineM80

voidproc(char*arr)

(

inti,j.n;

charch;

n=strlen(arr);

for(i=l;i<n;i++)

(

ch=arr[i];

while()

arr[j+l]=arr[j];

j一;

)

arr[j+l]=ch;

)

)

voidmain()

(

chara[M]="QWERTYUIOPASDFGHJKLMNBVCXZ";

printf("Theoriginalstring:%s\n",a);

proc(a);

printf("Thestringaftersortin9:%s\n\n",a);

)

3、以下程序的功能是调用函数fun计算:m=l-2+3-4+…+9-10,并输出结果。请

填空。

intfun(intn)

(

intm=0,f=l,i;

for(i=l;i<=n;i++)

{

m+=i*f;

f=;

)

returnm;

)

main()

(

printf(Mm=%d\n,f,);

)

4、下面程序可求出矩阵两条对角线上的元素之和。请分析程序填空。

main()

(

inta[3][3]={1,3,6,7,9,11,14,15,17},suml=0,sum2=0,i,j;

for(i=0;i<3;i++)for(j=0;j<3;j++)

if(i==j)suml+=a[i][j];

for(i=0;i<3;i++)

for([1];[2];j-)

if(i+j==2)sum2+=a[i][j];

printf("suml=%d,sum2=%d\n",suml,sum2);

}

五、编程题(每小题分,共50分)

1、编写程序:求一个3*3矩阵对角线元素之和(本题12分)

2、编写程序:删除一个字符串中的指定字母,如:字符串"aca",删除其中的

a字母。(本题18分)

3、编写一个函数统计并打印所输入的正文中的各个英文单词出现的次数并按次

数的递减顺序输出,使用结构体实现。(本题20分)

【2022年C语言期末模拟(三)参考答案1

一、单项选择题

1、D

【解析】异常是在程序编译或运行中所发生的可预料的或不可预料的异常事件,它会引

起程序的中断,影响程序正常运行。

2、C

3、D

【解析】请仔细阅读交规难度:简单

4、C

【解析】选项C中的匕'是单字节它是不允许被赋值的。所以选项C是非法的表达式。选

项A是逻辑表达式,是正确的。选项B是字符''的值与3进行求余运算。是正确的。选项

D参加运算的也是字符'a'的值,所以这个表达式也是正确的。

5、D

【解析】当i为0,内循环在j为。时,执行n[j]=n[i]T;,即n[0]=n[0]T,n[0]值

变为-1:在j为1时,执行即n[l]=n[0]T,将-2赋给n[l]。当i为1

时,内循环在j为。时,执行n[j]=n[i]T;,BPn[0]=n[l]-l,n[0]值变为-3;在j为1

时,执行n[j]=n[i]T;,BPn[l]=n[l]-l,将-3赋给n[l];最后n[0]和n[l]的值均为-

3o

6、C

7、B

【解析】本题中的答案A与D都缺少“;”,而答案C中,表达式是不能独立成为语句

的,答案B使用了C语言的自减运算符它就相当于D=DT,所以答案B为一赋值语句。

8、C

【解析】【命题目的】考查数组的基本概念。【解题要点】定义数组时,并不分配内存,所

以对数组的定义并不要求给出其元素的个数。【考点链接】数组分配内存是通过new操作符

或静态初始化来实现的。

9、C

【解析】计算机内部用一个字节(8位二进制位)存放一个7位ASCH码,最高位置0。

10、B

11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论