常熟理工学院 C语言 考试样卷

发布时间:2019-08-26 12:04:00   来源:文档文库   
字号:

程序设计基础C语言)考试卷(本科样卷)

(理论部分)考试时间120分钟,答案请写在答题卡上



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

1以下语句中不包含关键字的是 

Ax=sqrt(2);

Bwhile(x!=0)x--;

Cif(x<0)x=-x;

Dreturn x;

2执行以下程序时,

#include

main()

{ int a; float b;

scanf("%3d%f",&a,&b);printf("%d\t%f",ab);

}

若要求变量ab分别从键盘获得输入值45678.0,则以下四种输入数据中(凵代表空格键,代表回车),不能达到该要求的输入数据是 

A45678 B45678

C45,678 D045678

3已知有声明int x=2:,以下表达式中值不等于8的是 

Ax+=2,x*2 Bx+=x*=X

C(x+7)/2*((x+1)%2+1) Dx*7.2/x+1

4.已知有声明”int a=3, b=4, c;”,则执行语句”c=1/2*(a+b);”后,c的值是 

A0 B3 C3.5 D4

5.已知字母AASCII码是65,字母aASCII码是97,变量c中存储了一个大写字母的编码。若要求将c中大写字母编码转换成对应小写字母编码,则以下表达式中不能实现该功能的是 

Ac=tolower(c) Bc=c+32

Cc=c-’A’+’a’ Dc= (c +’A’)%26-’a’

6已有声明”char *s1="China", s2[10], *s3="Nanjing"; *s4;”,以下字符串赋值语句在执行时可能出现错误的是 

Astrcpy(s3, s1); Bstrcpy(s4, s1);

Cstrcpy(s2, s1); Dstrcpy(s2, s3);

7.执行以下程序后的结果是 

#include

void main()

{ int x=3;

Do

{

printf("%d\t", x=x-3);

}while(!x);

}

A输出一个数0 B输出一个数:3

C.输出两个数:0-3 D.无限循环,反复输出数

8设有声明”int p[10]={1, 2}, i=0;”以下语句中与”p[i]=p[i+1], i++;”等价的是 

Ap[i]=p[i+1]; Bp[++i]=p[i];

Cp[++i]=p[i+1]; Di++, p[i-1]=p[i];

9.已知有声明”int m[]={5,4,3,2,1},i=0;”,下列对m数组元素的引用中,错误的是 

Am[++i] Bm[5]

Cm[2*2]=0 Dm[m[4]]

10.若有函数fun的定义为

void fun(…)

{static int a=1;

}

则下列叙述中不正确的是 

A在每次调用fun函数时变量a的值是上次调用结束时a的值

B.在fun函数之外,可以用变量名a直接引用a的值

C.在其他函数中,可以出现声明double a=2.5;

Dfun函数的形式参数不能取名为a

11若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是 

A.实参和其对应的形参占用同一存储单元

B.形参不占用存储单元

C.同名的实参和形参占用同一存储单元

D.形参和实参占用不同的存储单元

12.已有声明”int a[5];”,以下表达式中不能正确取得a[1]指针的是 

A&a[1] B++a C&a[0]+1 Da+l

13若有如下声明和语句:

int t[3][3], *pt[3], k;

for(k=0; k<3;k++) pt[k]=&t[k][0];

则表达式*(*(pt+1)+2)所引用的是 

At[2][0] B&t[2][0] Ct[1][2] D&t[1][2]

14.若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是 

struct ss

{ int a;

struct ss *b;

}x[3]={{5, &x[1]}, {7, &x[2]}, {9, 0}}, *ptr=&x[0];

Aptr->a B(++ptr)->a

Cx[1]A Dx[0].b->a

15下列叙述中正确的是 

Amain函数必须出现在其他函数之前

Bmain函数中至少必须有一条语句

CC程序总是从main函数的第一条语句开始执行

DC程序总是在执行完main函数的最后一条语句后结束

16已有定义int a[2][3]={0}, *p=a[0];”,下面表达式中有语法错误的是

Aa[0]=1 Bp[0]=1

C*p=1 Da[0][0]=1

17若有如下声明和语句

int a[3][3], *p[3], k;

for(k=0; k<3;k++) p[k]=&a[k][0];

则表达式*(*(p+1)+2)所引用的是

Aa[2][0] B&a[2][0]

Ca[1][2] D&a[1][2]

18设有声明语句int b[3][3]={1,2,3,4,5,6,7,8,9};”,下面语句中不能输出数组元素b[1][2]的值6的是 _

Aprintf("%d ",*(*(b+1)+2))

Bprintf("%d ",*(&b[2][0]-1));

Cprintf("%d ",*(b[1]+2));

Dprintf("%d ",*(b+1)[2]);

19下面函数中,可以把整型数据以二进制形式写入文件中的函数是________

Afprintf() Bfwrite()

Cfread() Dfputc()

20在缺省情况下,标准C的编译系统中预定义的标准输出流stdout直接连接的设备是

A.软盘 B.硬盘 C.键盘 D.显示器

、填空题 (每空2分,共20分)

1数学式所对应的C语言表达式为1

2.在C语言中大部分执行语句都含关键字。例如,for语句含关键字for。除这些语句外不含关键字的非空操作语句是2

3.在以下程序的main函数中,语句fun(x, 10)内的实参x表示数组x3

void fun(int a[10], int n)

{ int i; for(i=0; i<n; i++)a[i]++; }

main( )

{ int x[10]={0};fun(x, l0); }

4.已知有函数定义int fun(){return (3, 4);},则调用fun后的函数返回值是4

5.执行程序段 int x=0x6c; printf(“x=x\n”, x);后的输出结果为5

6.已知有声明char ch; int a; 执行语句scanf(“%c%d”, &ch, &a);时如果从键盘输入的数据是123,则变量a得到的值是6

7C语言源程序中,不带任何修饰符的浮点数直接量(例如:3.14)都是按7类型数据存储的。

8.若有声明char sl[10]= “ABCDE”, s2[10]= “A\\0”;,则语句

printf(“%d”, strlen(strcpy(sl, s2)));的输出结果是8

9设函数a的定义如下:

void a()

{ int x=12,y=345;FILE *fp=fopen(my.dat”,”w);

fprintf(fp,%d %d”,x,y);

fclose(fp);

}

已知main函数中有声明int x,y;FILE *fp=fopen(my.dat”,”r);若需要从文件mydat中正确地读出由函数a写入的两个数据并分别保存到变量xy则在main函数中使用的读数据语句应当是9(要求写出语句的完整格式)

10.在一个C语言源程序中,必不可少的是10

阅读程序题 (每空2分,共20分)

1.以下程序运行时输出结果是 1

#include<stdio.h>

main()

{ char *p=“student”;

if(strcmp(p,“student”))

printf(“yes”);

else

printf(“no”);

}

2.以下程序运行后的输出结果为 2

#include <stdio.h>

int b;

int fun(int a)

{ static int c=3;

return ((++a)+(++b)+(++c));

}

void main ( )

{ int i, a=2;

for(i=0;i<2;i++) printf(“%5d”, fun(a));

}

3以下程序输出结果为 3

void f(int a, int *b)

{ a++; b++; (*b)++;}

main()

{ int i, x[2] = {4,4};

f(x[0], &x[0]);

printf(%d,%d, x[0], x[1]);

}

4以下程序运行时,输出结果是 4

#include <stdio.h>

fun(int x)

{ if(x/2>0) fun(x/2);

printf(%d”, x%2);

}

main( )

{ fun(20); putchar(‘\n’);}

5.以下程序运行时输出到屏幕的结果是 5

#include <stdio.h>

#define MAX(A, B) A>B?2*A:2*B

void main()

{ int a=1, b=2, c=3, d=4, t;

t=MAX(a+b, c+d);

printf(“%d\n”, t);

}

6以下程序运行时输出到屏幕的结果中第一行是 6 第二行为 7

#include <stdio.h>

#include <ctype.h>

void compute(char *s)

{ int t, r;

char op;

for(r=0; isdigit(*s); s++) /* isdigit(*s)判断s指向的字符是否为数字字符*/

r=r*10+*s-’0’;

while(*s)

{ op=*s++;

for(t=0; isdigit(*s); s++)

t=t*10+*s-'0';

switch(op)

{ case '+':r=r+t; break;

case '-': r=r-t; break;

case '*':r=r*t; break;

case '/':if(t) r=r/t; else{puts(“devide error”); return;}

}

}

printf(“%d\n”, r);

}

void main( )

{ compute(“12+6-19+2”);

compute(“12/6*19/2”);

}

7.以下程序运行时输出结果的第一行是 8 ,第二行是 9 笫三行是 10

#include <stdio.h>

typedef struct s

{ int index;

int value;

}M;

main( )

{static int i, j, k, c[4][4];

M a[10]={{0, 1}, {3, 2}, {5, 3}, {6, 4}, {9, 5}, {15, 6}, {-1,0}}, *p=a,

b[10]={{1, 1}, {3, 2}, {4, 3}, {6, 4}, {10, 5}, {13, 6}, {-1, 0}}, *q=b;

while (p->index!=-1)

{ i=p->index/4;

j=P->index%4;

c[i][j]=p->value;

  p++;

}

while(q->index !=-1)

{ i=q->index/4;

j=q->index%4;

c[i][j]+=q->value;

q++;

}

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

{for(j=0;j<4;j++)

printf(“%d”, c[i][j]);

printf(“\n”);

}

}

完善程序题(每空1分,共5分)

1以下程序的功能是对a数组a[0]~a[n-1] 中存储的n个整数从小到大排序。排序算法是:第一趟通过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1] 中;第二趟通过比较将n个整数中的次小值放在a[1]中,次大值放在a[n-2] 中;……,以此类推,直到待排序序列为递增序列。试完善程序以达到要求的功能。

#include <stdio.h>

#define N 7

void sort(int a[], int n)

{ int i, j, min, max, t;

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

{2;

for(j=i+1; j<n-i; j++)

if(a[j]<a[min])min=j;

else if(a[j]>a[max])max=j;

if(min!=i)

{ t=a[min]; a[min]=a[i]; a[i]=t; }

if(max!=n-i-1)

if(max==i)

{ t=a[min]; a[min]=a[n-i-1]; a[n-i-1]=t; }

else

{ t=a[max]; a[max]=a[n-i-1]; a[n-i-1]=t; }

}

}

void main()

{ int a[N]={8, 4, 9, 3, 2, 1}, i;

sort(a, N);

printf(“sorted:\n”);

for(i=0; i<N; i++) printf(“%d\t”,a[i]);

printf(“\n”);

}

2.程序中函数double mycos(double x)的功能是:根据下列公式计算cos(x)的近似值。

精度要求:当通项的绝对值小于等于10-6时为止。

#include <stdio.h>

#include <3>

double mycos(double x)

{ int n=1;

double sum=0, term=1.0;

while (4>=le-6)

{sum+=term;

term*=5;

n=n+2;

}

return sum;

}

main( )

{ double x;

scanf(“%1f”, &x);

printf(“fx(%f)=%f%f\n”, x, mycos(x), cos(x));

}

、改错题(共9,每错3, 指出错误1分,改对2

题目函数changea数组存储的字符串中取出所有十六进制数字字符依次存入字符数组b中,然后再将b数组中的数字字符串转换成一个整数并返回。

提示:库函数isxdigit(ch)的功能是检查ch是否是十六进制数字字符,若是则返回1,否则返回0(模拟题有6个错)

注意:不能增加、删除语句,但可以调换语句的位置。

(测试数据与运行结果)

测试数据:"xyz3F4tqk"

运行结果:输出1012

(含有错误的源程序)

#include

#include

#include

1long change(char a)

2{

3 int i, j = 0;long int k = 0;

4 char b[10] = {0};

5 for (i = 0;a[i]! = '0';i++)

6 if (isxdigit(a[i]))

7 b[i++] = a[i];

8 b[j] = '0';

9 i = 0;

10 do

11 {

12 if (isdigit(b[i]))

13 {k = k * 16 + b[i] - '0';i++; }

14 else

15 {

16 b[i] = isupper(b[i]) ? b[i]b[i] - 'a' + 'A';

17 i++;

18 k = k * 16 + b[i] - 'A';

19 }

20 }

21 while (b[i] != '\0');

22 return k;

23}

24void main()

25{

26 char c[80] = "xyz3F4tqk";

27 long m;

28 m = change(c);

29 printf("%ld", m);

30}

六、编程题(共6分)

求下面数列的和,计算到第n项的值小于10-4为止。

      

式中,(本程序运行结果是:y=2.359646)。要求计算fn用函数过程实现。





答题卡

题号

总得分

阅卷人

、选择题(每小题2分,共30)

1

2

3

4

5

6

7

8

9

10

A

C

D

A

D

B

C

D

B

B

11

12

13

14

15

16

17

18

19

20

D

B

C

A

C

A

C

D

B

D

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

1__sqrt(x*x+y*y)/(a+b)__ 2_表达式语句和函数调用语句_ 3__第一个元素地址 起始地址_

4______4_________ 5_____x=6c________ 6_____23_______ 7______double_______

8______3_________ 9__fscanf(fp, %d%d”, &x, &y);__ 10_ __main函数定义_ _

、写出程序结果题(每空2分,共20分)

1_____no_____ 2_____8 10_____ 3______4,5_ ____ 4____10100______ 5_______10______

6______1_____ 7______19_______ 8_____1104_______ 9_____3380______ 10_____0550_____

、完善程序题(每空1分,共5分)

1___________n/2_______________ 2____________min=max=i_____________ 3________math.h ___________

4________fabs(term)____________ 5____________-x*x/(n*(n+1))________

、改错题(9) 、编程题(6)



(1) 行有错,改为….

(5) 行有错,改为….

(7) 行有错,改为….

(8) 行有错,改为….

(17) 行位置有错,应该移到??行后

(18) 行有错,改为….

#include

main()

{ float a,y=0;

int i=1;

for( ; ; )

{ a = 1.0 / fib(i);

if (a <= 0.0001) break;

y = y + a;

i = i + 1

}

printf ("y=%f\n", y);

}

int fib(int i)

{ if (i == 1)

return 1;

else if (i == 2)

return 2;

else

return( fib(i - 1) + fib(i - 2));

}

本文来源:https://www.2haoxitong.net/k/doc/8e76a552b52acfc788ebc906.html

《常熟理工学院 C语言 考试样卷.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式