1、用指针的方法编写一个函数,交换从键盘读入的两个整型数a和b;
#include <stdio.h>
#include <stdlib.h>
void swap(int *p1,int *p2){
int temp;
temp = *p1;
*p1=*p2;
*p2=temp;
}int main()
{
int x,y;
printf("请输入两个数:\n");
scanf("%d",&x);
scanf("%d",&y);
printf("输入的两个数为:%d,%d\n",x,y);
swap(&x,&y);
printf("交换后的两个数为:%d,%d\n",x,y);
}
在指针这里,think:当定义时 int *p;表示p是一个指向整型空间的指针(即地址);在程序中*p表示取p所指空间的内容;&x表示取x的地址;
swap(&x,&y)这里传的是x,y的地址,对应的void swap(int *p1,int *p2)这里要求的就是地址;,参数是指针,指针即地址。
2、编写一个函数 void invert(char str[ ]),将一个字符串的内容颠倒过来;
#include <stdio.h>
#include <stdlib.h>
void inverse(char str[])
{
char *p1=str;
char *p2=str;
char temp;
while(*p2!='\0')
p2++;
p2--;
while(p2>p1)
{
temp=*p1;
*p1=*p2;
*p2=temp;
p2--;
p1++;
}
}int main()
{
char str[100];
scanf("%s",str);
inverse(str);
printf("inverse hou de is %s\n",str);}
3、编写一个函数 int index(char *s,char *t),检查字符串s中是否包含字符串t,若包含则返回t在s中的开始位置(下标值),否则返回-1;
#include <stdio.h>
#include <stdlib.h>
int index(char *s,char *t)
{
int i,j,n=0;
for(i=0;t[i]!='\0';i++)
n++;
for(i=0;s[i];i++)
for(j=0;s[i+j]==t[j];j++)
if(j+1==n)
return i;
return -1;
}int main()
{
char s[100];
char t[100];
int x;
printf("请输入字符串s的值:\n");
scanf("%s",s);
printf("请输入字符串t的值:\n");
scanf("%s",t);
x=index(s,t);
printf("t在s中的位置是:%d\n",x+1);
return 0;
}
黄色阴影部分是这里要强调的重点,mark,这是一种查找字符串1中是否含有字符串2的好方法,先算出2的长度,然后将1的一位一位与2的一位一位进行比较,
for(i=0;t[i]!='\0';i++)
n++;
for(i=0;s[i];i++) 循环1
for(j=0;s[i+j]==t[j];j++) 循环2
if(j+1==n)
return i;如:s为abcde,t为cd
i的值 j的值 循环执行过程:s,t 1 0 0 i=0,判断s没结束,j=0,判断s[0]!=j[0],循环2结束,i=1;下 2 1 0 i=1,判断s没结束,j=0,判断s[1]!=j[0],循环2结束,i=2;下 3 2 0 i=2,判断s没结束,j=0,判断s[2]=j[0],0+1!=n,j=1,判断 s[3]=t[1],1+1=n,返回i的值i=2,循环结束,函数结束。
4 5
4、编写函数,判断一字符串是否回文,若是回文,函数返回值为1;否则,返回值为0;
#include <stdio.h>
#include <stdlib.h>
int huiwen(char *str)
{
char *p1=str,*p2=str;
while(*p2!='\0'){
p2++;
}
p2--;
while(p2>p1)
if(*p1==*p2)
{
p1++;
p2--;
}else
return 0;
if(p1>p2)
return 1;
return 0;}
int main()
{
char str[100];
printf("请输入字符串str的值:\n");
scanf("%s",str);
if(huiwen(str)==1)
printf("是回文\n");
else
printf("不是回文\n");
return 0;
}
与2题方法类似,在求str字符串长度上,所谓回文,原来是字符串内容对称的意思。soga。。。
5、编写一个函数juge(int (*p)[N],int N),j判断NXN矩阵是否为上三角矩阵。所谓上三角矩阵,指不含主对角元素,下半三角元素都为0;
#include <stdio.h>
#include <stdlib.h>
int jude(int(*p)[100],int N)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<i;j++){
if(*(*(p+i)+j)!=0)
return 0;
}
return 1;
}
}
int main()
{
int N;
scanf("%d",&N);
int *p,a[100][100];
int i;
int j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
printf("%d\n",jude(a,N));
}
6、编写一函数sort(char *str[ ],int n),用指针数组对字符串进行排序;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(char *str[],int n){
int i,j;
char *temp;
for(j=1;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(strcmp(str[i],str[i+1])>0)
{
temp = str[i];
str[i]=str[i+1];
str[i+1]=temp;
}
}
int main()
{
int i;
static char *book[]={"VISUAL BASIC","VISUAL C++","VISUAL FOXPRO","C",
"PASCAL","VISUAL J++"};
sort(book,6);
for(i=0;i<6;i++)
printf("%s\n",book[i]);
}
strcmp函数
其一般形式为:strcmp(字符串1,字符串2)
strcmp的作用是比较字符串1和字符串2。
例如:strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);
比较的结果由函数值带回
(1) 如果字符串1=字符串2,函数值为0。
(2) 如果字符串1>字符串2,函数值为一正整数。
(3) 如果字符串1<字符串2,函数值为一负整数。
注意:对两个字符串比较,不能用以下形式:
if(str1>str2) printf(″yes″);
而只能用
if(strcmp(str1,str2)>0) printf(″yes″);