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