文档库 最新最全的文档下载
当前位置:文档库 › 二级C语言模拟题8详解

二级C语言模拟题8详解

二级C语言模拟题8详解
二级C语言模拟题8详解

一、选择题

1.结构化程序设计的三种基本结构是()。

A)函数结构、分支结构、判断结构B)函数结构、嵌套结构、平行结构

C)顺序结构、分支结构、循环结构D) 分支结构、循环结构、嵌套结构

答案C:常识,记下来。

2.以下()是正确的浮点数。

A)e3 B).62 C)2e4.5 D)123

答案:B,A错,e前要有整数,C错,e后要为整数,D是整形数据。

3.若有定义:int x=2,y=3;float i;,则以下符合C语言语法的表达式是()。

A)x=x*3=2 B)x=(y==1) C)i=float(x) D)i%(-3)

答案:B,A错,赋值号左边不能是表达式,C错,强制转换要括号,D错,不能用浮点型数据求余数

4.若有定义:int a,b;则表达式(a=2,b=5,a*2,b++,a+b)的值是()。

A)7 B)8 C)9 D)10

答案:B,注意a*2并不影响a,b++则让b变成了6,最后a+b为2+6=8

5.已有如下定义和输入语句

int a,b;

scanf(“%d,%d”,&a,&b);

若要求a、b的值分别为10和20,正确的数据输入是()。

A)10 20 B)10,20 C)a=10,b=20 D)10;20

答案:根据题目scanf的格式,有逗号,没赋值号,所以答案C。

6.若有定义:int x=3,y=4,z=5:则值为0的表达式是()。

A)’x’&&’y’B)x<=y C)x||y+z&&y-z D)!((x

答案:D,D中括号内为1,再加上非,那么就是0。

7.若有定义:int b=7;float a=2.5,c=4.7;表达式a+(b/2*(int)(a+c)/2)%4的值是 ( ).

A)2.5 B)3.5 C)4.5 D)5.5

答案:C,这种题目要是不想思考,直接运行即可。

显示:

8.以下程序的运行结果是()。

void main()

{int n=’c’;

swithc(n++)

{default:printf(”error”); break;

case ’a’:

case ’b’: printf(”good”);break;

case ’c’: printf(”pass”);

case ’d’: printf(”warn”);

}}

A)pass B)ward C)pass warn D)error

答案C,n++还是c,对应到case中,打印pass,后面没有break,直接往下运行,显示warn,所以最后显示是 C

9.以下程序的运行结果是()。

void main()

{int sum=0,item=0;

while(item<5)

{item++;

sum+=item;

if(sum>=6) break;

}

printf(”%d\n”,sum);

}

A)10 B)15 C)6 D)7

答案:C,直接运行即可。

10.下面程序段的运行结果是()。

int i=0,a[]={7,5,7,3,8,3};

do{

a[i]+=2;

}while(a[++i]> 5);

for(i=0;i<6;i++) printf(”%d”,a[i]);

A)9 7 9 5 10 5 B)9 5 9 3 10 3 C)9 5 7 3 8 3 D)7 5 7 3 8 3

答案:C,直接运行。

显示:

11.以下数组定义中,正确的是()。

A)int a[2][]={1,2,3,4,5}; B)int a[][2]={{0},{}};

C)int a[2][2]={{1,2},{3}}; D)int a[][]={1,2,3,4};

答案C,AD都错,第二维不能缺省。B错,初始化不能出现:{},属于完全不赋值,对于二维的也不行。12.以下程序段运行后屏幕输出为()。

char str[80];strcpy(str,”hello”); printf(”%d”,strlen(str));

A)5 B)6 C)7 D)80

答案:A,hello之后就是\0,结束,5个字符。

13. 下面程序的输出结果是()。

#include

int global=100;

fun()

{int global=5;

return ++global;}

void main()

{ printf(“%d\n”,fun());}

A)100 B)101 C)5 D)6

答案:D,直接黏贴运行。

显示:

14.下面程序的输出结果是()

#include

#define ONE 1

#define TWO ONE+1

#define THREE TWO+1

void main()

{printf(” %d\n”,THREE-ONE);}

A)产生错误B)1 C)2 D)3

答案:C,这种题目注意不能合并,一不能加括号,而不能把+的结果算出来,最保险的办法就是运行,

显示:

如果要计算也可以,这样算:THREE-ONE= TWO+1- ONE= ONE+1+1- ONE=2

15.在16位编译系统上,若有定义int a[]={10,20,30},*p=&a;当执行p++;后下列叙述错误的是()。

A)p=向高地址移了一个字节B)p与a+1等价

C)语句printf(”%d”,*p);输出20 D)p指向数组元素a[1]

答案A,应该移动了一个元素单元,int是两个字节,所以是两个字节。

16.下面程序的输出结果是()

#include

void main()

{char *str=”12345”,*ps=str+4;

printf(”%c \n”,ps[-4]);}

A)1 B)2 C)3 D)错误

答案A,直接运行:

显示:

17.以下程序的运行结果是()。

#include

union Utype{

int i;

float f;

};

struct{

char ch[2];

int i;

union Utpye u;

}a;

void main()

{printf(”sizeof(a):%d\n”,sizeof(a));}

A)5 B)6 C)7 D) 8

答案选D,Utpye占字节为4,结构体为成员之和,2+2+4=8

18. 若有如下定义,函数fun的功能是( )。其中head指向链表首结点,整个链表结构如下图:

struct node{

int data;

struct node *next;

};

void fun(struct node *head)

{struct node *t=head;

while(t!=NULL)

{ if(t->data%2==0) printf(“%d”,t->data);

t=t->next; }

}

A)遍历链表head,输出表中值为偶数的元素B)建立一个只有表头结点的链表head C)删除链表head中的第一个结点D)插入一个元素到链表head中

答案A,核心代码中有data%2==0,表示偶数,所以选A。

19.若有以下类型说明,叙述正确的是()。

typedef struct

{int num;

char *name;

int score;

}STU,*PSTU;

A)STU是变量名B)PSTU是变量名

C)PSTU是指向结构体类型STU的指针类型名D)类型说明语句有错误

答案C,A错,STU是结构类型名,B错,PSTU是指向STU的指针类型,D错。

20.对下面程序正确的描述是()。

#include

#include

void main()

{FILE *in,*out;

if((in=fopen(“infile.txt”,”r”))==NULL)

{ printf(“cannot open infile\n”);

exit(0);}

if((in=fopen(“outfile.txt”,”w”))==NULL)

{ printf(“cannot open infile\n”);

exit(0);}

while(!feof(in)) fputc(fgetc(in),out);

fclose(in);

fclose(out);

}

A) 程序实现在屏幕上显示磁盘文件infile.txt的内容

B) 程序实现将两个磁盘文件infile.txt 和outfile.txt 的内容合二为一

C) 程序实现将磁盘文件infile.txt 复制到磁盘文件outfile.txt D) 程序实现将两个磁盘文件合并并在屏幕上输出

答案C ,fputc(fgetc(in)就是读入infile ,写到outfile ,这就是复制了。

二、改错题(共2小题,每题10分)

1.程序cmody081.c ,其功能是求一堆零件的总数(100到200之间)。

如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。

#include

void main()

{int i;

/**/for(i=100;i<200;i++);/**/

if((i-2)%4==0)

if(!((i-3)%7))

if(i%9==5) printf(”%d\n ”,/**/ &I /**/);

getch();

}

答案:for(i=100;i<=200;i++) printf(“%d\n ”,i);第一处,少了一个等号,因为包含了200,要小于等于,第二处是输出,不能带&。

2.程序cmody082.c 其功能是交换两个变量的值。

如 输入:2 3 输出:Original:a=2 b=3 Result a=3 b=2

#include

/**/ void swap(int p1,int p2)/**/

{int temp;

temp=*p1;

/**/p1=p2;/**/

*p2=temp;

}

void main()

{int a,b;

printf(”Please input 2 number: \n ”);

scanf(”%d%d ”,&a,&b);

printf(”\nOriginal:a=%d b=%d\n ”,a,b);

swap(&a,&b);

printf(”\nResult:a=%d b=%d\n ”,a,b);

getch();

}

答案:int swap(int p1,int p2) *p1=*p2;第一处错,注意返回是int 型,第二处错,是指针的内容在交换,应该改成:*p1=*p2;

三、填空题(共3小题,每题8分)

1.补充程序Ccon081.c ,根据输入的整数m(m>=0)值,计算

1m i i =∑

#include

unsigned sum(unsigned n) {unsigned i, /**/ /**/

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

/**/ /**/

}

void main()

{int m;

clrscr();

printf(”Please input a unsigned integer:”);

scanf(“%d”,&m);

while(m<0){

printf(”Please input a unsigned integer:”);

scanf(“%d”,&m);

}

printf(”\nThe sum is %d\n”, /**/ /**/);

getch();

}

答案:sum=0 return sum; sum(m)

第一空,赋初始值,第二处,返回结果,第三处,调用子函数。

2.补充程序Ccon082.c,使其实现将一个字符串str的内容反向存储。

#include

#include

void main()

{int i,j;

char str[]=”1234567”,/**/ /**/;

for(i=0,/**/ /**/;i

{k=str[i];str[i]=str[j];str[j]=k;}

clrscr();

printf(“%s\n”,str);

getch();

}

答案:k j=strlen(str)-1

第一处,填变量k的定义,第二处,str长度为strlen(str),而数组str最多则访问到长度-1,所以填j=strlen(str)-1,表示最后一个元素。

3.补充程序Ccon083.c,实现将结构体数组mystudent中存储的各学生信息按其学号的升序排列,并输出排序后各个学生的信息。

#include

#include

typedef struct{

int num;

char name[20],sex[2];

int age,score;

}STU;

STU mystudent[]={

{1111,”Zhangqiang”,”m”,20,80},{2104,”Liminghong”,”w”,18,82},

{3121,”Wangxingda”,”m”,21,78},{1456,”Wuminghong”,”w”,35,86}

};

void sort(STU* ps,int size)

{int i,flag,pass;

/**/ /**/

for(pass=1;pass

{flag=0;

for(i=0;i

if(/**/ /**/)

{flag+=1;

temp=ps[i];ps[i]=ps[i+1];ps[i+1]=temp;

}

if(/**/ /**/) break;

}

}

void main()

{int i,size=sizeof(mystudent)/sizeof(STU);

clrscr();

printf(”Students\’information before sort:\n\n ”);

printf(”Number Name Age Sex Score\n\n ”);

for(i=0;inum, (mystudent+i)->name,

(mystudent+i)->age, (mystudent+i)->sex, (mystudent+i)->score);

sort(mystudent,size);

printf(”\nStudents\’information after sort:\n\n ”);

printf(”Number Name Age Sex Score\n\n ”);

for(i=0;i

printf(”%-7d%s%5d\t%s%7d\n ”,(mystudent+i)->num, (mystudent+i)->name,

(mystudent+i)->age, (mystudent+i)->sex, (mystudent+i)->score);

getch();

}

答案:STU temp ps[i].num>ps[i+1].num flag==0

第一处填:STU temp ,STU 型的临时变量,第二处填:ps[i].num>ps[i+1].num ,冒泡排序。第三处填:flag==0表示反序标识符,如果为0表示已经排序成功,就不继续往下排序。

四、编程题(共2小题,每题8分)

1.打开程序cprog081.c ,完成其中的f()函数,使其计算:

()()()202ln 20x x e x f x x x x ?+

如:输入:-1.2输出:f(-1.200)=0.241 输入:2.4输出:f(2.400)=6.902输入:6输出:f(6.000)=19.879 #include

#include

double f(float x)

{/**/

/**/

}

void main()

{ float x;

double y;

printf (”Please input a number: \n ”);

scanf(”%f ”,&x);

y=f(x);

printf (”f(%.3f)=%.3f\n”,x,y);

getch();

}

答案:

double y;

if (x<0) y=(x+2)*exp(x);

else y=(x+2)*log(2*x);

return y;

注意ln怎么用程序表示。

2. 打开程序cprog082.c,完成其中的fun()函数,该函数将以指针数组形式存放的n个串升序排列后输出。注意:字符串比较函数为strcmp(str1,str2),字符串复制函数为strcpy(str1,str2)。

#include

#include

void f(char p[][20],int n);

void main()

{int i;

char p[][20]={”abc”,”xabdfg”,”abbd”,”dcdbe”,”cd” };

f(p,5);

clrscr();

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

printf(”%s\n”,p[i]);

getch();

}

void f(char p[][20],int n)

{ /**/

/**/

}

答案:

char *a[5];

char t[20]; //注意是字符数组,要有一定的空间,才不会容纳不下

int i,j;

for(i=0;i

for(j=i+1;j

if(strcmp(p[i],p[j]>0) //如果反序

{strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],t);} //交换

相关文档