《C语言程序设计》课后习题答案第七章 《2》

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

intalphabetic(c);

char c;

{

if((c>='a'&&c<='z'||(c>='A'&&c<='Z'))

return(1);

else

return(0);

}

intlongest (string)

char string[];

{

intlen=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<string.h>

viod main()

{

int i;

char line[100];

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

gets(line);

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

for(i=longest(line);i<alphabctic(line[i]);i++)

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

printf("n");

}

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

#include<stdio.h>

#include<string.h>

#define N 10

char str[N];

void main()

{

int i,flag;

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

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

{

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

scanf("%s",&str);

if(strlen(str)>N)

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

else

flag=0;

}

sort(str);

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

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

}

sort(str)

char str[N];

{

int i,j;

char t;

for(j=1;j<N;j++)

for(i=0;(i<N-j)&&(str[i]!='');i++)

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

{ t=str[i];

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

str[i+1]=t;

}

}

7.12 用牛顿迭代法求根。

#include<math.h>

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.7fn",solut(a,b,c,d));

}

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

#include <stdio.h>

#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("nnumber class1 2 34 5 avr");

for(i=0;i<N;i++)

{

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

for(j=0;j<M;j++)

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

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

}

printf("nclassavr");

for(j=0;j<M;j++)

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

h=highest(&r,&c);

printf("nn%8.2f%d%dn",h,r,c);

printf("n%8.2fn",s_diff());

}

void input_stu()

{int i,j;

float x;

for(i=0;i<N;i++)

{for(j=0;j<M;j++)

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

score[i][j]=x;

}

}

}

avr_stu()

{int i,j;

float s;

for(i=0;i<N;i++)

{for(j=0,s=0;j<M;j++)

s+=score[i][j];

a_stu[i]=s/5.0;

}

}

avr_cor()

{int i,j;

float s;

for(j=0;j<M;j++)

{for(i=0,s=0;i<N;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<N;j++)

for(j=0;j<M;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<N;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<string.h>

#define N 10

void input_e(num,name)

intnum[];

char name[N][8];

{int i;

for(i=0;i<N;i++)

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

gets(name[i]);

}

}

void sort(num,name)

intnum[];

char name[N][8];

{int i,j,min,temp1;

char temp2[8];

for(i=0;i<N-1;j++)

{ min=i;

for(j=i;j<N;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<N;i++)

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

}

void search(n,num,name)

intn,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=%sn",n,name[loca]);

}

elseif(n<num[mid]

bott=min-1;

else

top=min+1;

}

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

printf("number=%d is not in tablen",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<stdio.h>

#define MAX 1000

void main()

{int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

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

while((c=getchar())!=''&&i<MAX&&flag1)

{ if (c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')

{flag=1;

t[i++]=c;

}

elseif(flag)

{

t[i]='';

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

printf("继续吗?");

c=getchar();

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

flag1=0;

else

{flag=0;

i=0;

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

}

}

}

}

inthtoi(s)

char s[];

{int i,n;

n=0;

for(i=0;s[i]!='';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<stdio.h>

void counvert(n)

intn;

{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 intday_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<month;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);

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/229719.html

更多阅读

VisualFoxPro程序设计教程课后习题二

第二章1.如何启动与退出Visual FoxPro? Visual FoxPro 6.0的启动与Windows环境下其他软件一样,有3种常见方法:(1) 在Windows桌面上单击“开始”按钮,选择“程序”选项,单击“Microsoft Visual Studio 6.0”组中的“Microsoft Visual

C语言视频教程30课曾怡 c语言教学视频曾怡

最好的c语言视频教程----曾怡副教授讲解30课,csf格式C程序设计视频教程(曾怡):本套视频教程由曾怡副教授讲解,使用教材为:《C语言程序设计》 谭浩强清华大学出版社出版。是难得的C语言学习视频教程。全程共30讲,每讲45分钟左右,CSF视频格

声明:《《C语言程序设计》课后习题答案第七章 《2》》为网友清歌孤我分享!如侵犯到您的合法权益请联系我们删除