通过调用函数fun找出一维数组元素中最大的值和它所在的下标,最大值的和它所在的下标通过形参指针p和q传回。数组元素中的值在主函数中赋予,主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
#include <stdio.h> //1
void fun(int a[],int n, int *p, int *q) //2
{ int i; //3
*p=a[0]; //4
*q=0; //5
for(i=1;i<n;i++) //6
if(*p<a[i]) //7
{ *p=a[i]; //8
*q=i; //9
}
}
main() //10
{ int i, x[50],max,index, n=10; //11
for(i=0;i<n;i++) //12
{ scanf("%d",&x[i]); //13
printf("%4d",x[i]); //14
}
fun(x,n,&max,&index); //15
printf("\nMax=%d,Index=%d\n",max,index); //16
}
以下程序的作用是扫描字符数组a和字符数组b,并输出对应位置相同的字符。
#include<stdio.h>
main()
{ char a[10]="language",b[]="programe";
char *p1,*p2;
int k;
p1=a;
p2=b;
for(k=0;k<8;k++)
if(*(p1+k)==*(p2+k))
printf("%c\n",*(p1+k));
}
函数voiddelete_blank(char *p)的功能为将指针p所指向的字符串中的空格给去掉。
#include<stdio.h>
#define N 80
main()
{ void delete_blank(char *p);
char a[N],i;
char *p;
printf("Input a string:");
gets(a);
delete_blank(a);// void 调用delete_blank(char *p)函数
puts(a);
}
void delete_blank(char *p)
{ char *q;
q=p;
while(*q!='\0')
{ if(*q!=' ')
{
p=p+1;
}
q++;
}
*p='\0';
}
以下两段程序是分别用数组、指针来实现的统计一个字符子串sunstr在一个字符串str中出现的次数(如:字符子串boy在字符串that boy is a good boy!中出现2次)。
#include<stdio.h> // ⑴(用数组实现)
main()
{ char str[100],substr[10];
int i,j,k,count=0;
printf("请输入字符串:str=");
gets(str);
printf("请输入字符子串:substr=");
gets(substr);
for (i=0;str[i]!='\0';i++) //判断是否到了字符串str的尾
for(j=i,k=0;substr[k]==str[j]; j++, k++) //判断substr是否是str的子串
if(substr[k+1]=='\0')
{count++; //如果substr是str的子串,累计个数
break;
}
printf("%d",count);
}
#include<stdio.h> // ⑵(用指针实现)
main()
{ char str[100],substr[10],*p=str,*q=substr,*w;
int i,j,k,count=0;
printf("请输入字符串:str=");
gets(p);
printf("请输入字符子串:substr=");
gets(q);
for (p=str;*p!='\0';p++)
for(w=p,q=substr;*q==*w;q++,w++)
if(*(q+1)=='\0')
{ count++;
break;
}
printf("字符子串%s出现了%d次\n",substr,count);
}
指向二维数组的指针变量,画图理解!
#include <stdio.h>
move(int *pointer)
{ int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{ t=*(pointer+3*i+j);
*(pointer+3*i+j)= *(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
main()
{ int a[3][3]={1,2,3,4,5,6,7,8,9},*p=a[0],i;
move(p);
printf("调用函数后数组的各元素为:\n");
for(i=0;i<3;i++)
printf("%3d %3d %3d\n",a[i][0], a[i][1], a[i][2]);
}
指针数组、指向指针的指针变量,画图理解!
#include<stdio.h>
main()
{ char *str[]={"English","Math","Music","Computer"},**q;
int i;
q=str;
for(i=0;i<4;i++)
printf("%s\n",*(q++));
}
分别用选择法、冒泡法编写一个排序的函数void mysort(int*p,int n)。在主调函数中通过调用该函数,对指定的n个整数进行升序排列并输出。
include <stdio.h>
main()
{ void mysort(int *p,int n);
int a[10],i;
printf("输入10个待排序的数:\n");
for(i=0;i<10;i++)
{ printf("a[%d]=",i);
scanf("%d",&a[i]);
}
mysort(a,10);
printf("排序后的10个数:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
void mysort(int *p,int n) //选择法实现的排序
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(p[j]<p[k]) //小值往前移
k=j;
if(i!=k)
{
t=p[i];
p[i]=p[k];
p[k]=t;
}
}
}
#include <stdio.h>
main()
{ void mysort(int *p,int n);
int a[10],i;
printf("输入10个待排序的数:\n");
for(i=0;i<10;i++)
{ printf("a[%d]=",i);
scanf("%d",&a[i]);
}
mysort(a,10);
printf("排序后的10个数:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
void mysort(int *p,int n) //冒泡法实现的排序
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(p[j]>p[j+1])
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
编写一个专门用于判断一个字符串是否为回文字符串的函数int ishuiw(char *p),在主函数中接受任意一串字符,通过调用该函数,给出是否是回文的结论。
#include <stdio.h>
main()
{ int ishuiw(char *p);
char a[10],*p=a;
printf("输入字符串:");
printf("\n");
gets(p);
if(ishuiw(p))
printf("是回文!\n");
else
printf("不是回文!\n");
}
int ishuiw(char *p)
{
char *q;
int flag=1;
for(q=p;*q!='\0';)
q++;
q=q-1;
for(;q>=p;p++,q--)
{
if(*p==*q)
continue;
else
{
flag=0;
break;
}
}
return (flag);
}