函数调用Word下载.docx

上传人:b****4 文档编号:6681669 上传时间:2023-05-07 格式:DOCX 页数:48 大小:53.47KB
下载 相关 举报
函数调用Word下载.docx_第1页
第1页 / 共48页
函数调用Word下载.docx_第2页
第2页 / 共48页
函数调用Word下载.docx_第3页
第3页 / 共48页
函数调用Word下载.docx_第4页
第4页 / 共48页
函数调用Word下载.docx_第5页
第5页 / 共48页
函数调用Word下载.docx_第6页
第6页 / 共48页
函数调用Word下载.docx_第7页
第7页 / 共48页
函数调用Word下载.docx_第8页
第8页 / 共48页
函数调用Word下载.docx_第9页
第9页 / 共48页
函数调用Word下载.docx_第10页
第10页 / 共48页
函数调用Word下载.docx_第11页
第11页 / 共48页
函数调用Word下载.docx_第12页
第12页 / 共48页
函数调用Word下载.docx_第13页
第13页 / 共48页
函数调用Word下载.docx_第14页
第14页 / 共48页
函数调用Word下载.docx_第15页
第15页 / 共48页
函数调用Word下载.docx_第16页
第16页 / 共48页
函数调用Word下载.docx_第17页
第17页 / 共48页
函数调用Word下载.docx_第18页
第18页 / 共48页
函数调用Word下载.docx_第19页
第19页 / 共48页
函数调用Word下载.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

函数调用Word下载.docx

《函数调用Word下载.docx》由会员分享,可在线阅读,更多相关《函数调用Word下载.docx(48页珍藏版)》请在冰点文库上搜索。

函数调用Word下载.docx

p=m-n;

if(p<

0)printf("

m<

nerror!

\n"

);

else

if(p==0)printf("

c=1\n"

{c=factor(m)/(factor(n)*factor(p));

}

7.3设计函数reverse(s),将字符串s的内容头尾颠倒。

例如,设charx[]=“abcde”,则调用reverse(x)以后,x的内容为“edcba”,本题约定转换以后的倒序字符串在main函数中输出。

reverse(s)

chars[];

inti,j;

chartemp;

i=0;

while(s[i]!

='

\0'

i++;

i--;

if(s[i]=='

\n'

)i--;

j=0;

while(j<

i)

{temp=s[j];

s[j]=s[i];

s[i]=temp;

j++;

chars1[80];

%s"

s1);

reverse(s1);

7.4请分别写出下面两个C程序的运行结果和函数的功能。

(1)intdigit(longn,intk)

{while(n&

&

k>

1)

{n/=10;

k--;

returnn%10;

main()

{longx=52761;

printf(“digit(%ld,4)=%d\n”,x,digit(x,4));

}

程序输出值:

5

函数功能:

取整数n的第k位数字。

(2)intgys(inta,intb)

{intr;

r=a;

if(r)

{a=b;

b=r;

r=a%b;

gys(a,b);

returnb;

{intx[]={18,24,14,45};

printf(“%d\t%d\t%d\n”,x[0],x[1],gys(x[0],x[1]));

printf(“%d\t%d\t%d\n”,x[2],x[3],gys(x[2],x[3]));

此程序无法运行

7.5以下程序中,函数collect的功能是对n位学生的考试成绩统计总平均分和低于总平均分的人数,本题约定,人数的统计数由函数返回,总平均分则由形式参数aver带出,该程序有错误,请修改它直至达到程序的预期功能为止。

此题不能放在这里。

因为此时还没有学习指针。

#include<

stdio.h>

#defineN10

intcollect(floats[],intn,float*aver);

{inti,count=0;

floatx=0.0;

for(i=0;

i<

N;

i++)x+=s[i];

x=x/N;

i++)

if(s[i]<

x)count++;

aver=x;

改正:

*aver=x;

returncount;

main()

{floats[N],aver;

inti,num;

i++)scanf(“%d”,&

s[i]);

num=collect(s,N,aver);

改正:

num=collect(s,N,&

aver);

printf(“average=%.1f\n”,aver);

printf(“<

%.1fis:

%d\n”,aver,num);

7.6由初等数学知道,当n位奇数时,xn=x*xn-1,当x为偶数时,xn=(x2)n/2,请将下面求xn的函数power改写为递归函数。

doublepower(doublex,intn)

{doublez=1.0,y;

y=x;

while(n>

0)

{while(n%2==0)

{n/=2;

y*=y;

n--;

z*=y;

returnz;

doublepower(doublex,intn)

if(n==0)return1;

if(n==1)returnx;

if(n>

1)return(x*power(x,n-1));

{floatx,z;

scanf("

x=%f\n"

x);

z=power(x,4);

z=%f\n"

z);

7.7编写函数voidlongstr(char*string),输出字符串string中最长的单词。

voidlongstr(charstring[])

{intlen=0,length=0,flag=1,place=0,point,i;

for(i=0;

=strlen(string);

if((string[i]>

a'

string[i]<

z'

)||(string[i]>

A'

Z'

))

if(flay)

{

point=i;

flag=0;

len++;

flay=1;

if(len>

=length)

length=len;

place=point;

len=0;

\nThelongestwordis:

"

for(i=place;

7.8编写函数,求一元二次方程ax2+bx+c=0根。

本题约定:

求得的方程根必须通过实参带回到主函数中去输出,主函数通过循环对输入的一系列系数组求解。

stdio.h"

roots(inta,intb,intc,float*x1,float*x2)

floatdelt;

intreal=1;

delt=b*b-4*a*c;

if(delt>

=0)

*x1=(-b+sqrt(delt))/(2*a);

*x2=(-b-sqrt(delt))/(2*a);

*x1=-b/(2*a);

*x2=sqrt(-delt)/(2*a);

real=0;

return(real);

inta,b,c,real;

floatx1,x2;

charanswer;

while

(1)

printf("

Inputa,b,c:

%d%d%d"

a,&

b,&

c);

if(a!

real=roots(a,b,c,&

x1,&

x2);

if(real)

hasrealroots:

x1=%.2f,x2=%.2f\n"

x1,x2);

hascomplexroots:

%8.2f+%8.2fi\n"

%8.2f-%8.2fi\n"

isnotaquadratic\n"

continue?

(y/n)\n"

getchar();

answer=getchar();

if((answer=='

N'

)||(answer=='

n'

break;

7.9假设某年的1月1日为星期一,请编写函数writedate(intyear,intk),输出该year年的第k天是星期几。

例如,调用writedate(2001,95),则输出“Thursday,april12th”。

writedate(intyear,intk)

inta[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

intleap,month,date,kk=k;

leap=(year%4==0&

year%100!

=0)||(year%400==0);

month=0;

while(k>

=28)

{k=k-a[leap][month];

k=%d\n"

k);

month++;

date=kk%7;

switch(date)

case0:

Sunday"

case1:

Monday"

case2:

Tuesday"

case3:

Wensday"

case4:

Tursday"

case5:

Friday"

case6:

Satuday"

switch(month)

January"

February"

March"

April"

May"

June"

case7:

July"

case8:

August"

case9:

September"

case10:

October"

case11:

November"

case12:

December"

switch(k)

1th"

2th"

3th"

4th"

5th"

6th"

7th"

8th"

9th"

10th"

11th"

12th"

case13:

13th"

case14:

14th"

case15:

15th"

case16:

16th"

case17:

17th"

case18:

18th"

case19:

19th"

case20:

20th"

case21:

21th"

case22:

22th"

case23:

23th"

case24:

24th"

case25:

25th"

case26:

26th"

case27:

27th"

case28:

28th"

case29:

29th"

case30:

30th"

case31:

31th"

main()

writedate(2001,95);

7.10编写函数change(intx[N][N],intmode),按mode指定的方式对二维数组x进行转置,现约定:

当mode为1时,以主对角线为对称轴转置,否则以次对角线为对称轴转置。

若图(a)为数组的初始值,则图(b)、图(c)分别表示以主对角线为对称轴转置和以次对角线为对称轴转置后数组的内容。

123415913161284

5678261014151173

9101112371115141062

1314151648121613951

(a)(b)(c)

#defineN4

convert(intx[N][N],intmode)

inti,j,t;

if(mode==1)

for(j=i+1;

j<

j++)

{t=x[i][j];

x[i][j]=x[j][i];

x[j][i]=t;

for(j=N-i-2;

j>

=0;

j--)

x[i][j]=x[N-j-1][N-i-1];

x[N-j-1][N-i-1]=t;

{inti,j,mode,x[N][N];

Inputarray:

for(j=0;

%d"

x[i][j]);

Inputmode:

mode);

noriginalarray:

{for(j=0;

%5d"

x[i][j]);

convert(x,mode);

convertarray:

7.11编写函数trans(intm,intd),将十进制整数m转换成d进制数(2≤d≤16)。

若转换出的数字位值大于9,必须用A、B、C、D、E、F来标记,再设计相应的主函数以构成完整程序。

trans(intm,intd)

inta[100],shang,j,i;

shang=m/d;

a[0]=m%d;

m=shang;

while(m!

a[i]=m%d;

for(j=i;

switch(a[j])

a"

break;

b"

c"

d"

e"

f"

default:

a[j]);

intm,d;

Inputmandd\n"

m,&

d);

trans(m,d);

7.12编写函数intfind_no_k(intx[],intk,inty[2]),从整数序列x中找出第k大的哪个数以及该数在原序列中的序号,函数值通过形参数组y返回。

例如,设某整数序列为5,2,3,11,0,-6,22,-10,k为3,则调用find_no_k函数以后,通过y数组返回的函数值为5和1。

#defineN8

intfind_no_k(intx[],intk,inty[2])

inti,j,t,a[N];

a[i]=x[i];

=N-1;

N-j;

if(a[i]<

a[i+1])

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

while(a[k-1]!

=x[i])

y[0]=a[k-1];

y[1]=i+1;

intx[N],k,y[2],i;

Inputxplease\n"

x[i]);

Inputkplease\n"

k);

find_no_k(x,k,y);

%d,%d\n"

y[0],y[1]);

7.13编写递归函数findmax(intx[],intm),从整数序列x的前m个元素中找最大数。

问题的递归定义为:

findmax(x,1)=x[0]n=1

findmax(x,n)=x[n-1]>

findmax(x,n-1)?

x[n-1]:

findmax(x,n-1)n>

1

findmax(intx[],intm)

if(m==1)return(x[0]);

if(m>

1)return(x[m-1]>

findmax(x,m-1)?

x[m-1]:

findmax(x,m-1));

intx[10],i,max;

10;

max=findmax(x,10);

max=%d\n"

max);

习题9

9.1设有说明语句staticdoublea[2][3]={1.0,2.0,3.0,4.0,5.0,6.0};

现已知a数组的存储首地址为0x86,请分别写出下列各表达式的值。

(1)*a

(2)&

a[1](3)*a[1]

(4)a[1]+2(5)*(a+1)+1(6)*(*(a+1)+1)

(1)0x86

(2)0xaa(3)0xaa(4)0xce(5)0xc6(6)5.0

9.2编写函数doubleround(double*a,double*b),对指针a、b所指向的存储单元中的数从第四位开始四舍五入,并向main函数返回处理以后的值。

例如,设主函数中有说明语句doublex=6.0576,y=-1.8923,当调用上述函数后,x、y的值分别为6.058-和1.892,现规定main函数中不允许使用指针变量。

题中函数的类型有误。

voidround(float*a,float*b)

{intm,n;

m=(*a+0.0005)*1000;

n=(*b+0.0005)*1000;

*a=(float)m/1000;

*b=(float)n/1000;

floatx=6.0576,y=-1.89

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2