c语言第七章课后作业,《C语言程序设计》课后习题答案(第七章)《2》

7.10 写一个函数,输入一行字符,将此字符串中最长的单词输出。

int

alphabetic(c);

char c;

{

if((c>='a'

&&

c<='z'||(c>='A'

&&

c<='Z'))

return(1);

else

return(0);

}

int

longest (string)

char string[];

{

int

len=0,i,length=0,flag=1,place,point;

for(i=0;i<=strlen(string);i++)

if(alphabctic(string[i]))

if(flag)

{

point=i;

flag=0;

}

else

len++;

else

{

flag=1;

if(len>=length)

{ length=len;

place=point;

len=0;

}

}

return(place);

}

#include

viod main()

{

int i;

char line[100];

printf("输入一行文本\n");

gets(line);

printf("\n最长的单词是:");

for(i=longest(line);i

printf("%c",line[i];

printf("\n");

}

7.11 写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列。

#include

#include

#define N 10

char str[N];

void main()

{

int i,flag;

for(flag=1;flag==1;)

{

printf("\n输入字符串,长度为10:\n");

scanf("%s",&str);

if(strlen(str)>N)

printf("超过长度,请重输!");

else

flag=0;

}

sort(str);

printf("\n 排序结果:");

for(i=0;i printf("%c",str[i]);

}

sort(str)

char str[N];

{

int i,j;

char t;

for(j=1;j

for(i=0;(i

if(str[i]>str[i+1])

{ t=str[i];

str[i]=str[i+1];

str[i+1]=t;

}

}

7.12 用牛顿迭代法求根。

#include

float solut(a,b,c,d)

float a,b,c,d;

{

float x=1,x0,f,f1;

do

{ x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c;

x=x0-f/f1;

}

while(fabs(x-x0)>=1e-5);

return(x);

}

main()

{

float a,b,c,d;

scanf("%f,%f,%f,%f",&a,&b,&c,&d);

printf("x=%

10.7f\n",solut(a,b,c,d));

}

7.13 输入10个学生5门课的成绩,分别用函数实现下列函数:

#include

#define N 10

#define M 5

float score[N][M];

float a_stu[N],a_cor[M];

void main()

{

int i,j,r,c;

float h;

float s_diff();

float highest();

r=0;

c=1;

input_stu();

avr_stu();

avr_cor();

printf("\n number class 1 2 3 4 5 avr");

for(i=0;i

{

printf("\nNO%2d",i+1);

for(j=0;j

printf("%8.2f",score[i][j]);

printf("%8.2f",a_stu[i]);

}

printf("\nclassavr");

for(j=0;j 

printf("%8.2f",a_cor[j]);

h=highest(&r,&c);

printf("\n\n%8.2f %d %d\n",h,r,c);

printf("\n %8.2f\n",s_diff());

}

void input_stu()

{

int i,j;

float x;

for(i=0;i

{

for(j=0;j

{ scanf("%f",&x);

score[i][j]=x;

}

}

}

avr_stu()

{

int i,j;

float s;

for(i=0;i

{

for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;

}

}

avr_cor()

{

int i,j;

float s;

for(j=0;j

{

for(i=0,s=0;i

s+=score[i][j];

a_cor[j]=s/(float)N;

}

}

float highest(r,c)

int

*r,*c;

{

float high;

int i,j;

high=score[0][0];

for(i=0;i

for(j=0;j

if(score[i][j]>high)

{ high=score[i][j];

*r=i+1;

*c=j+1;

}

return(high);

}

float s_diff()

{

int i,j;

float sumx=0.0,sumxn=0.0;

for(i=0;i

{ sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];

}

return(sumx/N-(sumxn/N)*(sumxn/N));

}

7.14写几个函数:

<1>

输入10个职工的姓名和职工号;

<2>

按职工号由小到大顺序排列,姓名顺序也随之调整;

<3>

要求输入一个职工号,用折半查找的职工号,输出职工姓名。

#include

#define N 10

void input_e(num,name)

int

num[];

char name[N][8];

{

int i;

for(i=0;i

{

scanf("%d",&num[i]);

gets(name[i]);

}

}

void sort(num,name)

int

num[];

char name[N][8];

{

int i,j,min,temp1;

char temp2[8];

for(i=0;i

{ min=i;

for(j=i;j

if(num[min]>num[j]) min=j;

temp1=num[i];

num[i]=num[min];

num[min]=temp1;

strcpy(temp2,name[i]);

strcpy(name[i],name[min]);

strcpy(name[min],temp2);

}

for(i=0;i

printf("\n%5d%10s",num[i],name[i]);

}

void search(n,num,name)

int

n,num[];

char name[N][8];

{

int top,bott,min,loca;

loca=0;

top=0;

bott=N-1;

if((nnum[N-1]))

loca=-1;

while((loca==0)&&(top<=bott))

{

min=(bott+top)/2;

if(n==num[min])

{ loca=min;

printf("number=%d,name=%s\n",n,name[loca]);

}

else

if(n

bott=min-1;

else

top=min+1;

}

if(loca==0||loca==-1)

printf("number=%d is not in table\n",n);

}

main()

{

int num[N],number,flag,c,n;

char name[N][8];

input_e(num,name);

sort(num,name);

for(flag=1;flag;)

{

scanf("%d",&number);

search(number,num,name);

printf("continue?Y/N!");

c=getchar();

if(c=='N'||c=='n')

flag=0;

}

}

7.15 写一个函数,输入一个十六进制数,输出相应的十进制数。

#include

#define MAX 1000

void main()

{

int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

printf("\n输入十六进制数:");

while((c=getchar())!='\0'&&i

{ if (c>='0'

&&

c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')

{

flag=1;

t[i++]=c;

}

else

if(flag)

{

t[i]='\0';

printf("\n 十进制数%d\n",htoi(t));

printf("继续吗?");

c=getchar();

if(c=='N'||c=='n')

flag1=0;

else

{

flag=0;

i=0;

printf("\n 输入十六进制数:");

}

}

}

}

int

htoi(s)

char s[];

{

int i,n;

n=0;

for(i=0;s[i]!='\0';i++)

{

if(s[i]>='0'&&s[i]<='9')

n=n*16+s[i]-'0';

if(s[i]>='a'&&s[i]<='f')

n=n*16+s[i]-'a'+10;

if(s[i]>='A'&&s[i]<='F')

n=n*16+s[i]-'A'+10;

}

return(n);

}

7.17用递归法将一个整数N转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。

#include

void counvert(n)

int

n;

{

int i;

if((i=n/10)!=0)

convert(i);

putchar(n%10+'0');

}

main()

{

int number;

printf("\n 输入整数:");

scanf("%d",&number);

printf("\n 输出是: ");

if(number<0)

{ putchar('-');

number=-number;

}

convert(number);

}

7.18 给出年、月、日,计算该年的第几天。

程序设计如下

void main()

{

int year,month,day;

int days;

printf("\n 请输入日期(年,月,日)\n");

scanf("%d,%d,%d",&year,&month,&day);

printf("\n %d年%d月%d日",year,month,day);

days=sum_day(month,day);

if(leap(year)&&month>=3)

days=days+1;

printf("是该年的%d天.\n",days);

}

static int

day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}

int(sum_day(month,day)

int month,day;

{

int i;

for(i=1;i

day+=day_tab[i];

return(day);

}

int leap(year)

int year;

{

int leap;

leap=year%4==0&&year%100!=0||year%400==0;

return(leap);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值