一、填空 共5题 (共计20分)
第1题 (4.0分) 题号:1880 难度:易 第22章
以下程序运行后,输出的a值是【1】,b值是【2】,x的值是【3】,y的值是【4】。
# include <stdio.h>
void ex(int, int);
int main( )
{
int a = 11, b = 17;
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)=======
11
=========或=========
a=11
=======(答案2)=======
17
=========或=========
b=17
=======(答案3)=======
12
=========或=========
x=12
=======(答案4)=======
18
=========或=========
y=18
第2题 (4.0分) 题号:1884 难度:较易 第22章
以下程序输出结果是【1】。
#include "stdio.h"
union pw
{
int i;
char ch[2];
}a;
main()
{
a.ch[0]=97;
a.ch[1]=0;
printf("%d\n",a.i);
}
=======(答案1)=======
97
第3题 (4.0分) 题号:1888 难度:中 第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(5));
return 0;
}
=======(答案1)=======
16
第4题 (4.0分) 题号:1895 难度:较难 第22章
以下程序输出结果是【1】。
#include <stdio.h>
int a=30,b=50;
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分) 题号:1462 难度:难 第22章
程序运行时若依次输入25,3,40,则输出结果是【1】.
main()
{int *p1,*p2,*p3;
int i,j,k,t;
scanf("%d%d%d",&i,&j,&k);
p1=&i;
p2=&j;
p3=&k;
if(*p1<*p2){t=*p1;*p1=*p2;*p2=t;}
if(*p1<*p3){t=*p1;*p1=*p3;*p3=t;}
if(*p2<*p3){t=*p2;*p2=*p3;*p3=t;}
printf("%d\n",*p2);
}
=======(答案1)=======
25
二、程序填空 共3题 (共计20分)
第1题 (5.0分) 题号:529 难度:中 第9章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:输入学生成绩并显示。
-------------------------------------------------------*/
# include <stdio.h>
struct student
{
char number[6];
char name[6];
int score[3];
} stu[2];
void output(struct student stu[2]);
void main()
{
int i, j;
/***********SPACE***********/
for(i=0; i<2; 【?】)
{
printf("请输入学生%d的成绩:\n", i+1);
printf("学号:");
/***********SPACE***********/
scanf("%s", 【?】.number);
printf("姓名:");
scanf("%s", stu[i].name);
for(j=0; j<3; j++)
{
printf("成绩 %d. ", j+1);
/***********SPACE***********/
scanf("%d", 【?】.score[j]);
}
printf("\n");
}
output(stu);
}
void output(struct student stu[2])
{
int i, j;
printf("学号 姓名 成绩1 成绩2 成绩3\n");
for(i=0; i<2; i++)
{
/***********SPACE***********/
【?】("%-6s%-6s", stu[i].number, stu[i].name);
for(j=0; j<3; j++)
printf("%-8d", stu[i].score[j]);
printf("\n");
}
}
答案:
=======(答案1)=======
i++
=========或=========
++i
=========或=========
i=i+1
=========或=========
i+=1;
=======(答案2)=======
stu[i]
=======(答案3)=======
&stu[i]
=======(答案4)=======
printf
第2题 (10.0分) 题号:368 难度:中 第10章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,
并存放在形参t所指的变量中,最后在主函数中输出。
例如:若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。
-------------------------------------------------------*/
#include <stdio.h>
void fun(char *s, int *t)
{
int i, n;
n=0;
/***********SPACE***********/
for(i=0; 【?】 !=0; i++)
/***********SPACE***********/
if(s[i]>='0'&&s[i]<= 【?】 ) n++;
/***********SPACE***********/
【?】 ;
}
main()
{
char s[80]="abcdef35adgh3kjsdf7";
int t;
printf("\nThe original string is : %s\n",s);
fun(s,&t);
printf("\nThe result is : %d\n",t);
}
答案:
=======(答案1)=======
s[i]
=======(答案2)=======
'9'
=======(答案3)=======
*t=n
第3题 (5.0分) 题号:530 难度:中 第11章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:文件操作。
-------------------------------------------------------*/
# include <stdio.h>
# include <stdlib.h>
void main()
{
/* 定义一个文件指针fp */
/***********SPACE***********/
【?】 *fp;
char filename[10];
printf("Please input the name of file: ");
scanf("%s", filename); /* 输入字符串并赋给变量filename */
/* 以读的使用方式打开文件filename */
/***********SPACE***********/
if((fp=fopen(filename, "【?】")) == NULL)
{
printf("Cannot open the file.\n");
exit(0); /* 正常跳出程序 */
}
/* 关闭文件 */
/***********SPACE***********/
【?】;
}
答案:
=======(答案1)=======
FILE
=======(答案2)=======
r
=======(答案3)=======
fclose(fp)
三、程序改错 共3题 (共计20分)
第1题 (5.0分) 题号:229 难度:中 第8章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:给定n个实数,输出平均值,并统计在平均值以下(含平
均值)的实数个数。
例如:n=6时,输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得
平均值为40.828335,在平均值以下的实数个数应为3。
------------------------------------------------------*/
#include <stdio.h>
int fun(double x[],int n)
{
int j,c=0;
/**********FOUND**********/
float j=0;
/**********FOUND**********/
for(j=0;j<=n;j++)
xa+=x[j];
xa=xa/n;
printf("ave=%f\n",xa);
/**********FOUND**********/
for(j=0;j<=n;j++)
if(x[j]<=xa) c++;
/**********FOUND**********/
return xa;
}
main()
{
double x[]={23.5,45.67,12.1,6.4,58.9,98.4};
printf("%d\n",fun(x,6));
}
答案:
=======(答案1)=======
float xa=0;
=========或=========
float xa=0.0;
=========或=========
double xa=0;
=========或=========
double xa=0.0;
=======(答案2)=======
for(j=0;j<n;j++)
=========或=========
for(j=0;n>j;j++)
=========或=========
for(j=0;n-1>=j;j++)
=========或=========
for(j=0;j<=n-1;j++)
=======(答案3)=======
for(j=0;j<n;j++)
=========或=========
for(j=0;n>j;j++)
=========或=========
for(j=0;j<=n-1;j++)
=========或=========
for(j=0;n-1>=j;j++)
=======(答案4)=======
return c;
=========或=========
return (c);
第2题 (10.0分) 题号:247 难度:中 第10章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放
在a中,中间的数放在b中,最小的数放在c中。
例如:若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=12.0。
-------------------------------------------------------*/
#include <stdio.h>
void fun(float *a,float *b,float *c)
{
/***********FOUND***********/
float *k;
if( *a<*b )
{
k=*a;
*a=*b;
*b=k;
}
/***********FOUND***********/
if( *a>*c )
{
k=*c;
*c=*a;
*a=k;
}
if( *b<*c )
{
k=*b;
*b=*c;
*c=k;
}
}
main()
{
float a,b,c;
printf("Input a b c: ");
scanf("%f%f%f",&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
}
答案:
=======(答案1)=======
float k;
=======(答案2)=======
if(*a< *c)
=========或=========
if(*c> *a)
第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分) 题号:313 难度:易 第3章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:求一个四位数的各位数字的立方和
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int k;
k=fun(1234);
printf("k=%d\n",k);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN,iOUT,i;
IN=fopen("22.IN","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("22.out","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<10;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int d,k,s=0;
while (n>0)
{d=n%10;
s+=d*d*d;
n/=10;
}
return s;
----------------------
第2题 (10.0分) 题号:440 难度:中 第3章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:根据整型形参m,计算如下公式的值:y=1/2+1/4+
1/6+...+1/2m 。
例如:若m=9,则应输出:1.414484
------------------------------------------------*/
#include <stdio.h>
void wwjt();
double fun(int m)
{
/**********Program**********/
/********** End **********/
}
main()
{
int n;
printf("Enter n: ");
scanf("%d", &n);
printf("\nThe result is %1f\n", fun(n));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i ;
int t;
double 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(i=0;i<5;i++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%f\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
double y=0;
int i;
for(i=1; i<=m; i++)
{y+=1.0/(2*i); }
return(y);
----------------------
第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分) 题号:302 难度:难 第3章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:输入2个学生3门课的成绩,计算学生成绩平均分,
课程平均分和最高分.
例如:输入2名学生3门课的成绩分别为92,87,68,56,
92,84 则
学生1平均分:82.33
学生2平均分:77.33
课程1平均分:74.00
课程2平均分:89.50
课程3平均分:76.00
最高分为:92
------------------------------------------------*/
#include <stdio.h>
void wwjt();
/*定义全局变量*/
/*学生成绩平均分*/
float StuAgv[2];
/*课程平均分*/
float CouAgv[3];
/*所有学生的所有课程最高分*/
float Max=0;
/*说明:需要在下面函数中把题干要求中的结果赋值到上面定义一变量中*/
void fun(float score[2][3])
{
/**********Program**********/
/********** End **********/
}
void main()
{
int i,j;
float score[2][3];
printf("输入学生的成绩:");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("\n输出学生的成绩:");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%.2f ",score[i][j]);
printf("\n");
}
fun (score);
for(i=0;i<2;i++)
printf("第%d个学生的平均成绩是:%0.2f\n",i+1,StuAgv[i]);
for(j=0;j<3;j++)
printf("第%d门课的平均成绩是:%0.2f\n",j+1,CouAgv[j]);
printf("所有分数中的最高分为:%.2f\n",Max);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
float iIN[2][3];
int i,j;
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(i=0;i<2;i++)
for(j=0;j<3;j++)
fscanf(IN,"%f",&iIN[i][j]);
fun(iIN);
for(i=0;i<2;i++)
fprintf(OUT,"%.2f\n",StuAgv[i]);
for(j=0;j<3;j++)
fprintf(OUT,"%.2f\n",CouAgv[j]);
fprintf(OUT,"%.2f\n",Max);
fclose(IN);
fclose(OUT);
return ;
}
答案: int i,j;
float sum;
for(i=0;i<2;i++) /*计算第i个学生平均分*/
{
sum=0;
for(j=0;j<3;j++)
sum=sum+score[i][j];
StuAgv[i]=sum/3;
}
for(j=0;j<3;j++) /*计算第j门课的平均分*/
{
sum=0;
for(i=0;i<2;i++)
sum=sum+ score [i][j];
CouAgv[j]=sum/2;
}
Max=score[0][0];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
if(Max<=score[i][j])
{
Max=score[i][j];
}
return ;