某强书课后习题218页
第10题
题目要求:
写一个函数,输入一行字符串,将此字符串中最长单词输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int longest(char []);
int alphabetic(char);
int i;
char line[100];
gets(line);
for(i=longest(line);alphabetic(line[i]);i++)
{
printf("%c",line[i]);
}
printf("\n");
}//判断当前字符是否为字母
int alphabetic(char c)
{
if(c>='a' && c<='z'||c>='A'&&c<='Z') return 1;
else return 0;
}
//longest是用来找最长单词位置的
//flag表示单词是否开始,1开始,0没开始
//len代表当前单词已累计的字母个数
//length代表先前单词中的最长单词数
//point代表当前单词的起始位置(用下标表示)
//place代表最长单词的起始位置
int longest(char string[])
{
int len=0;
int i,length=0;
int flag=1,place=0,point;
for(i=0;i<=strlen(string);i++)
{
if(alphabetic(string[i]))
if(flag)
{
point=i;
flag=0;
}
else len++;
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}}
return place;
}
写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//起泡法
int main()
{
char str[50];
int i;
scanf("%s",str);
sort(str);
for(i=0;i<10;i++)
{
printf("%c",str[i]);
}
}
void sort(char str[])
{
int i,j;
char temp;
//沉底
for(j=1;j<10;j++)//一共走n-1趟
for(i=0;(i<10-j)&&(str[i]!='\0');i++)//第i趟需要进行n-i次关键字比较
if(str[i]>str[i+1])
{
temp=str[i];
str[i]=str[i+1];
str[i+1]=temp;
}
}
某强书p291.10
将5*5矩阵中最大的元素放在中心,4个角分别放四个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一个函数并实现它。用main函数调用
#include <stdio.h>
#include <stdlib.h>int main()
{
void change(int *p);
int a[5][5];
int *p,i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
p=&a[0][0];
change(p);
printf("Now,matrix:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
void change(int *p)
{
int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
{
if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;
if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;
}
}
temp=*(p+12);
*(p+12)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;
}
}
temp=*pmin;
*pmin=*(p+4);
*(p+4)=temp;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if( ( (p+5*i+j)!=(p+4) ) && ((p+5*i+j)!=p) && (*pmin>*(p+5*i+j)) )
pmin=p+5*i+j;
}
}
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if( ((p+5*i+j)!=p) && (p+5*i+j)!=(p+4) && (p+5*i+j)!=(p+20) && (*pmin>*(p+5*i+j)) )
pmin=p+5*i+j;
}
}
temp=*pmin;
*pmin=*(p+24);
*(p+24)=temp;
}
/*
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
*/