您好,欢迎来到微智科技网。
搜索
您的当前位置:首页c语言程序设计小杂烩

c语言程序设计小杂烩

来源:微智科技网
一个具有15个整型数组元素的一维数组array。使用函数实现以下功能:

1)使用srand()和rand()初始化该一维数组,使其每个数组元素在-300到500之间(含-300和500);

2)编写一个数组输出函数,输出数组元素,要求每行仅输出10个数组元素。

3)使用冒泡排序法对该数组按照由小到大(由大到小)的顺序进行排序,并在主函数中输出排序后的结果。

4)使用折半(二分)查找法查找数组中是否存在200,若存在返回200在数组中的位置,否则返回-1

5)删除数组元素array[10],使其后面的数组元素依次前移。 6)将467插入到array中,插入后保持数组的排序方式不变。 7) 将数组元素左移6位。

我的程序如下:

#include #include #include #define N 15 #define M 6 #define X 2 void main() {

//随机赋值

srand(time(NULL)); //随机函数随时间变化而随机赋值的固定格式 int a[N],n,m; for(m=0;mprintf(\"随机赋值后的数组:\\n\");

for(m=0;m//冒泡法排序 int t;

printf(\"用冒泡法排序结果:\\n\"); for(n=0;nif(a[m]>a[m+1])//每次都用a[m]和其后的没有排序的数进行比较(注意排好的不再进行比较) { t=a[m]; a[m]=a[m+1]; a[m+1]=t; } for(m=0;m1 / 30

for(m=n+1;ma[m]) k=m; //注意:嵌套的for语句在此已经结束,比较也跟着结束了。 //下面的语句实现:通过交换的方式把a[n-1]其后面的数的最小值给a[n] t=a[k]; a[k]=a[n]; a[n]=t; }

//输出排序后的数组

for(m=0;m//输入要查找的数 int b;

printf(\"请输入要查找的数:\"); scanf(\"%d\//折半法查找 int i, j,mid;

i=0;j=N-1;mid=(i+j)/2; for(;i<=j;) { if(b==a[mid])

{ printf(\"你查找的是数组中第%d个数\\n\ break; } else

{ if(b>a[mid]) i=mid+1; else j=mid-1; mid=(i+j)/2; }

if(i>j)

printf(\"你查找的数字不存在!\\n\");

//删除数 int de,flag,count=0; printf(\"请输入要删除的数字:\"); scanf(\"%d\ for(m=0;m2 / 30

for(;m/*因为对于最外面的for语句来说本次循环执行完之后m要加1,要想从flag处继续往后查找(实质上此时a[flag]处存放的是原来a[flag+1]的值)和输入值相等的数,必须的将让flag-1。也就是说:在数组中与输入值相等的位置必须判断两次,因为此处的值被其后面的值覆盖后,如果不再判断该处的值,就会漏掉被删除数后面的一个数(如果删除的数值与其后面的数值相等,就会出错)*/ count++; }

printf(\"删除这个数后的数组为:\\n\"); for(m=0;m//插入一个数字 int q,N1=N-count;

printf(\"请输入要插入的数字:\"); scanf(\"%d\

printf(\"插入该数之后的新数组为:\\n\"); for(n=N1;n>=0;n--) { if(q>=a[n])

/*从数组的最后一位开始,如果比q小,直接把q的值赋给其后面的一位(定义数组时应该多定义一位):如果比q小,把该数放到其后的位置,然后再判断原来其前面的数与q的大小。如此循环即可。*/ { a[n+1]=q;break; } else a[n+1]=a[n]; a[n]=q; //如果到最后也没找到,即已经把a[0]的值赋给了a[1],此时说明q最小,把q赋给a[0](此时n已经为0) } for(m=0;mprintf(\"将上面的数组左循环移%d位!\\n\

for(m=0;m{ s=a[0];//把数组的第一个数组储存起来 for(n=0;n3 / 30

//X进制转换 int h,c[100],js=0; printf(\"请输入要转换成%d制的十进制数:\ scanf(\"%d\ while(h!=0)

/*10进制13转2进制:13/2 = 6 余数为1 ,6/2 = 3 余数为0 , 3/2 = 1 余数为1 ,1/2=0 余数为1,所以对应的二进制数为1101(第一位1是最后的商)*/ {

c[js]=h%X; js++; h=h/X; } //倒序输出数组c即为所求 for(m=js-1;m>=0;m--) printf(\"%2d\ printf(\"\\n\");

}

从数组里删除数

#include #nclude #include #define N 10 void main() { int a[N],i,*j,*t,b,n=0; j=a; srand(time(NULL)); for(i=0;i4 / 30

}

t=j; for(;j求和与图形

25编写程序,求下面数列前20项的和。结果取3位小数。

1,-1/3^3,1/5^3,1/7^3,„„,(-1)^(n-1)/(2n-1)^3,„„(其中,^ 表示幂运算) ~0.969

#include int main() {long i,sign; double s; sign=1; s=0; i=1; while(i<=20) {

s=s+1.0/((2*i-1)*(2*i-1)*(2*i-1))*sign; sign=-sign; i++; }

printf(\"\\n%.3lf\return 0; }

26编写程序,求下面数列前20项的和。结果取3位小数。 1,1/2^4,1/3^4,1/4^4,„„,1/n^4,„„(其中,^ 表示幂运算) ~1.082

#include int main() {long i; double s; s=0; i=1;

5 / 30

while(i<=20) {

s=s+1.0/(i*i*i*i); i++; }

printf(\"\\n%.3lf\return 0; } ~~~

35编写程序,计算并输出下面数列前n项的和(设n=20,x=0.5),要求结果保留3位小数。 sin(x)/x,sin(2x)/2x,sin(3x)/3x, „„ ,sin(n*x)/(n*x) ,„„(其中,sin(x)为正弦函数) ~2.786

#include #include \"math.h\" int main() {long i; double s,x=0.5; s=0; i=1; while(i<=20) {

s=s+sin(i*x)/(i*x); i++; }

printf(\"\\n%.3lf\return 0; }

36编写程序,计算并输出下面数列前n项的和(设n=20,x=0.5),要求结果保留3位小数。 cos(x)/x,cos(2x)/2x,cos(3x)/3x, „„ ,cos(n*x)/(n*x), „„ (其中,cos(x)为余弦函数) ~1.277

#include #include \"math.h\" int main() {long i; double s,x=0.5; s=0; i=1; while(i<=20) {

s=s+cos(i*x)/(i*x); i++;

6 / 30

}

printf(\"\\n%.3lf\return 0; }

79.编写程序,用双重循环和表达式输出下面图形。(不能使用两维数组)。 1 2 3 4 5 6 7 8 9 10 11 12

#include int main() { int i,j,k; for(i=1;i<=3;i++) {

for(j=1;j<=4;j++) {

k=(i-1)*4+j; printf(\"%4d\ }

printf(\"\\n\"); }

return 0; }

74.编写程序,使用重双循环输出下列三角形: A A B C A B C D E A B C D E F G #include int main() {int i,j;

for(i=1;i<=4;i++) {

for(j=1;j<10-2*i;j++) printf(\" \"); for(j=1;j<=2*i-1;j++) printf(\"%2c\ printf(\"\\n\"); } return 0; } 80

(不能使用两维数组)。 7 / 30

* *** ***** ******* ********* ******* ***** *** * #include #include \"math.h\" void main() { }

int i,j;

for(i=-4;i<=4;i++) { }

for(j=1;j<10+abs(i);j++)

printf(\" \"); printf(\"*\"); for(j=1;j<=9-abs(i)*2;j++) printf(\"\\n\");

数组

1.编写程序,使用随机函数初始化一个具有20个整型数据的一维数组元素a,使其每个数组元素在100到300之间,使用冒泡排序法按照由小到大的顺序对该数组进行排序,输出排序前、后的数组元素。

#include #include #include #define N 10

void printArray(int *p,int n); int main() {

int a[N]; int i,j,temp; srand(time(NULL)); for(i=0;ia[i] = 100+rand()%(300-100+1); printArray(a,N); {

for(j=0;j8 / 30

for(i=0;i{ if(a[j]>a[j+1]) {

temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }

}

} printArray(a,N);

return 0; }

void printArray(int *p,int n) { printf(\"\\n\"); int *ptr = p; int i; for(i=0;ptr{ printf(\"%5d\ if((i+1)%10 == 0)

printf(\"\\n\");

}

printf(\"\\n\");

}

#include #include #include #define N 20 void main() {

int a[N]; int *p; int i,j,temp; srand(time(NULL));

for(i=0;ifor(i=0;ptrprintf(\"%5d\

9 / 30

}

if((i+1)%10 == 0)

printf(\"\\n\");

printf(\"\\n\"); { }

for(j=0;jif(a[j]>a[j+1]) {

temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }

for(i=0;ip=a; ptr = p;

4.把50-85这36个自然数按行赋给二维数组A[6][6],计算输出主对角线以上(含主对角线)各元素值的立方根之积。结果保留3位小数。 结果:37698672809.743 #include \"math.h\" #include int main()

{ int a[6][6],i,j,k=50; double s=0; for (i=0;i<6;i++) for(j=0;j<6;j++) { a[i][j]=k;

k=k+2; } for(i=0;i<6;i++)

10 / 30

printf(\"\\n\");

for(i=0;ptrprintf(\"\\n\");

printf(\"%5d\if((i+1)%10 == 0) printf(\"\\n\");

}

for(j=0;j<6;j++) if(j+i<6)

s=s*pow(a[i][j],1.0/3); printf(\"%.3lf\return 0; }

5.把21-56这36个自然数按列赋给二维数组A[6][6],计算输出主对角线以下(含主对角线)各元素值立方根之积。

结果:42610953771.152 #include \"math.h\" #include int main()

{ int a[6][6],i,j,k=21; double s=1; for (i=0;i<6;i++) for(j=0;j<6;j++) { a[j][i]=k;

k=k+1; } for(i=0;i<6;i++) for(j=0;j<6;j++) if(i+j>=5)

s=s*pow(a[i][j],1.0/3); printf(\"\\n%.3lf\return 0; }

6. 编写程序,实现一维数组A[10]元素值循环左移4位(要求用指针实现)。 例数组的原值:1 2 3 4 5 6 7 8 9 10 结果为:7 8 9 10 1 2 3 4 5 6 #include #define N 10 #define LM 4 int main() {

int a[N],i; for(i=0;i11 / 30

a[i] = i+1; printf(\"%5d\

}

printf(\"\\n\"); for(i=0;itemp = *(a+N-1); for(p=a+N-1;p>a;p--) }

printf(\"%5d\printf(\"\\n\"); *p =*(p-1); *p = temp;

int temp,*p;

For(i=0;ireturn 0;

8. 编写程序,建立一个有10个元素组成的一维数组(该数组已存放9个数据,数据自定,并已按降序排列),要求从键盘输入一个数据,并将其插入到数组适当位置,即插入后的数组仍按降序排列,最后将结果输出(要求用指针实现)。 #include int main()

{ int a[10]={3,6,7,9,12,16,18,20,90},i,x,*p; p=a;

scanf(\"%d\ i=8;

while(i>=0 && p[i]>x) { p[i+1]=p[i]; i--; } p[i+1]=x; for(i=0;i<10;i++) printf(\"%4d\return 0; }

14. 编写程序,把一个数组倒序,并输出倒序前、后的数据(要求用指针实现)。 例:倒序前的数:1 2 3 4 5 6 7 8 倒序后的数:8 7 6 5 4 3 2 1 #include int main()

{ int a[]={1,2,3,4,5,6,7,8},i,t,*p; p=a;

for(i=0;i<4;i++) { t=p[i];

12 / 30

p[i]=p[7-i]; p[7-i]=t; } for(i=0;i<8;i++) printf(\"%3d\return 0; }

15. 已知一个一维数组(数据自定且不重复),然后从键盘上输入一个数x,若x在数组中存在,则删除该元素。并输出删除后的数组(要求用指针实现)。

例:若数组的数据为: 12 34 37 88 97 99,x为37 则,结果为: 12 34 88 97 99 #include int main()

{ int a[8]={12,34,,37,,88,97,99},i,x,*p,j; p=a;

scanf(\"%d\ i=0;

while(i<=7 && p[i]!=x) i++; for(j=i;j<8;j++) p[j]=p[j+1]; for(i=0;i<8;i++) printf(\"%4d\return 0; }

16.编写程序,查找一个由大到小的一维数组array[20]={281,279,268,266,258,251,234,228,217,208,

162,160,158,139,137,127,124,122,115,110},使用折半(二分)查找法查找268是否在该数组中,若在输出268在该数组中的位置,否则输出“不存在该数”。 结果:2 #include #define N 20 int main() {

int s=0,e = N-1; int mid = (s+e)/2; {

if(array[mid] ==268) {

int array[N]={281,279,268,266,258,251,234,228,217,208,162,160,158,139,137,127,124,122,115,110};

while(s<=e)

printf(\"%d in the location of %d\\n\

13 / 30

}

}

return 0;

else if(array[mid] >268) else }

printf(\"不存在!\\n\"); return 0;

{ e=mid - 1; mid = (s+e)/2; } { s= mid +1; mid = (s+e)/2; }

20. 编写程序,实现一维数组A[10]元素值循环右移4位(要求用指针实现)。 例数组的原值:1 2 3 4 5 6 7 8 9 10 结果为:5 6 7 8 9 10 1 2 3 4 #include #define N 10 #define RM 4 int main() {

int a[N],i; for(i=0;iprintf(\"\\n\"); for(i=0;ifor(p=a;pfor(i=0;iprintf(\"%5d\printf(\"\\n\"); *p =*(p+1); *p = temp;

a[i] = i+1; printf(\"%5d\

int temp,*p;

temp = *a;

return 0;

14 / 30

}

函数

51.编写一个处理二维数组的通用函数,该函数可以实现对任意数值型二维数组求它所有元素的最大值(保留3位小数)。已知数组A(数据附后),编写主程序针对这个数组调用以上函数得到结果并输出。 A数组的数据如下: 11,52,56,67,25 45,,54,69, 96,63,68,79,86 98,65,63,85,78 答案:98.000 #include

double Max(double a[],int row,int line) { }

void main() { }

52.编写一个通用函数,该函数可以实现判断一个正整数的所有因子之和是否等于该数,若等于,则返回“yes”,否则,返回“no”。例如6的因子是1,2,3,6=1+2+3,则返回“yes”;而8的因子是1,2,4,但8≠1+2+4,则返回“no”。编写主函数针对整数1200进行判断并输出结果。 答案:no #include void TN(int number)

15 / 30

double a[4][5]={11,52,56,67,25,

45,,54,69,, 96,63,68,79,86, 98,65,63,85,78};

double *p; p=a; int i,j;

double max = *p; for(i=0;ifor(j=0;jreturn max;

max = *(p+i*line+j);

double max=Max(a[0],4,5);

printf(\"%.3f\\n\

{ }

void main() { }

53.编写一个通用函数,该函数可以实现计算某段整数区间内的奇数的和。例若求[1,100]之间奇数的和,即求1+3+5+„+99的和。编写主程序调用该函数实现求[200,1000]之间奇数和,并在主程序输出。 答案:240000 #include double Sum(int x1,int x2) { }

void main() { }

57.编写一个通用函数,该函数可以实现判断:一个含有四位数字的整数的千位数字与百位数字的和等于

16 / 30

int start,end;

printf(\"Please input the start number;\\n\"); scanf(\"%d\

printf(\"Please input the end number;\\n\"); scanf(\"%d\

printf(\"%.0f\\n\int i;

double sum=0; for(i=x1;i<=x2;i++)

if(i%2==1)

sum+=i; return sum; int num;

printf(\"Please input an integer number:\\n\"); scanf(\"%d\TN(num); int m=1,k;

for(k=2;k<=number/2;k++)

if(number%k==0) else

printf(\"no!\\n\"); m=m+k; printf(\"yes!\\n\"); if(number==m)

十位数字与个位数字的和。例如:3746,它的千位、百位、十位与个位分别是3,7,4,6,且3+7=4+6,符合条件;而数字1234则不符合条件。编写主程序调用该函数实现求所有四位数字中满足条件的数的个数。 答案:615 #include int Judge (long num) { }

void main() { }

60.编写一个通用函数,该函数可以实现对数值型数组的倒序。倒序的含义是把数组的元素值前后颠倒。例数组:23,54,67,43,17,51倒序的结果为:51,17,43,67,54,23。编写主程序,数组初始化方式不限,并输出,然后调用该函数实现倒序后再输出倒序的结果。 #include #define N 6

void Transfer(double *b,int n) {

double temp; double *i=b; double *j=b+n-1; while(j>i) {

temp=*i; *i=*j; *j=temp;

17 / 30

int i; int count=0;

for(i=1000;i<=9999;i++)

if(Judge(i)==1)

count++;

int g,s,b,q; q=num/1000; b=(num-q*1000)/100; s=(num-q*1000-b*100)/10; g=num-q*1000-b*100-s*10; int a;

if((q+b)==(s+g)) else

a=0; return a; a=1;

printf(\"%d\\n\

}

}

i++; j--;

void main() { }

63.编写一个通用函数,该函数可以实现求数值型二维数组的上三角各元素的平方根的和(即先对上三角各元素求平方根,然后再对平方根求和)。编写主程序调用该函数,计算数组A的上三角元素的平方根的和。 上三角的含义:左上部分(包含对角线元素),如下二维数组的0元素区域即为上三角。 0 0 0 0 0 0 0 0 0 7 0 0 0 3 8 0 0 5 9 3 0 2 4 6 7 数组A的数据如下: 23 45 56 73 34 34 74 85 54 7 56 98 56 67 98 54 83 12 59 98 87 74 48 62 答案:116.377180 #include #include

double Cal(double a[5][5],int n,int m) {

int i,j; double sum=0; for(i=0;idouble array[N]={23,54,67,43,17,51}; int i;

for(i=0;iprintf(\"%.0f\\Transfer(array,N); printf(\"\\n\"); for(i=0;iprintf(\"%.0f\\printf(\"\\n\");

sum+=sqrt(a[i][j]); return sum; }

18 / 30

void main() {

double a[5][5]={23 , 45, 56 , 73 , 34, }

68.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成二进制。例如把18转换成10010。编写主程序调用该函数,把整数23465转换成二进制并输出。

注:把一个十进制的整数转换成二进制的方法是:把十进制数当作被除数,用2除,直到商为0为至,然后把余数倒序即可。例18除2的余数依次是0、1、0、0、1,则其二进制为:10010。 答案:101101110101001 #include void Transfer(int num) { }

void main() { }

69.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成七进制。例如把88转换成154。编写主程序调用该函数,把整数563465转换成七进制并输出。

19 / 30

int num;

printf(\"Please input an integer:\\n\"); scanf(\"%d\Transfer(num); int a[100]; int count=0; while(num!=0) { }

for(int i=count-1;i>=0;i--)

printf(\"%d\

if(num%2==0) else

a[count++]=1; num=num/2;

a[count++]=0;

};

printf(\"%f\\n\

34 , 74 , 85 ,54 , 7, 56, 98 , 56 , , 67, 98, 54 , 83, 12 , 59, 98 , 87, 74, 48, 62

double rootsum=Cal(a,5,5);

注:把一个十进制的整数转换成七进制的方法是:把十进制数当作被除数,用7除,直到商为0为至,然后把余数倒序即可。例88除7的余数依次是4、5、1,则其七进制为:154。 答案:4534520 #include void Transfer(int num) { }

void main() { }

72. 设计一个函数:求两个正整数的最大公约数。在主调函数中调用这个函数并完成下列任务: (1)求30375和14175的最大公约数s; (2)求18360和16875的最大公约数t; (3)求s与t的和p;

(4)求出p与13608的最大公约数。 答案:216 #include int GYS(int a,int b) {

int c; if(a20 / 30

c=a; a=b; b=c; int num;

printf(\"Please input an integer:\\n\"); scanf(\"%d\Transfer(num); int a[100]; int count=0; while(num!=0) { }

for(int i=count-1;i>=0;i--)

printf(\"%d\

num=num/7; a[count++]=num%7;

}

{ a=b; b=c; c=a%b; } return b;

void main() {

int s,t,p,m;

s=GYS(30375,14175);

}

t=GYS(18360,16875);

p=s+t;

m=GYS(p,13608); printf(\"%d\\n\

77. 设计一个函数:求两个正整数的最小公倍数。在主调函数中调用这个函数并完成下列任务: (1)求440和1005的最小公倍数s; (2)求4080和288的最小公倍数t; (3)求s与t中的最大数p; (4)求出p与4592的最小公倍数。 答案:507560

#include int gbs(int a,int b) {

int a1,b1,c; if(aa1=a,b1=b; c=a%b; while(c!=0) { a=b; b=c; c=a%b; }

return a1*b1/b;

21 / 30

c=a; a=b; b=c;

}

void main()

{ }

int s,t,m; s=gbs(440,1005); t=gbs(4080,288); int p=s>t?s:t; m=gbs(p,4592); printf(\"%d\\n\

42C10. 已知 数据文件{}中存放有1—100之间各自然数n的平方根,(文件中每行只存储一个数值数据)。编程查找当n=7时其平方根(7的平方根等于2.58)在文件{}中的位置(即记录号),并向文件t2.dat输出该记录号。 //the number is:88 #include \"stdio.h\" #include \"stdlib.h\" #include \"math.h\" void main() {

FILE *fp,*fp1; double num; int i=0;

if((fp=(fopen(\"d:\\\\12345678\\\\dat2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=(fopen(\"d:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) {

fscanf(fp,\"%6lf\\n\ i++; }

fclose(fp);

22 / 30

if(num==2.58) {

fprintf(fp1,\"the number is:%d\printf(\"the num is:%d\break; }

fclose(fp1); }

34C2. 已知在正文文件da1.dat中,每个纪录只有两项数据,第一项为一整数表示学生的

学号,第二项为形如xx.x的一个实数,试统计计算并向文件t2.dat输出全部学生的平均成绩V与90分以上(含90分)的学生人数N。

//average= 65.5,>90=72 #include \"stdio.h\" #include \"stdlib.h\" struct stu{ int num; float score; }stud; void main() {

FILE *fp,*fp1; int N=0,n=0; float sum=0,V=0;

if((fp=fopen(\"D:\\\\12345678\\\\da1.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { } V=sum/n;

fprintf(fp1,\"average=%5.1f,>90=%d\fclose(fp); fclose(fp1); }

35C3. 已知在正文文件ch1.dat中, 每个记录的数据是有一个由字母组成的字符个数不多

23 / 30

fscanf(fp,\"%4d %5f\\n\printf(\"%4d %5.1f\\n\sum+=stud.score; n++;

if(stud.score>=90)

N++;

于10个的字符串,如:″absolute″。试查找文件中从第150个记录到第250个记录间出现的第一个最大的字符串,并向文件t2.dat输出查找结果和该字符串中的字符个数n。

// str=mwnhkkevej,num=10#include \"stdio.h\"

#include \"stdlib.h\" void main() {

FILE *fp,*fp1; char ch[10],str[10]; int n=0,i=0,num=0;

if((fp=fopen(\"D:\\\\ 12345678\\\\ch1.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { }

fprintf(fp1,\"str=%s,num=%d\fclose(fp); fclose(fp1); }

n++;

fscanf(fp,\"%s\\n\//printf(\"%s\\n\if(n>=150&&n<=250)

{for(i=0;i<10;i++) }

if(ch[i]=='\\0') break; { num=i;

for(i=0;i<=num;i++) str[i]=ch[i]; } if(num36C4. 已知在正文文件ch1.dat中, 每个记录的数据是有一个由字母组成的字符个数不多于10个的字符串,如:″absolute″。统计在该文件中只有4个字符的字符串的个数n1和

24 / 30

字符串的最后一个字符是f的字符串的个数n2,并将统计结果存入文件t2.dat中。

// n1=54,n2=17 #include \"stdio.h\" #include \"stdlib.h\" void main() {

FILE *fp,*fp1; char ch[10]; int n1=0,n2=0,i=0;

if((fp=fopen(\"D:\\\\12345678\\\\ch1.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { }

fprintf(fp1,\"n1=%d,n2=%d\fclose(fp); fclose(fp1); }

fscanf(fp,\"%s\\n\printf(\"%s\\n\for(i=0;i<10;i++) if(ch[i]=='\\0') break; if(i==4) n1++; if(ch[i-1]=='f') n2++;

38C6. 已知在正文文件da1.dat中,每个纪录只有两项数据,第一项为一整数表示学生的学号,第二项为形如xx.x的一个实数,试统计计算并向文件t2.dat输出成绩排序在前20名的学生的平均成绩V。 //average= 99.1 #include \"stdio.h\" #include \"stdlib.h\" void main() {

FILE *fp,*fp1;

25 / 30

int i=0,j=0,k=0,num[1000];

float temp=0,sum=0,V=0,score[1000];

if((fp=fopen(\"D:\\\\12345678\\\\da1.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { } k=i;

for(i=0;iif(score[i]temp=score[i]; score[i]=score[j]; score[j]=temp;

fscanf(fp,\"%4d %5f\\n\printf(\"%d %f\\n\i++;

for(i=0;i<20;i++) sum+=score[i]; V=sum/20;

fprintf(fp1,\"average=%5.1f\fclose(fp); fclose(fp1); }

38C6. 已知在正文文件da1.dat中,每个纪录只有两项数据,第一项为一整数表示学生的学号,第二项为形如xx.x的一个实数,试统计计算并向文件t2.dat输出成绩排序在后20名的学生的平均成绩V。

//average= 31.9 #include \"stdio.h\" #include \"stdlib.h\" void main() {

FILE *fp,*fp1;

int i=0,j=0,k=0,num[1000];

26 / 30

float temp=0,sum=0,V=0,score[1000];

if((fp=fopen(\"D:\\\\12345678\\\\da1.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { } k=i;

for(i=0;iif(score[i]>score[j]) { }

temp=score[i]; score[i]=score[j]; score[j]=temp;

fscanf(fp,\"%4d %5f\\n\printf(\"%d %f\\n\i++;

for(i=0;i<20;i++) sum+=score[i]; V=sum/20;

fprintf(fp1,\"average=%5.1f\fclose(fp); fclose(fp1); }

35C3. 已知在正文文件ch1.dat中, 每个记录的数据是有一个由字母组成的字符个数不多于10个的字符串,如:″absolute″。试查找文件中从第50个记录到第150个记录间出现的第一个最大的字符串,并向文件t2.dat输出查找结果和该字符串中的字符个数n。

//str=xpkaglnbzz,num=10#include \"stdio.h\"

#include \"stdlib.h\" void main() {

FILE *fp,*fp1; char ch[10],str[10]; int n=0,i=0,num=0;

if((fp=fopen(\"D:\\\\12345678\\\\ch1.dat\

27 / 30

{

printf(\"cannot open the file!\\n\"); exit(0); }

if((fp1=fopen(\"D:\\\\12345678\\\2.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

while(feof(fp)==0) { }

fprintf(fp1,\"str=%s,num=%d\fclose(fp); fclose(fp1); }

n++;

fscanf(fp,\"%s\\n\//printf(\"%s\\n\if(n>=50&&n<=150)

{for(i=0;i<10;i++) }

if(ch[i]=='\\0') break; { num=i;

for(i=0;i<=num;i++) str[i]=ch[i]; } if(num43C11. 已知 数据文件{}中已存储有50个学生的学号(整型)与一门课程的成绩(实型),编程将该文件中50个学生的学号与成绩分别赋给整型数组num和实型数组grade,计算并输出第21-30名学生的平均分。

//avg=68.70 #include \"stdio.h\" #include \"stdlib.h\" struct stu{ int num; float grade; }stud; void main() { FILE *fp; int num[50],i;

28 / 30

float grade[50],avg=0;

if((fp=fopen(\"D:\\\\12345678\\\\dat3.dat\{

printf(\"cannot open the file!\\n\"); exit(0); }

for(i=0;i<50;i++) { }

printf(\"avg=%.2f\fclose(fp); }

fscanf(fp,\"%2d %2f\\n\printf(\"%2d %2.0f\\n\if(i>19&&i<30)

avg+=grade[i];

在文件中写入 * *** ***** ******* ********* ******* ***** *** *

#include #include #include void main() {

FILE *p;

char ch,filename[10]; int i,a,j;

printf(\"请输入文件名:\"); scanf(\"%s\

if((p=fopen(\"d:\\\\c语言\\\\file\\\\1\{

printf(\"Cannot open the file!\"); exit(0);

29 / 30

}

ch=getchar(); ch=getchar(); for(a=0;a<2;a++) { for(i=-4;i<=4;i++) { for(j=1;j<10+abs(i);j++) { ch=(' ');fputc(ch,p); putchar(ch);

}

for(j=1;j<=9-abs(i)*2;j++)

{ ch=('*');fputc(ch,p);

putchar(ch);

} ch=('\\n'); fputc(ch,p); putchar(10); } fclose(p);

}

}

30 / 30

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务