指针:
实验一:
编程参考程序:
/**********************************************************************
2. 用指针变量编程,求数组中的最大元素和最小元素。
**********************************************************************/
#include "stdio.h"
#define N 10
void main()
{
    void maxmin(int arr[],int *pt1,int *pt2,int n);
    int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
    p1=&a; p2=&b;
    maxmin(array,p1,p2,N);
    printf("max=%d,min=%d\n",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{
    int i;
    *pt1=*pt2=arr[0];
    for(i=1;i<N;i++)
    {
        if(arr[i]>*pt1) *pt1=arr[i] ;
        if(arr[i]<*pt2) *pt2=arr[i] ;
    }
}
/**********************************************************************
3. 编写函数实现两个数的交换(用指针变量作函数参数),利用该函数交换数组ab中对应元素的值。(注意:调用函数时实参应为什么值)
例如:已知数组a[5]={1, 2, 3, 4, 5};  b[5]={6, 7, 8, 9, 10};
    ab中对应元素交换后:a[5]={6, 7, 8, 9, 10};  b[5]={1, 2, 3, 4, 5};
指针与二维数组**********************************************************************/
方法一:// 交换xy的内容
#include<stdio.h>
void swap(int *x,int *y)
{
    int i;
    int temp;
    for(i=0;i<3;i++,x++,y++)
    {
        temp=*x;
        *x=*y;
        *y=temp;
    }
}
int main()
{
    int j;
    int a[3],b[3];
    printf("please enter two Arrays:\n");
    for(j=0;j<3;j++)
    {
        scanf("%d %d",&a[j],&b[j]);
    }
    printf("交换前:\n");
    for(j=0;j<3;++j)
    {
        printf("a[%d]=%d  b[%d]=%d\n",j,a[j],j,b[j]);
    }
    swap(a,b);
    printf("交换后:\n");
    for(j=0;j<3;++j)
    {
        printf("a[%d]=%d  b[%d]=%d\n",j,a[j],j,b[j]);
    }
    return 0;
}
方法二:
#include<stdio.h>
int main()
{
    int *q,a[10],b[10],i,m;
    void exchange(int* a, int* b);
    void (*p)( int* a, int* b );
    p = exchange;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=0;i<10;i++)
        scanf("%d",&b[i]);
    (*p)(a,b);
}
void exchange(int *a,int *b)// 交换ab的内容
{  int *p,*q,m;
    for(p=a,q=b;p<a+10,q<b+10;p++,q++)
    {m=*p;*p=*q;*q=m;}
    for(p=a;p<a+10;p++)
        printf("%d ",*p);
        printf("\n");
    for(q=b;q<b+10;q++)
        printf("%d ",*q);
}
方法三:
#include <stdio.h>
void Swap(int* &x, int* &y)//交换xy的地址
{
    int* temp = x;
    x = y;
    y = temp;
}
void main()
{
    int aa[10] = {0};
    int bb[10] = {0};
    int *a, *b;
    a = aa;
    b = bb;
    int i, anum, bnum;
    printf("数组a的元素个数:");
    scanf("%d", &anum);
    printf("输入数组a\n");
    for (i = 0; i < anum; i++)
    {
        scanf("%d", &aa[i]);
    }
    printf("数组b的元素个数:");
    scanf("%d", &bnum);
    for (i = 0; i < bnum; i++)
    {
        scanf("%d", &bb[i]);
    }
    Swap(a, b);
    printf("数组a\n");
    for (i = 0; i < bnum; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n数组b\n");
    for (i = 0; i < anum; i++)
    {
        printf("%d ", b[i]);
    }
    printf("\n " );
}
实验2
参考程序:
/**********************************************************************
2. 请改正程序中的错误,使程序能得出正确的结果。下列给定程序中,函数fun的功能是:分别统计字符串中大写字母和小写字母的个数。
例如:字符串为“ABcdBC#2cdEFghab”,则应输出:upper=6lower=8
**********************************************************************/
#include <stdio.h>
void fun (char *s, int *a, int *b)
{
while(*s)
    { 
        if (*s>='A' && *s<='Z'
            (*a)++;
        if (*s>='a' && *s<='z'
            (*b)++;
        s++;
  }
}
int main( )
    int  upper=0, lower=0; 
    char  s[80]; 
    gets(s);
    fun(s, &upper, &lower);
    printf("\n upper=%d, lower=%d\n", upper, lower);
    return 0;
}
/**********************************************************************
3. 用字符指针编程求出字符串中指定字符的个数。
例如:假设字符串为:“abcdaghckpamn”,指定字符为‘a’,则结果为3
要求:从main函数输入字符串和指定字符,输出结果。
**********************************************************************/
#include <stdio.h>
#define MAXLEN 20
int CountLetter(char *str, char ch)
{
    int time = 0;
    while(*str)
        if(*str++ == ch)
            time ++ ;
    return time ;
}
int main()
{
    char str[MAXLEN] ;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。