61.输入一行字符,将此字符串中最长的单词输出
#include <stdio.h>
#include <string.h>
void cechang(char str1[],char word0[])
{
int i=0,j=0,max=0;
char word1[30];
for(; str1[i]!='\0'; i++)
{
if(!((str1[i]>='A'&&str1[i]<='Z')||(str1[i]>='a'&&str1[i]<='z')))
{
max=j;
j=0;
continue;
}
word1[j]=str1[i];
j++; //j用来记录每个单词的长度
if(j>=max) //max记录最大长度
{
word1[j]=0;
strcpy(word0,word1); //用word0[]进行输出
}
}
}
int main()
{
char str[100],word[30];
gets(str); //str为输入的字符串
cechang(str,word); //获得最长的单词
puts(word); //输出
return 0;
}
运行结果:
62.用递归法将一个整数n转换成字符串。例如,输入483,输出“483”
#include <stdio.h>
void convert(int n) //转换,每个字符之间加上空格
{
int i;
if((i=n/10)!=0) //先输出前面的部分
convert(i);
putchar(n%10+'0'); //最后一位
putchar(' '); //输出空格
}
int main()
{
int number;
scanf("%d",&number);
if(number<0) //如果是负数,进行转换
{
printf("-");
number=-number;
}
convert(number);
printf("\n");
return 0;
}
运行结果:
63.定义一个带参的宏,使两个参数的值互换(宏)
#include <stdio.h>
#define CHANGE(a,b,t) t=a;a=b;b=t;
int main()
{
int c,d,s;
scanf("%d %d",&c,&d);
CHANGE(c,d,s);
printf("c=%d,d=%d\n",c,d);
printf("\n");
return 0;
}
运行结果:
64.输入三个整数,按由大到小的顺序输出(指针实现)
#include <stdio.h>
int main()
{
int a,b,c,*p1,*p2,*p3,t;
scanf("%d %d %d",&a,&b,&c); //输入三个数
p1=&a; //得到三个数的地址
p2=&b;
p3=&c;
if(*p1>*p2) //进行修改
{
t=*p1;
*p1=*p2;
*p2=t;
}
if(*p1>*p3)
{
t=*p1;
*p1=*p3;
*p3=t;
}
if(*p2>*p3)
{
t=*p2;
*p2=*p3;
*p3=t;
}
printf("由小到大:%d,%d,%d",*p1,*p2,*p3);
printf("\n");
return 0;
}
运行结果:
65.有一个字符串,包含n个字符。将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。(指针)
#include <stdio.h>
#include <string.h>
#define N 10
int main()
{
char a[N+1],b[N+1],*p,*q;
int m;
gets(a); //输入a字符串
scanf("%d",&m); //输入从第几个字符开始
p=a+m-1; //p为第m个字符的地址
q=b; //q为b的首地址,代表整个字符串,相当于char a[10];scanf("%s",a);其中a的作用
strcpy(q,p); //将其进行复制
puts(q); //输出新的字符串
printf("\n");
return 0;
}
#include <stdio.h>
void copystr(char *p1,char *p2,int m)
{
int n;
n=0;
while(n<m-1) //循环直到第m-1个字符
{
n++;
p1++;
}
while(*p1!='\0') //将m之后的全部进行复制
{
*p2=*p1;
p2++;
p1++;
}
*p2='\0';
}
int main()
{
int m;
char str1[20],str2[20];
gets(str1); //输入一个字符串
scanf("%d",&m);
copystr(str1,str2,m); //进行复制
puts(str2); //输出复制之后的字符串
printf("\n");
return 0;
}
运行结果:
66.输入三个字符串,按由小到大的顺序输出
#include <stdio.h>
#include <string.h>
void swap(char *p1,char *p2) //形参直接用字符指针变量
{
//含义如:通过字符数组名或字符指针变量可以输出一个字符串,而对一个数值型数组,不能用数组名输出
char p[20];
strcpy(p,p1);
strcpy(p1,p2);
strcpy(p2,p);
}
int main()
{
char str1[20],str2[20],str3[20];
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0)
swap(str1,str2);
if(strcmp(str1,str3)>0)
swap(str1,str3);
if(strcmp(str2,str3)>0)
swap(str2,str3);
printf("由小到大顺序:%s %s %s",str1,str2,str3);
printf("\n");
return 0;
}
运行结果:
67.输入10个整数,将其中最小的数与第一个数交换,将最大的数与最后一个数交换(指针)
#include <stdio.h>
void max_min_value(int *number)
{
int *max,*min,*p,temp;
max=min=number;
for(p=number+1; p<number+10; p++) //求最大和最小的地址
if(*p>*max)
max=p;
else if(*p<*min)
min=p;
temp=number[0]; //最小的与第一个交换
number[0]=*min;
*min=temp;
temp=number[9]; //最大的与最后一个交换
number[9]=*max;
*max=temp;
}
int main()
{
int i,num[10];
for(i=0; i<10; i++)
scanf("%d",&num[i]);
max_min_value(num);
for(i=0; i<10; i++)
printf("%d ",num[i]);
printf("\n");
return 0;
}
运行结果:
68.有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数
#include <stdio.h>
void move(int *array,int n,int m)
{
int *p,array_end;
array_end=*(array+n-1); //值为最后一个数
for(p=array+n-1; p>array; p--) //将第1~9个数依次往后移一个
*p=*(p-1);
*array=array_end; //将最后一个数赋值给第一个数
m--; //相当于需要移动的次数
if(m>0)
move(array,n,m); //进行下一次移动
}
int main()
{
int i,a[10]= {1,2,3,4,5,6,7,8,9,10};
printf("原数组为:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
move(a,10,4);
printf("移动之后的数组为:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
运行结果:
69.有n个人围成一圈,顺序编号。从第1个人开始报数(从1~3报数),凡报到3的人退出圈子。问最后留下来的人原来排在第几号
#include <stdio.h>
int main()
{
int i,k,m,n,num[50],*p;
scanf("%d",&n);
p=num;
for(i=0; i<n; i++) //以1~n为序对n个人进行编号
*(p+i)=i+1;
i=0; //i为循环计数
k=0; //k为1~3报数的计数
m=0; //m为退出人数
while(m<n-1) //直到还剩最后一个人
{
if(*(p+i)!=0) //相当于从数组中跳过已经删除的人,即数组中为0
k++;
if(k==3)
{
*(p+i)=0; //将退出的人的编号置为0
k=0; //k重新从0计数
m++; //退出人数加1
}
i++;
if(i==n) //构成一圈
i=0;
}
while(*p==0)
p++;
printf("%d",*p);
printf("\n");
return 0;
}
运行结果:
70.求一个字符串的长度。
#include <stdio.h>
int length(char *p) //测长度
{
int n=0; //n为总个数
while(*p!='\0') //从头开始计算个数
{
n++;
p++; //p为指针
}
return n;
}
int main()
{
int len;
char str[20];
gets(str);
len=length(str);
printf("长度为:%d",len);
printf("\n");
return 0;
}
运行结果: