您的当前位置:首页正文

高级程序语言设计模拟题3及答案

来源:华佗健康网
模拟试卷(八)

一、单项选择题(在本题的每一小题的备选答案中只有一个答案是正确的,请把你认为正确的答案的题号,填入题干的括号内。多选不给分。每题1分,共20分) 1.语句

printf(\"%d\\n\则输出结果是( )。

(1)无输出 (2)结果不确定 (3)-1 (4)1 2.设有如下的变量定义 int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2;

则以下符合c语言语法的表达式是( )。 (1)a+=a-=(b=4)*(a=3) (2)x%(-3)

(3)a=a*3=2 (4)y=float(i); 3.语句

printf(\"a\\bre\\'hi\\'y'\\\\\\bou\\n\");

的输出结果是( )。(说明:'\\b'是退格符)

(1)a\\bre\\'hi\\'y\\\\\\bou (2)a\\bre\\'hi\\'y\\bou (3)re'hi'you (4)abre'hi'y\\bou 4.执行以下程序的输出结果是( )。 #include main() {

int i;

for (i=1;i<6;i++) {

if (i%2) {

printf(\"#\"); continue; }

printf(\"*\"); }

printf(\"\\n\"); }

(1)#*#*# (2)##### (3)***** (4)*#*#*

5.在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是( #include

)。 main() {

int s,t,a,b;

scanf(\"%d,d\ s=1;t=1; if (a>0) s=s+1; if (a>b) t=s+t; else if (a==b) t=5; else t=2*s;

printf(\"t=%d\\n\ }

(1)a>b (2)a则输出结果是( )。 #include main() {

int a,b,s;

scanf(\"%d%d\ s=a; if (aprintf(\"%d\\n\ }

(1)186 (2)256 (3)324 (4)4007.执行下述程序的输出结果为( )。 #include main() {

int n=0; int sum=0; while (n++,n<50) {

if (n==(n/2)*2) continue; sum+=n;

(4)0>a>b }

printf(\"%d\\n\ }

(1)50 (2)625 (3)1275 (4)49 8.下述描述中不正确的是( )。 (1)字符型数组中可以存放字符串

(2)可以对字符型数组进行整体输入、输出 (3)可以对整型数组进行整体进行输入、输出

(4)不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 9.给出以下定义

char x[]=\"abcdefg\";

char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为( )。

(1)数组x和数组y等价 (2)数组x和数组y的长度相同 (3)数组x的长度大于数组y的长度 (4)数组x的长度小于数组y的长度 10.设有如下变量说明语句 int i;

char *s=\"a\\045+045\\'b\";

则执行下述for语句后,变量i的结果值是( )。 for (i=0;*s++;i++);

(1)7 (2)8 (3)9 (4)以上三个答案都是错误的 11.执行下述程序的输出结果是( )。 #include main() {

char *s=\"121\"; int k=0,a=0,b=0; do { k++; if (k%2==0) {

a=a+s[k]-'0'; continue; }

b=b+s[k]-'0'; a=a+s[k]-'0'; }while (s[k+1]);

printf(\"%k=%d a=%d b=%d\\n\ }

(1)k=3 a=2 b=3 (2)k=3 a=3 b=2 (3)k=2 a=3 b=2 (4)k=2 a=2 b=3 12.执行以下程序的输出结果是( )。 #include #include main() {

char *p1,*p2,str[50]=\"xyz\"; p1=\"abcd\"; p2=\"ABCD\";

strcpy(str+2,strcat(p1+2,p2+1)); printf(\"%s\ }

(1)xyabcAB (2)abcABz (3)ABabcz (4)xycdBCD 13.执行下述程序的输出结果是( )。 #include

void func(int a,int b,int c) {

a=456; b=567; c=678: } main() {

int x=10,y=20,z=30; func(x,y,z);

printf(\"%d,%d,%d\\n\ }

(1)30,20,10 (2)10,20,30 (3)456,567,678 (4)678,567,456 14.下述程序执行后的输出结果是( )。 #include void func(int *a,int b[]) {

b[0]=*a+6; } main() {

int a,b[5]; a=0; b[0]=3; func(&a,b);

printf(\"%d\\n\ }

(1)6 (2)7 (3)8 (4)9 15.执行下述程序的输出结果是( )。 #include int x=1; int f1() {

return (++x); }

int f2(int x) { x=3;

return (++x); }

int f3(int x) {

return (++x); } main() {

int x=10;

printf(\"%d\\n\ printf(\"%d\\n\ printf(\"%d\\n\ }

(1)2 (2)2 (3)10 4 2 4 11 2 11 16.执行以下程序的输出结果是( )。 #include #include #include void space (char *str) {

int i,t; char ts[81];

for (i=0,t=0;str[i]='\\0';i+=2)

if (!isspace(*(str+i))&&(*(str+1)!='a')) ts[t++]=toupper(str[i]); ts[t]='\\0'; strcpy(str,ts);

11 11 (4)10

} main() {

char s[81]={\"a b c d ef g\ space(s); puts(s); }

(1)abcdeg (2)bcde (3)ABCDEF (4)BCDE

17.根据下面结构体类型和结构体数组的定义,能打印字母'M'的语句是( )。 struct peron {

char name[9]; int age; };

struct person class[10]={

\"John\ \"Paul\ \"Mary\ \"Adam\ }; (1)printf(\"%c\\n\ (2)printf(\"%c\\n\ (3)printf(\"%c\\n\ (4)printf(\"%c\\n\ 18.设有以下定义和说明 #include #define STD struct std STD {

char num[6]; char name[8]; float mark[4]; } a[30]; FILE *fp;

今文件中以二进制形式存有一批学生数据,且该文件已正确地打开,文件指针定位于文件开关。若要从文件中读取30个学生的数据放入数组a中,以下实现此功能的语句中错误的是( )。 (1)for (i=0;i<30;i++)

fread(&a[i],sizeof(STD),1L,fp); (2)for (i=0;i<30;i++)

fread(a+i,sizeof(STD),1L,fp); (3)fread(a,sizeof(STD),30L,fp0;

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

fread(a[i],sizeof(STD),1L,fp); 19.执行下述程序所完成的功能是( )。 #include #include main() {

FILE *in,*out;

char ch,infile[10],outfile[10]; printf(\"Enter the infile name:\\n\"); scanf(\"%s\

ptintf(\"Enter the outfile name:\\n\"); scanf(\"%s\

if ((in=fopen(infile,\"r\"))==NULL) {

printf(\"Cannot open infile.\\n\"); exit(0); }

if ((out=fopen(outfile,\"w\"))==NULL) {

printf(\"Cannot open outfile.\\n\"); exit(0); }

ch=fgetc(in); while (!feof(in)) {

fputc(ch,out); ch=fgetc(in); }

fclose(in); fclose(out); }

(1)将磁盘文件的信息在屏幕上显示的功能 (2)将两个磁盘文件合二为一的功能

(3)将一个磁盘文件复制到另一个磁盘文件中 (4)将两个磁盘文件合并并且在屏幕上输出

20.系统对预处理命令(如宏替换、文件包含、条件编译)的处理时机是( )。 (1)编译源程序 (2)编译源程序之前 (3)连接目标文件时 (4)运行程序时 二、填充题(每空2分,共30分)

1.下述算术表达式的结果值是_____________。 (4+5)*3*(5/2)

2.设字符变量ch具有英文大写字母的字符值。问运用位运算,能表示其相应英文小写字母的表达式是____________。(比如,设ch的字符值为'A',则该运用位运算的表达式的字符值应为'a')。 3.设有以下变量说明语句 char w='A'; int x=10; float y=20; double z=30; 则执行赋值语句 x=w*x+z-y;

之后x所得值的数据类是_____________。 4.执行下述程序的输出结果是_______________。 #include main() {

long a=0xfffffL; int b=0; b=a;

printf(\"%d\\n\ }

5.当运行下述程序时,其输出结果是____________。 #include main() {

int y=18,i=0,j,a[8]; do {

a[i]=y%2; i++; y=y/2; } while (y>=1); for (j=i-1;j>=0;j--) printf(\"%d\ printf(\"\\n\"); }

6.执行下述程序的输出结果是____________。 #include main()

{

int i,j,sum,m,n=4; sum=0;

for (i=1;i<=n;i++) { m=1;

for (j=1;j<=i;j++) m=m*j; sum=sum+m; }

printf(\"xum=%\\n\ }

7.下述程序的功能是读取20个整数,统计其中非负整数的和以及个数并输出之。请填空。 #include main() {

int i,a[20],s,count; s=count=0;

for (i=0;i<20;i++) scanf(\"%d\ for (i=0;i<20;i++) {

if (a[i]<0) ___________; s+=a[i]; count++; }

printf(\"s=%d,count=%d\\n\ }

8.执行下述程序可实现:从键盘上输入一行字符(以回车键结尾),作为字符串存入一个字符数组中,然后输出该字符串。请填空。 #include main() {

char s[81],*ps; int i;

for (i=0;i<80;i++) {

s[i]=getchar(); if (s[i]=='\\n') break; }

s[i]='\\0'; ps=s; while (*ps)

putchar (___________); putchar('\\n'); } 9.执行下述程序 #include main() {

char s1[]=\"I like Turbo C!\ char *ps1=s1,*ps2=s2; scanf(\"%s\ printf(\"%s\\n\ printf(\"%s\\n\ }

时,若从键盘输入

I like C++ and Jave!

则输出结果是___________________。(两行) 10.执行下述程序的输出结果是______________。 #include main() {

char *p=\"abcdefghijk\"; while (*p++!='e'); printf(\"%c\\n\ }

11.执行下述程序的输出结果是___________。 #include main() {

char *p[]={\"BOOL\ int i;

for (i=3;i>=0;i--,i--) printf(\"%c\ printf(\"\\n\"); }

12.下面的程序是求数组中的最小元素,输出最小元素的下标及最小元素值。请填空。 #include

void findmin(int *s,int n,int *k)

/*s是指向数组首地址的指针,n是数组大小,k是指向数组中最小数组元素的指针*/ {

int p;

for (p=0,*k=p;pint a[10],i,*k=&i; for (i=0;i<10;i++) scanf(\"%d\ findmin(a,10,k);

printf(\"%d,%d\\n\ }

13.下述程序中函数calc的功能是对传送过来的两个实数求出和值与差值,并通过两个指针形参分别将这两个值传送回调用函数。请填空。 #include

void calc(float x,float y,float *add,float *sub) {

________________________; } main() {

float x,y,add,sub; printf(\"Enter x,y:\"); scanf(\"%f%f\ calc(x,y,&add,&sub);

printf(\"x+y=%f,x-y=%f\\n\ }

14.执行下述程序的输出结果是_____________。 #include void printd(int n) {

int i; if (n<0) {

putchar('-'); n=-n; }

putchar (n%10+'0'); if ((i=n/10)!=0)

printd(i); } main() {

int m; m=-654; printd(m); printf(\"\\n\"); }

15.设有如下结构体类型定义 struct node {

int data;

strut node *link; };

并设已生成如下之单向循环链表

下面整型函数min3的功能是:计算由结构体指针变量first所指向的单向循环链表中每3个相邻结点数据域值之和,返回其中最小的和值。请填空。 int min3(struct node *first) {

struct node *p=first; int m,m3;

m3=p->data+p->link->data+p->link->link->data; for (p=p->link->;p!=first;p=p->link) {

m=p->data+p->lind->data+p->lind->link->data; if (_____________) m3=m; }

return (m3); }

三、程序分析题(每题5分,共30分) 1.阅读程序,写出执行该程序的输出结果。 #include

main() {

int a=11,b=10; a*=b;

printf(\"%d\\n\ a/=b+1;

printf(\"%d\\n\ a^=b;

printf(\"%d\\n\ b&=a;

printf(\"%d\\n\ a=a==b;

printf(\"%d\\n\ }

2.阅读程序,写出执行该程序的输出结果。 #include main() {

int n,k,i,s; for (n=8;n<=12;n++) { s=0; k=1;

for (i=1;i<=n;i++) {

s+=i*k; k*=-1; }

printf(\"%d\\n\ } }

3.阅读程序,写出执行该程序的输出结果。 #include #define N 5 main() {

int i,j,k;

int a[N+1],b[N+1][N+1]; for 9k=1;k<=N;i++) a[k]=k;

for (i=1;j<=N;i++) for (j=a;j<=i-1;j++)

b[i][j]=b[i-j][N]; for (i=a;i<]N;i++) {

for (j=1;j<=N;j++) printf(\"%4d\ printf(\"\\n\"); } }

4.阅读程序,写出执行该程序的输出结果。 #include #define N 4 main() {

int i; char c;

printf(\"%c\\n\ for (i=1;i<=N;i++) {

c='a'+i; printf(\"%c\ func(i,c); } }

func(int k,char cc) { int i;

for (i=1;i<=k-1;i+=) printf(\" \"); printf(\"%c\\n\ } 5.阅读程序

#include #define MAX 20 int fib(int n) {

int res; if (n==0) res=0; else if (n==1) res=1; else

res=fib(n-1)+fib(n-2);

return (res); } main() {

int m,n;

printf(\"Input n(0<=n<=%d): \"MAX); scanf(\"%d\ for (m=0;m<=n;m++) {

printf(\"%6d\ if ((m+1)%5==0) printf(\"\\n\"); }

printf(\"\\n\"); }

当运行程序时,若有下述交互信息(带下划线的为输入信息) Input n(0<=n<=20):

请写出接下去的输出结果。 6.阅读程序

#include #include #define LINK struct link #define SIZE sizeof(LINK) LINK {

int vals; LINK *poit; };

LINK *lheak; 1stbuilt() {

LINK *head,*next;

head=(LINK *)malloc(SIZE); 1head=head; next=head;

scanf(\"%d\ while (next->vals!=-1) {

next->poit=(LINK *)malloc(SIZE); next=next->poit;

scanf(\"%d\ }

next->poit=NULL; }

1stwrite(LINK *head) {

LINK *next; next=head;

while (next!=NULL) {

if (next->vals%2==0)

printf(\"%4d\ next=next->poit; }

print(\"\\n\"); } main() {

1stbuilt(); 1stwrite(1head); }

当程序运行时,若从键盘输入 2 5 8 6 3 4 -1 4

请画出调用1stbuilt()后所生成的单链表结构图并写出程序的输出结果。 四、程序设计题(每题10分,共20分)

1.两正整数a、b,若a的所有包含1但不包含自身的因子和等于b,b的所有包含1但不包含自身的因子和又等于a,则称a、b为一对亲密数或一亲密数对。例如,设a=b、b=6,则 a=6=1+2+3=b b=6=1+2+3=a

故6与6是一亲密数对。编写程序,求1000以内的亲密对,并显示结果。请填空完善程序。 #include #define MAXNUM 1000 int factorsum(int n) {

int index,sum;

sum=1; /*1是因子*/

for (index=2;index<=______________;index++) if (________(2)__________)

sum+=index; /*index亦是因子*/ return(sum); } main() {

int thisa,thisb,thata;

printf(\"The pairs of amicable number between 1 and %d are:\\n\ for (thisa=2;thisa<=_______(3)_______;thisa++) {

thisb=factorsum(thisa); thata=_________(4)_______; if (__________(5)_______)

printf(\"%6d%6d\\n\ } /*for thisa */ }

2.编写程序,生成一个新文本文件,它由一个已知文本文件的所有奇数行组成。要求书籍文本文件名和新文本文件名均从键盘输入。请填空完善程序。 #include main() {

FILE *fold,*fnew; char ch,fname[20]; int i; do {

printf(\"Enter name of existed text file to be read:\"); scanf(\"%s\

if ((fold=fopen(fname,\"r\"))==NULL)

printf(\"File %s can't open!\\n\ } while (fold==NULL); do {

printf(\"Enter mane of new text file to be written:\"); scanf(\"%s\

if ((__________(1)________==NULL)

printf(\"File %s can't open!\\n\ } while (________(2)________); i=1;

while (!feof(fold)) {

while ((ch=fgetc(fold))!=______(3)______) {

if (i%2==________(4)_______) fputc(ch,fnew); }

fputc('\\n',fnew);

__________(5)_________; }

fclose(fold);

fclose(fnew); }

模拟试题(八)参考解答

一、单项选择题(每题1分,共20分)

1.(4) 2.(1) 3.(3) 4.(1) 5.(3) 6.(2) 7.(2) 8.(3) 9.(3) 10.(2)

11.(3) 12.(4) 13.(1) 14.(1) 15.(1) (3) 20.(2)

二、填充题(每空2分,共30分) 1.54

2.ch|32 (或ch|0x20或ch|040或ch|'a'-'A'等)

3.int型(或整型) 5.10010 7.continue 9.I

I like Turbo C!

10.f 12.*k=p; 14.-456 三、程序分析题(每题5分,共30分) 1.110 10 0 0 1 2.-4 5 -5 6 -6

3. 1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 4.a bb cc

17.(4) 18.(4) 6.sum=33 8.*ps++ 11.so

13.*add=x+y,*sub=x-y 15.md d e e

5. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

6.调用1stbuilt()后所生成的单链表结构图为

而程序的输出结果是 2 8 6 4

四、程序设计题(每题10分,共20分) 1.(1)n/2

(2)n%index==0 (3)MAXNUM (或1000) (4)factorsum(thisb)

(5)thata==thisa (或thisa==thata) 2.(1)fnew=fopen(fname,\"w\") (2)fnew==NULL (3)'\\n' (4)1

(5)i=i+1 (或i++)

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