新增真考题库试题
第1套 新增真考题库试题
一、选择题(每小题1分,共40分)
(1)下列叙述中正确的是( )。
A)解决同一个问题的不同算法的时间复杂度一般是不同的
B)解决同一个问题的不同算法的时间复杂度必定是相同的
C)对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同
D)对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同
(2)下列处理中与队列有关的是( )。
A)操作系统中的作业调度 B)执行程序中的过程调用
C)执行程序中的循环控制 D)二叉树的遍历
(3)设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=1。现又要将一个元素进栈,栈顶指针top值变为( )。
A)发生栈满的错误 B)2
C)m D)0
(4)设二叉树共有150 个结点,其中度为1的结点有10 个,则该二叉树中的叶子结点数为( )。
A)71 B)70
C)69 D)不可能有这样的二叉树
(5)非空循环链表所表示的数据结构( )。
A)有根结点也有叶子结点
B)没有根结点但有叶子结点
C)有根结点但没有叶子结点
D)没有根结点也没有叶子结点
(6)设二叉树中共有31个结点,其中的结点值互不相同。如果该二叉树的后序序列与中序序列相同,则该二叉树的深度为( )。
A)31 B)16 C)17 D)5
(7)在最坏情况下,堆排序的时间复杂度是( )。
A)O(log2n) B)O(nlog2n) C)O(n2) D)O(n1.5)
(8)软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是( )。
A)学籍管理系统 B)ERP系统
C)C编译程序 D)CAI软件
(9)存储在计算机内有结构的数据集合是( )。
A)数据库 B)数据库系统
C)数据库管理系统 D)数据结构
(10)在数据库技术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、存储级和( )。
A)概念级 B)外部级 C)管理员级 D)内部级
(11)以下叙述错误的是( )。
A)一个算法所包含的操作步骤应该是有限的
B)任何能通过编译和运行的算法都一定能得到所期望的结果
C)算法中每一条指令必须有确切的含义
D)算法可以用各种描述方法来进行描述
(12)以下是正确的C语言实型常量的是( )。
A).e-1 B)e-1 C) -1e D)1e-1
(13)以下叙述正确的是( )。
A)在C语言中分号是语句的组成部分
B)C语言程序由C语句组成,可以省略main函数
C)分号是C语句之间的分隔符
D)所有程序行都必须用分号结束
(14)若有定义:double a,b,c;能正确给a,b,c输入数据的语句是( )。
A)scanf("% lf% lf% lf"&a,&b,&c);
B)scanf("% f% f% f",&a,&b,&c);
C)scanf("% lf% lf% lf",a,b,c);
D)scanf("% lf% lf% lf",&a,&b,&c);
(15)有以下程序:
#include<stdio.h>
main()
{int x=0x9;
printf("% c\n",′A′+x);
}
程序运行后的输出结果是( )。
A)I B)J C)K D)H
(16)设有定义:double x=5.16894;,则语句printf("% lf\n",(int)(x*1000+0.5)/1000.0);的输出结果是( )。
A)5.16900
B)5.16800
C)0.00000
D)输出格式说明符与输出项不匹配,产生错误信息
(17)有以下程序:
#include<stdio.h>
main()
{ int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf("% d,% d,% d,% d\n",a,b,c,d);
}
程序运行后的输出结果是( )。
A)编译有错 B)0,0,0,3C)1,1,2,0D)0,1,2,0
(18)有以下程序:
#include<stdio.h>
main()
{ int a= -2,b=2;
for(;++a&&--b;)
;
printf("% d,% d\n",a,b);
}
程序运行后的输出结果是( )。
A)0,1 B)0,0 C)1,-1 D)0,2
(19)有以下程序:
#include <stdio.h>
main()
{ int t;
scanf("% d",&t);
if(t++<6)
printf("% d\n",t);
else printf("% d\n",t--);
printf("\n");
}
执行时输入:6<回车>,则输出结果是( )。
A)6 B)8 C)7 D)5
(20)有以下程序:
#include <stdio.h>
main()
{ char ch = ′D′;
while(ch > ′A′)
{ ch --;
putchar(ch);
if(ch == ′A′)break;
putchar(ch+1);
}
}
程序运行后的输出结果是( )。
A)CB B)BCA C)CCBB D)CDBCA
(21)以下程序拟实现计算s=1+2*2+3*3+…+n*n,直到s>1000为止。
#include <stdio.h>
main()
{ int s,n;
s=1;
n=1;
do
{ n=n+1;s=s+n*n;}
while(s>1000);
printf("s=% d\n",s);
}
程序运行后,不能得到正确结果,以下修改方案正确的是( )。
A)把while(s>1000);改为while(s<=1000);
B)把s=1;改为s=0;
C)把n=1;改为n=0;
D)把n=n+1;改为n=n*n;
(22)有以下程序:
#include <stdio.h>
main()
{ int m,n;
scanf("% d% d",&m,&n);
while(m!=n)
{ while(m>n){ m=m-n;}
while(n>m){ n=n-m;}
}
printf("% d\n",m);}
该程序的功能是( )。
A)计算m和n的最小公倍数
B)计算m和n的最大公约数
C)计算m和n的差值
D)找出m和n中的较大值
(23)有以下程序:
#include <stdio.h>
int add(int a,int b){ return(a+b);}
main()
{ int k,(*f)(),a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是( )。
A)k=f(a,b); B)k=add(a,b);
C)k=(*f)(a,b); D)k=*f(a,b);
(24)若有定义语句:
doublex,y,*px,*py;
执行
px=&x;py=&y;
正确的输入语句是( )。
A)scanf("% lf% lf",x,y);
B)scanf("% f% f"&x,&y);
C)scanf("% f% f",x,y);
D)scanf("% lf% le",px,py);
(25)以下定义数组的语句中错误的是( )。
A)int num[][3]={ {1,2},3,4,5,6 };
B)int num[2][4]={ {1,2},{3,4},{5,6} };
C)int num[]={ 1,2,3,4,5,6 };
D)int num[][4]={1,2,3,4,5,6};
(26)有以下程序:
#include <stdio.h>
void fun(int a[],int n,int flag)
{ int i=0,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(flag)
{ if(a[i]< a[j])
{ t = a[i];
a[i]= a[j];
a[j]= t;}
}
else
{ if(a[i]> a[j])
{ t = a[i];
a[i]= a[j];
a[j]= t;}
}
}
main()
{ int c[10]={ 7,9,10,8,3,5,1,6,2,4 },i;
fun(c,4,1);
fun(c+4,6,0);
for(i=0;i<10;i++)
printf("% d,",c[i]);
printf("\n");
}
程序运行后的输出结果是( )。
A)7,8,9,10,6,5,4,3,2,1,B)10,9,8,7,6,5,4,3,2,1,
C)10,9,8,7,1,2,3,4,5,6,D)1,2,3,4,5,6,7,8,9,10,
(27)有以下程序:
#include <stdio.h>
main()
{ int i,k=0,a[10];
for(i=0;i<10;i++)a[i]=i;
for(i=0;i<4;i++)k+=a[i]+ i;
printf("% d\n",k);
}
程序运行后的输出结果是( )。
A)10 B)16 C)6 D)12
(28)有以下程序:
#include <stdio.h>
int new_div(double a,double b)
{ return a / b + 0.5;}
main()
{ printf("% d",new_div(7.8,3.1));}
程序运行后的输出结果是( )。
A)1 B)2 C)3 D)0
(29)函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,函数不完整,具体如下。
int fun(int *a,int n)
{ int *p,*s;
for(p=a,s=a;p-a<n;p++)
if(__________)s=p;
return *s;
}
在if语句的下画线处应填入的选项是( )。
A)p>s B)*p>*s
C)a[p] >a[s] D)p-a>p-s
(30)有以下程序:
#include<stdio.h>
#include<string.h>
main()
{ charstr[][20]= { " One* World"," One*
Dream!"},*p=str[1];
printf("% d,",strlen(p));printf("% s\n",p);
}
程序运行后的输出结果是( )。
A)10,One*Dream! B)9,One*Dream!
C)9,One*World D)10,One*World
(31)有以下程序:
#include <stdio.h>
#include <string.h>
main()
{ int i, len;
char b[]="Welcome you to Beijing!";
len = strlen(b);
for(i=0;i<len;i++)
if(b[i]== ′′)
{ strcpy(b,b+i+1);
i=0;
}
printf("% s\n",b);}
程序运行后的输出结果是( )。
A)Beijing! B)toBeijing!
C)WelcomeyoutoBeijing! D)youtoBeijing!
(32)有以下程序:
#include <stdio.h>
int f(int k)
{ static int n=0;
int m=0;
n++;m++;k++;
return n+m+k;
}
main()
{ int k;
for(k=0;k<2;k++)printf("% d,",f(k));
printf("\n");
}
程序运行后的输出结果是( )。
A)3,5, B)3,6, C)3,7, D)0,3,
(33)有以下程序:
#include <stdio.h>
int m=12;
int fun(int x,int y)
{ static int m=3;
m= x * y - m;
return(m);
}
main()
{ int a=7,b=5;
m=fun(a,b)/m;
printf("% d\n",fun(a,b)/m);
}
程序运行后的输出结果是( )。
A)2 B)1 C)3 D)0
(34)有以下程序:
#include<stdio.h>
#include<string.h>
main()
{ chara[]="TEXT",*b=" ++",c[3]="1";
printf("% d,% d,",strlen(a),sizeof(a));
printf("% d,% d,",strlen(b),sizeof(b));
printf("% d,% d,\n",strlen(c),sizeof(c));
}
程序运行后的输出结果是( )。
A)4,5,2,4,1,3, B)4,4,2,2,1,1,
C)5,5,3,3,2,2, D)4,4,2,2,1,3
(35)以下与存储类别有关的四组说明符中,全部属于静态类的一组是( )。
A)extern和static B)auto和static
C)register和static D)register和extern
(36)为了建立如图所示的存储结构(即每个结点含两个域, data是数据域,next是指向结点的指针域),则在画线处应填入的选项是( )。
structlink{chardata;______}node;
A)structlink*next; B)linknext;
C)link*next; D)structlinknext;
(37)有以下程序:
#include <stdio.h>
#include <string.h>
typedef struct stu {
char name[10];
char gender;
int score;
} STU;
void f(char name[10],char gender,int score)
{ strcpy(name,"Sun");
gender =′m′;
score = 370;
}
main()
{ STU b = {"Zhao",′m′,290},a = {"Qian",′f′,
350};
b=a;
printf("% s,% c,% d,",b.name,b.gender,b.
score);
f(b.name,b.gender,b.score);
printf("% s,% c,% d\n",b.name,b.gender,b.
score);
}
程序运行后的输出结果是( )。
A)Qian,f,350,Sun,f,350 B)Qian,f,350,Qian,f,350
C)Qian,f,350,Sun,m,370 D)Zhao,m,290,Sun,m,370
(38)有以下程序:
#include <stdio.h>
main()
{ char a=3,b=6,c;
c=(a^b)< <2;
printf("% d \n",c);
}
程序运行后的输出结果是( )。
A)5 B)1 C)20 D)18
(39)以下叙述正确的是( )。
A)表达式sizeof(FILE*)= =sizeof(int*)的值为真
B)文件指针的值是一个整数,它的值一定小于文件字节数
C)文件指针的值是所指文件的当前读取位置
D)使用fscanf函数可以向任意类型的文件中写入任意数量的字符
(40)函数fgetc的功能是从指定文件中读入一个字符,以下与其功能完全相同的函数是( )。
A)fread B)fscanf C)fgets D)getc
二、程序填空题(共18分)
给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:源程序存放在BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
void fun(int *Px,int *Py){
/**********found**********/
int 【1】;
scanf("%d",&k);
/**********found**********/
while 【2】
{if(k>0)a++;
if(k<0)b++;
/**********found**********/
【3】;
}
*Px=a;*Py=b;
}
main()
{int x,y;
fun(&x,&y);
Printf("x=%d y=%d\n",x,y);
}
三、程序修改题(共18分)
给定程序modi1.c的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
tyPedef struct list
{int data;
struct list *next;
}LIST;
int fun(LIST *h)
{LIST *P;
/**********found**********/
int t;
P=h;
/**********found**********/
while(*P)
{
/**********found**********/
t=t+P.data;
P=(*P).next;
}
return t;
}
main()
{LIST a,b,c,*h;
a.data =34;b.data =51;c.data =87;c.
next='\0';
h=&a;a.next=&b;b.next=&c;
Printf("总和 = %d\n",fun(h));
}
四、程序设计题(共24分)
请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。
注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <stdlib.h>
#define M 14
void NoNo();
void fun(char(*t)[M],int*a,int*c){}
void get(char(*s)[M])
{int i,j; for(i=0;i<M;i++)
{ for(j=0;j<M;j++)
{ s[i][j]=65+rand()%12;Printf("% c
",s[i][j]);}
Printf("\n");
}
}
main()
{char a[M][M];
int x,y;
get(a);
fun(a,&x,&y);
Printf("A = %d C = %d\n",x,y);
NoNo();
}
void NoNo()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *fP,*wf;
int i,j,x,y;
char a[M][M];
fP = foPen("c:\test\in.dat","r");
wf = foPen("c:\test\out.dat","w");
for(i=0;i<M;i++)
{for(j=0;j<M;j++)
{fscanf(fP,"% c",&a[i][j]);}
}
fun(a,&x,&y);
fPrintf(wf,"A=%d\n",x);
fPrintf(wf,"C=%d\n",y);
fclose(fP);
fclose(wf);
}
第2套 新增真考题库试题
一、选择题(每小题1分,共40分)
(1)下列叙述中错误的是( )。
A)数据结构中的数据元素不能是另一数据结构
B)数据结构中的数据元素可以是另一数据结构
C)空数据结构可以是线性结构也可以是非线性结构
D)非空数据结构可以没有根结点
(2)为了降低算法的空间复杂度,要求算法尽量采用原地工作(in place)。所谓原地工作是指( )。
A)执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化)
B)执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化
C)执行算法时不使用额外空间
D)执行算法时不使用任何存储空间
(3)某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear = m - 1,则该循环队列中的元素个数为( )。
A) m-1 B) m C) 1 D) 0
(4)某棵树只有度为3的结点和叶子结点,其中度为3的结点有8个,则该树中的叶子结点数为( )。
A) 15 B) 16
C) 17 D) 不存在这样的树
(5)某二叉树共有530个结点,其中度为2的结点有250个,则度为1的结点数为( )。
A) 29 B) 30 C) 249 D) 251
(6)若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是( )。
A) 前序序列 B) 中序序列
C) 后序序列 D)以上说法均可以
(7)将C语言的整数设为整数类I,则下面属于类I实例的是( )。
A) -103 B) 10E3 C) 10.3 D) “0103”
(8)下列叙述中正确的是( )。
A) 软件是程序、数据和文档 B) 软件是程序和数据
C) 软件是算法和数据结构 D) 软件是算法和程序
(9)软件生命周期是指( )。
A)软件的定义和开发阶段
B)软件的需求分析、设计与实现阶段
C)软件的开发阶段
D)软件产品从提出、实现、使用维护到停止使用退役的过程
(10)下列叙述中正确的是( )。
A)数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能
B)数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件
C)数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少
D)数据库系统独立性较差,而文件系统独立性较好
(11)关于程序模块化,以下叙述错误的是( )。
A)程序模块化可以提高程序运行的效率
B)程序模块化可以提高程序编制的效率
C)程序模块化可以提高程序代码复用率
D)程序模块化可以提高调试程序的效率
(12)以下是正确C语言标识符的是( )。
A) &3 B) #3 C) _3 D) -3
(13)若有定义:int a,b,c;,则以下程序段的输出结果是( )。
a=11;b=3;c=0;
printf("% d\n",c=(a/b,a% b));
A) 2 B) 0 C) 3 D) 1
(14)以下选项中合法的C语言常量是( )。
A) ′C-STR′ B) 2014.1
C) "\1.0 D) 2EK
(15)设有定义:int x,y,z;,且各变量已赋正整数值,则以下能正确表示代数式“”的C语言表达式是( )。
A) 1.0/x/y/z B) 1/x*y*z
C) 1/(x*y*z) D) 1/x/y/(double)z
(16)有以下程序:
#include <stdio.h>
main( )
{ char a,b,c,d;
scanf("% c% c",&a,&b);
c=getchar();
d=getchar();
printf("% c% c% c% c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1 列开始,<CR>代表回车,注意:回车也是一个字符):
12<CR>
34<CR>
则输出结果是( )。
A)12
3
B)12
C)1234
D)12
34
(17)有以下程序:
#include <stdio.h>
main()
{ int a,b;
for(a=0;a<3;a++)
{ scanf("% d",&b);
switch(b)
{ default:printf("% d,",b+1);continue;
case 1:printf("% d,",b+1);
case 2:printf("% d,",b+1);continue;
}
}
}
执行时输入:123<回车>,则输出结果是( )。
A) 2,2,3,4,4,4, B) 2,3,4,
C) 2,2,3,4, D) 2,3,3,4,5,6,
(18)有以下程序:
#include <stdio.h>
#include <math.h>
main()
{ double x,y,z;
scanf("% lf% lf",&x,&y);
z= x/ y;
while(1)
if(fabs(z)> 1.0)
{ x=y;y=x;z=x/y;}
else break;
printf("y=% f \n",y);
}
执行时输入:3.62.4<回车>,则输出结果是( )。
A) 2.400000 B) 1.500000
C) 1.600000 D) 2.000000
(19)有以下程序:
#include <stdio.h>
main()
{ int i;
char c;
scanf("% c",&c);
for(i=0;i<5;i++)
{
if(i > c)continue;
printf("% d,",i);
}
}
执行时输入:0<回车>后,则输出结果是( )。
A) 5, B) 0,0,0,0,0,
C) 0,1,2,3,4, D) 0,1,
(20)以下程序拟实现计算sum=1+1/2+1/3+ … +1/50。
#include <stdio.h>
main()
{ int i;double sum;
sum=1.0;
i=1;
do
{ i++;sum += 1/i;}
while(i<50);
printf("sum=% lf\n",sum);
}
程序运行后,不能得到正确结果,出现问题的语句是( )。
A) sum += 1/i; B) while(i<50);
C) sum = 1.0; D) i++;
(21)若有定义语句:
double a,*p=&a;
以下叙述中错误的是( )。
A)定义语句中的 * 号是一个间址运算符
B)定义语句中的 * 号是一个说明符
C)定义语句中的p只能存放double类型变量的地址
D)定义语句中 *p=&a 把变量a的地址作为初值赋给指针变量p
(22)关于函数返回值,以下叙述正确的是( )。
A)函数可以返回整个结构体,即使结构体中有数组
B)函数只能返回基本数据类型的数值或指针
C)函数不可以返回一个数组
D)函数不能没有返回值
(23)有以下程序:
#include <stdio.h>
int fun(int *b,int n)
{ int i, r=1;
for(i=0;i< =n;i++)r=r*b[i];
return r;
}
main()
{ int x,a[]={2,3,4,5,6,7,8,9 };
x=fun(a,3);
printf("% d\n",x);
}
程序运行后的输出结果是( )。
A) 24 B) 720 C) 120 D) 6
(24)若有语句:int a[3][4],(*p)[4];p = a;,则以下选项中叙述错误的是( )。
A)系统将开辟一个名为p的二维数组,p[0][0]中的值即为a[0][0]中的值
B)p+1代表a[1][0]的地址
C)p中将存放 a 数组的首地址
D)p+2代表 a 数组最后一行的首地址
(25)有以下程序:
#include <stdio.h>void change(char* array,int len)
{ for(len--;len> =0;len--)
array[len]+= 1;
}
main()
{ int i;
char array[5]= "ABCD";
change(array,4);
for(i=0;i<4;i++)
printf("% c,",array[i]);
}
程序运行后的输出结果是( )。
A) B,C,D,E, B) A,B,C,D,
C) C,D,E,F, D) B,D,F,H,
(26)设有以下程序段:
float a[8]= {1.0,2.0};
int b[1]= {0};
char c[]= {"A","B"};
char d = = "1";
以下叙述正确的是( )。
A)只有变量c的定义是合法的
B)只有变量a,b,c的定义是完全合法的
C)所有变量的定义都是完全合法的
D)只有变量a,b的定义是完全合法的
(27)有以下程序:
#include <stdio.h>
main()
{ int a[4],p,x,i;
for(i=3;i>0;i--)a[i-1]=i*2-1;
scanf("% d",&x);
i=0;
while(a[i]<x)i++;
p=i;
for(i=3;i>p;i--)a[i]=a[i-1];
a[p]=x;
for(i=0;i<4;i++)printf("% 3d",a[i]);
printf("\\n");
}
执行时输入:2<回车>,则输出结果是( )。
A) 1 2 3 4 B) 5 4 3 1
C) 1 2 3 5 D) 3 2 1 4
(28)有以下程序:
#include <stdio.h>
int fun(int a[],int n,int x)
{ int *p=a;
while(p<a+n && *p!=x)p++;
if(p<a+n)return p-a;
else return -1;
}
main()
{ int a[10] ={1,2,3,4,5,6,7,8,9,10};
printf("% d\\n",fun(a,10,10));
}
程序运行后的输出结果是( )。
A) 9 B) -1 C) 10 D) 0
(29)有以下程序:
#include <stdio.h>
main()
{ char w[20], a[5][10] ={"abcde", "fghij", "
klmno","pqrst","uvwxy"};
int i;
for(i=0;i<5;i++)
w[i]= a[i][i];
w[5]= ′\0′;
printf("% s\n",w);
}
程序运行后的输出结果是( )。
A) ejoty B) afkpu C) agmsy D) eimqu
(30)语句 printf("% d\n",strlen(" \t\" \ \ \n\′\065\08AB"));的输出结果是( )。
A) 6 B) 7 C) 8 D) 9
(31)有以下程序:
#include <stdio.h>
#include <string.h>
void fun(char *s,int m1,int m2)
{ char t,*p;
p=s + m1;s= s+m2;
while(s<p)
{ t=*s;*s=*p;*p=t;
s++;p--;
}
}
main()
{ char ss[10]="012345678";
int n=6;
fun(ss,0,n-1);
fun(ss,9,n);
fun(ss,0,9);
printf("% s\n",ss);
}
程序运行后的输出结果是( )。
A) 012345 B) 876543210
C) 876543 D) 012345678
(32)有以下程序:
#include <stdio.h>
int m=1,n=2;
void sub1(int m,int n)
{ m+=2;n++;}
void sub2()
{ m++;n+=2;}
main()
{ printf("% d,% d,",m,n);
sub1(4,5);
printf("% d,% d,",m,n);
sub2();
printf("% d,% d\n",m,n);
}
程序运行后的输出结果是( )。
A) 1,2,1,2,2,4 B) 1,2,6,6,7,8
C) 1,2,2,4,2,4 D) 1,2,6,6,2,4
(33)有以下程序:
#include <ctype.h>
#include <stdio.h>
long fun(char s[])
{ long n;int sign;
for(;isspace(*s);s++);
sign=(*s= =′-′)?-1:1;
if(*s= =′+′ || *s= =′-′)s++;
for(n=0;isdigit(*s);s++)
n=10*n+(*s-′0′);
return sign*n;
}
main()
{ char s[] =" -26a3";
printf("% d\n ",fun(s));
}
程序运行后的输出结果是( )。
A) -263 B) 2 C) 0 D) -26
(34)设有定义:
struct complex
{ int real,unreal;} data1={1,8},data2;
则以下赋值语句中错误的是( )。
A)data2=(2,6);
B)data2=data1;
C)data2.real=data1.real;
D)data2.real=data1.unreal;
(35)有以下程序:
#include <stdio.h>
#define S(x)x*x/x
main()
{ int k = 6, j = 3;
printf("% d,% d\n",S(k+j+2),S(j+k+2));
}
程序运行后的输出结果是( )。
A) 11,11 B) 29,29 C) 26,29 D) 121,121
(36)若有定义:
typedef int *T[10];
Ta;
则以下选项与上述定义中a的类型完全相同的是( )。
A) int *a[10]; B) int(*a)[10];
C) int a[10]; D) int(*a[10])();
(37)有以下程序:
#include <stdio.h>
main()
{ FILE *fp;
int i,a[6]={1,2,3,4,5,6},k;
fp = fopen("data.dat","w+");
for(i=0;i<6;i++)
fprintf(fp,"% d\n",a[5-i]);
rewind(fp);
for(i=0;i<6;i++)
{ fscanf(fp,"% d",&k);
printf("% d,",k);
}
fclose(fp);
}
程序运行后的输出结果是( )。
A) 6,5,4,3,2,1, B) 1,2,3,4,5,6,
C) 1,1,1,1,1,1 D) 6,6,6,6,6,6,
(38)有以下程序:
#include <stdio.h>
#include <stdlib.h>
void fun(double *p1,double *p2,double *s)
{ s=(double*)calloc(1,sizeof(double));
*s = *p1 + *p2;
}
main()
{ double a[2] ={1.1,2.2 },b[2] ={ 10.0,20.0 },
*q=NULL;
fun(a,b,q);
printf("% 5.2f \n",*q);
}
程序运行后的结果是( )。
A) 有运行错误 B) 输出11.10
C) 输出12.10 D) 输出21.10
(39)若文件指针fp已正确指向文件,ch为字符型变量,以下不能把字符输出到文件中的语句是( )。
A)fget(fp,ch);
B)fputc(ch,fp);
C)fprintf(fp,"% c",ch);
D)fwrite(&ch,sizeof(ch),1,fp);
40)有以下程序:
#include <stdio.h>
struct ball
{
char color[10];
int dim;
};
main()
{
struct ball list[2]= {{"white",2},{"yellow",
3}};
printf("% s:% d\n",(list +1)->color,list ->
dim);
}
程序运行后的输出结果是( )。
A)yellow:3 B)yellow:2 C)white:2 D)white:3
二、程序填空题(共18分)
函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数 isleap用来判别某一年是否为闰年。
例如,若输入:2008 5 1,则程序输出:2008年5月1日是该年的第122天。
请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
int isleaP(int year)
{int leaP;
leaP =(year%4 ==0 && year%100!=0 ||year%400==0);
/**********found**********/
return【1】;
}
int fun(int year,int month,int day)
{int table[13]={0,31,28,31,30,31,30, 31,31,30,31,30,31};
int days=0,i;
for(i=1;i<month;i++)
days=days + table[i];
/**********found**********/
days=days+【2】;
if(isleaP(year)&& month>2)
/**********found**********/
days=days+【3】;
return days;
}
main()
{int year,month,day,days;
Printf("请输入年、月、日:");
scanf("%d%d%d",&year,&month,&day);
days = fun(year,month,day);
Printf("%d 年%d 月%d 日是该年的第%d 天\n", year,month,day,days);
}
三、程序修改题(共18分)
给定程序MODI1.C中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运行的结果为:第1 门课程的平均分是:76.125000
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
tyPedef struct
{char num[8];
double score[2];
}STU;
double fun(STU std[],int n)
{int i;
/**********found**********/
double sum;
/**********found**********/
for(i=0;i<2;i++)
/**********found**********/
sum += std[i].score[1];
return sum/n;
}
main()
{STU std[]={"N1001",76.5,82.0,"N1002",
66.5,73.0,
" N1005",80.5,66.0,"
N1006",81.0,56.0 };
Printf("第1 门课程的平均分是:%lf\n",fun
(std,4));
}
四、程序设计题(共24分)
请编写函数fun,其功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数据为123,则输出结果为:输入的数字是3位。
注意:部分源程序存在PROG1.C 中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
void NoNo();
int fun(int n)
{
}
main()
{int n,Place;
do{
Printf("请输入一个4位以内的正整数:");
scanf("%d",&n);
}while(n<0 ||n>9999);
Place = fun(n);
Printf("输入的数字是%d位\n",Place);
NoNo();
}
void NoNo()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *fP,*wf;
int i,n,Place;
fP = foPen("c:\test\in.dat","r");
wf = foPen("c:\test\out.dat","w");
for(i=0;i<10;i++)
{
fscanf(fP,"%d ",&n);
Place = fun(n);
fPrintf(wf,"%d\n",Place);
}
fclose(fP);
fclose(wf);
}