指针:
实验一:
编程参考程序:
/**********************************************************************
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. 编写函数实现两个数的交换(用指针变量作函数参数),利用该函数交换数组a和b中对应元素的值。(注意:调用函数时实参应为什么值)
例如:已知数组a[5]={1, 2, 3, 4, 5}; b[5]={6, 7, 8, 9, 10};
a和b中对应元素交换后:a[5]={6, 7, 8, 9, 10}; b[5]={1, 2, 3, 4, 5};
指针与二维数组**********************************************************************/
方法一:// 交换x与y的内容
#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)// 交换a与b的内容
{ 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)//交换x与y的地址
{
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=6,lower=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小时内删除。
发表评论