第21题 (20.0分) 难度:中 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数fun对主程序中用户输入的具有10
个数据的数组a按由大到小排序,并在主程序中输出
排序结果。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int array[], int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int a[10],i;
printf("请输入数组a中的十个数:\n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
fun(a,10);
printf("由大到小的排序结果是:\n");
for (i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int n;
int i[10];
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<10;n++)
{
fscanf(IN,"%d",&i[n]);
}
fun(i,10);
for(n=0;n<10;n++)
{
fprintf(OUT,"%d\n",i[n]);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int k,j,t;
for (k=0;k<n-1;k++)
for (j=k+1;j<n;j++)
if (array[k]<array[j])
{
t=array[k];
array[k]=array[j];
array[j]=t;
}
----------------------
第22题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:实现两个整数的交换。
例如:给a和b分别输入:60和65,输入为:a=65 b=60
------------------------------------------------*/
#include<stdio.h>
#include<conio.h>
void wwjt();
void fun(int *a,int *b)
{
/**********Program**********/
/********** End **********/
}
main()
{
int a,b;
printf("Enter a,b:");
scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int a,b,n;
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<5;n++)
{
fscanf(IN,"%d%d",&a,&b);
fun(&a,&b);
fprintf(OUT,"a=%d b=%d\n",a,b);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int t;
t=*a;*a=*b;*b=t;
----------------------
第23题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项
小于0.0005时停止迭代)。
程序运行后,若输入精度0.0005,则程序应输出为3.14…。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
void wwjt();
double fun ( double eps)
{
double s=1.0,s1=1.0;
int n=1;
/**********Program**********/
/********** End **********/
}
main( )
{
double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int i;
double iIN;
double iOUT;
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<10;i++)
{
fscanf(IN,"%lf",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%lf\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案: while(s1>=eps)
{
s1=s1*n/(2*n+1);
s=s+s1;
n++;
}
return 2*s;
第24题 (20.0分) 难度:难 第1章
/*------------------------------------------------------------------------
【程序设计】
--------------------------------------------------------------------------
程序功能:从键盘输入三个整数,比较三个数并显示相应信息,具体如下:
(1)如果三个数都相等,显示"***";
(2)如果三个数中只有某两个数相等,显示"$$";
(3)如果三个数互不相等,则显示"#"。
(输出要换行)
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
Program-End之间删除【?】填入若干语句。不要删除标志否则不得分。
----------------------------------------------------------------------*/
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
/**********Program**********/
if(【?】) printf("【?】");
else if(【?】) printf("【?】");
else printf("【?】");
/********** End **********/
return 0;
}
答案:if(a==b && b==c) printf("***\n");
else if(a==b || b==c || c==a) printf("$$\n");
else printf("#\n");
第25题 (20.0分) 题号:376 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:计算并输出n(包括n)以内所有能被5或9整除的
自然数的倒数之和。
例如:若主函数中从键盘给n输入20后,则输出为S= 0.583333。
注意:n的值要求不大于100。。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt();
double fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int n;
double s;
printf("\nInput n:");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
wwjt();
}
void wwjt()
{
FILE *in, *out;
int i, n;
double s;
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<10;i++)
{
fscanf(in,"%d",&n);
s=fun(n);
fprintf(out,"%lf\n",s);
}
fclose(in);
fclose(out);
}
答案: int i;
double sum=0.0;
for(i=1;i<=n;i++)
if(i%5==0||i%9==0)
sum+=1.0/i;
return sum;
第26题 (20.0分) 难度:难 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数fun求sum=d+dd+ddd+……+dd...d(n个d),
其中d为1-9的数字。
例如:3+33+333+3333+33333(此时d=3,n=5),d和n在主函
数中输入。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
long int fun(int d,int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
int d,n;
long sum,fun();
printf("d=");
scanf("%d",&d);
printf("n=");
scanf("%d",&n);
sum=fun(d,n);
printf("sum=%ld\n",sum);
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 s=0,t=0;
int i;
for(i=1;i<=n;i++)
{ t=t+d;
s=s+t;
d=d*10;
}
return s;
----------------------
第27题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后
求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个
数(n>2)。例如:若输入9.9 8.5 7.6 8.5 9.3 9.5 8.9 7.8 8.6 8.4十
个得分,则输出结果为:8.687500。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void wwjt( );
double fun(double a[ ] , int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
double b[10], r;
int i;
printf("输入10个分数放入b数组中 : ");
for (i=0; i<10; i++)
scanf("%lf",&b[i]);
printf("输入的10个分数是 : ");
for (i=0; i<10; i++)
printf("%4.1lf ",b[i]);
printf("\n");
r = fun(b, 10);
printf("去掉最高分和最低分后的平均分 : %f\n", r );
wwjt( );
}
void wwjt( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, j ;
double b[10], r ;
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 < 10 ; i++)
{
for(j = 0 ; j < 10 ; j++)
{
fscanf(in, "%lf ", &b[j]) ;
}
r = fun(b, 10) ;
fprintf(out, "%f\n", r) ;
}
fclose(in) ;
fclose(out) ;
}
答案: double sum=0,max,min;
int i;
max=min=a[0];
for(i=0;i<n;i++)
{
sum=sum+a[i];
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
sum=sum-max-min;
return(sum/(n-2));
第28题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:计算并输出如“样张”的值。
例如:若主函数从键盘给n输入20后,则输出为S=534.188884。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
-------------------------------------------------------*/
#include<math.h>
#include<stdio.h>
void wwjt();
double fun(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int n;
double s;
printf("\n\nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n\n",s);
wwjt();
}
void wwjt()
{
FILE *in, *out;
int i,n;
double s;
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<10; i++)
{
fscanf(in,"%d",&n);
s=fun(n);
fprintf(out,"%lf\n",s);
}
fclose(in);
fclose(out);
}
答案: int i;
double s=0.0,s1=0.0;
for(i=1;i<=n;i++)
{
s1=s1+pow(i,0.5); /*求每一项*/
s=s+s1; /*按公式求出s*/
}
return s;
第29题 (20.0分) 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依
次放到一个字符串中。
例如:若二维数组中的数据为
W W W W
S S S S
H H H H
则字符串中的内容应是: WSHWSHWSHWSH。
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入
所编写的若干语句。
-------------------------------------------------------*/
#include<stdio.h>
#define M 3
#define N 4
void wwjt();
void fun(char (*s)[N],char *b)
{
/**********Program**********/
/********** End **********/
}
void main()
{
char a[100];
char w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},
{'H', 'H', 'H', 'H'}};
int i,j;
printf("The matrix:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:\n");
puts(a);
printf("\n\n");
wwjt ();
}
void wwjt( )
{
FILE *in, *out;
char a[100];
char w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},
{'H', 'H', 'H', 'H'}};
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<4;i++)
for(j=0;j<4;j++)
fscanf(in,"%c",&w[i][j]);
fun(w,a);
fprintf(out,"%s",a);
fclose(in);
fclose(out);
}
答案: int i,j,k=0;
for(i=0;i<N;i++) /*按列的顺序依次放到一个字符串中*/
for(j=0;j<M;j++)
b[k++]=s[j][i];
b[k]='\0';
第30题 (20.0分) 难度:易 第2章
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:对某一正数的值保留2位小数,并对第三位进行四舍
五入。
------------------------------------------------*/
#include <stdio.h>
#include"conio.h"
void wwjt();
double fun(float h)
{
/**********Program**********/
/********** End **********/
}
main()
{
float m;
printf("Enter m: ");
scanf("%f", &m);
printf("\nThe result is %8.2f\n", fun(m));
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int s ;
float 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(s=1;s<=5;s++)
{
fscanf(IN,"%f",&t);
o=fun(t);
fprintf(OUT,"%8.2f\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i;
i=(int)(h*1000)%10;
if(i>=5)
return(int)(h*100+1)/100.0;
else
return(int)(h*100)/100.0;
----------------------