文档库 最新最全的文档下载
当前位置:文档库 › 2014年三月全国计算机二级C语言上机考试题库

2014年三月全国计算机二级C语言上机考试题库

2014年三月全国计算机二级C语言上机考试题库
2014年三月全国计算机二级C语言上机考试题库

2013年全国计算机考试上机

题库100套

第01套:

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

void fun(unsigned long *n)

{ unsigned long x=0, i; int t;

i=1;

while(*n)

{ t=*n % __1__;

if(t%2!= __2__)

{ x=x+t*i; i=i*10; }

*n =*n /10;

}

*n=__3__;

}

main()

{ unsigned long n=-1;

while(n>99999999||n<0)

{ printf("Please input(0

fun(&n);

printf("\nThe result is: %ld\n",n);

}

解题思路:

第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。第二处:判断是否是奇数,所以应填:0。

第三处:最后通形参n来返回新数x,所以应填:x。

给定程序MODI1.C中函数fun 的功能是:计算n!。

例如,给n输入5,则输出120.000000。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include double fun ( int n )

{ double result = 1.0 ;

if n = = 0

return 1.0 ;

while( n >1 && n < 170 )

result *= n--

return result ;

}

main ( )

{ int n ;

printf("Input N:") ;

scanf("%d", &n) ;

printf("\n\n%d! =%lf\n\n", n,

fun(n)) ;

}

解题思路:

第一处:条件语句书写格式错误,

应改为:if (n==0)。

第二处:语句后缺少分号。

****************************

***********************

请编写一个函数fun,它的功能是:

将一个数字字符串转换为一个整

数(不得调用C语言提供的将字符

串转换为整数的。例如,若输入

字符串"-1234",则函数把它转换为

整数值-1234。函数fun中给出的

语句仅供参考。

注意: 部分源程序存在文件

PROG1.C文件中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

long fun ( char *p)

{int i, len, t; /* len为串长,t为正负

标识*/

long x=0;

len=strlen(p);

if(p[0]=='-')

{ t=-1; len--; p++; }

else t=1;

/* 以下完成数字字符串转换为一

个数字*/

return x*t;

}

main() /* 主函数*/

{ char s[6];

long n;

printf("Enter a string:\n") ;

gets(s);

n = fun(s);

printf("%ld\n",n);

NONO ( );

}

NONO ( )

{/* 本函数用于打开文件,输入数

据,调用函数,输出数据,关闭

文件。*/

FILE *fp, *wf ;

int i ;

char s[20] ;

long n ;

fp = fopen("c:\\test\\in.dat","r") ;

wf = fopen("c:\\test\\out.dat","w") ;

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

fscanf(fp, "%s", s) ;

n = fun(s);

fprintf(wf, "%ld\n", n) ;

}

fclose(fp) ;

fclose(wf) ;

}

解题思路:

本题是将一个数字字符串转换为

一个整数。

参考答案:

#include

#include

long fun ( char *p)

{

int i, len, t; /* len为串长,t为正负

标识*/

long x=0;

len=strlen(p);

if(p[0]=='-')

{ t=-1; len--; p++; }

else t=1;

/* 以下完成数字字符串转换为一

个数字*/

while(*p) x = x*10-48+(*p++);

return x*t;

}

main() /* 主函数*/

{ char s[6];

long n;

printf("Enter a string:\n") ;

gets(s);

n = fun(s);

printf("%ld\n",n);

NONO ( );

}

NONO ( )

{/* 本函数用于打开文件,输入数

据,调用函数,输出数据,关闭

文件。*/

FILE *fp, *wf ;

int i ;

char s[20] ;

long n ;

fp = fopen("c:\\test\\in.dat","r") ;

wf = fopen("c:\\test\\out.dat","w") ;

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

fscanf(fp, "%s", s) ;

n = fun(s);

fprintf(wf, "%ld\n", n) ;

}

fclose(fp) ;

fclose(wf) ;

}

注意:由于NONO( )这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省略NONO( )

※※※※※※※※※※※※※※※※※※※※※※※※※

第02套:

给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

void fun(char *s, int a, double f) {

__1__ fp;

char ch;

fp = fopen("file1.txt", "w");

fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp);

fp = fopen("file1.txt", "r");

printf("\nThe result :\n\n");

ch = fgetc(fp);

while (!feof(__2__)) {

putchar(__3__); ch = fgetc(fp); } putchar('\n');

fclose(fp);

}

main()

{ char a[10]="Hello!"; int b=12345; double c= 98.76;

fun(a,b,c);

}

解题思路:

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。

第一处:定义文本文件类型变量,所以应填:FILE *。

第二处:判断文件是否结束,所以应填:fp。

第三处:显示读出的字符,所以应填:ch。

**************************** ***********************

给定程序MODI1.C中函数fun的功能是: 依次取出字符串中所有数字字符, 形成新的字符串, 并取代原字符串。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

void fun(char *s)

{ int i,j;

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

if(s[i]>='0' && s[i]<='9')

s[j]=s[i];

s[j]="\0";

}

main()

{ char item[80];

printf("\nEnter a string :

");gets(item);

printf("\n\nThe string is :

\"%s\"\n",item);

fun(item);

printf("\n\nThe string of changing

is : \"%s\"\n",item );

}

解题思路:

第一处: 要求是取出原字符串中

所有数字字符组成一个新的字符

串,程序中是使用变量j

来控制新字符串的位置,所以应

改为:s[j++]=s[i];。

第二处: 置新字符串的结束符,所

以应改为:s[j]='\0';.

****************************

***********************

请编写函数fun, 函数的功能是:

将M行N列的二维数组中的字符

数据, 按列的

顺序依次放到一个字符串中。

例如, 二维数组中的数据为:

W W W W

S S S S

H H H H

则字符串中的内容应是:

WSHWSHWSH。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入

你编写的若干语句。

给定源程序:

#include

#define M 3

#define N 4

void fun(char s[][N], char *b)

{

int i,j,n=0;

for(i=0; i < N;i++) /* 请填写相应

语句完成其功能*/

{

}

b[n]='\0';

}

main()

{ char

a[100],w[M][N]={{'W','W','W','W'

},{'S','S','S','S'},{'H','H','H','H'}};

int i,j;

printf("The matrix:\n");

for(i=0; i

{ for(j=0;j

j++)printf("%3c",w[i][j]);

printf("\n");

}

fun(w,a);

printf("The A string:\n");puts(a);

printf("\n\n");

NONO();

}

解题思路:

本题是把二维数组中的字符数据

按列存放到一个字符串中。

1. 计算存放到一维数组中的位

置。

2. 取出二维数组中的字符存放到

一维数组(已计算出的位置)中。

参考答案:

void fun(char s[][N], char *b)

{

int i,j,n=0;

for(i=0; i < N;i++) /* 请填写相应

语句完成其功能*/

{

for(j = 0 ; j < M ; j++) {

b[n] = s[j][i] ;

n = i * M + j + 1;

}

}

b[n]='\0';

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第03套:

程序通过定义学生结构体变量,

存储了学生的学号、姓名和3门课

的成绩。所有学生数据均以二进

制方式输出到文件中。函数fun的

功能是重写形参filename所指文

件中最后一个学生的数据,即用

新的学生数据覆盖该学生原来的

数据,其它学生的数据不变。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#define N 5

typedef struct student {

long sno;

char name[10];

float score[3];

} STU;

void fun(char *filename, STU n) { FILE *fp;

fp = fopen(__1__, "rb+");

fseek(__2__, -1L*sizeof(STU), SEEK_END);

fwrite(&n, sizeof(STU), 1, __3__); fclose(fp);

}

main()

{ STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},

{10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, {10005,"ZhangSan", 95, 80, 88}}; STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];

int i,j; FILE *fp;

fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp);

fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp);

printf("\nThe original data :\n\n"); for (j=0; j

{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);

printf("\n");

}

fun("student.dat", n);

printf("\nThe data after modifing :\n\n");

fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp);

for (j=0; j

{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);

printf("\n");

}

}

解题思路:

本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。

第一处:从指定的文件中读出数据,所以应填:filename。

第二处:读取文件fp的最后一条记

录,所以应填:fp。

第三处:再把读出的记录,写入

文件fp指定的位置上,所以应填:

fp。

****************************

***********************

给定程序MODI1.C中的函数

Creatlink的功能是创建带头结点

的单向链表, 并为各结点数据域

赋0到m-1的值。

请改正函数Creatlink中指定部位

的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

typedef struct aa

{ int data;

struct aa *next;

} NODE;

NODE *Creatlink(int n, int m)

{ NODE *h=NULL, *p, *s;

int i;

p=(NODE )malloc(sizeof(NODE));

h=p;

p->next=NULL;

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

{ s=(NODE

*)malloc(sizeof(NODE));

s->data=rand()%m;

s->next=p->next;

p->next=s; p=p->next;

}

return p;

}

outlink(NODE *h)

{ NODE *p;

p=h->next;

printf("\n\nTHE LIST :\n\n HEAD

");

while(p)

{ printf("->%d ",p->data);

p=p->next;

}

printf("\n");

}

main()

{ NODE *head;

head=Creatlink(8,22);

outlink(head);

}

解题思路:

第一处: 指向刚分配的结构指针,

所以应改为:p=(NODE

*)malloc(sizeof(NODE));

第二处: 在动态分配内存的下一

行语句是,使用临时结构指针变

量h保存p指针的初始位置,最后

返回不能使用p,是因为p的位置

已经发生了变化,所以应改为返

回h。

****************************

***********************

请编写函数fun, 函数的功能是:统

计一行字符串中单词的个数,作为

函数值返回。一行字符串在主函

数中输入, 规定所有单词由小写

字母组成,单词之间由若干个空

格隔开, 一行的开始没有空格。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

#define N 80

int fun( char *s)

{

}

main()

{ char line[N]; int num=0;

printf("Enter a string :\n");

gets(line);

num=fun( line );

printf("The number of word

is : %d\n\n",num);

NONO();

}

解题思路:

本题是统计字符串中的单词数。

1. 利用while循环语句和指针变

量,当字符为空格时,则单词数k

加1。

2. 循环结束返回k。

参考答案:

int fun( char *s)

{

int k = 1 ;

while(*s) {

if(*s == ' ') k++ ;

s++ ;

}

return k ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第04套:

程序通过定义学生结构体变量,

存储了学生的学号、姓名和3门课

的成绩。所有学生数据均以二进

制方式输出到文件中。函数fun的

功能是从形参filename所指的文

件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#define N 5

typedef struct student {

long sno;

char name[10];

float score[3];

} STU;

void fun(char *filename)

{ FILE *fp; int i, j;

STU s[N], t;

fp = fopen(filename, __1__); fread(s, sizeof(STU), N, fp); fclose(fp);

for (i=0; i

for (j=i+1; j

if (s[i].sno __2__ s[j].sno)

{ t = s[i]; s[i] = s[j]; s[j] = t; }

fp = fopen(filename, "wb");

__3__(s, sizeof(STU), N, fp); /* 二进制输出*/

fclose(fp);

}

main()

{ STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78},

{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}, {10001,"MaChao", 91, 92, 77}}, ss[N];

int i,j; FILE *fp;

fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), 5, fp); fclose(fp);

printf("\n\nThe original data :\n\n");

for (j=0; j

{ printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno, t[j].name);

for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]);

printf("\n");

}

fun("student.dat");

printf("\n\nThe data after sorting :\n\n");

fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), 5, fp);

fclose(fp);

for (j=0; j

{ printf("\nNo: %ld Name: %-8s

Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ",

ss[j].score[i]);

printf("\n");

}

}

解题思路:

本题是考察把结构中的数据写入

文件。

第一处:建立文件的类型,考虑

到是把结构中的数据(结构中的

数据包含不打印的字符)

从文件中读出,所以应填:"rb"。

第二处:判断当前学号是否大于

刚读出的学号进行相比,如果大

于,则进行交换,所以应填:>。

第三处:把已排序的结构数据,

重新写入文件,所以应填:fwrite。

****************************

***********************

给定程序MODI1.C中函数fun的功

能是: 在字符串的最前端加入n个

*号, 形成新串, 并且覆盖原串。

注意: 字符串的长度最长允许为

79。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

void fun ( char s[], int n )

{

char a[80] , *p;

int i;

s=p;

for(i=0; i

do

{ a[i]=*p;

i++;

}

while(*p++)

a[i]=0;

strcpy(s,a);

}

main()

{ int n; char s[80];

printf("\nEnter a string : "); gets(s);

printf("\nThe string \"%s\"\n",s);

printf("\nEnter n ( number of * ) :

"); scanf("%d",&n);

fun(s,n);

printf("\nThe string after insert :

\"%s\" \n" ,s);

}

解题思路:

第一处: 指针p应指向s,所以应改

为:p=s;。

第二处: 死循环,当do while循环

执行一次,临时变量p应该指向字

符串的下一位置,所以应改为:

while(*p++);。

****************************

***********************

请编写函数fun,函数的功能是:统

计各年龄段的人数。N个年龄通过

调用随机

函数获得,并放在主函数的age数

组中;要求函数把0至9岁年龄段

的人数放在d[0]

中,把10至19岁年龄段的人数放在

d[1]中,把20至29岁年龄段的人数

放在d[2]中,

其余依此类推, 把100岁(含100)

以上年龄的人数都放在d[10]中。

结果在主函数中输出。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#define N 50

#define M 11

void fun( int *a, int *b)

{

}

double rnd()

{ static t=29,c=217,m=1024,r=0;

r=(r*t+c)%m; return((double)r/m);

}

main()

{ int age[N], i, d[M];

for(i=0;

i

printf("The original data :\n");

for(i=0;i

printf((i+1)%10==0?"%4d\n":"%4d

",age[i]);

printf("\n\n");

fun( age, d);

for(i=0;i<10;i++)printf("%4d---%4

d : %4d\n",i*10,i*10+9,d[i]);

printf(" Over 100 : %4d\n",d[10]);

NONO(d);

}

解题思路:

本题是统计各年龄段的人数。

1. 初始化各年龄段人数为0。

2. 使用for循环以及求出各年龄的

十位数字作为存放人数的地址,如果大于值大于10,则

存入d[10]中(大于110岁的人)。参考答案:

void fun( int *a, int *b)

{

int i, j ;

for(i = 0 ; i < M ; i++) b[i] = 0 ;

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

j = a[i] / 10 ;

if(j > 10) b[M - 1]++ ; else b[j]++ ; }

}

double rnd()

{ static t=29,c=217,m=1024,r=0;

r=(r*t+c)%m; return((double)r/m); }

※※※※※※※※※※※※※※※※※※※※※※※※※

第05套:

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本

文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将

字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#include

void fun(char *s, int a, double f) {

__1__ fp;

char str[100], str1[100], str2[100]; int a1; double f1;

fp = fopen("file1.txt", "w");

fprintf(fp, "%s %d %f\n", s, a, f); __2__ ;

fp = fopen("file1.txt", "r");

fscanf(__3__,"%s%s%s", str, str1, str2);

fclose(fp);

a1 = atoi(str1);

f1 = atof(str2);

printf("\nThe

result :\n\n%s %d %f\n", str, a1, f1);

}

main()

{ char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c);

}

解题思路:

本题是考察先把给定的数据写入

到文本文件中,再从该文件读出

并转换成相应的整数、浮点数显

示在屏幕上。

第一处:定义文本文件类型变量,

所以应填:FILE *。

第二处:关闭刚写入的文件,所

以应填:fclose(fp)。

第三处:从文件中读出数据,所

以应填:fp。

****************************

***********************

给定程序MODI1.C中函数fun的功

能是: 对N名学生的学习成绩,按

从高到低的顺序找出前m(m≤10)

名学生来, 并将这些学生数据存

放在一个动态分配的连续存储区

中, 此存储区的首地址作为函数

值返回。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

#include

#define N 10

typedef struct ss

{ char num[10];

int s;

} STU;

STU *fun(STU a[], int m)

{ STU b[N], *t;

int i,j,k;

t=(STU *)calloc(sizeof(STU),m)

for(i=0; i

for(k=0; k

{ for(i=j=0; i

if(b[i].s > b[j].s) j=i;

t(k)=b(j);

b[j].s=0;

}

return t;

}

outresult(STU a[], FILE *pf)

{ int i;

for(i=0; i

fprintf(pf,"No = %s Mark = %d\n",

a[i].num,a[i].s);

fprintf(pf,"\n\n");

}

main()

{ STU

a[N]={ {"A01",81},{"A02",89},{"

A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61

},{"A09",80},{"A10",71} };

STU *pOrder;

int i, m;

printf("***** The Original data

*****\n");

outresult(a, stdout);

printf("\nGive the number of the

students who have better score: ");

scanf("%d",&m);

while( m>10 )

{ printf("\nGive the number of the

students who have better score: ");

scanf("%d",&m);

}

pOrder=fun(a,m);

printf("***** THE RESULT

*****\n");

printf("The top :\n");

for(i=0; i

printf(" %s %d\n",pOrder[i].num ,

pOrder[i].s);

free(pOrder);

}

解题思路:

第一处: 语句最后缺少分号。

第二处: 应该使用方括号,而不是

圆括号。

像此类,使用编译,即可发现。

****************************

***********************

请编写函数fun, 函数的功能是:

删去一维数组中所有相同的数,

使之只剩一个。数组中的数已按

由小到大的顺序排列,函数返回删

除后数组中数据的个数。

例如, 一维数组中的数据是: 2 2 2

3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。

删除后,数组中的内容应该是: 2 3

4 5 6 7 8 9 10。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#define N 80

int fun(int a[], int n)

{

}

main()

{ int

a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,

9,10,10,10,10},i,n=20;

printf("The original data :\n");

for(i=0; i

i++)printf("%3d",a[i]);

n=fun(a,n);

printf("\n\nThe data after deleted :\n");

for(i=0;i

NONO();

}

解题思路:

本题是删除已排序过数组中的相同数。

1. 取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。

2. 如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把这个数重新存入k。如果相同,则取下一数。

参考答案:

int fun(int a[], int n)

{

int i, j = 1, k = a[0] ;

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

if(k != a[i]) {

a[j++]=a[i] ;

k = a[i] ;

}

a[j] = 0 ;

return j ;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第06套:

给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时, 程序输出:

x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

double f1(double x)

{ return x*x; }

double f2(double x, double y)

{ return x*y; }

__1__ fun(int i, double x, double y) { if (i==1)

return __2__(x);

else

return __3__(x, y);

}

main()

{ double x1=5, x2=3, r;

r = fun(1, x1, x2); r += fun(2, x1, x2);

printf("\nx1=%f, x2=%f,

x1*x1+x1*x2=%f\n\n",x1, x2, r);

}

解题思路:

本题是根据给定的公式来计算函

数的值。

第一处:程序中使用双精度double

类型进行计算,所以函数的返回

值类型也为double,所以应填:

double。

第二处:当i等于1时,则返回f1函

数的值,所以应填:f1。

第三处:如果i不等于1,则返回f2

函数的值,所以应填:f2。

****************************

***********************

给定程序MODI1.C中函数fun的功

能是: 比较两个字符串,将长的那

个字符串的首地址作为函数值返

回。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

char fun(char *s, char *t)

{ int sl=0,tl=0; char *ss, *tt;

ss=s; tt=t;

while(*ss)

{ sl++;

(*ss)++;

}

while(*tt)

{ tl++;

(*tt)++;

}

if(tl>sl) return t;

else return s;

}

main()

{ char a[80],b[80],*p,*q; int i;

printf("\nEnter a string : "); gets(a);

printf("\nEnter a string again : ");

gets(b);

printf("\nThe longer

is :\n\n\"%s\"\n",fun(a,b));

}

解题思路:

第一处: 试题要求返回字符串的

首地址,所以应改为:char

*fun(char *s,char *t)

第二处: 取字符串指针ss的下一

个位置,所以应改为:ss++;。

第三处:取字符串指针tt的下一个

位置,所以应改为:tt++;。

****************************

***********************

请编写函数fun,函数的功能是: 移

动字符串中的内容,移动的规则如

下: 把第1到第m个字符, 平移到

字符串的最后, 把第m+1到最后

的字符移到字符串的前部。

例如, 字符串中原有的内容为:

ABCDEFGHIJK, m的值为3, 则移

动后, 字符串中的内容应该是:

DEFGHIJKABC。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

#define N 80

void fun1(char *w) /* 本函数的功

能是将字符串中字符循环左移一

个位置*/

{

int i; char t;

t=w[0];

for(i=0;i

w[i]=w[i+1];

w[strlen(w)-1]=t;

}

void fun(char *w, int m) /* 可调用

fun1函数左移字符*/

{

}

main()

{ char a[N]= "ABCDEFGHIJK";

int m;

printf("The original

string:\n");puts(a);

printf("\n\nEnter m:

");scanf("%d",&m);

fun(a,m);

printf("\nThe string after

moving:\n");puts(a);

printf("\n\n");

NONO();

}

解题思路:

本题是考察字符串的操作。

1. 由于函数fun1是将字符串中字

符循环左移一个位置,并通过实

参w返回循环左移一个位置的字

符串。

2. 利用循环for语句来操作多少个

字符(m)需要循环左移。

参考答案:

void fun1(char *w) /* 本函数的功

能是将字符串中字符循环左移一

个位置*/

{

int i; char t;

t=w[0];

for(i=0;i

w[i]=w[i+1];

w[strlen(w)-1]=t;

}

void fun(char *w, int m) /* 可调用fun1函数左移字符*/

{

int i;

for(i = 0 ; i < m ; i++) fun1(w);

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第07套:

程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

typedef struct

{ int num;

char name[9];

char sex;

struct { int year,month,day ;} birthday;

float score[3];

}STU;

void show(STU ___1___)

{ int i;

printf("\n%d %s %c %d-%d-%d", tt.num, https://www.wendangku.net/doc/6114772200.html,, tt.sex,

tt.birthday.year, tt.birthday.month, tt.birthday.day);

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

printf("%5.1f", ___2___);

printf("\n");

}

main( )

{ STU std={ 1,"Zhanghua",'M',1961,10,8, 76.5,78.0,82.0 };

printf("\nA student data:\n"); show(___3___);

}

解题思路:

本题是利用结构体变量存储了一名学生的信息。

第一处:tt变量在函数体fun已经使用,所以应填:tt。第二处:利用循环分别输出学生

的成绩数据,所以应填:tt.score[i]。

第三处:函数的调用,所以应填:

std。

****************************

***********************

给定程序MODI1.C中函数fun 的

功能是:求出数组中最大数和次

最大数,并把最大数和a[0]中的数

对调、次最大数和a[1]中的数对

调。请改正程序中的错误,使它

能得出正确的结果。

注意:不要改动main 函数,不

得增行或删行,也不得更改程序

的结构!

给定源程序:

#include

#define N 20

int fun ( int * a, int n )

{ int i, m, t, k ;

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

m=0;

for(k=i+1;k

if(a[k]>a[m]) k=m;

t=a[i];a[i]=a[m];a[m]=t;

}

}

main( )

{ int x,

b[N]={11,5,12,0,3,6,9,7,10,8},

n=10, i;

for ( i=0; i

b[i]);

printf("\n");

fun ( b, n );

for ( i=0; i

b[i]);

printf("\n");

}

解题思路:

第一处:外循环每循环一次,把

当前位置i赋值给m,所以应改为:

m=i;。

第二处:通过内循环来找出最大

的一个数的位置k,所以应改为:

if(a[k]>a[m]) m=k;。

****************************

***********************

请编写一个函数unsigned fun

( unsigned w ),w 是一个大于10

的无符号整数,若w 是n (n ≥

2)位的整数,函数求出w的低n-1

位的数作为函数值返回。

例如:w 值为5923,则函数返回

923;w 值为923 则函数返回

23。

注意: 部分源程序存在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

unsigned fun ( unsigned w )

{

}

main( )

{ unsigned x;

printf ( "Enter a unsigned integer

number : " ); scanf ( "%u", &x );

printf ( "The original data

is : %u\n", x );

if ( x < 10 ) printf ("Data error !");

else printf ( "The result : %u\n",

fun ( x ) );

NONO( );

}

解题思路:

本题是考察考生怎样获取一个符

合要求的无符号整数。本题是应

用if条件语句首先判断给出的数

是几位数,再模相应的值,最后

得出的余数就是结果。

参考答案:

unsigned fun ( unsigned w )

{

if(w>10000) w %= 10000 ;

else if(w>1000) w %= 1000 ;

else if(w>100) w %= 100 ;

else if(w>10) w %=10 ;

return w ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第08套:

给定程序通过定义并赋初值的方

式,利用结构体变量存储了一名

学生的学号、姓名和3门课的成

绩。函数fun的功能是将该学生的

各科成绩都乘以一个系数a。请在

程序的下划线处填入正确的内容

并把下划线删除,使程序得出正

确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

typedef struct

{ int num;

char name[9];

float score[3];

}STU;

void show(STU tt)

{ int i;

printf("%d %s : ",tt.num,https://www.wendangku.net/doc/6114772200.html,);

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

printf("%5.1f",tt.score[i]);

printf("\n");

}

void modify(___1___ *ss,float a) { int i;

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

ss->___2___ *=a;

}

main( )

{ STU std={ 1,"Zhanghua",76.5,78.0,82.0 };

float a;

printf("\nThe original number and name and scores :\n");

show(std);

printf("\nInput a number : "); scanf("%f",&a);

modify(___3___,a);

printf("\nA result of modifying :\n");

show(std);

}

解题思路:

本题是利用结构体存储学生记录并由实参ss返回。

第一处:实参ss是一个结构型指针变量,所以应填:STU。

第二处:该学生的各科成绩都乘以一个系数a,所以应填:score[i]。第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。

**************************** ***********************

给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若k = 10,则应输出:3628800。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

long fun ( int k)

{

if k > 0

return (k*fun(k-1));

else if ( k=0 )

return 1L;

}

main()

{ int k = 10 ;

printf("%d!=%ld\n", k, fun ( k )) ; } 解题思路:

第一处:条件判断缺少圆括号。

第二处:判断相等的符号是==。

****************************

***********************

程序定义了N×N的二维数组,并

在主函数中自动赋值。请编写函

数fun(int a[][N], int n),函数的功

能是:使数组左下三角元素中的

值乘以n 。

例如:若n的值为3,a 数组中的

值为| 1 9 7 | | 3 9 7 |

a = | 2 3 8 | 则返回主程序后a数组

中的值应为| 6 9 8 |

| 4 5 6 | | 12 15 18|

注意: 部分源程序存在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

#define N 5

int fun ( int a[][N], int n )

{

}

main ( )

{ int a[N][N], n, i, j;

printf("***** The array *****\n");

for ( i =0; i

{ for ( j =0; j

{ a[i][j] = rand()%10; printf( "%4d",

a[i][j] ); }

printf("\n");

}

do n = rand()%10 ; while ( n >=3 );

printf("n = %4d\n",n);

fun ( a, n );

printf ("***** THE RESULT

*****\n");

for ( i =0; i

{ for ( j =0; j

printf( "%4d", a[i][j] );

printf("\n");

}

NONO( );

}

解题思路:

本题是利用两重循环给二维数组

左下三角元素中的值乘以n。

参考答案:

int fun ( int a[][N], int n )

{

int i, j;

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

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

a[i][j] *= n ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第09套:

给定程序中,函数fun的功能是将

不带头节点的单向链表结点数据

域中的数据从小到大排序。即若

原链表结点数据域从头至尾的数

据为:10、4、2、8、6,排序后

链表结点数据域从头至尾的数据

为:2、4、6、8、10。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define N 6

typedef struct node {

int data;

struct node *next;

} NODE;

void fun(NODE *h)

{ NODE *p, *q; int t;

p = h;

while (p) {

q = __1__ ;

while (__2__)

{ if (p->data > q->data)

{ t = p->data; p->data = q->data;

q->data = t; }

q = q->next;

}

p = __3__ ;

}

}

NODE *creatlist(int a[])

{ NODE *h,*p,*q; int i;

h=NULL;

for(i=0; i

{ q=(NODE

*)malloc(sizeof(NODE));

q->data=a[i];

q->next = NULL;

if (h == NULL) h = p = q;

else { p->next = q; p = q; }

}

return h;

}

void outlist(NODE *h)

{ NODE *p;

p=h;

if (p==NULL) printf("The list is

NULL!\n");

else

{ printf("\nHead ");

do

{ printf("->%d", p->data); p=p->next; }

while(p!=NULL);

printf("->End\n");

}

}

main()

{ NODE *head;

int a[N]= {0, 10, 4, 2, 8, 6 };

head=creatlist(a);

printf("\nThe original list:\n"); outlist(head);

fun(head);

printf("\nThe list after inverting :\n");

outlist(head);

}

解题思路:

本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。

第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next

指针,因此应填写:p.next。

第二处:判断内循环q指针是否结束,所以应填:q。

第三处:外循环控制变量p指向自己的next指针,所以应填:p.next。**************************** ***********************

给定程序MODI1.C中函数fun的功能是: 将s所指字符串中的字母转换为按字母

序列的后续字母(但Z转换为A, z 转换为a),其它字符不变。

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!

给定源程序:

#include

#include

void fun (char *s)

{

while(*s!='@')

{ if(*s>='A' & *s<='Z' || *s>='a' && *s<='z')

{ if(*s=='Z') *s='A';

else if(*s=='z') *s='a';

else *s += 1;

}

(*s)++;

}

}

main()

{ char s[80];

printf("\n Enter a string with length < 80. :\n\n "); gets(s);

printf("\n The string : \n\n ");

puts(s);

fun ( s );

printf ("\n\n The Cords :\n\n ");

puts(s);

}

解题思路:

第一处: 使用while循环来判断字

符串指针s是否结束,所以应改为:

while(*s)。

第二处: 取字符串指针s的下一个

位置,所以应改为:s++;。

****************************

***********************

请编写函数fun, 函数的功能是:

移动一维数组中的内容; 若数组

中有n个整数, 要求把下标从0到

p(含p,p小于等于n-1)的数组元素

平移到数组的最后。

例如, 一维数组中的原始内容为:

1,2,3,4,5,6,7,8,9,10; p的值为3。移

后, 一维数组中的内容应为:

5,6,7,8,9,10,1,2,3,4。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#define N 80

void fun(int *w, int p, int n)

{

}

main()

{ int

a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13

,14,15};

int i,p,n=15;

printf("The original data:\n");

for(i=0; i

i++)printf("%3d",a[i]);

printf("\n\nEnter p:

");scanf("%d",&p);

fun(a,p,n);

printf("\nThe data after

moving:\n");

for(i=0; i

i++)printf("%3d",a[i]);

printf("\n\n");

NONO();

}

解题思路:

本题是考察一维数组的操作。

1. 定义一维数组中间变量b,把n

值后面数组中的内容存入b中。

2. 再把m前的数组中的内容存入

b中。

3. 最后把数组b的内容依次存放

到w中。

参考答案:

void fun(int *w, int p, int n)

{

int i, j = 0, b[N] ;

for(i = p + 1 ; i < n ; i++) b[j++] =

w[i] ;

for(i = 0 ; i <= p ; i++) b[j++] =

w[i] ;

for(i = 0 ; i < n ; i++) w[i]= b[i] ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第10套:

给定程序中,函数fun的功能是:

判定形参a所指的N×N(规定N为

奇数)的矩阵是否是"幻方",若是,

函数返回值为1;不是,函数返

回值为0。"幻方"的判定条件是:

矩阵每行、每列、主对角线及反

对角线上元素之和都相等。

例如,以下3×3的矩阵就是一个"

幻方":

4 9 2

3 5 7

8 1 6

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#define N 3

int fun(int (*a)[N])

{ int i,j,m1,m2,row,colum;

m1=m2=0;

for(i=0; i

{ j=N-i-1; m1+=a[i][i];

m2+=a[i][j]; }

if(m1!=m2) return 0;

for(i=0; i

row=colum= __1__;

for(j=0; j

{ row+=a[i][j]; colum+=a[j][i]; }

if( (row!=colum) __2__

(row!=m1) ) return 0;

}

return __3__;

}

main()

{ int x[N][N],i,j;

printf("Enter number for array:\n");

for(i=0; i

for(j=0; j

scanf("%d",&x[i][j]);

printf("Array:\n");

for(i=0; i

{ for(j=0; j

printf("\n");

}

if(fun(x)) printf("The Array is a magic square.\n");

else printf("The Array isn't a magic square.\n");

}

解题思路:

第一处:行列变量row和colum的值初始化为0。

第二处:两个条件只要有一个不满足就返回0,所以应填:||。

第三处:如果矩阵是“幻方”,则返回1。

**************************** ***********************

给定程序MODI1.C中fun函数的功能是: 根据整型形参m,计算如下公式的值。

1 1 1

t = 1 - ----- - ----- - …… - -----

2 3 m

例如,若主函数中输入5,则应输出-0.283333。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除, 使它能计算出正确的结果。

注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

double fun( int m )

{

double t = 1.0;

int i;

for( i = 2; i <= m; i++ )

t = 1.0-1 /i;

_______;

}

main()

{

int m ;

printf( "\nPlease enter 1 integer numbers:\n" );

scanf( "%d", &m);

printf( "\n\nThe result is %lf\n", fun( m ) );

}

解题思路:

第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=1./i。第二处:应是返回公式的值,函

数中公式的值是存放在临时变量t

中,所以应填return t;。

****************************

***********************

请编写一个函数,函数的功能是

删除字符串中的所有空格。

例如, 主函数中输入"asd af aa

z67", 则输出为"asdafaaz67"。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

int fun(char *str)

{

}

main()

{

char str[81];

int n;

printf("Input a string:") ;

gets(str);

puts(str);

fun(str);

printf("*** str: %s\n",str);

NONO();

}

解题思路:

本题是考察考生怎样利用字符串

指针来删除字符串的空格字符。

在函数开始处把指针p先指

向字符串str以及位置变量i置0,然

后采用while循环和字符串指针p

来处理的,每循环一次来判断指

针p所指的字符是否为空格,如果

不是空格,则把该字符写到str字

符串中,位置由i来控制,如果是

空格,则不处理,继续取下一字

符,直至字符串结束为止,最后

再把字符串结束符写到

位置为i的str上,再通过形参str返

回。

参考答案:

int fun(char *str)

{

char *p = str ;

int i = 0 ;

while(*p) {

if(*p != ' ') str[i++] = *p ;

p++ ;

}

str[i] = 0 ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第11套:

给定程序中,函数fun的功能是将

带头结点的单向链表逆置。即若

原链表中从头至尾结点数据域依

次为:2、4、6、8、10,逆置后,从

头至尾结点数据域依次为:

10、8、6、4、2。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define N 5

typedef struct node {

int data;

struct node *next;

} NODE;

void fun(NODE *h)

{ NODE *p, *q, *r;

/

p = h->__1__;

/

if (p==__2__) return;

q = p->next;

p->next = NULL;

while (q)

{ r = q->next; q->next = p;

p = q; q = __3__;

}

h->next = p;

}

NODE *creatlist(int a[])

{ NODE *h,*p,*q; int i;

h = (NODE

*)malloc(sizeof(NODE));

h->next = NULL;

for(i=0; i

{ q=(NODE

*)malloc(sizeof(NODE));

q->data=a[i];

q->next = NULL;

if (h->next == NULL) h->next = p

= q;

else { p->next = q; p = q; }

}

return h;

}

void outlist(NODE *h)

{ NODE *p;

p = h->next;

if (p==NULL) printf("The list is

NULL!\n");

else

{ printf("\nHead ");

do

{ printf("->%d", p->data); p=p->next; }

while(p!=NULL);

printf("->End\n");

}

}

main()

{ NODE *head;

int a[N]={2,4,6,8,10};

head=creatlist(a);

printf("\nThe original list:\n"); outlist(head);

fun(head);

printf("\nThe list after inverting :\n");

outlist(head);

}

解题思路:

本题是考察使用链表方法,对链表的结点数据进行降序排列。

第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h->next。

第二处:判断p指针是否结束,所以应填写:0。

第三处:q指向原q的next指针,所以应填:r。

**************************** ***********************

给定程序MODI1.C中函数fun的功能是: 计算s所指字符串中含有t 所指字符串的数目, 并作为函数值返回。

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!

给定源程序:

#include

#include

#define N 80

int fun(char *s, char *t)

{ int n;

char *p , *r;

n=0;

while ( *s )

{ p=s;

/****

r=p;

while(*r)

if(*r==*p) { r++; p++; }

else break;

/****

if(*r= 0)

n++;

s++; }

return n;

}

main()

{ char a[N],b[N]; int m;

printf("\nPlease enter string a : ");

gets(a);

printf("\nPlease enter substring b :

"); gets( b );

m=fun(a, b);

printf("\nThe result is : m

= %d\n",m);

}

解题思路:

第一处: 程序中子串是由变量t来

实现的,再根据下面while循环体

中语句可知,所以应改为:r=t;。

第二处: 是判断相等的条件,所以

应改为:if(*r==0)。

****************************

***********************

请编写函数fun, 函数的功能是:

将放在字符串数组中的M个字符

串(每串的长度不超过N), 按顺序

合并组成一个新的字符串。函数

fun中给出的语句仅供参考。

例如, 字符串数组中的M个字符

串为

AAAA

BBBBBBB

CC

则合并后的字符串的内容应是:

AAAABBBBBBBCC。

提示:strcat(a,b)的功能是将字符

串b复制到字符串a的串尾上,成

为一个新串。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#define M 3

#define N 20

void fun(char a[M][N], char *b)

{

int i; *b=0;

}

main()

{ char

w[M][N]={"AAAA","BBBBBBB",

"CC"}, a[100];

int i ;

printf("The string:\n");

for(i=0; i

printf("\n");

fun(w,a);

printf("The A string:\n");

printf("%s",a);printf("\n\n");

NONO();

}

解题思路:

本题是考察字符串的操作。

使用for循环以及C语言函数strcat

依次连接起来。

参考答案:

#include

#define M 3

#define N 20

void fun(char a[M][N], char *b)

{

int i; *b=0;

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

strcat(b, a[i]) ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第12套:

给定程序中,函数fun的功能是将

不带头结点的单向链表逆置。即

若原链表中从头至尾结点数据域

依次为:2、4、6、8、10,逆置后,

从头至尾结点数据域依次为:10、

8、6、4、2。请在程序的下划线

处填入正确的内容并把下划线删

除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define N 5

typedef struct node {

int data;

struct node *next;

} NODE;

__1__ * fun(NODE *h)

{ NODE *p, *q, *r;

p = h;

if (p == NULL)

return NULL;

q = p->next;

p->next = NULL;

while (q)

{

r = q->__2__;

q->next = p;

p = q;

q = __3__ ;

}

return p;

}

NODE *creatlist(int a[])

{ NODE *h,*p,*q; int i;

h=NULL;

for(i=0; i

{ q=(NODE *)malloc(sizeof(NODE));

q->data=a[i];

q->next = NULL;

if (h == NULL) h = p = q;

else { p->next = q; p = q; }

}

return h;

}

void outlist(NODE *h)

{ NODE *p;

p=h;

if (p==NULL) printf("The list is NULL!\n");

else

{ printf("\nHead ");

do

{ printf("->%d", p->data); p=p->next; }

while(p!=NULL);

printf("->End\n");

}

}

main()

{ NODE *head;

int a[N]={2,4,6,8,10};

head=creatlist(a);

printf("\nThe original list:\n"); outlist(head);

head=fun(head);

printf("\nThe list after inverting :\n");

outlist(head);

}

解题思路:

本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。

第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE *。

第二处:中间变量r用来保存q的next指针,所以应填:next。

第三处:q指向原q的next指针,所以应填:r。

**************************** ***********************

给定程序MODI1.C中函数fun的功能是: 将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。

例如, 字符串中的数据为: AABBCCDDEEFF,

则输出应当是:ABBCDDEFF。请改正函数fun中指定部位的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

#define N 80

void fun(char *s, char t[])

{ int i, j=0;

for(i=0; i

if(i%2 && s[i]%2==0)

t[j++]=s[i];

t[i]='\0';

}

main()

{ char s[N], t[N];

printf("\nPlease enter string s : ");

gets(s);

fun(s, t);

printf("\nThe result is : %s\n",t);

}

解题思路:

第一处: 根据试题分析,两个条件

之间应该是“或”的关系,而不是

“与”的关系,所以应改为:if(i%2

|| s[i]%2==0)。

第二处: 当字符串处理结束后,应

该补上字符串的结束符,那么字

符串t的位置是由i来控制,所以应

改为:t[j]=0;。

****************************

***********************

请编写函数fun, 函数的功能是:

将M行N列的二维数组中的数据,

按列的顺序

依次放到一维数组中。函数fun中

给出的语句仅供参考。

例如, 二维数组中的数据为:

33 33 33 33

44 44 44 44

55 55 55 55

则一维数组中的内容应是:

33 44 55 33 44 55 33 44 55 33 44

55。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

void fun(int s[][10], int b[], int *n,

int mm, int nn)

{

int i,j,np=0; /* np用作b数组下标

*/

*n=np;

}

main()

{ int

w[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

int a[100]={0}, n=0;

printf("The matrix:\n");

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

{ for(j=0;j<4;

j++)printf("%3d",w[i][j]);

printf("\n");

}

fun(w,a,&n,3,4);

printf("The A array:\n");

for(i=0;i

printf("\n\n");

NONO();

}

解题思路:

本题是把二维数组中的数据按行

存放到一维数组中。

1. 计算存放到一维数组中的位

置。

2. 取出二维数组中的数据存放到

一维数组(已计算出的位置)中。

参考答案:

void fun(int (*s)[10], int *b, int *n,

int mm, int nn)

{

int i,j,np=0; /* np用作b数组下标

*/

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

for(j = 0 ; j < mm ; j++) {

b[np] = s[j][i] ;

np = i * mm + j + 1;

}

*n=np;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第13套:

给定程序中,函数fun的功能是将

带头节点的单向链表结点数据域

中的数据从小到大排序。即若原

链表结点数据域从头至尾的数据

为:10、4、2、8、6,排序

后链表结点数据域从头至尾的数

据为:2、4、6、8、10。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define N 6

typedef struct node {

int data;

struct node *next;

} NODE;

void fun(NODE *h)

{ NODE *p, *q; int t;

p = __1__ ;

while (p) {

q = __2__ ;

while (q) {

if (p->data __3__ q->data)

{ t = p->data; p->data = q->data; q->data = t; }

q = q->next;

}

p = p->next;

}

}

NODE *creatlist(int a[])

{ NODE *h,*p,*q; int i;

h = (NODE *)malloc(sizeof(NODE));

h->next = NULL;

for(i=0; i

{ q=(NODE *)malloc(sizeof(NODE));

q->data=a[i];

q->next = NULL;

if (h->next == NULL) h->next = p = q;

else { p->next = q; p = q; }

}

return h;

}

void outlist(NODE *h)

{ NODE *p;

p = h->next;

if (p==NULL) printf("The list is NULL!\n");

else

{ printf("\nHead ");

do

{ printf("->%d", p->data); p=p->next; }

while(p!=NULL);

printf("->End\n");

}

}

main()

{ NODE *head;

int a[N]= {0, 10, 4, 2, 8, 6 };

head=creatlist(a);

printf("\nThe original list:\n"); outlist(head);

fun(head);

printf("\nThe list after sorting :\n"); outlist(head);

}

解题思路:

本题是考察使用链表方法,对链表的结点数据进行升序排列。

第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p 的初始位置。所以应填写:h->next。

第二处:使用while循环,对链表

中结点的数据进行排序,q必须指

向p结构指针的next指针。所以应

填写:p->next。

第三处:如果当前结点中的数据

大于(大于等于)循环中的结点

数据,那么进行交换,所

以应填写:>(或>=)。

****************************

***********************

给定程序MODI1.C是建立一个带

头结点的单向链表, 并用随机函

数为各结点数据域赋值。函数fun

的作用是求出单向链表结点(不包

括头结点)数据域中的最大值, 并

且作为函数值返回。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

typedef struct aa

{ int data;

struct aa *next;

} NODE;

fun ( NODE *h )

{ int max=-1;

NODE *p;

p=h ;

while(p)

{ if(p->data>max )

max=p->data;

p=h->next ;

}

return max;

}

outresult(int s, FILE *pf)

{ fprintf(pf,"\nThe max in

link : %d\n",s);}

NODE *creatlink(int n, int m)

{ NODE *h, *p, *s, *q;

int i, x;

h=p=(NODE

*)malloc(sizeof(NODE));h->data=

9999;

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

{ s=(NODE

*)malloc(sizeof(NODE));

s->data=rand()%m;

s->next=p->next;

p->next=s; p=p->next;

}

p->next=NULL;

return h;

}

outlink(NODE *h, FILE *pf)

{ NODE *p;

p=h->next;

fprintf(pf,"\nTHE LIST :\n\n

HEAD ");

while(p)

{ fprintf(pf,"->%d ",p->data);

p=p->next; }

fprintf(pf,"\n");

}

main()

{ NODE *head; int m;

head=creatlink(12, 100);

outlink(head , stdout);

m=fun(head);

printf("\nTHE RESULT :\n");

outresult(m, stdout);

}

解题思路:

程序中是使用while循环语句和结

合结构指针p来找到数据域中的

最大值。

第一处: p指向形参结构指针h的

next指针,所以应改为:

p=h->next;。

第二处: p指向自己的下一个结

点,所以应改为:p=p->next,

****************************

***********************

请编写函数fun, 函数的功能是:

将M行N列的二维数组中的数据,

按行的顺序依次放到一维数组中,

一维数组中数据的个数存放在形

参n所指的存储单元中。

例如, 二维数组中的数据为:

33 33 33 33

44 44 44 44

55 55 55 55

则一维数组中的内容应是:

33 33 33 33 44 44 44 44 55 55 55

55。

注意:部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

void fun(int (*s)[10], int *b, int *n,

int mm, int nn)

{

}

main()

{ int w[10][10] =

{{33,33,33,33},{44,44,44,44},{55,

55,55,55}},i,j ;

int a[100] = {0}, n = 0 ;

printf("The matrix:\n") ;

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

{ for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ;

printf("\n") ;

}

fun(w, a, &n, 3, 4) ;

printf("The A array:\n") ;

for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("\n\n") ; NONO() ;

}

解题思路:

本题是把二维数组中的数据按行存放到一维数组中。

1. 计算存放到一维数组中的位置。

2. 取出二维数组中的数据存放到一维数组(已计算出的位置)中。参考答案:

void fun(int (*s)[10], int *b, int *n, int mm, int nn)

{

int i, j, k ;

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

for(j = 0 ; j < nn ; j++) {

k = i * nn + j ;

b[k] = s[i][j] ;

}

*n = mm * nn ;

}

main()

{ int w[10][10] = {{33,33,33,33},{44,44,44,44},{55, 55,55,55}},i,j ;

int a[100] = {0}, n = 0 ;

printf("The matrix:\n") ;

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

{ for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ;

printf("\n") ;

}

fun(w, a, &n, 3, 4) ;

printf("The A array:\n") ;

for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("\n\n") ; NONO() ;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第14套:

给定程序中, 函数fun的功能是用函数指针指向要调用的函数,并进行调用。

规定在__2__处使f指向函数f1,在__3__处使f指向函数f2。当调用正确时,程序输出:

x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

double f1(double x)

{ return x*x; }

double f2(double x, double y)

{ return x*y; }

double fun(double a, double b)

{

__1__ (*f)();

double r1, r2;

f = __2__ ; /* point fountion f1 */

r1 = f(a);

f = __3__ ; /* point fountion f2 */

r2 = (*f)(a, b);

return r1 + r2;

}

main()

{ double x1=5, x2=3, r;

r = fun(x1, x2);

printf("\nx1=%f, x2=%f,

x1*x1+x1*x2=%f\n",x1, x2, r);

}

解题思路:

本题主要是考察用函数指针指向

要调用的函数。程序中共有三处

要填上适当的内容,使程

序能运行出正确的结果。

第一处:定义函数指针的类型,

所以应填:double。

第二处:使f指向函数f1,所以应

填:f1。

第三处:使f指向函数f2,所以应

填:f2。

****************************

***********************

给定程序MODI1.C是建立一个带

头结点的单向链表,并用随机函数

为各结点赋值。函数fun的功能是

将单向链表结点(不包括头结点)

数据域为偶数的值累加起来, 并

且作为函数值返回。

请改正函数fun中指定部位的错误,

使它能得出正确的结果。

注意: 不要改动main函数, 不得

增行或删行, 也不得更改程序的

结构!

给定源程序:

#include

#include

typedef struct aa

{ int data; struct aa *next; }NODE;

int fun(NODE *h)

{ int sum = 0 ;

NODE *p;

p=h;

while(p)

{ if(p->data%2==0)

sum +=p->data;

p=h->next;

}

return sum;

}

NODE *creatlink(int n)

{ NODE *h, *p, *s, *q;

int i, x;

h=p=(NODE

*)malloc(sizeof(NODE));

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

{ s=(NODE

*)malloc(sizeof(NODE));

s->data=rand()%16;

s->next=p->next;

p->next=s;

p=p->next;

}

p->next=NULL;

return h;

}

outlink(NODE *h, FILE *pf)

{ NODE *p;

p = h->next;

fprintf(pf ,"\n\nTHE LIST :\n\n

HEAD " );

while(p)

{ fprintf(pf ,"->%d ",p->data );

p=p->next; }

fprintf (pf,"\n");

}

outresult(int s, FILE *pf)

{ fprintf(pf,"\nThe sum of even

numbers : %d\n",s);}

main()

{ NODE *head; int even;

head=creatlink(12);

head->data=9000;

outlink(head , stdout);

even=fun(head);

printf("\nThe result :\n");

outresult(even, stdout);

}

解题思路:

本题是考察如何使用单向链表把

数据域的值按条件进行累加。

第一处:试题要求不计算头结点,

所以应改为:p=h->next;

第二处:指向p的下一个结点来实

现循环,所以应改为:p=p->next;

****************************

***********************

请编写函数fun, 函数的功能是:

判断字符串是否为回文?若是, 函

数返回1,主函数中输出: YES,

否则返回0, 主函数中输出NO。回

文是指顺读和倒读都一样的字符

串。

例如, 字符串LEVEL是回文, 而字符串123312就不是回文。

注意:部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#define N 80

int fun(char *str)

{

}

main()

{ char s[N] ;

printf("Enter a string: ") ; gets(s) ; printf("\n\n") ; puts(s) ;

if(fun(s)) printf(" YES\n") ;

else printf(" NO\n") ;

NONO() ;

}

解题思路:

本题是考察如何判断一个字符串是回文字符串,回文是指顺读和倒读都一样的字符串。可以利用for循环语句来判断,如果前后不一致,则不是回文字符串。

参考答案:

int fun(char *str)

{

int i, j = strlen(str) ;

for(i = 0 ; i < j / 2 ; i++)

if(str[i] != str[j - i - 1]) return 0 ; return 1 ;

}

main()

{ char s[N] ;

printf("Enter a string: ") ; gets(s) ; printf("\n\n") ; puts(s) ;

if(fun(s)) printf(" YES\n") ;

else printf(" NO\n") ;

NONO() ;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第15套:

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其它学生数据不变;若找不到,则什么都不做。请在程序的下划

线处填入正确的内容并把下划线

删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#define N 5

typedef struct student {

long sno;

char name[10];

float score[3];

} STU;

void fun(char *filename, long sno)

{ FILE *fp;

STU n; int i;

fp = fopen(filename,"rb+");

while (!feof(__1__))

{ fread(&n, sizeof(STU), 1, fp);

if (n.sno__2__sno) break;

}

if (!feof(fp))

{ for (i=0; i<3; i++) n.score[i] += 3;

fseek(__3__, -1L*sizeof(STU),

SEEK_CUR);

fwrite(&n, sizeof(STU), 1, fp);

}

fclose(fp);

}

main()

{ STU t[N]={ {10001,"MaChao",

91, 92, 77}, {10002,"CaoKai", 75,

60, 88},

{10003,"LiSi", 85, 70, 78},

{10004,"FangFang", 90, 82, 87},

{10005,"ZhangSan", 95, 80, 88}},

ss[N];

int i,j; FILE *fp;

fp = fopen("student.dat", "wb");

fwrite(t, sizeof(STU), N, fp);

fclose(fp);

printf("\nThe original data :\n");

fp = fopen("student.dat", "rb");

fread(ss, sizeof(STU), N, fp);

fclose(fp);

for (j=0; j

{ printf("\nNo: %ld Name: %-8s

Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ",

ss[j].score[i]);

printf("\n");

}

fun("student.dat", 10003);

fp = fopen("student.dat", "rb");

fread(ss, sizeof(STU), N, fp);

fclose(fp);

printf("\nThe data after

modifing :\n");

for (j=0; j

{ printf("\nNo: %ld Name: %-8s

Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ",

ss[j].score[i]);

printf("\n");

}

}

解题思路:

本题是考察如何从指定文件中找

出指定学号的学生数据,并进行

适当的修改,修改后重新写回到

文件中该学生的数据上,即用该

学生的新数据覆盖原数据。

第一处:判断读文件是否结束,

所以应填:fp。

第二处:从读出的数据中判断是

否是指定的学号,其中学号是由

形参sno来传递的,所以应填:==。

第三处:从已打开文件fp中重新定

位当前读出的结构位置,所以应

填:fp。

****************************

***********************

给定程序MODI1.C中函数fun的功

能是:利用插入排序法对字符串

中的字符按从小到大的顺序进行

排序。插入法的基本算法是:先

对字符串中的头两个元素进行排

序。然后把第三个字符插入到前

两个字符中,插入后前三个字符

依然有序;再把第四个字符插入

到前三个字符中,……。待排序的

字符串已在主函数中赋予。

请改正程序中的错误,使它能得

出正确结果。

注意:不要改动main函数,不得

增行或删行,也不得更改程序的

结构。

给定源程序:

#include

#include

#define N 80

void insert(char *aa)

{ int i,j,n; char ch;

n=strlen[ aa ];

for( i=1; i

c=aa[i];

j=i-1;

while ((j>=0) && ( ch

{ aa[j+1]=aa[j];

j--;

}

aa[j+1]=ch;

}

}

main( )

{ char

a[N]="QWERTYUIOPASDFGHJK

LMNBVCXZ";

int i ;

printf ("The original string : %s\n", a);

insert(a) ;

printf("The string after sorting : %s\n\n",a );

}

解题思路:

第一处: 函数应该使用圆括号,所以应改为:n=strlen(aa) ;。

第二处: 变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i];。

**************************** ***********************

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h 指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。

注意: 部分源程序在文件PROG1.C文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:

#include

#include

#define N 8

struct slist

{ double s;

struct slist *next;

};

typedef struct slist STREC; double fun( STREC *h )

{

}

STREC * creat( double *s)

{ STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STR EC));p->s=0;

while(i

{ q=(STREC*)malloc(sizeof(STRE C));

q->s=s[i]; i++; p->next=q; p=q;

}

p->next=0;

return h;

}

outlist( STREC *h)

{ STREC *p;

p=h->next; printf("head");

do

{ printf("->%2.0f",p->s);p=p->next ;}

while(p!=0);

printf("\n\n");

}

main() { double

s[N]={85,76,69,85,91,72,64,87},

max;

STREC *h;

h=creat( s ); outlist(h);

max=fun( h );

printf("max=%6.1f\n",max);

NONO();

}

解题思路:

本题是考察如何从链表中求出学

生的最高分。

我们给出的程序是利用while循环

语句以及临时结构指针p变量来

求出最高分。

1. 将链表中的第1个值赋给变量

max。

2. 将链表指针p的初始位置指向h

的next指针(h->next)。

3. 判断p指针是否结束,如果结

束,则返回max,否则做下一步。

4. 判断max是否小于p->s,如果小

于,则max取p->s,否则不替换。

5. 取p->next赋值给p(取下一结点

位置给p),转3继续。

参考答案:

double fun( STREC *h )

{

double max=h->s;

STREC *p;

p=h->next;

while(p)

{ if(p->s>max )

max=p->s;

p=p->next;

}

return max;

}

STREC * creat( double *s)

{ STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STR

EC));p->s=0;

while(i

{ q=(STREC*)malloc(sizeof(STRE

C));

q->s=s[i]; i++; p->next=q; p=q;

}

p->next=0;

return h;

}

outlist( STREC *h)

{ STREC *p;

p=h->next; printf("head");

do

{ printf("->%2.0f",p->s);p=p->next

;}

while(p!=0);

printf("\n\n");

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第16套:

给定程序中,函数fun的功能是:

求出形参ss所指字符串数组中最

长字符串的长度,将其余字符串

右边用字符*补齐,使其与最长的

字符串等长。ss所指字符串数组中

共有M个字符串,且串长

请在程序的下划线处填入正确的

内容并把下划线删除,使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define M 5

#define N 20

void fun(char (*ss)[N])

{ int i, j, n, len=0;

for(i=0; i

{ len=strlen(ss[i]);

if(i==0) n=len;

if(len>n)n=len;

}

for(i=0; i

n=strlen(___1___);

for(j=0; j

ss[i][ ___2___]='*';

ss[i][n+j+ ___3___]='\0';

}

}

main()

{ char

ss[M][N]={"shanghai","guangzhou

","beijing","tianjing","cchongqing"

};

int i;

printf("The original strings

are :\n");

for(i=0; i

printf("%s\n",ss[i]);

printf("\n");

fun(ss);

printf("The result is :\n");

for(i=0; i

printf("%s\n",ss[i]);

}

解题思路:

第一处:利用for循环语句取当前

字符串的长度,所以应填:ss[i]。

第二处:在字符串的右边填字符

*,其开始位置是n+j,其中n是该

字符串本身的长度,j是

循环控制变量,所以应填:n+j。

第三处:字符串处理结束应置字

符串结束符,其位置是n+j+1,所

以应填:1。

**************************** ***********************

给定程序MODI1.C中fun 函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。

例如, 若输入

"I am a student to take the examination.",

则应输出"I aM A studenT tO takE thE examination."。

请修改程序中的错误之处, 使它能得出正确的结果。

注意: 不要改动main 函数, 不得删行, 也不得更改程序的结构! 给定源程序:

#include

#include

void fun( char *p )

{

int k = 0;

for( ; *p; p++ )

if( k )

{

if( p == ' ' )

{

k = 0;

* (p-1) = toupper( *( p - 1 ) )

}

}

else

k = 1;

}

main()

{

char chrstr[64];

int d ;

printf( "\nPlease enter an English sentence within 63 letters: ");

gets(chrstr);

d=strlen(chrstr) ;

chrstr[d] = ' ' ;

chrstr[d+1] = 0 ;

printf("\n\nBefore changing:\n %s", chrstr);

fun(chrstr);

printf("\nAfter changing:\n %s", chrstr);

}

解题思路:

第一处:关键字int错写成INT。第二处:该行括号没有配对,所以只要加上一个右括号即可。

**************************** ***********************

请编写函数fun, 对长度为7个字符的字符串, 除首、尾字符外,将其余5个字符按ASCII码降序排

列。

例如,原来的字符串为CEAedca,

排序后输出为CedcEAa 。

注意: 部分源程序在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容, 仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#include

#include

int fun(char *s,int num)

{

}

main()

{

char s[10];

printf("输入7个字符的字符串:");

gets(s);

fun(s,7);

printf("\n%s",s);

NONO();

}

解题思路:

本题是考察考生如何对字符串中

的字符按降序进行排序。给出的

程序是使用双重for循环以及冒泡

法进行排序的,结果仍存放在原

先的字符串上。

参考答案:

int fun(char *s,int num)

{

char ch ;

int i, j ;

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

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

if(*(s + i) < *(s + j)) {

ch = *(s + j) ;

*(s + j) = *(s +i) ;

*(s + i) = ch ;

}

}

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第17套:

程序通过定义学生结构体数组,

存储了若干名学生的学号、姓名

和3门课的成绩。函数fun的功能是

将存放学生数据的结构体数组,

按照姓名的字典(从小到大)排

序。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

struct student {

long sno;

char name[10];

float score[3];

};

void fun(struct student a[], int n)

{

__1__ t;

int i, j;

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

for (j=i+1; j

if (strcmp(__3__) > 0)

{ t = a[i]; a[i] = a[j]; a[j] = t; }

}

main()

{ struct student

s[4]={{10001,"ZhangSan", 95, 80,

88},{10002,"LiSi", 85, 70, 78},

{10003,"CaoKai", 75, 60, 88},

{10004,"FangFang", 90, 82, 87}};

int i, j;

printf("\n\nThe original

data :\n\n");

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

{ printf("\nNo: %ld Name: %-8s

Scores: ",s[j].sno, s[j].name);

for (i=0; i<3; i++) printf("%6.2f ",

s[j].score[i]);

printf("\n");

}

fun(s, 4);

printf("\n\nThe data after

sorting :\n\n");

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

{ printf("\nNo: %ld Name: %-8s

Scores: ",s[j].sno, s[j].name);

for (i=0; i<3; i++) printf("%6.2f ",

s[j].score[i]);

printf("\n");

}

}

解题思路:

本题是对结构体数组中的姓名按

升序进行排列。

第一处:t是一个临时变量,主要

是存放学生数据的结构变量,所

以应填:struct student。

第二处:利用两重for循环进行排

序操作,排序的终止条件应该是

总人数减1,所以应填:n-1。

第三处:对姓名进行比较大小,

所以应填:a[i].name,a[j].name。

****************************

***********************

给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。

例如,调用fun函数之前给字符串输入:ABCDeFGH,

调用后字符串中的内容为:eABCDFGH。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#include

fun( char *p )

{ char max,*q; int i=0;

max=p[i];

while( p[i]!=0 )

{ if( max

{ max=p[i];

/

q=p+i

}

i++;

}

wihle( q>p )

{ *q=*(q-1);

q--;

}

p[0]=max;

}

main()

{ char str[80];

printf("Enter a string: "); gets(str); printf("\nThe original string: "); puts(str);

fun(str);

printf("\nThe string after moving: "); puts(str); printf("\n\n");

}

解题思路:

第一处:在语句后缺少分号,所应改为:q=p+i;。

第二处:保留字while写错,所应改为:while(q>p)。

**************************** ***********************

学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组s中, 请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数是60 69, 则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生

数据。主函数中将把60放在low

中,把69放在heigh中。

注意: 部分源程序在文件

PROG1.C文件中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。

给定源程序:

#include

#define N 16

typedef struct

{ char num[10];

int s;

} STREC;

int fun( STREC *a,STREC *b,int l,

int h )

{

}

main()

{ STREC

s[N]={{"GA005",85},{"GA003",7

6},{"GA002",69},{"GA004",85},

{"GA001",96},{"GA007",72},{"G

A008",64},{"GA006",87},

{"GA015",85},{"GA013",94},{"G

A012",64},{"GA014",91},

{"GA011",90},{"GA017",64},{"G

A018",64},{"GA016",72}};

STREC h[N],tt;FILE *out ;

int i,j,n,low,heigh,t;

printf("Enter 2 integer number low

& heigh : ");

scanf("%d%d", &low,&heigh);

if ( heigh<

low ){ t=heigh;heigh=low;low=t; }

n=fun( s,h,low,heigh );

printf("The student's data

between %d--%d :\n",low,heigh);

for(i=0;i

printf("%s %4d\n",h[i].num,h[i].s);

printf("\n");

out = fopen("c:\\test\\out.dat","w") ;

n=fun( s,h,80,98 );

fprintf(out,"%d\n",n);

for(i=0;i

for(j=i+1;j

if(h[i].s>h[j].s) {tt=h[i] ;h[i]=h[j];

h[j]=tt;}

for(i=0;i

fprintf(out,"%4d\n",h[i].s);

fprintf(out,"\n");

fclose(out);

}

解题思路:

本题是把符合条件的学生记录存

入到另一个结构体,最后通过主

函数进行输出。

1. 符合条件的学生人数存在变量

j(初始值为0)中,最后返回其值。

2. 利用for循环语句,依次判断是

否符合条件,如果符合,则存入

另一个记录体中,人数j 加1。

参考答案:

int fun( STREC *a,STREC *b,int l,

int h )

{

int i,j = 0 ;

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

if(a[i].s >= l && a[i].s <= h) b[j++]

= a[i] ;

return j ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第18套:

给定程序中,函数fun的功能是:

将形参s所指字符串中的所有字母

字符顺序前移,其他字符顺序后

移,处理后新字符串的首地址作

为函数值返回。

例如,s所指字符串

为:asd123fgh543df,处理后新字符

串为:asdfghdf123543。

请在程序的下划线处填入正确的

内容并把下划线删除,使程序得出

正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#include

char *fun(char *s)

{ int i, j, k, n; char *p, *t;

n=strlen(s)+1;

t=(char*)malloc(n*sizeof(char));

p=(char*)malloc(n*sizeof(char));

j=0; k=0;

for(i=0; i

{ if(((s[i]>='a')&&(s[i]<='z'))||((s[i]

>='A')&&(s[i]<='Z'))) {

t[j]=__1__; j++;}

else

{ p[k]=s[i]; k++; }

}

for(i=0; i<__2__; i++) t[j+i]=p[i];

t[j+k]= __3__;

return t;

}

main()

{ char s[80];

printf("Please input: ");

scanf("%s",s);

printf("\nThe result

is: %s\n",fun(s));

}

解题思路:

第一处:函数中申请了两个内存空间,其p是存放字母字符串,t 是存放非字母字符串,根

据条件可知,p依次存放字母字符串,其位置由j来控制,所以应填:s[i]。

第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。

第三处:字符串处理好后必须添加字符串结束符,所以应填:'\0'。**************************** ***********************

给定程序MODI1.C中函数fun 的功能是:将s所指字符串中最后一次出现的与

t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。

在此处,要求t1和t2所指字符串的长度相同。

例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为:"ab",t2所指子串中的内容为:"99"时,结果,在w所指的数组中的内容应为:"abcdabf99c"。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

#include

int fun (char *s, char *t1, char *t2 , char *w)

{

int i; char *p , *r, *a;

strcpy( w, s );

while ( w )

{ p = w; r = t1;

while ( *r )

IF ( *r == *p )

{ r++; p++; }

else break;

if ( *r == '\0' ) a = w;

w++;

}

r = t2;

while ( *r ){ *a = *r; a++; r++; }

}

main()

{

char s[100], t1[100], t2[100], w[100];

printf("\nPlease enter string S:"); scanf("%s", s);

printf("\nPlease enter substring

t1:"); scanf("%s", t1);

printf("\nPlease enter substring

t2:"); scanf("%s", t2);

if ( strlen(t1)==strlen(t2) )

{ fun( s, t1, t2, w);

printf("\nThe result is : %s\n", w);

}

else printf("\nError : strlen(t1) !=

strlen(t2)\n");

}

解题思路:

第一处:判断w指针所指的值是否

是结束符,应改为:while(*w)。

第二处:if错写成If。

****************************

***********************

函数fun的功能是:将s所指字符串

中ASCII值为奇数的字符删除,串

中剩余字符形成一个新串放在t所

指的数组中。

例如,若s所指字符串中的内容为:

"ABCDEFG12345",其中字符A的

ASCII码值为奇数、…、字符1的

ASCII码值也为奇数、…都应当

删除,其它依此类推。最后t所指

的数组中的内容应是:"BDF24"。

注意: 部分源程序存在文件

PROG1.C中。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入

你编写的若干语句。

给定源程序:

#include

#include

void fun(char *s, char t[])

{

}

main()

{

char s[100], t[100];

printf("\nPlease enter string S:");

scanf("%s", s);

fun(s, t);

printf("\nThe result is: %s\n", t);

NONO();

}

解题思路:

本题是从一个字符串按要求生成

另一个新的字符串。我们使用for

循环语句来解决这个问题。

参考答案:

void fun(char *s, char t[])

{

int i, j = 0 ;

for(i = 0 ; i < strlen(s); i++)

if(s[i] % 2==0) t[j++] = s[i] ;

t[j] = 0 ;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第19套:

程序通过定义学生结构体变量,

存储了学生的学号、姓名和3门课

的成绩。函数fun的功能是将形参a

所指结构体变量s中的数据进行修

改,并把a中地址作为函数值返回

主函数,在主函数中输出修改后

的数据。

例如:a所指变量s中的学号、姓名、

和三门课的成绩依次是:10001、

" ZhangSan "、95、80、88,修改

后输出t中的数据应为:10002、

"LiSi "、96、

81、89。

请在程序的下划线处填入正确的

内容并把下划线删除, 使程序得

出正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

struct student {

long sno;

char name[10];

float score[3];

};

__1__ fun(struct student *a)

{ int i;

a->sno = 10002;

strcpy(a->name, "LiSi");

for (i=0; i<3; i++) __2__ += 1;

return __3__ ;

}

main()

{ struct student

s={10001,"ZhangSan", 95, 80, 88},

*t;

int i;

printf("\n\nThe original data :\n");

printf("\nNo: %ld

Name: %s\nScores: ",s.sno,

https://www.wendangku.net/doc/6114772200.html,);

for (i=0; i<3; i++) printf("%6.2f ",

s.score[i]);

printf("\n");

t = fun(&s);

printf("\nThe data after

modified :\n");

printf("\nNo: %ld

Name: %s\nScores: ",t->sno,

t->name);

for (i=0; i<3; i++) printf("%6.2f ",

t->score[i]);

printf("\n");

}

解题思路:

本题是利用形参对结构体变量中的值进行修改并通过地址把函数值返回。

第一处:必须定义结构指针返回类型,所以应填:struct student *。第二处:分别对成绩增加1分,所以应填:a->score[i]。

第三处:返回结构指针a,所以应填:a。

**************************** ***********************

给定程序MODI1.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#include

#include

#define N 5

#define M 81

fun(char (*sq)[M])

{ int i; char *sp;

sp=sq[0];

for(i=0;i

if(strlen( sp)

sp=sq[i] ;

return sq;

}

main()

{ char str[N][M], *longest; int i; printf("Enter %d lines :\n",N);

for(i=0; i

for(i=0; i

printf("\nThe longest string :\n"); puts(longest);

}

解题思路:

第一处: 要求返回字符串的首地址,所以应改为:char *fun(char (*sq)[M])。

第二处: 返回一个由变量sp控制的字符串指针,所以应改为:return sp;。

**************************** ***********************

函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的

整数放在c 中。合并的方式是:将a

中的十位和个位数依次放在变量

c的百位和个位上,b中的十位和

个位数依次放在变量c的十位和

千位上。

例如,当a=45,b=12。调用该函

数后,c=2415。

注意: 部分源程序存在文件

PROG1.C中。数据文件IN.DA T中

的数据不得修改。

请勿改动主函数main和其它函数

中的任何内容,仅在函数fun的花

括号中填入

你编写的若干语句。

给定源程序:

#include

void fun(int a, int b, long *c)

{

}

main()

{ int a,b; long c;

printf("Input a, b:");

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

fun(a, b, &c);

printf("The result is: %ld\n", c);

NONO();

}

解题思路:

本题是给出两个两位数的正整数

分别取出各位上的数字,再按条

件组成一个新数。

取a十位数字的方法:a/10

取a个位数字的方法:a%10

参考答案:

void fun(int a, int b, long *c)

{

*c =

(b%10)*1000+(a/10)*100+(b/10)*

10+a%10;

}

※※※※※※※※※※※※※※

※※※※※※※※※※※

第20套:

给定程序中,函数fun的功能是:

计算形参x所指数组中N个数的平

均值(规定所有数均为正数),将

所指数组中小于平均值的数据移

至数组的前部,大于等于平

均值的数据移至x所指数组的后

部,平均值作为函数值返回,在

主函数中输出平均值和移动后的

数据。

例如,有10个正数:46 30 32 40 6

17 45 15 48 26,平均值为:

30.500000

移动后的输出为:30 6 17 15 26 46

32 40 45 48

请在程序的下划线处填入正确的

内容并把下划线删除,使程序得出

正确的结果。

注意:源程序存放在考生文件夹

下的BLANK1.C中。

不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

#include

#define N 10

double fun(double *x)

{ int i, j; double av, y[N];

av=0;

for(i=0; i

for(i=j=0; i

if( x[i]

{

y[j]=x[i]; x[i]=-1; __2__;}

i=0;

while(i

{ if( x[i]!= -1 ) y[j++]=x[i];

__3__;

}

for(i=0; i

return av;

}

main()

{ int i; double x[N];

for(i=0; i

printf("%4.0f ",x[i]);}

printf("\n");

printf("\nThe average

is: %f\n",fun(x));

printf("\nThe result :\n",fun(x));

for(i=0; i

",x[i]);

printf("\n");

}

解题思路:

第一处:求出N个数的平均值,所

以应填:N。

第二处:利用for循环语句,把数

组x中小于平均值的数,依次存放

到数组y中,其中位置由变量j来控

制,所以应填:j++。

第三处:i是while循环体的控制变

量,每做一次循环均要加1。

****************************

***********************

给定程序MODI1.C中函数fun 的

功能是:统计字符串中各元音字

母(即:A、E、I、O、U)的个

数。注意:字母不分大、小写。

例如:若输入:THIs is a boot,则

输出应该是:1、0、2、2、0。

请改正程序中的错误,使它能得

出正确的结果。

全国计算机等级考试二级C语言真题

2009年3月二级C语言笔试真题((1)—(10)每小题2分,(11)—(50)每题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)下列叙述中正确的是 A)栈是“先进先出”的线性表 B)队列是“先进先出”的线性表 C)循环队列是非线性结构 D)有序性表既可以采用顺序存储结构,也可以采用链式存储结构 (2)支持子程序调用的数据结构是 A)栈B)树C)队列D)二叉树 (3)某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是 A)10B)8C)6D)4 (4)下列排序方法中,最坏情况下比较次数最少的是 A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆排序 (5)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是 A)编译软件 B)操作系统 C)教务管理系统 D)汇编程序 (6)下面叙述中错误的是 A)软件测试的目的是发现错误并改正错误 B)对被调试的程序进行“错误定位”是程序调试的必要步骤 C)程序调试通常也称为Debug D)软件测试应严格执行测试计划,排除测试的随意性 (7)耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 A)提高耦合性降低内聚性有利于提高模块的独立性 B)降低耦合性提高内聚性有利于提高模块的独立性

C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度D)内聚性是指模块间互相连接的紧密程度 (8)数据库应用系统中的核心问题是 A)数据库设计 B)数据库系统设计 C)数据库维护 D)数据库管理员培训 (9)有两个关系R,S如下: 由关系R通过运算得到关系S,则所使用的运算为 A)选择B)投影C)插入D)连接 (10)将E-R图转换为关系模式时,实体和联系都可以表示为A)属性B)键C)关系D)域 (11)以下选项中合法的标识符是 A)1-1B)1—1C)-11D)1-- (12)若函数中有定义语句:intk;,则 A)系统将自动给k赋初值0 B)这时k中值无定义 C)系统将自动给k赋初值-1 D)这时k中无任何值 (13)以下选项中,能用作数据常量的是 A)o115B)0118C))115L (14)设有定义:intx=2;,以下表达式中,值不为6的是A)x*=x+1 B)x++,2*x C)x*=(1+x)

全国计算机二级C语言操作题题库

1.程序Cmody021.c输出如下所示图形: * *** ***** ******* ********* #include void main() { int i,j;for(i=1;i<=5;i++) { for(j=1;j<=5-i;j++)printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } } 2.程序Cmody032.c的功能是:输出201-300之间的所有素数,统计总个数。#include #include void main() { int num; printf("\n"); num=fun(); printf("\nThe total of prime is %d",num); getch(); } int fun() { int m,i,k,n=0; for(m=201;m<=300;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) /**/if(m/i==0)/**/ break; /**/if(i==k)/**/ { printf("%-4d",m); n++;

if(n%10==0)printf("\n"); } } return n; } 3. 程序Cmody041.c,其功能是统计输入字符串中小写英文字母的个数。如输入:abcdEFGHIJK123 输出:4 #include #include main() { char str1[128]; /**/int i,len,sum=0;/**/ gets(str1); len=strlen(str1); for(i=0;i='a'&&str1[i]<='z')/**/ sum++; } printf("%d\n",sum); getch(); } 4.程序Cmody051.c,其功能是统计输入字符串中大写英文字母的个数。如输入:abcDEFGH123 输出:5 #include #include main() { /**/char str1[128]/**/ int i,len,sum=0; printf("Please input a string:\n"); scanf("%s",str1); len=strlen(str1); for(i=0;i='A'&&str1[i]<='Z') /**/sum++;/**/

历年全国计算机二级C语言试题库完整

. . . . 参考 50道C 语言知识题 1.以下叙述中正确的是 A)用C 程序实现的算法必须要有输入和输出操作 B)用C 程序实现的算法可以没有输出但必须要有输入 C)用C 程序实现的算法可以没有输入但必须要有输出 D)用C 程序实现的算法可以既没有输入也没有输出 2.下列可用于C 语言用户标识符的一组是 A)void,define,WORDB)a3_3,_123,Car C)For,-abc,IFCaseD)2a,DO,sizeof 3.以下选项中可作为C 语言合法常量的是 A)-80B)-080C)-8e1.0D)-80.0e 4.若有语句:char*line[5];,以下叙述中正确的是 A)定义line 是一个数组,每个数组元素是一个基类型为char 为指针变量 B)定义line 是一个指针变量,该变量可以指向一个长度为5的字符型数组 C)定义line 是一个指针数组,语句中的*号称为间址运算符 D)定义line 是一个指向字符型函数的指针 5.以下定义语句中正确的是 A)inta=b=0;B)charA=65+1,b=′b′; 6.有以下程序段 charch;intk; ch=′a′; k=12; printf("%c,%d,",ch,ch,k);printf("k=%d\n",k); 已知字符a 的ASCII 码值为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 7.有以下程序 main() {inti,s=1; for(i=1;i<50;i++) if(!(i%5)&&!(i%3))s+=i; printf("%d\n",s);} 程序的输出结果是 A)409B)277C)1D)91 8.当变量c 的值不为2、4、6时,值也为"真"的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&&c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) 9.若变量已正确定义,有以下程序段

计算机二级C语言考试编程题题库

计算机c语言编程题库 1、求100之内自然数中最大的能被17整除的数。 void main() { int i; for(i=100;i>0;i--) if(i%17==0)break; printf("%d\n",i); } 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。 void main() { int a,b,c; for(a=1;a<=9;a++) { for(b=0;b<=9;b++) { for(c=1;c<=9;c++) if(a*100+b*10+c+c*100+b*10+a==1333) printf("%d,%d,%d\n",a,b,c); } } } 3、计算并输出200-400之间不能被3整除的整数的和。 void main() { int i,sum=0; for(i=200;i<=400;i++) if(i%3!=0) sum=sum+i; printf("%d\n",sum); } 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和。 void main() { int i,n=0,sum=0; int a[10]; printf(“请输入10个数:”);

for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) if(a[i]>=0) { sum=sum+a[i]; n++;} printf("非负个数是%d,sum=%d\n",n,sum); } 5、求100之内自然数中偶数之和。 void main() { int i,sum=0; for(i=0;i<=100;i++) if(i%2==0) sum=sum+i; printf("sum=%d\n",sum); } 6、输入5个数,求和并输出。要求编写求和的函数。 void main() { int b(int x[],int n); int sum=0; int a[5]; int i; printf("请输入5个数:"); for(i=0;i<5;i++) scanf("%d",&a[i]); sum=b(a,5); printf("sum=%d\n",sum); } int b(int x[],int n) { int i,sum=0; for(i=0;i<5;i++) sum=sum+x[i]; return sum; } 7、编程计算1*2*3+3*4*5+5*6*7+...+99*100*101的值。 void main() { int i,sum=0; for(i=1;i<=99;i=i+2) sum=sum+i*(i+1)*(i+2); printf("%d\n",sum); } 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。void main()

计算机二级c语言题库

一、选择题 (1) 下面叙述正确的是(C) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对 (2) 以下数据结构中不属于线性数据结构的是(C) A. 队列 B. 线性表 C. 二叉树 D. 栈 (3) 在一棵二叉树上第5层的结点数最多是(B) 注:由公式2k-1得 A. 8 B. 16 C. 32 D. 15 (4) 下面描述中,符合结构化程序设计风格的是(A) A. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序的执行效率 D. 不使用goto语句 (5) 下面概念中,不属于面向对象方法的是(D) 注:P55-58 A. 对象 B. 继承 C. 类 D. 过程调用 (6) 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是(B) A. 可行性分析 B. 需求分析 C. 详细设计 D. 程序编码 (7) 在软件开发中,下面任务不属于设计阶段的是(D) A. 数据结构设计 B. 给出系统模块结构 C. 定义模块算法 D. 定义需求并建立系统模型 (8) 数据库系统的核心是(B) A. 数据模型 B. 数据库管理系统 C. 软件工具 D. 数据库 (9) 下列叙述中正确的是(C) A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统 C.数据库技术的根本目标是要解决数据共享的问题 D.数据库系统中,数据的物理结构必须与逻辑结构一致 (10) 下列模式中,能够给出数据库物理存储结构与物理存取方法的是(A) 注:P108 A. 内模式 B. 外模式 C. 概念模式 D. 逻辑模式 (11) 算法的时间复杂度是指(C) A. 执行算法程序所需要的时间 B. 算法程序的长度 C. 算法执行过程中所需要的基本运算次数 D. 算法程序中的指令条数 (12) 算法的空间复杂度是指(D) A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中所需要的存储空间 (13) 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为(B) 注:利用公式n=n0+n1+n2、n0=n2+1和完全二叉数的特点可求出 A. 349 B. 350 C. 255 D. 351 (14) 结构化程序设计主要强调的是(B) A.程序的规模 B.程序的易读性 C.程序的执行效率 D.程序的可移植性 (15) 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是 (D) 注:即第一个阶段 A. 概要设计 B. 详细设计 C. 可行性分析 D. 需求分析 (16) 数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是(A) 注:P67

2016年计算机二级c语言题库及答案

2016年计算机二级c语言题库及答案 一、选择题(每小题1分,共40小题,共40分) 1.设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为( )。 A.20 B.0或35 C.15 D.16 2.下列关于栈的叙述中,正确的是( )。 A.栈底元素一定是最后入栈的元素 B.栈操作遵循先进后出的原则 C.栈顶元素一定是最先入栈的元素 D.以上三种说法都不对 3.下列链表中,其逻辑结构属于非线性结构的是( )0、 A.双向链表 B.带链的栈 C.二叉链表 D.循环链表 4.在关系数据库中,用来表示实体间联系的是( )。 A.网状结构 B.树状结构 C.属性 D.二维表 5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是( )。 A.1:m联系 B.m:n联系 C.1:1联系 D.m:l联系

6.右两个关系R和S如下: 则由关系R得到关系S的操作是( )。 A.自然连接 B.并 C.选择 D.投影 7.数据字典(DD)所定义的对象都包含于( )。 A.软件结构图 B.方框图 C.数据流图(DFD图) D.程序流程图 8.软件需求规格说明书的作用不包括( )。 A.软件设计的依据 B.软件可行性研究的依据 C.软件验收的依据 D.用户与开发人员对软件要做什么的共同理解 9.下面属于黑盒测试方法的是( )。 A.边界值分析 B.路径覆盖 C.语句覆盖 D.逻辑覆盖 10.下面不属于软件设计阶段任务的是( )。 A.制订软件确认测试计划 B.数据库设计 C.软件总体设计 D.算法设计 11.以下叙述中正确的是( )。 A.在C语言程序中,main函数必须放在其他函数的最前面 B.每个后缀为C的C语言源程序都可以单独进行编译 C.在C语言程序中,只有main函数才可单独进行编译

全国计算机二级C选择题试题库第34套

全国计算机二级C选择题题库第34套 1、下列叙述中错误的是 A) 数据结构中的数据元素不能是另一数据结构 B) 数据结构中的数据元素可以是另一数据结构 C) 空数据结构可以是线性结构也可以是非线性结构 D) 非空数据结构可以没有根结点 参考答案:A 数据元素是一个含义很广泛的概念,它是数据的"基本单位",在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。 满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。 空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构"图"就没有根结点。 故选A选项。 2、为了降低算法的空间复杂度,要求算法尽量采用原地工作(in place)。所谓原地工作是指 A) 执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化) B) 执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化 C) 执行算法时不使用额外空间 D) 执行算法时不使用任何存储空间 参考答案:A 算法的空间复杂度是指执行这个算法所需要的内存空间,包括输入数据所占的存储空

间、程序本身所占的存储空间、算法执行过程中所需要的额外空间。 如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。 故选A选项 3、某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为 A) m-1 B) m C) 1 D) 0 参考答案:A 循环队列长度为m,由初始状态为front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。 从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列 中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m 。该题中m-1

计算机二级c语言1-3章先择题(带答案)

1.第一章第二章 1.C语言的函数体由()括起来。 A)<> B){} C)[] D)() 2.下面叙述错误的是() A)一个C源程序可由一个或多个函数组成 B)构成C语言源程序的基本单位是语句 C)C源程序中大、小写字母是有区别的 D)若一条语句较长,可分写在下一行或多行上 3.下面叙述正确的是() A)每行最多只能写两条语句 B)main()函数必须位于源程序文件的开头C)所有语句都必须以分号;结束 D)程序中必须含有自定义函数 4.C源程序中main()函数的位置()。 A)必须位于程序的最前面 B)必须在自定义函数前面C)必须在系统库函数后面 D)可以在自定义函数后面 5.结构化程序设计不包括()。 A)最优化 B)自顶而下,逐步细化C)模块化设计 D)结构化编码 6.下面叙述中,()不是结构化程序设计中的三种基本结构之一。 A)数据结构B)选择结构C)循环结构D)顺序结构

2.第三章数据类型、运算符和表达式 1.(B )为非法的字符串常量 A)“056”B)‘123’C)““D)“case” 2.( B )为正确的用户标识符。 A)min-5 B)max_at C)3_row D)union 3.以下(D )是正确的变量名。 A) a.bee B) -p11 C) int D) p_11 4.以下(D )是正确的变量名。 A)5f B)if C) f.5 D)_f5 5.以下(D )是正确的常量。 A)E-5 B)1E5.1 C)'a12' D)32766L 6.以下(A )是不正确的字符串常量。 A)'abc' B)"12'12" C)"0" D)" " 7.以下(BC )是正确的字符常量。 A)"c" B)'\\' C)'W' D)"\32a" 8.char型变量存放的是(A)。 A)ASCII代码值 B)字符本身C)十进制代码值 D)内码值 9.( B)为合法的常量。 A)5,236 B) 1.23E+8 C)‘b_k’D) 3.21E-6.5 10.(D)为正确的字符常量 A)‘\084’B)‘bcd’C)‘165’D)‘@’ 11.若有定义:int b=-15;则(D)为正确的赋值表达式。 A)*b=6 B)b=*5 C)b+10=-5 D)b+=b*3 12.若有定义:int x=2;则正确的赋值表达式是(A )。 A)a-=(a*3) B)double(-a) C)a*3 D)a*4=3 13.若有定义:float x=2,y;int a=3 ;语句y=1*(x+a)/3;运行后,y的值为(B)。 A)2.0 B)1.666667 C)1.0 D)0 14.若有定义:int a,b=5;语句a=(b/2)+b%2;运行后,a的值为(A ) A) 3 B) 4 C)0 D)2 15.下面叙述正确的是(B) A)2/3与2%3等价 B)5/(int)4.0与5/4等价C)++2与--3等价 D)++2与3等价 16.若有定义:int a,b=6;语句a=--b;运行后,a、b的值分别是(C)。 A) 6 6 B) 5 6 C) 5 5 D) 6 5 17.若有定义:int i=3,j=6;则表达式(--i)*(j++)的值为( D)。

(完整版)历年全国计算机二级C语言题库

50道C语言知识题 1.以下叙述中正确的是 A)用C程序实现的算法必须要有输入和输出操作 B)用C程序实现的算法可以没有输出但必须要有输入 C)用C程序实现的算法可以没有输入但必须要有输出 D)用C程序实现的算法可以既没有输入也没有输出 2.下列可用于C语言用户标识符的一组是 A)void,define,WORDB)a3_3,_123,Car C)For,-abc,IFCaseD)2a,DO,sizeof 3.以下选项中可作为C语言合法常量的是 A)-80B)-080C)-8e1.0D)-80.0e 4.若有语句:char*line[5];,以下叙述中正确的是 A)定义line是一个数组,每个数组元素是一个基类型为char为指针变量 B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组 C)定义line是一个指针数组,语句中的*号称为间址运算符 D)定义line是一个指向字符型函数的指针 5.以下定义语句中正确的是 A)inta=b=0;B)charA=65+1,b=′b′; C)floata=1,*b=&a,*c=&b;D)doublea=00;b=1.1; 6.有以下程序段 charch;intk; ch=′a′; k=12; printf("%c,%d,",ch,ch,k);printf("k=%d\n",k); 已知字符a的ASCII码值为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 7.有以下程序 main() {inti,s=1; for(i=1;i<50;i++) if(!(i%5)&&!(i%3))s+=i; printf("%d\n",s);} 程序的输出结果是 A)409B)277C)1D)91 8.当变量c的值不为2、4、6时,值也为"真"的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&&c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) 9.若变量已正确定义,有以下程序段 inta=3,b=5,c=7;

全国计算机等级考试二级C语言真题库之选择题(15)

全国计算机等级考试等级考试真题库之选择题(15) 1.下列链表中,其逻辑结构属于非线性结构的是 A) 二叉链表 B) 循环链表 C) 双向链表 D) 带链的栈 参考答案:A 【解析】在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。答案为A选项。 2.设循环队列的存储空间为Q(1: 35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为 A) 15 B) 16 C) 20 D) 0或35 参考答案:D 【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。答案为D选项。 3.下列关于栈的叙述中,正确的是 A) 栈底元素一定是最后入栈的元素 B) 栈顶元素一定是最先入栈的元素 C) 栈操作遵循先进后出的原则 D) 以上说法均错误 参考答案:C 【解析】栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表,或"后进先出"表,所以选择C。 4.在关系数据库中,用来表示实体间联系的是 A) 属性 B) 二维表 C) 网状结构 D) 树状结构 参考答案:B

历年全国计算机等级考试-二级C语言上机考试题库及答案

1.填空 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号,姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。 请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.c中 不得增行或删行,也不得更改程序的结构! void check(); /**********found**********/ int fun(___1___ *std) { /**********found**********/ ___2___ *fp; int i; if((fp=fopen("myfile5.dat","wb"))==NULL) return(0); printf("\nOutput data to file !\n"); for(i=0; i

最新福建省计算机等级考试二级C语言考试题库

改错题 #include #include void main() { char s1[100], s2[100]; int i,s_len; printf("Please input string: \n"); gets(s1); s_len = /**/ s1 /**/; for(i=0; i= '0' && s1[i] <= '7') s2[i] = s1[i] + 2; else if(s1[i] == '8'/**/ && /**/s1[i]=='9') s2[i] = s1[i]-8; else s2[i] = s1[i]; } /**/ s2[i+1] /**/ = '\0'; puts(s2); getch(); }

#include #include int prime( int x ) { int i, mark=1 ; double k; /**/ i=1 /**/; k=(int)sqrt((double)x); while (i<=k) { if(x%i==0) {/**/ i=k+1; /**/ break; } i++; } return (mark); } void main() { int a; printf("Input a number: "); scanf("%d",&a); if(/**/ !prime(a) /**/) printf("%d is a prime number.\n", a); else printf("It's not.\n"); getch(); }

2013计算机二级考试C语言试题及答案第一套

一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。) (1)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为 A)PAD图B)N-S图C)结构图D)数据流图 (2)结构化程序设计主要强调的是 A)程序的规模B)程序的效率C)程序设计语言的先进性D)程序易读性 (3)为了使模块尽可能独立,要求 A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (4)需求分析阶段的任务是确定 A)软件开发方法B)软件开发工具C)软件开发费用D)软件系统功能 (5)算法的有穷性是指 A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用 (6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是 A)快速排序B)冒泡排序C)直接插入排序D)堆排序 (7)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是 A)e3,e1,e4,e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D) 任意顺序 (8)将E-R图转换到关系模式时,实体与联系都可以表示成 A)属性B)关系C)键D)域 (9)有三个关系R、S和T如下: R B C D a 0 k1 b 1 n1 S B C D f 3 h2 a 0 k1 n 2 x1 T B C D a 0 k1 由关系R和S通过运算得到关系T,则所使用的运算为 A)并B)自然连接C)笛卡尔积D)交 (10)下列有关数据库的描述,正确的是 A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变 C)关系中的每一列称为元组,一个元组就是一个字段

最新全国计算机等级考试二级C语言-题库(全)

2016年3月份全国计算机等级考试二级C语言题库(全)一、选择题 在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为 A)PAD图B)N-S图C)结构图D)数据流图 (2)结构化程序设计主要强调的是 A)程序的规模B)程序的效率C)程序设计语言的先进性D)程序易读性 (3)为了使模块尽可能独立,要求 A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (4)需求分析阶段的任务是确定 A)软件开发方法B)软件开发工具C)软件开发费用D)软件系统功能 (5)算法的有穷性是指 A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用 (6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是 A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是 A)e3,e1,e4,e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D) 任意顺序(8)将E-R图转换到关系模式时,实体与联系都可以表示成

A)属性B)关系C)键D)域 (9)有三个关系R、S和T如下: R B C D a 0 k1 b 1 n1 S B C D f 3 h2 a 0 k1 n 2 x1 T B C D a 0 k1 由关系R和S通过运算得到关系T,则所使用的运算为 A)并B)自然连接C)笛卡尔积D)交 (10)下列有关数据库的描述,正确的是 A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变 C)关系中的每一行称为元组,每一个列称为属性 D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 (11)以下叙述中正确的是 A)用C程序实现的算法必须要有输入和输出操作 B)用C程序实现的算法可以没有输出但必须要有输入 C)用C程序实现的算法可以没有输入但必须要有输出

计算机二级C语言必背题

站长提醒广大考生:下面的138道题目,在二级考试中命中率极高。 一、选择题 (1) 下面叙述正确的是(C) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对 (2) 以下数据结构中不属于线性数据结构的是(C) A. 队列 B. 线性表 C. 二叉树 D. 栈 (3) 在一棵二叉树上第5层的结点数最多是(B) 注:由公式2k-1得 A. 8 B. 16 C. 32 D. 15 (4) 下面描述中,符合结构化程序设计风格的是(A) A. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序的执行效率 D. 不使用goto语句 (5) 下面概念中,不属于面向对象方法的是 (D) 注:P55-58 A. 对象 B. 继承 C. 类 D. 过程调用 (6) 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是(B) A. 可行性分析 B. 需求分析 C. 详细设计 D. 程序编码 (7) 在软件开发中,下面任务不属于设计阶段的是(D) A. 数据结构设计 B. 给出系统模块结构 C. 定义模块算法 D. 定义需求并建立系统模型 (8) 数据库系统的核心是(B) A. 数据模型 B. 数据库管理系统 C. 软件工具 D. 数据库 (9) 下列叙述中正确的是(C) A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统 C.数据库技术的根本目标是要解决数据共享的问题 D.数据库系统中,数据的物理结构必须与逻辑结构一致 (10) 下列模式中,能够给出数据库物理存储结构与物理存取方法的是(A) 注:P108 A. 内模式 B. 外模式 C. 概念模式 D. 逻辑模式 (11) 算法的时间复杂度是指(C) A. 执行算法程序所需要的时间 B. 算法程序的长度 C. 算法执行过程中所需要的基本运算次数 D. 算法程序中的指令条数 (12) 算法的空间复杂度是指(D)

全国计算机等级考试二级C语言真题题库2+2014年3月

全国计算机等级考试二级C语言真题题库2 2014年3月 (总分43, 做题时间120分钟) 一、选择题(每小题1分,共40分) 1. 下列叙述中正确的是()。 A 每一个节点有两个指针域的链表一定是非线性结构 B 所有节点的指针域都为非空的链表一定是非线性结构 C 循环链表是循环队列的链式存储结构 D 线性结构的存储节点也可以有多个指针 答案:D [解析]一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有—个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。双向链表节点具有两个指针域,属于线性结构,故A选项错误。循环链表所有节点的指针域都为非空,属于线性结构,故B选项错误。循环链表是链表,循环队列属于队列,队列只能在队尾入队,在排头退队,链表可以在任何位置插入、删除,故C选项错误。双向链表节点具有多个指针域,故D选项正确。 2. 使用白盒测试方法时,设计测试用例应根据()。 A 程序的内部逻辑 B 程序的复杂结构 C 程序的功能 D 使用说明书 答案:A [解析]白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试,故A选项正确。

3. 在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗,则实体医生和患者之间的联系是()。 A 多对多 B 多对一 C 一对多 D 一对一 答案:A [解析]一般来说,实体集之间必须通过联系来建立连接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,故A选项正确。 4. 设序列长度为n,在最坏情况下,时间复杂度为O(log2n)的算法是()。 A 二分法查找 B 顺序查找 C 分块查找 D 哈希查找 答案:A [解析]对长度为n的线性表排序,最坏情况下时间复杂度,二分法查找为O(log2n);顺序查找法为O(n);分块查找时间复杂度与分块规则有关;哈希查找时间复杂度为O(1),因其通过计算HashCode来定位元素位置,所以只需一次即可。故正确答案为A选项。 5. 设数据集合为D={1,3,5,7,9},D上的关系为R,下列数据结构B=(D,R)中为非线性结构的是()。 A R={ (5,1),(7,9),(1,7),(9,3)} B R={ (9,7),(1,3),(7,1),(3,5)} C R={ (1,9),(9,7),(7,5),(5,3)}

最新全国计算机等级考试二级C语言真题库之选择题(11)

全国计算机等级考试等级考试真题库之选择题(11) 1.下列叙述中正确的是 A) 一个算法的空间复杂度大,则其时间复杂度也必定大 B) 一个算法的空间复杂度大,则其时间复杂度必定小 C) 一个算法的时间复杂度大,则其空间复杂度必定小 D) 算法的时间复杂度与空间复杂度没有直接关系 参考答案:D 【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。 2.下列叙述中正确的是 A) 循环队列中的元素个数随队头指针与队尾指针的变化而动态变化 B) 循环队列中的元素个数随队头指针的变化而动态变化 C) 循环队列中的元素个数随队尾指针的变化而动态变化 D) 以上说法都不对 参考答案:A 【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。 3.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为 A) 219 B) 229 C) 230 D) 231 参考答案:B 【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。 4.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为 A) 9 B) 10 C) 45 D) 90 参考答案:C 【解析】冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。 5.构成计算机软件的是 A) 源代码 B) 程序和数据 C) 程序和文档

2020年全国计算机等级考试二级c语言上机精选题库(共60套)

2020年全国计算机等级考试二级c语言上机精选题库(共60套) 第1套题 一、填空题 请补充main函数,该函数的功能是:计算每个学生科目的平均分,并把结果保存在数组bb中。 例如,当score[N][M]={{78.5,84,83,65,63},{88,91.5,89,93,95},{72.5,65,56,75,77 }}时,三个学生的平均分为:74.7 91.3 69.1。 仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。 #include #define N 3 #define M 5 main() { int i, j; static float score[N][M] = { {78.5, 84, 83, 65, 63},

{88, 91.5, 89, 93, 95}, {72.5, 65, 56, 75, 77} }; float bb[N]; for (i=0; i

相关文档
相关文档 最新文档