C语言2013-2014学年第一学期期末试卷解析

更新时间:2023-10-06 19:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

江苏大学试题

(2013-2014学年第1学期)

注意事项:

1. 闭卷考试。考试时间为120分钟。

2.选择题请用2B铅笔涂在答题卡上。其余用签字笔或圆珠笔填写在答题纸上。 3.请将答题卡(提前15分钟收取)、答题纸、试卷分别都写上班级、学号、姓名、任课教师。

一、选择题(50分,每小题1分)

1.标准C语言程序的文件名的后缀是 。

A. .cpp B. .c C. .exe D. .obj

2.以下叙述正确的是_______。 A.C语言程序是由过程和函数组成的

B.C语言函数可以嵌套调用,例如:fun(fun(x))(不可嵌套定义) C.C语言函数不可以单独编译(可以单独编译)

D.C语言中除了main函数,其他函数不可作为单独文件形式存在

3.下列可用于C语言用户标识符的一组是_______。

A.void, define, WORD B.a3_3,_123,Car C.For, -abc, IF Case

D.2a, DO, sizeof

(合法字符数字,下划线,字母,以下划线或字母开头,但不能是C语言关键字) 4.以下选项中不能用作C程序合法常量的是_________ 。

A.1,234 B.'\\123' C.123 D.\

(合法常量: 整型常量,符号常量,实型常量,字符常量,转义字符,字符串常量) 5.以下定义语句中正确的是_______。

A.int a=b=0; (初始化不允许连等) B.long a=65; b; C.float a=1 ; D.double a=0.0;b=1.1;

6.以下叙述中正确的是______。

A. 在C程序中无论是整数还是实数,只要在允许范围内都能准确无误的表示 B. 在C程序中只要是整数在允许范围内都能准确无误的表示 C. 在C程序中只要是实数在允许范围内都能准确无误的表示 D. 在C程序中无论是整数还是实数,都无法准确无误的表示

7.设有语句 int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是______。 A. 3 B. 0 C. 9 D. -12 (a+=a-=a*a等价于 a=a+(a=a-(a*a)) )

8.int a=256; 执行语句 “printf(\”的结果是________。

A.100 B.256 C. 0FFE D.00FF

(%x,十六进制输出,将256转换为16进制)

9.以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是 。 A.if((a>b)&&(b>c)) k=1; else k=0; B.if((a>b)||b>c)) k=1 else k=0; C.if(a<=b) k=0; else if(b<=c) k=1; D.if(a>b) k=1; else if(b>c) k=1; else k=0;

10.有以下程序

#include main() {int s=0,a=1,n; scanf(\

do{s+=1;a=a-2;}while(a!=n); printf(\

若要使程序的输出值为2,则应该从键盘给n输入的值是 。 A.-1 B.-3 C.-5 D.0 (即当循环条件中a==n时循环退出,) 11.以下程序段的运行结果是______。 char c[5]={ 'a', 'b', '\\0', 'c', '\\0'}; printf(\

A.ab B.'a''b' C.ab\\0c\\0 D.ab\\0c

12.当执行下列语句序列时:

static int x; do{x+=x*x;} while(x);

问do-while循环一共执行了 次。

A.0 B.1 C.无穷多 D.暂时不能确定,要依赖x来判断。 (静态变量和全局变量若未赋值时,系统自动赋0值)

13.设有以下函数定义,则返回的函数值是_________。【本题跳过】 main()

{int x,*y; y=fun(&x);?.} int *fun(int *a)

{ int *t; *a=99; t=a; return t;}

A.无确定的值 B. 形参a的地址 C.主程序中变量x的地址 D. 函数中变量t的地址

14.设有以下说明,则值为210的表达式是______。

struct s { int a;int *b;};

int x0[]={110,120},x1[]={210,220}; struct s x[]={{100},{200}},*p=x; x[0].b=x0;x[1].b=x1;

A. *p->b B. (++p)->a C. *(p++)->b D.*(++p)->b

15.若有定义int a,b;若要通过scanf(“a=%d,b=%d”,&a,&b);语句分别给a 和b 输入1和2,则正确的数据输入内容是_______。

A.1,2 B.1 2 C.a=1,b=2 D.a=%d,b=%d 16.若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是_____。 A.a=a++,i++; B.i=(a+k)<=(i+k); C.i%=a; D.i=!a; (注意算术运算符%的特点:两操作数都是整型) 17.以下程序运行后的输出结果是_____。

#include main()

{ int a;

a=(int)((double)(3/2)+0.5+(int)1.99*2); printf(\}

A.3 B.4 C.5 D.6

18.有以下程序

#include main() { FILE *f;

f=fopen(\ fprintf(f,\ fclose(f);}

若文本文件filea.txt 中原有内容为hello,则运行以上程序后文件filea.txt中的内容为_____。 A.helloabc B.abclo C.abc D.abchello

19.有以下程序段

char name[20]; int num;

scanf(\

当执行上述程序段后,并从键盘输入:name=Lili num=1001<回车>后,name 的值为_____。

A.Lili B.name=Lili C.Lili num= D.name=Lili num=1001.

20.有以下程序

C.struct ord {int x;int y;int z;} a; D.struct {int x;int y;int z;} a;

35. 有以下程序

#include struct S

{ int a,b;}data[2]={10,100,20,200}; main()

{ struct S p=data[1]; printf(\程序运行后的输出结果是 ______。

A.10 B.11 C.20 D.21

36. 有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是______。 A. gets(&s[0]); B.scanf(\ C.gets(s); D.scanf(\ (%s, 对应的一定是地址,而s[1]是数组元素) 37. 有以下程序

#include main()

{char a[5][10]={\ int i,j;char t[10];

for(i=0;i<4;i++) /*擂台法排序*/ for(j=i+1;j<5;j++) if( strcmp(a[i],a[j])>0) { strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[j],t);} puts(a[3]); }

程序运行后的输出结果是 ______。

A. beijing B. china C. welcome D. Tiananme (该程序的功能是实现由小到大的字符串排序)

38. 若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是_____。 A.pk=k; B.pk[0]=&k[1][2]; C.pk=k[0]; D.pk[1]=k;

(错误AC,pk是指针数组的数组名,不能给数组名赋值,错误D,不能把行指针赋给列指针)

39. 有以下程序

#include main()

{ int a,b,k,m,*p1,*p2; k=1,m=8; p1=&k,p2=&m; a=++*p1+*p2; b=k;

printf(\程序运行后的输出结果是_____。

A.10 1 B.9 1 C.10 2 D.9 2

40. 以下选项中有语法错误的是 _____。

A. char *str[ ]={\ B. char str[10 ]={\C. char *str[3]; str[1]=\ D. char str[3][10];str[1]={\

41. 设有以下程序段

struct MP3 {char name[20]; char color; float price;}std,*ptr; ptr=&std;

若要引用结构体变量std中的color成员,写法错误的是_____。

A.std.color B. ptr-> color C.std-> color D.(*ptr) .color

42. C语言程序中,若函数无返回值,则应该对函数说明的类型是______。 A. int B. double C.char D.void

43. 若有函数

void fun(double a[], int *n) {???}

以下叙述中正确的是______。

A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送 B.形参a和n都是指针变量

C.形参a是一个数组名,n是指针变量

D.调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组

44. 有以下函数

#include void fun(char c) { if(c>'x') fun(c-1); printf (\ main() { fun('z');}

程序运行输出结果是______。

A.xyz B. wxyz C. zyxw D.zyx

45. 有以下函数

int aaa(char *s) { char *t=s; while(*t++); t--; return(t-s);}

以下关于aaa函数的功能叙述正确的是______。

A.求字符串s的长度 B.比较两个串的大小 C.将串s复制到串t D.求字符串s所占字节数

46. 设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是__。 A.auto B.register C.static D.auto或register

47. 有以下程序

#include int fun()

{ static int x=1; /*静态变量只赋一次初值,下次调用时沿用更改后的值*/ x=x*2; return x;} main() { int i,s=1;

for(i=1;i<=2;i++) s=fun(); printf(\

程序运行后的输出结果是______。

A.0 B.1 C.4 D.8

48. 有以下程序

#include

int a=5; /* 全局变量 */ void fun(int b)

{ int a=10; /* a是局部变量,仅在fun函数的效*/ a+=b;printf(\main() { int c=20;

fun(c);a+=c;printf(\ /* a用全局变量的值*/ 程序运行后的输出结果是______。

A.3025 B.3050 C.2525 D.2545

49. 若有说明int(*p)[3]; 则以下_________是正确的叙述。

A. p是一个指针数组 B. (*p)[3]与*p[3]等价

C. p是一个指针,它可以指向一个一维数组中任一元素

D. p是一个指针,它只能指向一个包含3个int类型元素的一维数组

50. 下面能正确进行字符串赋值操作的是______。

A.char s[5]={“ABCDE”}; B.char s[5]={‘A’,’B’,’C’,’D’,’E’}; C.char *s ; s=”ABCDE” ; D.char *s; scanf(“%s”,s) ;

(字符串赋值,一是赋值的正确格式,二是考虑存储字符串的数组的长度) 二、程序阅读题(20分,每空2分)

(注意:请将答案按编号填入答题纸的指定位置) 1.当输入以下数据时,100 200 300 400 500<回车>,下面语句的执行结果为 (1) 。【本题跳过】

#include main() {int a,b,c;

scanf(\ printf(\

100 300 400

2.以下程序段的输出结果是_(2)____。

#include main()

{int a=4,b=3,c=5,t=0; if(a

if(a

printf(\

5 0 3

3.下列程序输出的最后一行是 (3) 。 -2

#include main() {int i=-5; while(i++) {switch(i+5)

{case 1: switch(-i-3) {case 1:printf(\ case 2:printf(\ case 2:printf(\ case 3:printf(\

4.执行以下程序后,sq[0][2]= __(4)_2___,sq[1][1]= ___(5)__5___,sq[2][0]= ___(6)__8___。 main ()

{static int sq[3][3]={0,0,0,0,0,0,0,0,0}; int j=1,k=0,n; sq[j][k]=1;

for(n=2; n <=9; n ++) {j--; k--;

if(j<0&&k<0){j++; k+=2;} else if(j>=0&&k<0)k=2; else if(j<0&&k>=0)j=2;

else if(j>=0&&k<=2&&sq[j][k]!=0) {j++; k+=2;} sq[j][k]=n; }

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

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

printf(\ printf(\

5. 以下程序输出的第三行结果是__(7)__11__。 #include struct s

{int n,*m;}*p,*q; int d[5]={10,20,30,40,50};

struct s arr[5]={{100,&d[3]},{200,&d[4]},{300,&d[0]}, {400,&d[1]},{500,&d[2]}}; main() {q=p=arr;

printf(\ printf(\ printf(\ q+=3;

printf(\

6. 有以下程序

#include void ss(char *s,char t) { while(*s)

{ if(*s==t) *s=t-'a'+'A'; s++; }}

main()

{ char str1[100]=\ ss(str1,c);

printf(\

程序运行后的输出结果是_(8)_ abcDDfefDbD ____。

7. 下面程序的运行结果为: (9) 。

#include int func2();

int i=2; /*i 全局变量*/ void func1(int i) { i=func2(); printf(\

int func2() /*func2 函数中变量i为全局变量*/ { if(i<3) { i+=2; func1(i); } return i;} void main()

{ int i=0; func1(i); printf(\

8. 以下程序的输出结果是___(10)_ hane_____。【本题跳过】 char *fun(char *s) { int i ,j;

for(i=j=0;s[i]!='\\0';i++) if(s[i]!='c')s[j++]=s[i];

s[j]='\\0';return s; } main()

{printf(\

三、完善程序题(20分,每空2分)

(注意:请将答案按编号填入答题纸的指定位置) 1.输入百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。 (注:假设输入的成绩在0到100之间)。

#include main()

{float score; char grade; scanf(\

switch( (1) ) (int)score/10 /(int)(score/10) {case 10:

case 9:grade='A';break; case 8:grade='B';break; case 7:grade='C';break; case 6:grade='D';break; (2) ;break; }

printf(\成绩是%f,相应的等级是%c\\n\

2.以下程序采用递推法计算某一级数的近似值,n取某一值使得|x(2n+1)/n!|<0.000001时则停止计算。级数如下:

x3x5x7x(2n?1)x-+-+??+ 3?1!5?2!7?3!(2n?1)?n!#include #include main()

{float x, t, sum, s=1; int n=0; scanf(\ t=x; sum=t;

while( (3) fabs(t) >=1e-6) {n++; s=-s; t=t* (4) x*x/n ; sum=sum+s*t/ (5) 2*n+1 ; } printf(\

3. 以下程序由终端键盘输入一个文件名,然后把输入的字符依次存放到该文件中,用#号作为结束输入的标志。 #include main()

{FILE *fp; char ch,fname[10]; printf(\ gets(fname);

if((fp=_____(6)_ fopen(fname,”w”)________________)==NULL) {printf(\ printf(\

while( (7) (ch=getchar())!=’#’ ) fputc(ch,fp); fclose(fp); }

4. 设某班级有学生30名,学期末统计每位学生各课程成绩总分后,将前10名学生的学号、姓名、总分张榜公布,以下程序输出张榜清单。 #define N 30 main()

{struct STU {long num; char name[20]; int score; };

struct STU a[N],t; int i , j , k; for(i=0;i

scanf (\ for(i=0;i

for(j=i+1;ja[k].score)k=j; if(i!=k)

{____(8)t=a[i]______;__(9)_a[i]=a[k]_______;__(10)a[k]=t_______;}} printf(\ Name Score\\n\ for(i=0;i<10;i++)

printf(\

5. 编写一个函数实现将字符串s1和字符串s2合并(不得使用strcat函数),合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。

#include

(11) #include

void str_link(char *s1,char *s2) { int i=0,k; k=strlen(s1); while(s2)

{ *(s1+k+i)=*s2++; i++; }

(12) s1[k+i]=’\\0’ ; }

void sort(char *s1) { int i,j,k; char t; k=strlen(s1);

for(i=0;is1[j] ) { t=s1[i]; s1[i]=s1[j]; s1[j]=t; }}

void del_char(char *s) { int i,k,j=0;

k= (14) strlen(s) ; for(i=0;i

(15) continue else

s[j++]=s[i]; s[j]='\\0'; }

void main()

{ char str1[79]=\ str_link(str1,str2); puts(str1); sort(str1); puts(str1); del_char(str1); puts(str1); }

本文来源:https://www.bwwdw.com/article/mh7d.html

Top