一、填空 共5题 (共计20分)
第1题 (4.0分) 题号:1881 难度:易 第22章
以下程序运行后,输出的a值是【1】,b值是【2】,x的值是【3】,y的值是【4】。
# include <stdio.h>
void ex(int, int);
int main( )
{
int a = 10, b = 20;
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)=======
20
=========或=========
b=20
=======(答案3)=======
11
=========或=========
x=11
=======(答案4)=======
21
=========或=========
y=21
第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分) 题号: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分) 题号:1894 难度:较难 第22章
以下程序输出结果是【1】。
#include <stdio.h>
int a=10,b=20;
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分) 题号: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分) 题号:334 难度:中 第10章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:将一个字符串中下标为m的字符开始的全部字符复制成为另
一个字符串。
-------------------------------------------------------*/
#include<stdio.h>
void strcopy(char *str1,char *str2,int m)
{
char *p1,*p2;
/***********SPACE***********/
【?】;
p2=str2;
while(*p1)
/***********SPACE***********/
【?】;
/***********SPACE***********/
【?】;
}
main()
{
int m;
char str1[80],str2[80];
gets(str1);
scanf("%d",&m);
/***********SPACE***********/
【?】;
puts(str1);puts(str2);
}
答案:
=======(答案1)=======
p1= str1 + m
=======(答案2)=======
*p2++=*p1++
=========或=========
*(p2++)=*(p1++)
=========或=========
*p2=*p1,p2++,p1++
=========或=========
*p2=*p1++,p2++
=========或=========
*p2++=*p1,p1++
=======(答案3)=======
*p2='\0'
=========或=========
*p2=0
=========或=========
*p2=NULL
=======(答案4)=======
strcopy(str1,str2,m)
第3题 (5.0分) 题号:426 难度:中 第11章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
说明:下面程序的功能是统计文件fname.dat中字符个数,
现文件中的内容为: 1234567890
请填写程序所缺内容。
-------------------------------------------------------*/
#include "stdio.h"
void main()
{
/***********SPACE***********/
【?】*fp;
long num=0L;
if((fp=fopen("fname.dat","r"))==NULL)
{
printf("Open error\n");
}
/***********SPACE***********/
while(【?】)
{
fgetc(fp);
num++;
}
/***********SPACE***********/
printf("num=%ld\n",【?】);
fclose(fp);
}
答案:
=======(答案1)=======
FILE
=======(答案2)=======
!feof(fp)
=========或=========
feof(fp)==0
=======(答案3)=======
num-1
三、程序改错 共3题 (共计20分)
第1题 (5.0分) 题号:230 难度:中 第8章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:找出大于m的最小素数,并将其作为函数值返回。
------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
int fun( int m)
{
int i,k;
for(i=m+1;;i++)
{
/**********FOUND**********/
for(k=1;k<i;k++)
/**********FOUND**********/
if(i%k!=0) break;
/**********FOUND**********/
if(k<i)
/**********FOUND**********/
return k;
}
}
main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
}
答案:
=======(答案1)=======
for(k=2;k<i;k++)
=========或=========
for(k=2;i>k;k++)
=========或=========
for(k=2;k<=i-1;k++)
=========或=========
for(k=2;k<i/2;k++)
=========或=========
for(k=2;i/2>k;k++)
=========或=========
for(k=2;k<=sqrt(i);k++)
=========或=========
for(k=2;sqrt(i)>=k;k++)
=======(答案2)=======
if( i%k == 0 ) break;
=========或=========
if(!(i%k)) break;
=======(答案3)=======
if(i<=k)
=========或=========
if(k>=i)
=========或=========
if( k == i )
=========或=========
if(k>=i/2)
=========或=========
if(k=i/2)
=========或=========
if(k>sqrt(i))
=======(答案4)=======
return i;
=========或=========
return (i);
第2题 (10.0分) 题号:255 难度:中 第10章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c 。
-------------------------------------------------------*/
#include <stdio.h>
void fun( char *s )
{
int i,j;
for(i=j=0; s[i]!='\0'; i++)
if(s[i]!='c')
/***********FOUND***********/
s[j]=s[i];
/***********FOUND***********/
s[i]=0;
}
main()
{
char s[80];
printf("Enter a string: ");
gets(s);
printf("The original string: ");
puts(s);
fun(s);
printf("The string after deleted : ");
puts(s);printf("\n\n");
}
答案:
=======(答案1)=======
s[j++]=s[i];
=========或=========
{s[j]=s[i];j++;}
=======(答案2)=======
s[j]= '\0';
=========或=========
s[j]= 0;
第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分) 题号:269 难度:中 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:求出1000以内前20个不能被2,3,5,7整除的数之和。
要求:使用程序中定义的变量
-------------------------------------------------------*/
#include"stdio.h"
void wwjt();
//fun函数功能:求出求出1000以内,前n个不能被2,3,5,7整除的数,求出这些数的和
int fun(int n)
{
int i,j=0,a[20],sum=0; //前20个不能被2,3,5,7整除的数保存在a数组中,它们的和保存在sum中。
/**********Program**********/
/********** End **********/
return sum;
}
void main()
{
printf("和为:%d\n",fun(20));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i,n;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Current 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<5;i++)
{
fscanf(IN,"%i",&n);
fprintf(OUT,"%ld\n",fun(n));
}
fclose(IN);
fclose(OUT);
}
答案: for(i=0;i<1000;i++)
{
if((i%2!=0)&&(i%3!=0)&&(i%5!=0)&&(i%7!=0))
{
a[j++]=i;
//printf("%d,",i);
}
if(j>n-1) break;
}
for(i=0;i<n;i++)
sum+=a[i];
第3题 (10.0分) 题号:355 难度:较难 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:学生的记录由学号和成绩组成。N名学生的数据已放入主函数中的结构体数组s中,
请编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,
高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 12
void wwjt ( );
typedef struct
{
char num[10];
int s;
} STREC;
double fun( STREC *a, STREC *b, int *n )
{
/**********Program**********/
/********** End **********/
}
void main()
{
STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STREC h[N];
int i, n;
double ave;
ave=fun( s,h,&n );
printf("The %d student data which is higher than %7.3f:\n",n,ave);
for(i=0;i<n; i++)
printf("%s %d\n",h[i].num,h[i].s);
printf("\n");
wwjt ( );
}
void wwjt( )
{
FILE *in, *out ;
STREC h[N];
int i,j, n;
double ave;
STREC s[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<N; i++)
{
fscanf(in,"%s %d", &s[i].num, &s[i].s);
}
ave=fun( s,h,&n );
fprintf(out, "%d\n%7.3f\n", n, ave);
}
fclose(in);
fclose(out);
}
答案: int i;
double av=0.0;
*n=0;
for(i=0;i<N;i++)
av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(av<=a[i].s)
{
b[*n]=a[i];
*n=*n+1;
}
return av;
第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 ;