53. 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
#include <stdio.h>
void fun(char *s, int a, double f)
{
/*******************************found******************************/
__1__ fp; FILE*
char ch;
fp = fopen("file1.txt", "w");
fprintf(fp, "%s %d %f\n", s, a, f);
fclose(fp);
fp = fopen("file1.txt", "r");
printf("\nThe result :\n\n");
ch = fgetc(fp);
/*******************************found******************************/
while (!feof(__2__)) fp
/*******************************found******************************/
{ putchar(__3__); ch = fgetc(fp); } ch
putchar('\n'); fclose(fp);
}
main( )
{ char a[10]="Hello!"; int b=12345;
double c= 98.76;
fun(a,b,c); }
54. 给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。
例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int fun(char *s)
{ int sum=0;
while(*s)
/*******************************found******************************/
{ if( isdigit(*s) ) sum = *s- __1__ ; '0'
/*******************************found******************************/
__2__; } s
/*******************************found******************************/
return __3__ ; sum
}
main( )
{ char s[81]; int n;
printf("\nEnter a string:\n\n"); gets(s);
n=fun(s); printf("\nThe result is: %d\n\n",n); }
55. 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。
#include <stdio.h>
#include <string.h>
#define N 5
#define M 10
/*******************************found******************************/
void fun(char (*ss) __1__, int k) [M]
{ int i=0 ;
/*******************************found******************************/
while(i< __2__) { N
/*******************************found******************************/
ss[i][k]=__3__; i ; } '\0'
}
main( )
{ char x[N][M]={"Create","Modify","Sort","skip","Delete"};
int i;
printf("\nThe original string\n\n");
for(i=0;i<N;i )puts(x[i]); printf("\n");
fun(x,4);
printf("\nThe string after deleted :\n\n");
for(i=0; i<N; i ) puts(x[i]); printf("\n"); }
56. 给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000
主函数中输出:m=30.0
#include <stdlib.h>
#define N 10
double fun(double x[],double *av)
{ int i,j; double d,s;
s=0;
for(i=0; i<N; i ) s = s x[i];
/*******************************found******************************/
__1__=s/N; *av
d=32767;
for(i=0; i<N; i )
if(x[i]<*av && *av - x[i]<=d)
/*******************************found******************************/
{ d=*av-x[i]; j=__2__; } i
/*******************************found******************************/
return __3__; x[j]
}
main( )
{ int i; double x[N],av,m;
for(i=0; i<N; i ){ x[i]=rand()%50; printf("%4.0f ",x[i]);}
printf("\n");
m=fun(x,&av);
printf("\nThe average is: %f\n",av);
printf("m=%5.1f ",m);
printf("\n"); }
57. 给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。
S=- - …
例如,当形参n的值为10时,函数返回:-0.204491。
#include <stdio.h>
double fun(int n)
{ int i, k; double s, t;
s=0;
/*******************************found******************************/
k=__1__; 1
for(i=1; i<=n; i ) {
/*******************************found******************************/
t=__2__; 2*i
s=s k*(2*i-1)*(2*i 1)/(t*t);
/*******************************found******************************/
k=k*__3__; -1
}
return s;
}
main( )
{ int n=-1;
while(n<0)
{ printf("Please input(n>0): "); scanf("%d",&n); }
printf("\nThe result is: %f\n",fun(n)); }
58. 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。
#include <stdio.h>
#include <string.h>
struct student
{ long sno;
char name[10];
float score[3];
};
void fun(struct student a[], int n)
{
/*******************************found******************************/
__1__ t; struct student
int i, j;
/*******************************found******************************/
for (i=0; i<__2__; i ) n-1
for (j=i 1; j<n; j )
/*******************************found******************************/
if (strcmp(__3__) > 0) a[i].name,a[j].name
{ t = a[i]; a[i] = a[j]; a[j] = t; }
}
main()
{ struct student s[4]={ {10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78},
{10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}};
int i, j;
printf("\n\nThe original data :\n\n");
for (j=0; j<4; j )
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i ) printf("%6.2f ", s[j].score[i]);
printf("\n"); }
fun(s, 4);
printf("\n\nThe data after sorting :\n\n");
for (j=0; j<4; j )
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i ) printf("%6.2f ", s[j].score[i]);
printf("\n"); } }
59. 给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为:asd123fgh5﹟﹟43df,
处理后新字符串为:12543asdfgh﹟﹟df。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char *fun(char *s)
{ int i, j, k, n; char *p, *t;
n=strlen(s) 1;
t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char));
j=0; k=0;
for(i=0; i<n; i )
{ if(isdigit(s[i]))
/*******************************found******************************/
{ p[__1__]=s[i]; j ;} j
else { t[k]=s[i]; k ; }
}
/*******************************found******************************/
for(i=0; i<__2__; i ) p[j i]= t[i]; k
p[j k]=0;
/*******************************found******************************/
return __3__; p
}
main( )
{ char s[80];
printf("Please input: "); scanf("%s",s);
printf("\nThe result is: %s\n",fun(s)); }
60. 给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct node
{ int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q; int t;
p = h;
while (p) {
/*******************************found******************************/
q = __1__ ; p->next
/*******************************found******************************/
while (__2__) q!=NULL
{ if (p->data > q->data)
{ t = p->data; p->data = q->data; q->data = t; }
q = q->next;
}
/*******************************found******************************/
p = __3__ ; p->next
}
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h=NULL;
for(i=0; i<N; i )
{ q=(NODE *)malloc(sizeof(NODE));
q->data=a[i];
q->next = NULL;
if (h == NULL) h = p = q;
else { p->next = q; p = q; }
}
return h; }
void outlist(NODE *h)
{ NODE *p;
p=h;
if (p==NULL) printf("The list is NULL!\n");
else { printf("\nHead ");
do { printf("->%d", p->data); p=p->next; } while(p!=NULL);
printf("->End\n"); }
}
main( )
{ NODE *head;
int a[N]= {0, 10, 4, 2, 8, 6 };
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
fun(head);
printf("\nThe list after inverting :\n");
outlist(head); }
61. 给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:
x1=5.000000. x2=3.000000. x1*x1 x1*x2=40.000000
#include <stdio.h>
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
/*******************************found******************************/
__1__ fun(int i, double x, double y) double
{ if (i==1)
/*******************************found******************************/
return __2__(x); f1
else
/*******************************found******************************/
return __3__(x, y); f2
}
main( )
{ double x1=5, x2=3, r;
r = fun(1, x1, x2);
r = fun(2, x1, x2);
printf("\nx1=%f, x2=%f, x1*x1 x1*x2=%f\n\n",x1, x2, r); }
62. 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct node
{ int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q; int t;
/*******************************found******************************/
p = __1__ ; h
while (p)
/*******************************found******************************/
{ q = __2__ ; p->next
while (q)
/*******************************found******************************/
{ if (p->data __3__ q->data) >
{ t = p->data; p->data = q->data; q->data = t; }
q = q->next; }
p = p->next; }
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h = (NODE *)malloc(sizeof(NODE));
h->next = NULL;
for(i=0; i<N; i )
{ q=(NODE *)malloc(sizeof(NODE));
q->data=a[i];
q->next = NULL;
if (h->next == NULL) h->next = p = q;
else { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p = h->next;
if (p==NULL) printf("The list is NULL!\n");
else { printf("\nHead ");
do { printf("->%d", p->data); p=p->next; } while(p!=NULL);
printf("->End\n"); }
}
main( )
{ NODE *head;
int a[N]= {0, 10, 4, 2, 8, 6 };
head=creatlist(a); printf("\nThe original list:\n");
outlist(head); fun(head);
printf("\nThe list after sorting :\n"); outlist(head); }