一、填空 共5题 (共计20分)
第1题 (4.0分) 题号:1878 难度:易 第22章
以下程序运行后,输出的a值是【1】,b值是【2】,x的值是【3】,y的值是【4】。
# include <stdio.h>
void ex(int, int);
int main( )
{
int a = 10, b =4;
ex(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
void ex(int x, int y)
{
x++;
++y;
printf("x = %d, y = %d\n", x, y);
}
=======(答案1)=======
10
=========或=========
a=10
=======(答案2)=======
4
=========或=========
b=4
=======(答案3)=======
11
=========或=========
x=11
=======(答案4)=======
5
=========或=========
y=5
第2题 (4.0分) 题号:1885 难度:较易 第22章
以下程序输出结果是【1】。
#include "stdio.h"
union pw
{
int i;
char ch[2];
}a;
main()
{
a.ch[0]=68;
a.ch[1]=0;
printf("%d\n",a.i);
}
=======(答案1)=======
68
第3题 (4.0分) 题号:1891 难度:中 第22章
以下程序输出结果是【1】。
# include <stdio.h>
int age(int n)
{
int c;
if (n==1)
c = 8;
else
c = age(n-1)+2;
return c;
}
int main()
{
printf("%d\n", age(6));
return 0;
}
=======(答案1)=======
18
第4题 (4.0分) 题号:1893 难度:较难 第22章
以下程序输出结果是【1】。
#include <stdio.h>
int a=3,b=5;
int main()
{ int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%d ",f(a));
return 0;
}
int f(int a)
{ auto int b=0;
static int c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
=======(答案1)=======
7 8 9
第5题 (4.0分) 题号:1442 难度:难 第22章
程序运行结果是【1】.
main()
{int oddadd(int *pt,int n);
static int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p,total;
p=&a[1];
total=oddadd(p,10);
printf("%d\n",total);
}
oddadd(int *pt,int n)
{int i,sum=0;
for(i=1;i<n;i+=2,pt+=2) sum=sum+*pt;
return(sum);
}
=======(答案1)=======
30
二、程序填空 共3题 (共计20分)
第1题 (5.0分) 题号:461 难度:中 第9章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。
函数fun的功能是输出这位学生的信息。
-------------------------------------------------------*/
#include <stdio.h>
typedef struct
{
int num;
char name[9];
char sex;
struct { int year,month,day ;} birthday;
float score[3];
}STU;
/***********SPACE***********/
void show(STU 【?】)
{
int i;
printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex,
tt.birthday.year, tt.birthday.month, tt.birthday.day);
for(i=0; i<3; i++)
/***********SPACE***********/
printf("%5.1f", 【?】);
printf("\n");
}
main( )
{
STU std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 };
printf("\nA student data:\n");
/***********SPACE***********/
show(【?】);
}
答案:
=======(答案1)=======
tt
=======(答案2)=======
tt.score[i]
=======(答案3)=======
std
第2题 (10.0分) 题号:365 难度:中 第10章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:将s所指字符串的正序和反序进行连接,形成一个新串放在t
所指的数组中。
例如:当s串为"ABCD"时,则t串的内容应为"ABCDDCBA"。
-------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t)
{
int i, d;
/***********SPACE***********/
d = 【?】;
/***********SPACE***********/
for (i = 0; i<d; 【?】)
t[i] = s[i];
for (i = 0; i<d; i++)
/***********SPACE***********/
t[【?】] = s[d-1-i];
/***********SPACE***********/
t[【?】] ='\0';
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
答案:
=======(答案1)=======
strlen(s)
=======(答案2)=======
i++
=========或=========
i=i+1
=========或=========
i+=1
=========或=========
++i
=======(答案3)=======
d+i
=========或=========
i+d
=======(答案4)=======
2*d
=========或=========
d*2
=========或=========
i+d
=========或=========
d+i
第3题 (5.0分) 题号:439 难度:中 第11章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件
中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
-------------------------------------------------------*/
#include <stdio.h>
void fun(char *s, int a, double f)
{
/***********SPACE***********/
【?】 fp;
char str;
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");
str = fgetc(fp);
/***********SPACE***********/
while (!feof(【?】))
{
/***********SPACE***********/
putchar(【?】);
str = fgetc(fp);
}
putchar('\n');
fclose(fp);
}
main()
{
char a[10]="Hello!";
int b=12345;
double c= 98.76;
fun(a,b,c);
}
答案:
=======(答案1)=======
FILE *
=======(答案2)=======
fp
=======(答案3)=======
str
三、程序改错 共3题 (共计20分)
第1题 (5.0分) 题号:222 难度:中 第8章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入。
例如:若k的值为500,则函数值为4622。
------------------------------------------------------*/
#include <stdio.h>
int fun(int k)
{
int m=0,mc=0;
/**********FOUND**********/
while ((k>=2)||(mc<10))
{
/**********FOUND**********/
if((k%13=0)||(k%17=0))
{
m=m+k;
mc++;
}
/**********FOUND**********/
k++;
}
/**********FOUND**********/
return ;
}
main()
{
printf("%d\n",fun(500));
}
答案:
=======(答案1)=======
while ( (2<=k) && (mc<10) )
=========或=========
while ( (k>=2) && (mc<10) )
=========或=========
while ( (2<=k) && (mc<=9) )
=========或=========
while ( (k>=2) && (mc<=9) )
=======(答案2)=======
if(!( k%17!=0 || k%13!=0 ))
=========或=========
if( k%13==0 || k%17==0)
=======(答案3)=======
k--;
=========或=========
k=k-1;
=========或=========
k-=1;
=======(答案4)=======
return m;
=========或=========
return(m);
第2题 (10.0分) 题号:305 难度:中 第10章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:找出100~n(不大于1000)之间三个位上的数
字都相等的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
-------------------------------------------------------*/
#include <stdio.h>
#define N 100
/***********FOUND***********/
int fun(int s, int n)
{
int i,j,k,a,b,c;
j=0;
for(i=100; i<n; i++)
{
/***********FOUND***********/
k=n;
a=k%10;
k/=10;
/***********FOUND***********/
b=k/10;
c=k/10;
if(a==b && a==c)
s[j++]=i;
}
return j;
}
void main()
{
/***********FOUND***********/
int a[N], n, num, i;
do
{
printf("\nEnter n(<=1000) :");
scanf("%d",&n);
}
while(n > 1000);
num= fun(a,n);
printf("\n\nThe result :\n");
for(i=0; i<num; i++)
printf("%5d",a[i]);
printf("\n\n");
}
答案:
=======(答案1)=======
int fun(int *s, int n)
=======(答案2)=======
k=i;
=======(答案3)=======
b=k%10;
=======(答案4)=======
int a[N], n, num=0, i;
第3题 (5.0分) 题号:207 难度:难 第10章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换,输出数组元素。
------------------------------------------------------*/
#include <stdio.h>
main()
{
int a[10];
void input();
void output();
void max_min();
input(a,10);
max_min(a,10);
output(a,10);
}
void input(int *arr,int n)
{
int *p,i;
p=arr;
printf("please enter 10 integers:\n");
for(i=0;i<n;i++)
/**********FOUND**********/
scanf("%d",p);
}
void max_min(int *arr,int n)
{
int *min,*max,*p,t;
min=max=arr;
for(p=arr+1;p<arr+n;p++)
/**********FOUND**********/
if(*p<*max)
max=p;
else if(*p<*min) min=p;
t=*arr;*arr=*min;*min=t;
/**********FOUND**********/
if(max=arr) max=min;
t=*(arr+n-1);
*(arr+n-1)=*max;
*max=t;
}
void output(int *arr,int n)
{
int *p,i;
p=arr;
printf("The changed array is:\n");
/**********FOUND**********/
while(i=0;i<n;i++)
printf("%3d",*p++);
printf("\n");
}
答案:
=======(答案1)=======
scanf("%d",p ++);
=========或=========
scanf("%d",arr[i]);
=========或=========
scanf("%d",p+i);
=========或=========
scanf("%d",arr+i);
=======(答案2)=======
if(*p>*max)
=========或=========
if(*max<*p)
=======(答案3)=======
if( max == arr )
=======(答案4)=======
for(i=0;i<n;i++)
=========或=========
for(i=0;n>i;i++)
=========或=========
for(p=arr;p<arr+n;)
=========或=========
for(i=0;i<=n-1;i++)
=========或=========
for(i=0;n-1>=i;i++)
=========或=========
for(p=arr;p<=arr+n-1;)
=========或=========
for(p=arr;arr+n-1>=p;)
四、程序设计 共4题 (共计40分)
第1题 (10.0分) 题号:490 难度:易 第3章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数fun,求任一整数m的n次方。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
long fun(int m,int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int m,n;
long s;
long fun(int,int);
printf("输入m和n的值:");
scanf("%d,%d",&m,&n);
s=fun(m,n);
printf("s=%ld\n",s);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int n;
int i[2];
long o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
for(n=0;n<2;n++)
{
fscanf(IN,"%d",&i[n]);
}
o = fun(i[0],i[1]);
fprintf(OUT,"%ld\n",o);
fclose(IN);
fclose(OUT);
}
答案:----------------------
long int x=1;
int i;
for(i=1;i<=n;i++)
x=x*m;
return x;
----------------------
第2题 (10.0分) 题号:470 难度:中 第3章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:用函数实现字符串的复制, 不允许用strcpy()函数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
void copy(char str1[],char str2[])
{
/**********Program**********/
/********** End **********/
}
main()
{
void copy();
char c1[40],c2[40];
gets(c1);
copy(c1,c2);
puts(c2);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
char i[100];
char o[100];
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
fscanf(IN,"%s",i);
copy(i,o);
fprintf(OUT,"%s\n",o);
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i;
for(i=0;str1[i]!='\0';i++)
str2[i]=str1[i];
str2[i]='\0';
----------------------
第3题 (10.0分) 题号:362 难度:较难 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中。
请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分
数范围内的学生人数由函数值返回。
例如:输入的分数是60、69,则应当把分数在60~69的学生数据输出,包含60分和69分的学
生数据。主函数中把60放在low中,把69放在heigh中。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 16
void wwjt();
typedef struct
{
char num[10];
int s;
} STREC;
int fun( STREC *a,STREC *b,int l, int h )
{
/**********Program**********/
/********** End **********/
}
main()
{
STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},
{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h[N];
int i,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<n; i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
wwjt();
}
void wwjt()
{
FILE *in, *out ;
STREC s[N],h[N];
int i,j,n;
in=fopen("in.dat","r");
if(in==NULL)
{
printf("Please Verify The Currernt Dir..It May Be Changed");
}
out=fopen("out.dat","w");
if(out==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(j=0;j<10;j++)
{
for(i=0;i<16;i++)
{
fscanf(in,"%s %d",&s[i].num,&s[i].s);
}
n=fun( s,h,80,98 );
fprintf(out,"%d\n",n);
}
fclose(in);
fclose(out);
}
答案: 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;
第4题 (10.0分) 题号:275 难度:难 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:C语言编程题实现以下功能:
1) 从键盘输入10个学生的成绩,计算平均成绩ave
2) 统计及格人数pass,计算高于平均分的学生的人数better
3) 将10个学生成绩排名。
-------------------------------------------------------*/
#include "stdio.h"
#define N 10
void main()
{
int i,j,a[N],ave,sum=0,pass=0,better=0,t;
/**********Program**********/
/********** End **********/
printf("平均分:%d\n及格人数%d\n高于平均分人数%d\n",ave,pass,better);
}
答案: for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
ave=sum/N;
for(i=0;i<N;i++)
{
if(a[i]>=60)
pass++;
if(a[i]>ave)
better++;
}
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{
if (a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}