1、高级语言程序设计-7 及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.若定义了 int m,n=0,*p1=m;,则与 m=n等价的语句是( )(分数:2.00)A.m=*p1B.*p1=*nC.*p1=*nD.*p1=*n2.若内部变量在离开了定义所在的函数或复合语句后,仍在生存期内。则该变量是 ( )(分数:2.00)A.auto变量B.register变量C.局部变量D.static变量3.以下程序输出的结果是( ) main() int I,j,m=0,n=0; for(I=0;I2;I+) for(j=0;j2;j+)
2、if(j=I)m=1;n+; printf(“%d/n“,n); (分数:2.00)A.4B.2C.1D.04.设 int a10,*p=a; 则对数组的正确引用是( )(分数:2.00)A.aB.pC.*(p+2)D.p+25.对于文件打开方式“rb+“描述正确的是( )(分数:2.00)A.可读写文本文件B.只读文本文件C.可读写二进制文件D.只读二进制文件6.以下程序的执行结果是( ) #includestdioh main() printf(“%d/n“,NULL); (分数:2.00)A.-1B.0C.1D.27.若有以下语句: char *language=“fortran“,“b
3、asic“,“C“,“java“; char *q;q=language+3; 则语句 printf(“%c/n“,*q;的输出是( )(分数:2.00)A.q的值B.字符串“C“C.language3的值D.程序错误,无法得到输出8.设 int a=1,b=2,c=4; 经过表达式(c=a!=b)(a=b)(c=b)运算后,a、b 和 c的值分别是( ) A1,2,0 B1,2,1 C1,2,2 C1,2,3(分数:2.00)A.B.C.D.9.设 int x=1;a=9,b=6,c=9,d=8;执行语句: if(ab)if(cb)if(bd)x=2;else x=6; 后 x的值是( )(
4、分数:2.00)A.1B.2C.6D.不确定10.汇编程序的功能是( )(分数:2.00)A.将汇编语言程序转换成目标程序B.将汇编语言程序转换成高级语言程序C.将高级语言程序转换为目标程序D.将汇高级语言程序转换为编语言程序11.若 x=100;,则表达式 x+100? x+20:x+10 的值是( )(分数:2.00)A.110B.120C.130D.10112.执行下面程序段后,变量 k的值是( )(分数:2.00)A.10B.30C.3D.不确定13.设有如下程序段 char str=“Hello!“; char *ptr; ptr=str; 执行完以上程序段后*(ptr+6)的值为(
5、 )(分数:2.00)A.oB./0C./oD.o14.若有宏定义:#define MOD(x,y)x%y 则执行下面语句后的输出结果是 int a=13,b=96; printf(“%d/n“,MOD(b,a);( )(分数:2.00)A.1B.2C.5D.615.下列运算符,优先级最低的是( )(分数:2.00)A.B.!C.-D.+=二、B填空题/B(总题数:10,分数:20.00)16.若有定义:double w6;,则数组元素下标的上限为 1。(分数:2.00)填空项 1:_17.若有定义语句:int a=10,2,20,3,30,4,40,p;p=a;,则执行“p2+=;之后 p的
6、值是 1。(分数:2.00)填空项 1:_18.若定义了 int a9,*p;,将数组元素 a8的地址赋给指针变量 p的赋语句是 1。(分数:2.00)填空项 1:_19.C语言的保留字主要用于语句的构成,所有保留字均由 1 组成。(分数:2.00)填空项 1:_20.语句“;“是无任何操作的语句,被称为 1。(分数:2.00)填空项 1:_21. 1是双目运算符,其运算对象是表达式,其值是右边表达式的值。(分数:2.00)填空项 1:_22.若要使用系统函数 getchar1,必须在程序的开头使用预编译命令 2。(分数:2.00)填空项 1:_23.若要以八进制输出整型变量,则要在输出语句中
7、加上格式输出符 1。(分数:2.00)填空项 1:_24.指针变量的使用主要有两种,一是 1;二是引用所指向的变量。(分数:2.00)填空项 1:_25.写出 n小于 m的奇数的表达式 1。(分数:2.00)填空项 1:_三、B程序分析题/B(总题数:4,分数:16.00)26.以下程序运行时输入:12回车,执行后输出结果 #includestdioh main() char ch1,ch2;int n1,n2; ch1=getchar();ch2=getchar(); n1=ch1-0;n2=n1*10+(ch2-0); printf(“%d/n“,n2); (分数:4.00)_27.#in
8、cludestdioh void f(int y,int*x) y=y+*X; *x=*x+y; main() int x=2,y=4; f(y,x); printf(“%d%d/n“,x,y); (分数:4.00)_28.#includestdioh char *ss(char *s) return s+strlen(s)/2;) main() char *p,*str=“abcdefgh“; p=ss(str);printf(“%s/n“,p); (分数:4.00)_29.#includestdioh int f(int a,int n) if(n1)return a0+f(a1,n-1)
9、; else return a0; main() int aa3=1,2,3,s; s=f(aa0,3);printf(“%d/n“,s); (分数:4.00)_四、B程序填充题/B(总题数:3,分数:18.00)30.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。 #includestdioh main() int i,a20,sum,count; sum=count=0: for(i=0;i20;i+)scanf(“%d“,_);/*第一空*/ for(i=0;i20;i+) if(_)/*第二空*/ count+; _;/*第三空*/ printf(“count=%
10、d,sum=%d/n“,count,sum); (分数:6.00)填空项 1:_31.SumColumMin()的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。 #includestdioh #define M 2 #define N 4 void SumColumMin(_)/*第一空*/ int i,j,k,s=0; for(i=0;iN;i+) k=0; for(j=1;jM;j+) if(_)k=j;/*第二空*/ s+=aki; _;/*第三空*/ main() int xMN=3,2,5,1,4,1,8,3,s; SumColum
11、Min(x,s); printf(“%d/n“,s); (分数:6.00)填空项 1:_32.求 f(x0,10)的累加和,其中 f(x)=2x+1。 #includestdioh int F(int x) return_;)/*第一空*/ int SumFun(int n) int x,s=0: for(x=0;xn;x+)_;/*第二空*/ return s; main() printf(“The sum=%d/n“,_);/*第三空*/ (分数:6.00)填空项 1:_五、B程序设计题/B(总题数:2,分数:16.00)33.输入一个整数 n(n10),如果 n=3,则输出 1 222
12、33333 222 1 以此类推。(分数:8.00)_34.把文本文件 x1. dat复制到文本文件 x2. dat中,要求仅复制 x1. dat中的非空格字符。(分数:8.00)_高级语言程序设计-7 答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.若定义了 int m,n=0,*p1=m;,则与 m=n等价的语句是( )(分数:2.00)A.m=*p1B.*p1=*nC.*p1=*n D.*p1=*n解析:2.若内部变量在离开了定义所在的函数或复合语句后,仍在生存期内。则该变量是 ( )(分数:2.00)A.auto变量B.re
13、gister变量C.局部变量D.static变量 解析:3.以下程序输出的结果是( ) main() int I,j,m=0,n=0; for(I=0;I2;I+) for(j=0;j2;j+) if(j=I)m=1;n+; printf(“%d/n“,n); (分数:2.00)A.4B.2C.1 D.0解析:解析 main() int I,jm=0n=0; for(I=0;I2;I+) for(j=0;j2;j+) if(j=i)m=1;n+;/*本行语句虽然包含“n+“,但不包括在任何循环体内*/ printf(“%d/n“,n): 4.设 int a10,*p=a; 则对数组的正确引用是
14、( )(分数:2.00)A.aB.pC.*(p+2) D.p+2解析:5.对于文件打开方式“rb+“描述正确的是( )(分数:2.00)A.可读写文本文件B.只读文本文件C.可读写二进制文件 D.只读二进制文件解析:6.以下程序的执行结果是( ) #includestdioh main() printf(“%d/n“,NULL); (分数:2.00)A.-1B.0 C.1D.2解析:解析 NULL 的 ASC值是 00000000,语句“printf(“%d/n“,NULL);“要求 NULL以整型数据输出,所以输出是 0。7.若有以下语句: char *language=“fortran“,
15、“basic“,“C“,“java“; char *q;q=language+3; 则语句 printf(“%c/n“,*q;的输出是( )(分数:2.00)A.q的值B.字符串“C“C.language3的值D.程序错误,无法得到输出 解析:解析 指字符删变量的指针不能得到指针数组的首地址,出现编译错误。8.设 int a=1,b=2,c=4; 经过表达式(c=a!=b)(a=b)(c=b)运算后,a、b 和 c的值分别是( ) A1,2,0 B1,2,1 C1,2,2 C1,2,3(分数:2.00)A.B. C.D.解析:解析因 a=b是不成立的,c=b 不被运算,C 所获得的值足表达式“
16、a!=b“的逻辑值。9.设 int x=1;a=9,b=6,c=9,d=8;执行语句: if(ab)if(cb)if(bd)x=2;else x=6; 后 x的值是( )(分数:2.00)A.1B.2C.6 D.不确定解析:解析当“ab“、“cb“、“bd“都成立时 x=2,只要有一个不成立就有 x=6。10.汇编程序的功能是( )(分数:2.00)A.将汇编语言程序转换成目标程序 B.将汇编语言程序转换成高级语言程序C.将高级语言程序转换为目标程序D.将汇高级语言程序转换为编语言程序解析:11.若 x=100;,则表达式 x+100? x+20:x+10 的值是( )(分数:2.00)A.1
17、10B.120C.130D.101 解析:12.执行下面程序段后,变量 k的值是( )(分数:2.00)A.10B.30C.3D.不确定 解析:解析 数组元素 s1没有初值,故其计算结果小确定。13.设有如下程序段 char str=“Hello!“; char *ptr; ptr=str; 执行完以上程序段后*(ptr+6)的值为( )(分数:2.00)A.oB./0 C./oD.o解析:14.若有宏定义:#define MOD(x,y)x%y 则执行下面语句后的输出结果是 int a=13,b=96; printf(“%d/n“,MOD(b,a);( )(分数:2.00)A.1B.2C.5
18、 D.6解析:15.下列运算符,优先级最低的是( )(分数:2.00)A.B.!C.-D.+= 解析:二、B填空题/B(总题数:10,分数:20.00)16.若有定义:double w6;,则数组元素下标的上限为 1。(分数:2.00)填空项 1:_ (正确答案:5)解析:17.若有定义语句:int a=10,2,20,3,30,4,40,p;p=a;,则执行“p2+=;之后 p的值是 1。(分数:2.00)填空项 1:_ (正确答案:a)解析:解析“*“优先级高于“+=“,语句“*p2+=;“相当于“(*p)+=2;“,对指针变量 p没有进行任何算术运算、其值不变。18.若定义了 int a
19、9,*p;,将数组元素 a8的地址赋给指针变量 p的赋语句是 1。(分数:2.00)填空项 1:_ (正确答案:p=a8;)解析:19.C语言的保留字主要用于语句的构成,所有保留字均由 1 组成。(分数:2.00)填空项 1:_ (正确答案:小写字母)解析:20.语句“;“是无任何操作的语句,被称为 1。(分数:2.00)填空项 1:_ (正确答案:空语句)解析:21. 1是双目运算符,其运算对象是表达式,其值是右边表达式的值。(分数:2.00)填空项 1:_ (正确答案:逗号运算符)解析:22.若要使用系统函数 getchar1,必须在程序的开头使用预编译命令 2。(分数:2.00)填空项
20、1:_ (正确答案:#include stdioh)解析:23.若要以八进制输出整型变量,则要在输出语句中加上格式输出符 1。(分数:2.00)填空项 1:_ (正确答案:%0)解析:24.指针变量的使用主要有两种,一是 1;二是引用所指向的变量。(分数:2.00)填空项 1:_ (正确答案:赋值)解析:25.写出 n小于 m的奇数的表达式 1。(分数:2.00)填空项 1:_ (正确答案:n%2nm)解析:解析 n 小于 m的奇数即是 nm 又要是奇数。则 nm 和 n不能做 2整除都要满足,转化为 c语言表达式即是 n%2nm。三、B程序分析题/B(总题数:4,分数:16.00)26.以下
21、程序运行时输入:12回车,执行后输出结果 #includestdioh main() char ch1,ch2;int n1,n2; ch1=getchar();ch2=getchar(); n1=ch1-0;n2=n1*10+(ch2-0); printf(“%d/n“,n2); (分数:4.00)_正确答案:()解析:12 解析 #include stdioh main() char ch1,ch2;int n1,n2; ch1=getchar();ch2=getchar();/*变量 ch1和 ch2分别获得初值 1和 2*/ nI=ch1-0;n2=n1*10+(ch2-0);/*变量
22、ch1和 ch2都以其 ASC值参与运算*/ printf(“%d/n“,n2); 27.#includestdioh void f(int y,int*x) y=y+*X; *x=*x+y; main() int x=2,y=4; f(y,x); printf(“%d%d/n“,x,y); (分数:4.00)_正确答案:()解析:8 4 解析 #includestdioh void f(int y,int*x)/*参数为指针变最,采用地址传递方式*/ y=y+*x;*x=*x+y; main() int x=2,y=4: f(y,x); printf(“%d%d/n“,x,y); 28.#i
23、ncludestdioh char *ss(char *s) return s+strlen(s)/2;) main() char *p,*str=“abcdefgh“; p=ss(str);printf(“%s/n“,p); (分数:4.00)_正确答案:()解析:efgh 解析 #includestdioh char *ss(char *s)/*函数为指针型函数,返回值为字符串 s的中问一个字符的地址*/ return s+strlen(s)/2; main() char *p,*str=“abcdefgh“; p=ss(str):printf(“%s/n“,p);/*打印输出以地址 p为
24、起始地址的字符串*/ 29.#includestdioh int f(int a,int n) if(n1)return a0+f(a1,n-1); else return a0; main() int aa3=1,2,3,s; s=f(aa0,3);printf(“%d/n“,s); (分数:4.00)_正确答案:()解析:6 解析 #includestdioh int f(int a,int n) if(n1)return a0+f(a1,n-1);/*这是一个递归调用过程*/ else return a0; main() int aa3=1,2,3,s; s=f(aa0,3);print
25、f(“%d/n“,s); 四、B程序填充题/B(总题数:3,分数:18.00)30.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。 #includestdioh main() int i,a20,sum,count; sum=count=0: for(i=0;i20;i+)scanf(“%d“,_);/*第一空*/ for(i=0;i20;i+) if(_)/*第二空*/ count+; _;/*第三空*/ printf(“count=%d,sum=%d/n“,count,sum); (分数:6.00)填空项 1:_ (正确答案:a0/*第一空。对数纰进行初始化*/)解析
26、:ai0/*第二空。判定数组元 ai是否大于 0*/ sum+=ai/*第三空。对大于 0的数组元素求和1*/31.SumColumMin()的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。 #includestdioh #define M 2 #define N 4 void SumColumMin(_)/*第一空*/ int i,j,k,s=0; for(i=0;iN;i+) k=0; for(j=1;jM;j+) if(_)k=j;/*第二空*/ s+=aki; _;/*第三空*/ main() int xMN=3,2,5,1,4,1,
27、8,3,s; SumColumMin(x,s); printf(“%d/n“,s); (分数:6.00)填空项 1:_ (正确答案:int aMN,int*sum/*第一空。因和值通过形象传回主函数输出,故定义形参变量为指针变量*/)解析:akiaji/*第二空。比较每列各个元素的大小以获提最小值*/ * sum=s/*第三空。令形参变量 sum所指向的内存单元获得和值以 s传递回主函数*/32.求 f(x0,10)的累加和,其中 f(x)=2x+1。 #includestdioh int F(int x) return_;)/*第一空*/ int SumFun(int n) int x,s=
28、0: for(x=0;xn;x+)_;/*第二空*/ return s; main() printf(“The sum=%d/n“,_);/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:x*x+1/*笫一空。此为函数式“f(x)=2x+1 的 C语言表达式*/)解析:s+-=F(x)/*第二空。求函数式“f(x)“的累加*/ SumFum(10)/*第三空。调用函数“StunFun()求累加值“*/五、B程序设计题/B(总题数:2,分数:16.00)33.输入一个整数 n(n10),如果 n=3,则输出 1 222 33333 222 1 以此类推。(分数:8.00)_正确答案:
29、()解析:#include stdio #includestdlibh main() int n,i,s=1,k; scanf(“%d“,n);if(n10)exit(0);/*判定输入变量值是否超过 10,如超过则自动终止程序运行*/ k=2*n-1;/*确定输出最长行输出的数字个数*/ while(k!=0)/*确定输出模式,并循环输出*/ for(i=0;in-1;i+)primf(“ “); for(i=0;i2*s-1;i+)printf(“%d“,s); printf(“/n“); if(sk)-n;+s;-k;/*当 sk 时输出为增量形式输出*/ else+n;-s;-k;/*
30、当 sk 时输出为减量形式输出*/ 34.把文本文件 x1. dat复制到文本文件 x2. dat中,要求仅复制 x1. dat中的非空格字符。(分数:8.00)_正确答案:()解析:#includestdioh void main() char ch;FILE*fp1,*fp2; fp1=fopen(“x1dat“,“r“);/*以只读方式打开文件 x1dat*/ fp2=fopen(“x2dat“,“w“);/*以可写方式拱形文件 x2dat*/ while(!feof(fp1) ch=fgetc(fp1);/*从文件 x1dat 读取字符*/ if(ch!=)/*判定所读取字符是否为“空格“*/ fputc(ch,fp2); fclose(fp1);fclose(fp2);/*关闭文件*/