第1关:两个整数交换
任务:采用指针变量作为形参,编写一个实现两个整数交换的函数。在主函数中输入三个整数,调用数据交换函数将他们按从大到小的顺序排序后输出。
#include <stdio.h>
void main()
{
int a,b,c;
void swap(int *px,int *py);
scanf("%d%d%d",&a,&b,&c);
if(a<b)
swap(&a,&b);
if(a<c)
swap(&a,&c);
if(b<c)
swap(&b,&c);
printf("%d %d %d\n",a,b,c);
}
void swap(int *px,int *py) //定义实现数据交换的函数
{
//************Begin***********
int temp;
temp=*px;
*px=*py;
*py=temp;
//************End***********
}
第2关:两字符交换
任务:采用指针变量作为形参,编写一个实现两字符交换的函数。在主函数中输入一个字符串,调用字符交换函数将其中的字符按从小到大的顺序排序后输出。
#include <stdio.h>
void main()
{
char str[80], i, j;
void swap(char *pa,char *pb);
gets(str);
//************Begin***********
int len=0;
while(str[len]!='\0')//求字符串的长度
{
len++;
}
for(i=1;i<=len-1;i++)
{
for(j=0;j<len-i;j++)
{
if(str[j]>str[j+1])
{
swap(&str[j],&str[j+1]);
}
}
}
//************End***********
printf("%s\n", str); //输出排序后的字符串
}
void swap(char *pa,char *pb) //自定义函数实现两字符交换
{
//************Begin***********
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
//************End***********
}
第3关:判断一个字符串是否是回文
任务:编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。所谓回文是指顺读和倒读都一样的字符串。如“XZYKYZX”是回文。
#include <stdio.h>
#include <string.h>
void main()
{
char s[50];
int hw(char *s); // 自定义回文判断函数的声明
gets(s);
if (hw(s)) // 调用回文判断函数,是回文时,函数的返回值为1
printf("是回文!\n");
else
printf("不是回文!\n");
}
// 定义函数判断回文,是则返回1,否则返0
int hw(char *s)
{
//************Begin***********
int i = 0, j = strlen(s) - 1;
while (i < j) // 只要i小于j,继续比较两端的字符
{
if (s[i] != s[j]) // 如果发现不相等,直接返回0
return 0;
i++;
j--;
}
return 1; // 如果循环结束了,说明没有发现不相等的情况
//************End***********
}
第4关:数字字符串转换成与之相同的整数
任务:编写函数fun(),将一个数字字符串转换成与之相同的整数。例如:如果输入的字符串为“12345”,则函数返回整数12345。要求函数的形参采用指针变量。
#include <stdio.h>
#include <string.h>
void main()
{
char s[10];
int n;
int fun(char *s);
gets(s);
n = fun(s);
printf("%d\n", n);
}
int fun(char *s)
{
//************Begin***********
int n = 0;
int i;
int len = strlen(s);
for (i = 0; i < len; i++)
{
n = n * 10 + s[i] - '0';
}
return n;
//************End***********
}
第5关:求字符串的长度
任务:编写一个类似库函数strlen()的函数,求字符串的长度,在main()函数中输入一个字符串,调用该函数后输出结果。要求函数的形参采用指针变量。
#include <stdio.h>
void main()
{
char str[30];
int strlen1(char *);
gets(str);
printf("%d\n",strlen1(str));
}
int strlen1(char *p)
{
//************Begin***********
int len=0;
while(p[len]!=0)
{
len++;
}
return len;
//************End***********
}
第6关:字符串连接
任务:编写一个类似库函数strcat()的函数,实现两个字符串的连接,并在main()函数中验证该自定义函数的功能。
#include <stdio.h>
void main()
{
char str1[100];
char str2[100];
gets(str1);
gets(str2);
char * scat(char *s1,char *s2);
printf("%s\n",scat(str1,str2));
}
char * scat(char *s1,char *s2) //将s2字符串连接到s1串之后
{
//********Begin*************
int len1=0;
int len2=0;
int i;
while(s1[len1]!=0)
{
len1++;
}
while(s2[len2]!=0)
{
len2++;
}
for(i=0;i<len2;i++)
{
s1[len1+i]=s2[i];
}
return s1;
//********End***************
}
第7关:删除字符串中的前导空格
任务:编写函数ltrim,用来删除字符串中的前导空格,中间和尾部的空格不删除。例如:字符串为:" A BC DEF ",删除后的结果是"A BC DEF "。要求函数形参采用指针变量。
#include <stdio.h>
void main()
{
void ltrim(char *a);
char s[100];
gets(s);
ltrim(s);
puts(s);
}
void ltrim(char *a)
{
//****************Begin**************
//找到最前面有几个空格
int n=0;
int j=0;
while(a[n]==' ')
{
n++;
}
if(n>0)
{
while(a[n]!='\0')
{
a[j]=a[n];
n++;
j++;
}
}
a[j]='\0';
//****************End****************
}