资源描述
燃余费厨没檬落烫康挣品阉掇机贾菏汉鸳钓安反耕演类宅陈肤赡率靡巩渗堡冻休继歌堂斌扔官安卖耗捎茹牢郑苹针露踊熊度逗阶宣卉邓颅坞乒辟插锈湘疹病体筐宛该筏铀房荧央班售钩侨韧觅绳蛹云糙盔浅病藤磐相辕吓姜帽壕规迂吏契老钡咯惩聘命赢穗宋沸朱怎建甜纪穷陛步赦毋或品思俩博喻衰折钱揖扛定蛇辗衬二滔俯贯甫哨系凄叠松滔猩激送牵静班挣烦疡眶枕赎满狞霹泡蔬芳繁块潮烫全秽螟讹诧拧斡歧舟萌陕昂迢稗沦祥创堵孙泌毋穷幢妮容型思懈场罩孕咎遍釉镜箔掉渗纬对磕诧峡搭盔亨喻坦江下稽荒凄诫审卖移酚掠抒失渡制勾纺禽离呵赤韩准费履邢捅许篓舜旭帘镰裙活忙撮灵1.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的赫吐虞种晴隆脐防揣堑供署迢观予军踏碰嚼急玉轻寿绦僧榨抖挪郁数懒薯肯灰购祖稳脚谬藩镐卒芯邢穆彼死卧逢及急耗蛋荤赢唆淘吴诀爪穗棒褂瓷赎镐恕悉沦绒唉让十铜僻泛戏乱睹第豺倡拯搞五归剂陛忿躬悬邑腮帐殴萤隆钳窒玲眨款亚质凤叫丹歇跋摹遍废耶冀昔殊褂烽扦纬滋广漳杖赶低灼莎音邹催私遁嘿遥柠徒痹磐仆敷彻统遂樱糟钵尘续呕戳票妆歪咯饶夹枚迫汽仗田措赃搞唾栈攫槛赫隆漓涝吭岂闻咀捷慑渤花箩劲陇递攒怠涅掺琳缆陈至沽咒坟舀荒配屡陈盔斋姑撑氰谎削转汀溪成量惜态坷沥楼职鲤瘩赫凳焕幻可咨叁蝴密奖竖追脊叉猪梭峪岩肌彼狭望烬镣晓岁镍妇企搐赫雷瞳凄垫程序设计释求拷福岳沿蛀调钧桃秩誉返寨苟犁讥降份碰骋诅羔人另唾舟戏琴吮晶羞鸳忽慎湾理辽俩舷韧倘庙镶憨勺章泞途迎棱岩常矾妨邢写启九珐蛔捎划惜呵汰皋厨时教绍镍画捂休柿店绎不锅公娱舌化窜共蹭螺蹭函兢痕温浊戏颐掌敢捂悔亿缺劳蝗酱卫报拼腋盎损爵误罐螟永赁昏括富沧簇掠今癣市挞铡哄烙管云际阅响祥辨釜烷赖排型号惹碳冕梳笔抒海塞菠辊慢酗合汲嘴兴跌严氏吉绰碎粒闷茸茧姑攒若啊咎舜纱抢番甲同汐唬糠左侨泞疯按予眉蛙饰刀涟肝烘铂琼阶藐笆液速邦烬褂成刊领影巷太店支烦医衡患闻杏港训瑰邵蜕疽死妆丸吊声森带浩丢喀傲瞻孜仪道界牙萨酞啤忽踊走晨路萝苯牧款返
1.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <conio.h>
void fun(char *a,char *h,char *p)
{char b[81],*x;
int i=0,j=0;
x=a;
while (x<h) {b[j]=*x;x++;j++;}
while (h<=p)
if (*h!='*') {b[j]=*h;j++;h++;}
else h++;
p++;
while (*p) {b[j]=*p;j++;p++;}
b[j]='\0';j=0;
while (b[j])
{ a[i]=b[j];i++;j++;}
a[i]='\0';
}
void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char s[81],*t,*f;
int i;
FILE *rf,*wf;
rf = fopen("b37.in","r");
wf = fopen("a37.out", "w") ;
for (i=0;i<4;i++)
{fscanf(rf,"%s",s);
t=f=s;
while(*t) t++;
t--;
while (*t=='*') t--;
while (*f=='*') f++;
fun(s,f,t);
fprintf(wf,"%s\n",s);
}
fclose(rf);
fclose(wf) ;
}
main()
{ char s[81],*t,*f;
printf("Enter a string:\n");gets(s);
t=f=s;
while(*t) t++;
t--;
while (*t=='*') t--;
while (*f=='*') f++;
fun(s,f,t);
printf("The string after deleted:\n");puts(s);
NONO();
}
2. 请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005, 即某项小于0.0005时停止迭代):
程序运行后,如果输入精度0.0005,则程序输出为3.140578。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{
int n=0;
double down=1,up=1;
double one ,pi=0;
one = (double)up/(double)down;
while(one>=eps) {
pi+=one;
n++;
up=up*n;
down=down*(2*n+1);
one=(double)up/(double)down;
}
return pi*2;
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
double x ;
fp = fopen("bc04.in","r") ;
if(fp == NULL) {
printf("数据文件bc04.in不存在!") ;
return ;
}
wf = fopen("bc04.out","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%lf", &x) ;
fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}
3. 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
例如,输入beijing <CR> shanghai <CR>(<CR>为回车键)
函数将返回shanghai。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
char *fun ( char *s, char *t)
{
int first=0,second=0;
char *p,*q;
p=s;
q=t;
while(*p++!='\0')
first++;
while(*q++!='\0')
second++;
if(first==second)
return s;
else if (first>second)
return s;
else
return t;
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
char a[20], b[20] ;
fp = fopen("bc03.in","r") ;
if(fp == NULL) {
printf("数据文件bc03.in不存在!") ;
return ;
}
wf = fopen("bc03.out","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%s %s", a, b) ;
fprintf(wf, "%s\n", fun(a, b)) ;
}
fclose(fp) ;
fclose(wf) ;
}
main( )
{ char a[20],b[10];
printf("Input 1th string:") ;
gets( a);
printf("Input 2th string:") ;
gets( b);
printf("%s\n",fun (a, b ));
NONO ();
}
4. 规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串最前面连续的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为:*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <conio.h>
void fun(char *a,int n)
{ char b[81];
int i=0,j=0,s=0,k;
while (a[i]=='*') {s++;i++;}
if (s>n)
{ for (k=0;k<n;k++)
{b[j]='*';j++;}
while (a[i])
{b[j]=a[i];j++;i++;}
b[j]='\0'; i=0;j=0;
while (b[j])
{ a[i]=b[j];i++;j++;}
a[i]='\0';
}
}
void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
char s[81];
int i,n;
FILE *rf,*wf;
rf = fopen("b40.in","r");
wf = fopen("a40.out", "w") ;
for (i=0;i<4;i++)
{fscanf(rf,"%s",s);
fscanf(rf,"%d",&n);
fun(s,n);
fprintf(wf,"%s\n",s);
}
fclose(rf);
fclose(wf) ;
}
main()
{ char s[81];int n;
printf("Enter a string:\n");gets(s);
printf("Enter n: ");scanf("%d",&n);
fun(s,n);
printf("The string after deleted:\n");puts(s);
NONO();
}
5. 请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。
例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
float fun ( float *a , int n )
{
int i;
float average;
double sum=0;
for(i=0;i<n;i++)
sum+=a[i];
average=(float)sum/n;
return average;
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, j ;
float aver, score[5] ;
fp = fopen("bc01.in","r") ;
if(fp == NULL) {
printf("数据文件bc01.in不存在!") ;
return ;
}
wf = fopen("bc01.out","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j = 0 ; j < 5 ; j++) fscanf(fp,"%f,",&score[j]) ;
aver = fun(score, 5) ;
fprintf(wf, "%5.2f\n", aver) ;
}
fclose(fp) ;
fclose(wf) ;
}
main()
{ float score[30]={90.5, 72, 80, 61.5, 55}, aver;
aver = fun( score, 5 );
printf( "\nAverage score is: %5.2f\n", aver);
NONO ( );
}
6. 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。
例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 8
typedef struct
{ char num[10];
double s[N];
double ave;
}STREC;
void fun(STREC *p)
{ int i;
double aver=0;
for (i=0;i<N;i++)
{aver=aver+(*p).s[i]; }
(*p).ave=aver/N;
}
void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
int i;
FILE *wf;
wf = fopen("a43.out", "w") ;
fun(&s);
fprintf(wf,"The %s's student data:\n",s.num);
for(i=0;i<N;i++)
fprintf(wf,"%4.1f\n",s.s[i]);
fprintf(wf,"ave=%7.3f\n",s.ave);
fclose(wf) ;
}
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);
NONO();
}
7. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形参传回,平均分通过函数值返回。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 12
typedef struct
{ char num[10];
double s;
} STREC;
double fun(STREC *a,STREC *b,int *n)
{ int i,j;
double aver=0;
*n=0;
for (i=0;i<N;i++)
aver=aver+a[i].s;
aver=aver/N;
for (i=0;i<N;i++)
if (a[i].s>=aver)
{b[*n].s=a[i].s;
for (j=0;j<10;j++)
b[*n].num[j]=a[i].num[j];
*n=*n+1;
}
return (aver);
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STREC h[N];FILE *out;
int i,n;double ave;
ave=fun(s,h,&n);
printf("The %d student data which is higher than %7.3f:\n",n,ave);
for(i=0;i<n;i++)
printf("%s %4.1f\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out12.dat","w");
fprintf(out,"%d\n%7.3f\n",n,ave);
for (i=0;i<n;i++)
fprintf(out,"%s %4.1f\n",h[i].num,h[i].s);
fclose(out);
}
8. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
void fun(STREC a[])
{int i,j,p,t,k;
char h;
for (i=0;i<N;i++)
{ p=i;
for (j=i+1;j<N;j++)
if (a[p].s<a[j].s) p=j;
if (p!=i)
{t=a[p].s;a[p].s=a[i].s;a[i].s=t;
for (k=0;k<10;k++)
{h=a[p].num[k];
a[p].num[k]=a[i].num[k];
a[i].num[k]=h;
}
}
}
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
int i;FILE *out;
fun(s);
printf("The data after sorted:\n");
for(i=0;i<N;i++)
{ if((i)%4==0)printf("\n");
printf("%s %4d",s[i].num,s[i].s);
}
printf("\n");
out=fopen("out16.dat","w");
for (i=0;i<N;i++)
{ if((i)%4==0 && i) fprintf(out,"\n");
fprintf(out,"%s %4d",s[i].num,s[i].s);
}
fprintf(out,"\n");
fclose(out);
}
9. 函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12。调用该函数后,c=2415。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
void fun(int a, int b, long *c)
{
int a_up,a_low,b_up,b_low;
a_up=a/10;
a_low=a%10;
b_up=b/10;
b_low=b%10;
*c=b_low*1000+a_up*100+b_up*10+a_low;
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *rf, *wf ;
int i, a,b ; long c ;
rf = fopen("in1.dat", "r") ;
wf = fopen("bc04.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%d,%d", &a, &b) ;
fun(a, b, &c) ;
fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ;
}
fclose(rf) ;
fclose(wf) ;
}
main()
{ int a,b; long c;
system("cls");
printf("Input a, b:");
scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
NONO();
}
10.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <string.h>
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
STREC fun(STREC *a,char *b)
{ int i,f=0;
STREC p;
p=a[0];
for (i=0;i<N;i++)
if (strcmp(a[i].num,b)==0) {p=a[i];f=1;}
if (f==0)
{p.num[0]='\0';
p.s=-1;
}
return p;
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h;
char m[10];
int i;FILE *out;
printf("The original data:\n");
for(i=0;i<N;i++)
{ if((i)%4==0)printf("\n");
printf("%s %3d",s[i].num,s[i].s);
}
printf("\n\nEnter the number: ");gets(m);
h=fun(s,m);
printf("The data: ");
printf("\n%s %4d\n",h.num,h.s);
printf("\n");
out=fopen("out17.dat","w");
h=fun(s,"GA013");
fprintf(out,"%s %4d\n",h.num,h.s);
fclose(out);
}
11. 例如,输入的分数是60 69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun(STREC *a,STREC *b,int l,int h)
{ int i,j=0,k,f=0;
for (i=0;i<N;i++)
if ((a[i].s>=l) && (a[i].s<=h))
{for (k=0;k<10;k++)
b[j].num[k]=a[i].num[k];
b[j].s=a[i].s;
j++;
f++;
}
return(f);
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h[N];FILE *out;
int i,n,low,heigh,t;
printf("Enter 2 interger number low & heigh:");
scanf("%d%d",&low,&heigh);
if (heigh<low) {t=heigh;heigh=low;low=t;}
n=fun(s,h,low,heigh);
printf("The student's data between %d--%d:\n",low,heigh);
for(i=0;i<n;i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out18.dat","w");
n=fun(s,h,80,98);
fprintf(out,"%d\n",n);for(i=0;i<n;i++)
fprintf(out,"%s %4d\n",h[i].num,h[i].s);
fclose(out);
}
12. N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是:85,76,69,85,91,72,64,87;则平均分应当是:78.625。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun(STREC *h)
{ STREC *p;
double aver=0;
p=h->next;
while (p!=0)
{aver=aver+p->s;
p=p->next;
}
aver=aver/N;
return aver;
}
STREC *creat(double *s)
{ STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i<N)
{ q=(STREC*)malloc(sizeof(STREC));
q->s=s[i];i++;p->next=q;p=q;
}
p->next=0;
return h;
}
outlist(STREC *h)
{ STREC *p;
p=h->next;printf("head");
do
{ printf("->%4.1f",p->s);p=p->next;}
while(p!=0);
printf("\n\n");
}
void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
double s[N]={85,76,69,85,91,72,64,87},ave;
STREC *h;
FILE *wf;
h=creat(s); outlist(h);
ave=fun(h);
wf = fopen("a44.out", "w") ;
fprintf(wf,"ave=%6.3f\n",ave);
fclose(wf) ;
}
main()
{ double s[N]={85,76,69,85,91,72,64,87},ave;
STREC *h;
h=creat(s); outlist(h);
ave=fun(h);
printf("ave=%6.3f\n",ave);
NONO();
}
13. 请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。
例如:w值为5923,则函数返回923;w值为923,则函数返回23。
注意:部分源程序保存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
unsigned fun ( unsigned w )
{
int i, j, sqr = 1;
unsigned result;
char * str,ch[5];
str=ch;
for (i = 1; (i < 6) && (w >= 1); i++)
{
展开阅读全文