高级语言程序设计自考题模拟30.docx
《高级语言程序设计自考题模拟30.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计自考题模拟30.docx(9页珍藏版)》请在冰豆网上搜索。
高级语言程序设计自考题模拟30
高级语言程序设计自考题模拟30
一、单项选择题
(在每小题列出的四个备选项中只有一个是符合题目要求的)
1.若有定义:
floata=27.3;inti=0,k=3;则不符合C语言规定的赋值语句是______
A.i=!
a
B.i=(a+k)<=(i+k)
C.a=a++,-k++
D.i=a%11
答案:
D
[考点]赋值语句的书写规则
[解答]取模运算符“%”,二元运算符,具有左结合性,参与运算的必须为整量,D选项中a的类型是float,所以D不符合规定。
2.以下说法中不正确的是______
A.do-while和for循环均是先执行循环体语句,后判断表达式
B.while循环是先判断表达式,后执行循环体语句
C.使用while循环时,循环变量初始化的操作应在循环语句之前完成
D.for,while和for-while循环中的循环体均可由空语句构成
答案:
A
[考点]for,while,do-while循环的特点
[解答]for循环式先判断表达式,后执行循环语句。
3.若有定义语句:
inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则正确的是______
A.scanf("%d",a,b);
B.scanf("%d",&p);
C.scanf("%d",p);
D.scanf("%d%d%d",a,b,c);
答案:
C
[考点]scanf函数
[解答]scanf函数中的输入项必须是指针,只有C符合要求。
4.设有定义:
intx=4;,以下表达式中,值不为20的是______
A.x*=x+1
B.x++,4*x
C.x*=(x+1)
D.2*x,x+=12
答案:
D
[考点]逗号运算符的运算方式
[解答]逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向是“自左向右”。
A和C项的结果是一样的,可展开为:
x=x*(x+1)=20;B项中先执行x++,逗号执行前x的值变为5,逗号后的值就是整个表达式的值为20;D选项逗号前并未给x赋值,所以表达式的值就是x+=12的值,即为16。
5.阅读下面程序段,执行后的结果为______
#include<stdio.h>
intfun(int,int);
main()
{intm=4,n=2,k;
k=fun(m,n);
printf("%d\n",k);}
fun(intm,intn)
{return(m*m*m-n*n*n);}
A.64
B.56
C.8
D.0
答案:
B
[考点]函数之间的数据传递
[解答]如果没有指明函数数值类型,则默认函数返回值的类型为int类型。
6.设有以下语句:
structex
{intx;doubley;char*z}apple;
则下面叙述中不正确的是______
A.struct是结构体类型的关键字
B.apple是结构体类型名
C.x,y,z都是结构体成员名
D.structex是结构体类型名
答案:
B
[考点]结构体的组成
[解答]structex是结构体类型名,apple是结构体变量名。
7.设staticintx;执行表达式(x+1>=2)&&(x=-1)&&(x+=1)后,x的值为______
A.0
B.1
C.-1
D.2
答案:
A
[考点]存储类型及逻辑运算
[解答]static型变量未赋值时,系统赋值为0;&&左端第一个表达式的值为假时,结果肯定为假,此时第二个表达式将不再运行。
8.若x是int型变量,且有下面的程序段:
for(x=4;x<7;x++)printf((x%2)?
("**%d):
("##%d\n"),k);
输出的结果是______
A.**4
**5
##6
B.##4
##5
**6
C.##4
**5##6
D.**4##5
**6
答案:
C
[考点]条件运算符
[解答]这种条件表达式的一般形式为:
表达式1?
表达式2:
表达式3,条件运算符的执行顺序是先求解表达式1,若非零则求解表达式2,否则求解表达式3,所求表达式即为整个条件表达式的值。
9.定义如下变量和数组:
intk:
intx[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是______
for(k=0;k<3;k++)
printf("%d",x[2-k][k]);
A.951
B.963
C.753
D.741
答案:
C
[考点]二维数组元素的引用方法
[解答]题中通过二维数组的行列下标来定位元素的位置,从而实现元素的引用。
10.以下程序运行后,a的值是______
main()
{inta,k=4,m=2,*p1=&k,*p2=&m;
a=p1==&m;
printf("%d\n",a);
}
A.4
B.0
C.1
D.运行时出错,a无定值
答案:
B
[考点]指针及逻辑运算
[解答]题中,k与m的地址是不一样的,a=p1==&m,先运行关系运算符==,p1不等于&m,所以为假,为0,所以a=0。
11.C语言规定,调用一个函数,实参与形参都是简单变量时,它们之间的传递方式是______
A.地址传递
B.单向值传递
C.用户指定方式
D.双向值传递
答案:
B
[考点]调用函数时数据的传递方式
[解答]在C语言中,函数间参数的传递方式是实参向形参的单向值传递,而单向值传递是指只能从主调函数向被调函数传递数据。
12.执行以下程序段后,s的值为______
inta[]={6,3,7,2,1,5,4,10};
ints=0,k;
for(k=0;k<8;k+=2)
s+=*(a+k);
A.18
B.28
C.14
D.无定值
答案:
A
[考点]循环结构和指针
[解答]*(a+k)指向的是第k+1个元素,因为数组下标是从O开始的,所有s的值为6,7,1,4四个值相加所得。
13.设有数组定义:
chararray[]="china";,则数组array所占用的空间和长度为______
A.4个字节,5
B.5个字节,5
C.6个字节,5
D.7个字节,6
答案:
C
[考点]字符数组的空间及字符长度
[解答]字符串“china”存储在数组中时,其后的'\0'也是占内存的,所以是6个字节,但其长度不包括'\0',所以其长度为5。
14.如果打开文件时,选用的文件操作方式是"wb+",则下列说法中正确的是______
A.要打开的文件必须存在
B.打开文件后只能读数据
C.打开文件后只能写数据
D.文件打开后删除原内容再写
答案:
D
[考点]文件的打开与关闭
[解答]“wb+”对二进制文件进行读或写操作。
如果该文件不存在,系统自动建立新文件;如果该文件存在,其内容被清除。
15.包含用户类型符“FILE”的定义的头文件是______
A.string.h
B.stdlib.h
C.stdio.h
D.file.h
答案:
C
[考点]文件指针
[解答]文件指针是指向与文件参数有关的结构体类型的指针变量,系统在头文件“stdio.h”中已经定义。
二、填空题
1.若a,b,c均是整型变量,则计算表达式a=(b=3)+(c=7)后,a的值为______,c的值为______。
答案:
10,7
[考点]算术表达式
[解答]括号的优先级是最高的,c的值为7,a为10。
2.表达式8.0*(1/2)的值为______。
答案:
0.0
[考点]算术表达式
[解答]“就长不就短”原则,所以最后的数据类型为实型。
3.设x,y,z均为整型变量,请写出描述“x或y中至少有一个大于z”的表达式______。
答案:
(x>z)||(y>z)
[考点]逻辑表达式
[解答]至少有一个,使用或运算符。
4.在C语言中,二维数组元素在内存中的存放顺序是______。
答案:
顺序
[考点]二维数组的初始化
[解答]二维数组元素在内存中的存放中是顺序存放,即先行后列。
5.以下程序的输出结果是______。
#include<stdio.h>
main()
{chars[]="abcdefg";
s[4]='\0';
printf("%s\n",s);}
答案:
abcd
[考点]字符串的输出
[解答]%s格式输出,遇到'\0',结束。
6.在一个源文件中定义的外部变量的作用域为______。
答案:
从定义该变量的位置开始至本文件结束
[考点]外部变量的作用域
[解答]外部变量的作用域为定义点到程序结束。
7.设chars[20]="My";,则执行strcat(s,"Boy!
")后s的内容是______。
答案:
MyBoy!
[考点]strcat函数
[解答]srcat函数的功能是将字符串连接到字符数组的最后一位有效字符,并组成新的字符串。
8.设inta[2][5]={{8},{5}};则数组元素______的值为5。
答案:
a[1][0]
[考点]二维数组的初始化
[解答]8和5分别赋给了第一行和第二行的第一个元素。
9.fopen函数打开文件成功,返回值是与打开文件相关的______。
答案:
文件指针
[考点]fopen函数
[解答]能正确打开指定的文件,则返回一个指向文件的文件指针。
10.a盘根目录下的一级子目录tc中的text.exe文件的磁盘文件名是______。
答案:
a:
\tc\text.exe
[考点]磁盘文件名
[解答]磁盘文件名的一般组成是盘符:
路径\文件主名.扩展名。
路径是由目录序列组成的,目录间的分隔符号为“\”。
三、程序分析题
1.main()
{intn,k=0;
for(n=0;n<20;n++)
{k=0;
while(k<=n)
{if(n==5*k)
printf("%d,",n);
k++;
}
}
}
答案:
0,5,10,15,
2.#include<stdio.h>
intt(intx,inty,intp,intq)
{p=x*x+y*y;
q=x*x-y*y;
}
main()
{inta=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d%d\n",c,d);
}
答案:
56(注意:
传递实参的值,但不改变实参的值)
3.#include<stdio.h>
intb=2;
intfunc(int*a)
{*a+=b;return(*a);}
main()
{inta=3,res=1;
res+=func(&a);
printf("%d%d\n",a,res);}
答案:
56
4.#include<stdio.h>
main()
{structAPPLE{
struct{intx;
inty;
}in;
inta;intb;
}e;
e.a=2;e.b=3;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d",e.in.x,e.in.y);
}
答案:
6,5
四、程序填充题
1.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。
#include<stdio.h>
main()
{inti,a[20],sum,count;
sum=count=0;
for(______)scanf("%d",&a[i]);/*第一空*/
for(i=0;i<20;i++)
{if(______)/*第二空*/
{count++;
______;}/*第三空*/
}
printf("count=%d,sum=%d\n",count,sum);
}
答案:
i=0;i<20;i++
a[i]>0
sum+=a[i]
2.下面程序是将字符串p中的所有字符复制到字符串b中,要求每复制三个字符后插入一个空格。
#include<stdio.h>
voidcp(char*p,char*b)
{inti,k=0;
while(*p)
{i=0;
while(______)/*第一空*/
{b[k]=*p;
k++;p++;i++;
}
if(*p)
{______;/*第二空*/
}
}
______;/*第三空*/
}
main()
{chara[20],b[20];
gets(a);
cp(a,b);
puts(b);
printf("\n");
}
答案:
i<3&&*p
b[k++]=''
b[k]='\0'
3.以下程序由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用“#”作为结束输入的标志。
#include<stdio.h>
#include<stdlib.h>
main()
{FILE*fp;
charch,fname[10];
printf("inputthenameoffile\n");
gets(fname);
if((fp=______)==NULL){printf("cannotopen\n");exit(0);}/*第一空*/
else{printf("enterdata\n");
while(______)fputc(______,fp);}/*第二、三空*/
fclose(fp);
}
答案:
fopen(fname,"w")
(ch=getchar())!
='#'
ch
五、程序设计题
1.编一个程序,其功能是对名为“abc.txt”的磁盘文件中“@”之前的所有字符进行处理,处理方法是每个字节的内容减10。
答案:
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE*fp;
charc;
if((rp=fipen("abc.txt","r+"))==NULL)/*测试文件是否正确被打开*/
{printf("Cannotopenfile!
\n");exit(0);}
while(!
feof(fp))
if((c=fgetc(fp))!
='@'/*如果不是@字符则进行加密运算*/
{c=c-10;/*加密运算*/
fseek(fp,-11,1);/*前移一个字符。
因在fgetc(fp)时文件内部指针会自动后移一个字符,指向应被加密字符的下一个字符*/
fputc(c,fp);/*将获得加密的字符填入该位置,且文件内部指针会自动后移一个字符*/
fseek(fp,01,1);/*避免指针漂移,定位文件内部指针在当前位置不移动,并将其传递给函数feof(fp)*/
elsebreak;
rclose(fp);
return(0);
2.用指针方法实现:
输入8个整数,将最大数和最后一个数交换,最小数和第一个数交换,然后整体倒序输出。
答案:
#include<stdio,h>
#defineN8
main()
{intz[N],*p=a,i,d,d1=0,x,x1=0;
for(i=0;i<N;i++)
{scanf("%d",p);
if(i==0){d=*p;x=*p;}
if(d<*p){d=*p;d1=i;}
elseif(x>*p){x=*p;x1=i;}
}
p--;
a[d1]=*p;*p=d;
a[x1]=*(p-7);*(p-7)=x;
for(i=N-1;i>=0;i--,p--)
printf("%d",*p);
}