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;)
{
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);
}