C语言程序设计(五)
17
设计功能:编写函数fun(str,i,n),从字符串str中删除第i个
字符开始的连续n个字符(注意:str[0]代表字符串
的第一个字符)。
------------------------------------------------*/
#include "stdio.h"
#include "string.h"
main()
{
char str[81];
int i,n;
void fun(char str[],int i,intn);
void TestFunc();
printf("请输入字符串str的值:\n");
scanf("%s",str);
printf("你输入的字符串str是:%s\n",str);
printf("请输入删除位置i和待删字符个数n的值:\n");
scanf("%d%d",&i,&n);
while (i+n-1>strlen(str))
{
printf("删除位置i和待删字符个数n的值错!请重新输入i和n的值\n");
scanf("%d%d",&i,&n);
}
fun(str,i,n);
printf("删除后的字符串str是:%s\n",str);
TestFunc();
}
void fun(char str[],int i,int n)
{
/*********Begin**********/
/********** End **********/
}
void TestFunc()
{
FILE *IN,*OUT;
char i[200];
/*char o[200];*/
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FileError");
}
fscanf(IN,"%s",i);
fun(i,2,8);
fprintf(OUT,"%s\n",i);
fclose(IN);
fclose(OUT);
}
【参考代码】
while(str[i+n-1])
{
str[i-1]=str[i+n-1];
i++;
}
str[i-1]='\0';
18
请编一个函数void fun(inttt[M][N],int pp[N]),
tt指向一个M行N列的二维数组,求出二维数组每列
中最大元素,并依次放入pp所指一维数组中。二维
数组中的数已在主函数中赋予。
#include "conio.h"
#include "stdio.h"
#define M 3
#define N 4
void fun(int tt[M][N],intpp[N])
{
/*********Begin**********/
/********** End **********/
}
main()
{
int t[M][N]={{22,45,56,30},
{19,33,45,38},
{20,22,66,40}};
void NONO() ;
int p[N],i,j,k;
printf("The original datais:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nThe resultis:\n");
for(k=0;k<N;k++)printf("%4d",p[k]);
printf("\n");
NONO();
}
void NONO()
{
int i,j, array[3][4],p[4];
FILE *rf, *wf ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for (i=0; i < 3; i++)
for (j=0; j < 4; j++)
fscanf(rf, "%d",&array[i][j]);
fun(array,p);
for (j=0; j < 4; j++)
{
fprintf(wf,"%7d", p[j]);
fprintf(wf,"\n");
}
fclose(rf) ;
fclose(wf) ;
}
【参考代码】
int i,j;
for(j=0;j<N;j++)
{
pp[j]=tt[0][j];
for(i=1;i<M;i++)
if(tt[i][j]>pp[j])
pp[j]=tt[i][j];
}
19
【程序设计】
--------------------------------------------------
功能:统计出若干个学生的平均成绩,最高分以及得最高
分的人数。
例如:输入10名学生的成绩分别为 92 87 68 56 92
84 67 75 92 66 则输出平均成绩为77.9,
最高分为92,得最高分的人数为3人。
------------------------------------------------*/
#include "stdio.h"
float max=0;
int j=0;
float fun(float array[],int n)
{
/*********Begin**********/
【参考代码】
int i;float sum=0,ave;
max=array[0];
for(i=0;i<n;i++)
{ if(max<array [i]) max=array[i];
sum=sum+array [i]; }
ave=sum/n;
for(i=0;i<n;i++)
if(array [i]==max) j++;
return(ave);
/********** End **********/
}
TestFunc()
{
FILE *IN,*OUT;
float iIN[10],iOUT;
int iCOUNT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please VerifyThe Currernt Dir..It May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please VerifyThe Current Dir.. It May Be Changed");
}
for(iCOUNT=0;iCOUNT<10;iCOUNT++)
fscanf(IN,"%f",&iIN[iCOUNT]);
iOUT=fun(iIN,10);
fprintf(OUT,"%f%f\n",iOUT,max);
fclose(IN);
fclose(OUT);
}
main( )
{
float a[10],ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=fun(a,10);
printf("ave=%f\n",ave);
printf("max=%f\n",max);
printf("Total:%d\n",j);
TestFunc();
20
【程序设计】
--------------------------------------------------
功能:用辗转相除法求两个整数的最大公约数。
------------------------------------------------*/
#include "stdio.h"
int gcd(int n,int m)
{
/*********Begin**********/
/********** End **********/
}
main()
{
int n,m,result;
void TestFunc();
scanf("%d%d",&n,&m);
result=gcd(n,m);
printf("the gcd is%d\n",result);
TestFunc();
}
void TestFunc()
{
FILE *IN,*OUT;
int m,n;
int i[2];
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FileError");
}
for(n=0;n<6;n++)
{
for(m=0;m<2;m++)
{
fscanf(IN,"%d",&i[m]);
}
o=gcd(i[0],i[1]);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
【参考代码】
int r,t;
if(n<m) { t=n;n=m;m=t;}
r=n%m;
while(r!=0)
{ n=m;m=r;r=n%m;}
return(m);