期末考试题(4)
一、填空 共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分) 题号:1461 难度:难 第22章
程序运行时若依次输入2,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",*p1);
}
=======(答案1)=======
40
二、程序填空 共3题 (共计20分)
第1题 (5.0分) 题号:384 难度:中 第9章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。函数fun的
功能是:将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中
的学号和姓名,最后输出修改后的数据。
例如:a所指变量中的学号、姓名和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,
则修改后输出b中的数据应为:10002、"LiSi"、95、80、88。
-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
struct student
{
long sno;
char name[10];
float score[3];
};
void fun(struct student a)
{
struct student b;
int i;
/***********SPACE***********/
b = 【?】;
b.sno = 10002;
/***********SPACE***********/
strcpy(【?】, "LiSi");
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);
for (i=0; i<3; i++)
/***********SPACE***********/
printf("%6.2f ", b.【?】);
printf("\n");
}
main()
{
struct student s={10001,"ZhangSan", 95, 80, 88};
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i<3; i++)
printf("%6.2f ", s.score[i]);
printf("\n");
fun(s);
}
答案:
=======(答案1)=======
a
=======(答案2)=======
b.name
=======(答案3)=======
score[i]
第2题 (10.0分) 题号:417 难度:中 第10章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:以下mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回.
-------------------------------------------------------*/
#include <stdio.h>
int mystrlen( char *str)
{
int i;
/***********SPACE***********/
for(i=0;【?】!='\0';i++) ;
/***********SPACE***********/
return(【?】);
}
void main( )
{
char *str="abcdefg";
printf("%d\n",mystrlen(str));
}
答案:
=======(答案1)=======
*(str+i)
=========或=========
str[i]
=======(答案2)=======
i
第3题 (5.0分) 题号:446 难度:中 第11章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:将自然数1~10及其平方根写到名
为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
int fun(char *fname )
{
FILE *fr;
int i,n;
float x;
if((fr=fopen(fname, "w"))==NULL)
return 0;
for(i=1;i<=10;i++)
/***********SPACE***********/
fprintf(【?】,"%d %f\n",i,sqrt((double)i));
printf("\nSucceed!!\n");
/***********SPACE***********/
【?】;
printf("\nThe data in file :\n");
/***********SPACE***********/
if((fr=fopen(【?】,"r"))==NULL)
return 0;
fscanf(fr,"%d%f",&n,&x);
while(!feof(fr))
{
printf("%d %f\n",n,x);
fscanf(fr,"%d%f",&n,&x);
}
fclose(fr);
return 1;
}
main()
{
char fname[]="myfile3.txt";
fun(fname);
}
答案:
=======(答案1)=======
fr
=======(答案2)=======
fclose(fr)
=======(答案3)=======
fname
三、程序改错 共3题 (共计20分)
第1题 (5.0分) 题号:240 难度:中 第8章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:求两个非零正整数的最大
公约数,并作为函数值返回。
例如:若num1和num2分别为49和21,则输出的最大公约数为7;
若num1和num2分别为27和81,则输出的最大公约数为27。
-------------------------------------------------------*/
#include <stdio.h>
int fun(int a,int b)
{
int r, t;
if(a<b)
{
/***********FOUND***********/
t=a; b=a; a=t;
}
r=a%b;
while(r!=0)
{
a=b; b=r; r=a%b;
}
/***********FOUND***********/
return(a);
}
main()
{
int num1, num2,a;
printf("Input num1 num2: ");
scanf("%d%d",&num1,&num2);
printf("num1= %d num2= %d\n\n",num1,num2);
a=fun(num1,num2);
printf("The maximun common divisor is %d\n\n",a);
}
答案:
=======(答案1)=======
t=a;a=b;b=t;
=======(答案2)=======
return(b);
=========或=========
return b;
第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分) 题号:528 难度:易 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编fun函数写程序,从键盘输入百分制成绩,要求输出
等级制成绩A、B、C、D。90~100分为A,80~89分为B,
60~79分为C,1~59分为D。不考虑小数,输入为整数,
输出为字符。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt();
char fun (int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int score,n;
char p;
scanf("%d",&score);
n=score/10;
p=fun(n);
printf("%c" , p);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN,i;
char cOUT;
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<5;i++)
{
fscanf(IN,"%d",&iIN);
cOUT=fun(iIN);
fprintf(OUT,"%c\n",cOUT);
}
fclose(IN);
fclose(OUT);
}
答案: char s;
switch(n)
{
case 10:
case 9:s='A';break;
case 8:s='B';break;
case 7:
case 6:s='C';break;
default:s='D';
}
return s;
第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分) 题号:287 难度:较难 第3章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在
主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记
录的ave成员中。
例如:学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写
的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#define N 8
void wwjt ( );
typedef struct
{
char num[10];
double s[N];
double ave;
} STREC;
void fun(STREC *a)
{
/**********Program**********/
/********** End **********/
}
main()
{
STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
int i;
fun( &s );
printf("The %s's student data:\n", s.num);
for(i=0;i<N; i++)
printf("%4.1f\n",s.s[i]);
printf("\nave=%7.3f\n",s.ave);
wwjt();
}
void wwjt()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *out ;
int i ; STREC s[10] = {
{"GA005",85.5,76,69.5,85,91,72,64.5,87.5},
{"GA001",82.5,66,76.5,76,89,76,46.5,78.5},
{"GA002",72.5,56,66.5,66,79,68,46.5,58.5},
{"GA003",92.5,76,86.5,86,99,86,56.5,88.5},
{"GA004",82,66.5,46.5,56,76,75,76.5,63.5},
{"GA006",75.5,74,71.5,85,81,79,64.5,71.5},
{"GA007",92.5,61,72.5,84,79,75,66.5,72.5},
{"GA008",72.5,86,73.5,80,69,63,76.5,53.5},
{"GA009",66.5,71,74.5,70,61,82,86.5,58.5},
{"GA010",76,66.5,75.5,60,76,71,96.5,93.5},
};
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++)
{
fun(&s[i]) ;
fprintf(out, "%7.3f\n", s[i].ave) ;
}
fclose(out) ;
}
答案: double ave=0.0;
int i;
for(i=0;i<N;i++)
a->ave=a->ave+a->s[i];
a->ave/=N;
第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 ;