您的当前位置:首页正文

2022年上饶师范学院公共课《C语言》科目期末试卷B(有答案)

2020-01-12 来源:钮旅网
2022年上饶师范学院公共课《C语言》科目期末试卷B(有答案)

一、填空题

1、为建立如图10-5所示的存储结构(即每个结点两个域,data是数据域,next是指向结点的指针域),请将定义补充完整。

struct s{char data; _______ }node;

2、C语言源程序的基本单位是________

3、C语言的源程序必须通过【 】和【 】后,才能被计算机执行。

4、在C语言中,用关键字_______定义单精度实型变量,用关键字_______定义双精度实型变量,用关键字_______定义字符型变量。

5、若有定义语句:int a=2,b=3;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为_______

6、测试char型变量a第6位是否为1的表达式是_______(设最右位是第1位)。 7、下面程序段是找出整数的所有因子。请填空。

scanf(\"%d\",&x); i=1;for(;_______;)

{if(x%i==0)printf(\"%3d\",i); i++; }

8、设有以下宏定义:

#define WIDTH 80

#define LENGTH WIDTH+40

则执行赋值语句:v=LENGTH*20;(v为int型变量)后,v的值是_______。 9、假设M为已经声明的符号常量,则定义一个具有M×M个元素的双精度型数组a,且所有元素初值为0的形式是_______。

10、设main函数的说明为:int main(int argc,char*argv[]),且有命令行为: FILE1123<回车>,则argc的值是_______,argv[1]的值是_______。

二、选择题

11、下列4组选项中,不是C语言关键字的选项是。( ) A.define B.getc C.include D.while

IF char scanf go

Type printf case pow

12、下面4个选项中,是不合法的用户标识符的选项是( )。 A.A B.float C.b-a D._123 P_01 a0 goto temp Do A int INT 13、一个C程序的执行是从( )

A.本程序的main函数开始,到main函数结束

B.本程序的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束 D.本程序的第一个函数开始,到本程序main函数结束

14、C语言规定:在一个源程序中,main函数的位置( ) A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后

15、以下能对二维数组a进行正确初始化的语句是( )。 A.int a[2][]={{1,0,1},{5,2,3}}; B.int a[ ][3]={{1,2,3},{4,5,6}}; C.int a[2][4]={1,2,3},{4,5},{6}}; D.int a[][3]={{1,0,1,0},{},{1,1}}; 16、以下C程序的运行结果是。(注:口表示空格)

#include int main()

{long y=-43456;printf(\"y=%-8ld\\n\",y); printf(\"y=%-08ld\\n\",y); printf(\"y=%08ld\\n\",y); printf(\"y=%+8ld\\n\",y); return 0; }

A.y=囗囗-43456 y=-囗囗43456 y=-0043456 y=-43456 B.y=-43456 y=-43456 y=-0043456 y=+囗-43456 C.y=-43456 y=-43456 y=-0043456 y=囗囗-43456 D.y=囗囗-43456 y=-0043456 y=00043456 y=+43456

17、已有变量定义和函数调用语句:int a=25;print_value(&A.;下面函数的正确输出结果是。 void print_value(int*x) {printf(\"%d\\n\",++*x); }

A.23 B.24 C.25 D.26

18、在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ) A.extern B.register C.auto D.static 19、与下面程序段等价的是( )。

for(n=100;n<=200;n++) {if(n%3==0)continue; printf(\"%4d\",n); }

A.for(n=100;(n%3)&&n<=200;n++)printf(\"%4d\",n); B.for(n=100;(n%3)|| n<=200;n++)printf(\"%4d\",n); C.for(n=100;n<=200;n++)if(n%3!=0)printf(\"%4d\",n); D.for(n=100;n<=200;n++){if(n%3)printf(\"%4d\",n);else continue;break;}

20、以下描述中正确的是( )

A.while、do-while、for循环中的循环体语句都至少被执行一次 B.do-while循环中,while(表达式)后面的分号可以省略

C.while循环体中,一定要有能使while后面表达式的值变为“假”的操作 D.do-while 循环中,根据情况可以省略 while 21、以下程序( )。

#include int main()

{int a=5,b=0,c=0; if(a=b+C.printf(\"***\\n\"); else printf(\"$$$\\n\"); return 0; }

A.有语法错不能通过编译 B.可以通过编译但不能通过连接 C.输出*** D.输出$$$ 22、对两个数组a和b进行如下初始化:

char a[]=\"ABCDEF\";charb[]={'A','B','C','D','E','F'};则以下叙述正确的是( )。

A.a与b数组完全相同 B.a与b长度相同 C.a和b中都存放字符串 D.a的长度比b长

23、下面程序段的功能是输出两个字符串中对应相等的字符,请选择填空( )。

charx[]=\"programming\"; char y[]=\"Fortran\"; int i=0;

while(x[i]!='\\o'&&.y[i]!='\\o')

if(x[i]==y[i])printf(\"%c\",【】); else i++;

A.x[i++] B.y[++i] C.x[i] D.y[i] 24、以下程序的运行结果是( )。

#include int fun(int n) {int m=0,f=-1,i; for(i=1;i<=n;i++) {m=m+i*f; f=-f; }

return m; int main()

{printf(\"m=%d\\n\",fun(10)); return(0);

A.m=5 B.m=-6 C.m=6 D.m=-5

25、下面程序的运行结果是( )。 #include int main() {int a,b;

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

{ if(b>=20)break;

if(b%3==1){b+=3;continue;} b-=5; }

printf(\"%d\\n\",A.; return 0; }

A.7 B.8 C.9 D.10

三、读程序填空

26、以下程序的输出结果为_______.

#include int main()

{printf(\"*%f,%4.3f*\\n\",3.14,3.1415); return0; }

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

#include int main() {int a=325;

double x=3.1415926;

printf(\"a=%+06dx=%+e\\n\",a,x);

return 0; }

28、阅读下面程序,完成下列问题中的填空。问题(1)此程序在调用函数f后的运行结果是_______。(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3一i;j++),则程序的运行结果是_______。

#include void f(int s[J[4]) {inti,j,k;

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

{k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;} int main() {int s[4][4],i,j; for(i=0;i<4;i++) for(j=0:j<4;j++) s[i][j]=i-j; f(s); for(i=0;i<4;i++) {printf(\"\\n\"); for(j=0;j<4;j++) printf(\"%4d',s[i][j]); return(0); }

29、以下程序的运行结果是_______。

# include int reset(int i); int workover(int i); int i=0; int main() { int i=5;

reset(i/2); printf(\"i=%d\\n\ reset(i=i/2); printf(\"i=%d\\n\ reset(i/2); printf(\"i=%d\\n\

workover(i); printf(\"i=%d\\n\ int workover(int i) {i=(i%i)·((i*i)/(2*i)+4); printf(\"i=%d\\n\ int reset(int i) {i=i<=2?5:0; return(i); }

30、下面程序的功能是从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。请填空。

#include int main()

{inti,j,k;

printf(\"\\n hong bai hei\\n\"); for(i=0;i<=3;i++)

for(_______;j<=5;j++) {k=8-i-j; if(_______)

printf(\"%3d%3d%3d\\n\",i,j,k);

}

return 0; }

31、若有以下输入,则下面程序的运行结果是_______。

5<回车> 97531<回车> 5<回车>

#include #define M10 int main() {int a[M],x,i,n;

printf(\"Enter n(n<10):\");scanf(\"%d\",8.n); for(i=1;i<=n;i++)scanf(\"%d\",a+i); printf(\"Enter x:\");scanf(\"%d\",8.x);

a[0]=x;i=n;

while(x>a[i]){a[i+1]=a[i];i-一;} a[i+1]=x; n++;

for(i=1;i<=n;i++)printf(\"%3d\",a[i]); return 0; }

32、将以下两条if语句合并成一条if语句为_______。 语句1:if(a>b)scanf(\"%d\",8&a); else scanf(\"%d\",&b); 语句2:if(a<=b)m++; else n++;

33、若有以下输入,则下面程序的运行结果是_______。

basic<回车> fortran<回车> pascal<回车> c++<回车> java<回车> #include #include

int main() {int j,k;

char*qstr[5],str[5][40],*change; for(k=0;k<5;k++)qstr[k]=str[k];

printf(\"enter 5 strings(1 string on each line)\\n\"); for(k=0;k<5;k++)scanf(\"%s\",qstr[k]); for(k=0;k<5;k++) {for(j=k+1;j<5;j++)

{if(strcmp(*(qstr+k),*(qstr+j))>0) {change=*(qstr+k); *(qstr+k)=*(qstr+j); *(qstr+j)=change; } } }

printf(\"The sorted strings are:\\n\");

for(k=0;k<5;k++)printf(\"%s\\n\",qstr[k]); return(0); }

四、编程题

34、已知head指向双向链表的第一个结点。链表中每个结点包含数据域(info)、后继元素指针域(next)和前趋元素指针域(pre)。请编写函数print1用来从头至尾输出这一双向链表。

35、有4名学生,每个学生考4门课程,要求在用户输入学生序号以后能输出该学生的全部成绩,用指针型函数来实现。请编写函数float*search()。

#include

float*search(float(*pointer)[4],int n); int main()

{static float score[J[4]={{60,70,80,90},{50,89,67,88}, {34,78,90,66},{80,90,100,70)};

float*p;int i,m;

printf(\"enter the number of student:\"); scanf(\"%d\",&.m);

printf(\"The score of No.%d are:\\n\",m); p=search(score,m); for(i=0;i<4;i++)

printf(\"%5.2f\\",*(p+i));

return(0);

float*search(float(*pointer)[4],int n) { }

参考答案

一、填空题

1、structs*next; 2、函数

3、【1】编译【2】连接

4、【1】float【2】double【3】char 5、3.500000

6、a &040或a&0×20或a&32 7、i<=x 8、880

9、double a[M][M]={0}; 10、【1】4【2】1

二、选择题

11、A 12、C

13、A 14、C

15、B 16、C 17、D

18、D 19、C 20、C 21、D 22、D 23、A 24、A 25、B

三、读程序填空

26、*3.140000,3.142*

27、a=+00325囗囗囗x=+3.14159e+00 (注:答案中的囗代表空格) 28、【1】0 1 2 3

-1 0 1 2 -2 -1 0 1 -3 -2 -1 0 【2】 0 -1 -2 -3

1 0 -1 -2 2 1 0 -1 3 2 1 0 29、i=5

i=2 i=2 i=0 i=2

30、【1】j=1【2】k>=0&&k<=6 31、9 7 5 5 3 1

32、if(a>b){scanf(\"%d\",&a);n++;} else{scanf(\"%d\",&b);m++;} 33、Basic C++ fortran java pascal

四、编程题

34、#include #include struct student {int info;

struct student*pre; struct student*next; };

void print1(struct student*head) {struct student*p;

printf(\"\\n the linklist is:\"); p=head;

if(head!=NULL) do

{printf(\"%d\",p->info); p=p->next;

while(p!=NULL); printf(\"\\n\"); }

35、float*search(float(*pointer)[4],int n) {float*pt;

pt=*(pointer+n); return(pt); }

因篇幅问题不能全部显示,请点此查看更多更全内容