指针一

  1. 简答题

下面内容只能利用指针知识完成

1、编写程序:完成函数void my_power(double x,int y,double *mypow)的定义,该函数的功能是:求xy(即x的y次方)存入指针变量mypow所指向的存贮单元中,并编写主程序,验证my_power()的有效性。

//
//功能描述     :求幂
//返回值       :void
//编写日期     :2018年11月24日
//
#include "stdio.h"
#include "math.h"
void my_power(double x,int y,double *mypow)
{
 *mypow=pow(x,y);
}
void main()
{
 int y;
 double x,mypow;
 printf("请输入x和y\n");
 scanf("%lf%d",&x,&y);
 my_power(x,y,&mypow);
 printf("%lf^%d=%lf\n",x,y,mypow);
}

2、编写程序:完成函数int absmin(int *a,int n)的定义,它能实现求指针a所指向的前n个整数中绝对值最小的数,并将它返回给主调函数;并编写程序,验证absmin()的有效性。

//
//功能描述     :求绝对值最小的数
//返回值       :void
//编写日期     :2018年11月26日
//
#include "stdio.h"
#include "math.h"
void input (int *a,int *n)
{
 int i;
 printf("请输入需要输入多少个数\n");
 scanf("%d",n);
 printf("请输入你的数组\n");
 for (i=0;i<*n;i++)
 {
  scanf("%d",a+i);
 }
}
int absmin(int *a,int n)
{
 int min=0,i;
 for (i=0;i<n;i++)
 {
  if (abs(*(a+min))>abs(*(a+i)))
   min=i;
 }
 return *(a+min);
}
void main()
{
 int a[1000],n;
 input (a,&n);
 printf("绝对值最小的数为%d\n",absmin(a,n));
}

3、编写程序:从键盘任意输入一个字符串,输出该字符串。然后,将该字符串逆序存放后再输出,要求用字符指针完成。(提示:逆序存放的函数接口:void invstr(char *s))

//
//功能描述     :字符串逆序存放后再输出
//返回值       :void
//编写日期     :2018年11月27日
//
#include "stdio.h"
#include "string.h"
void invstr(char *s)
{
 int l,r,i;
 char t;
 l=strlen(s);
 r=l/2;
 for (i=0;i<r;i++)
 {
  t=*(s+i),*(s+i)=(*(s+l-1-i)),*(s+l-1-i)=t;
 }
}
void main()
{
 char s[200];
 printf("请输入字符串\n");
 gets(s);
 invstr(s);
 printf("逆序后为\n");
 puts(s);
}

4、利用指针编程,用指针方法编写一函数,实现两个字符串的比较。编程点拨:即自己编写一个strcmp函数:strcmp(s1,s2),如果s1= s2,返回值为0,如果s1≠s2,返回它们二者第一个不同字符的ASCII码差值(如"BOY"与"BAD",第二个字母不同,"O"与"A"之差为79-65=14)。如果要s1>s2,则输出正值,如果s1<s2,则输出负值。

相关知识:①两个字符串的比较的规则;②常用字符串处理函数实现的算法。

//
//功能描述     :字符串的比较
//返回值       :void
//编写日期     :2018年11月27日
//
#include "stdio.h"
int strcmp(char *a,char *b)
{
 int i=0;
 while ((*(a+i))==(*(b+i)))
 {
  if (*(a+i)=='/0')
   return 0;
 }
 return (*(a+i))-(*(b+i));
}
void main()
{
 int s;
 char a[200],b[200];
 printf("请输入字符串一\n");
 gets(a);
 printf("请输入字符串二\n");
 gets(b);
 s=strcmp(a,b);
 printf("%d\n",s);
}

5、利用指针编程,输入一行文字,找出其中大写字母、小写字母、空格、数字及其它字符各有多少。

相关知识:①指针处理字符串;②通过指针访问字符串中的字符;③大小写字母、空格、数字的判断方法。

//
//功能描述     :字符串统计
//返回值       :void
//编写日期     :2018年11月27日
//
#include "stdio.h"
void tongji(char *s,int *a,int *b,int *c,int *d,int *e)
{
 int i;
 for (i=0;*(s+i);i++)
 if (*(s+i)==' ')
  (*a)++;
 else if (*(s+i)>='a'&&*(s+i)<='z')
  (*b)++;
 else if (*(s+i)>='A'&&*(s+i)<='Z')
  (*c)++;
 else if (*(s+i)>='0'&&*(s+i)<='9')
  (*d)++;
 else 
  (*e)++;
 
}
void main()
{
 char s[200];
 int a=0,b=0,c=0,d=0,e=0;
 printf("请输入你的字符串\n");
 gets(s);
 tongji(s,&a,&b,&c,&d,&e);
 printf("空格有%d个 小写字母有%d个 大写字母有%d个 数字有%d个 其他字符有%d个",a,b,c,d,e);
}

7、利用指针作函数的形参,实现:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

//
//功能描述     :按原来的规律将它插入数组中
//返回值       :void
//编写日期     :2018年11月27日
//
#include "stdio.h"
void charu(int *a,int d)
{
 int i=0,j;
 while(d>*(a+i))
 {
  i++;
  if(i==10)
   break;
 }
 for(j=10;j>=i+1;j--)
 {
  *(a+j)=*(a+j-1);
 }
 *(a+i)=d;
}
void main()
{
 int a[11]={1,8,11,15,56,78,89,95,100,120};
 int d,k;
 printf("排好序的数为\n");
 for (k=0;k<10;k++)
 {
  printf("%-5d",*(a+k));
 }
 printf("\n");
 printf("请输入需要插入的数\n");
 scanf("%d",&d);
 charu(a,d);
 printf("插入后为\n");
 for (k=0;k<=10;k++)
 {
  printf("%-5d",*(a+k));
 }
 printf("\n");
}

8、利用指针作函数的形参,实现:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。

///
//功能描述     :输入一个需要删除的数,删除后输出
//返回值       :void
//编写日期     :2018年11月28日

#include "stdio.h" 
void shan(int *a,int f)
{
 int i;
 for (i=0;i<=9;i++)
 {
  if(f==(*(a+i)))
   break;
 }
 for (;i<9;i++)
 {
  *(a+i)=(*(a+i+1));
 }
}
void main()
{
 int a[10]={1,8,9,12,56,89,200,560,890,900},i,f;
 for (i=0;i<=9;i++)
 {
  printf("%d ",*(a+i));
 }
 printf("请输入一个需要删除的数\n");
 scanf("%d",&f);
 shan(a,f);
 for (i=0;i<=8;i++)
 {
  printf("%-5d",*(a+i));
 }
 printf("\n");
}

9.利用指针作函数的形参,实现:输入10个不相等整数存入数组中,找出其中最小的两个数并输出。

//
//功能描述     :输入10个不相等整数存入数组中找出其中最小的两个数并输出
//返回值       :void
//编写日期     :2018年11月28日

#include "stdio.h"
void min(int *a,int *min1,int *min2)
{
 int i;
 *min1=0,*min2=0;
    for (i=1;i<=9;i++)
 {
       if(*(a+*min1)>(*(a+i)))
    {
           *min1=i;
    }
 }
    for (i=1;i<=9;i++)
 {
       if((*(a+*min2)>=(*(a+i)))&&(*min1!=i))
    {
          *min2=i;
    }
 }
}
void main()
{
 int a[10],i,min1,min2;
    printf("请输入十个数字\n");
 for (i=0;i<=9;i++)
 {
  scanf("%d",a+i);
 }
min(a,&min1,&min2);
 printf("第一小的数为%d 第二小的数为%d\n",*(a+min1),*(a+min2));
}

10.利用指针作函数的形参,实现:将一个数组中的值按逆序重新存放,例如原先的顺序为8,6,5,4,1,要求逆序存放为1,4,5,6,8,并输出这些数值。(要求只能定义一个数组完成)

//
//功能描述     :逆序重新存放
//返回值       :void
//编写日期     :2018年11月28日

#include "stdio.h"
void nixu(int *a,int n)
{
 int r,i,c;
 r=n/2;
 for (i=0;i<=r-1;i++)
 {
  c=(*(a+i));
  *(a+i)=(*(a+n-1-i));
 *(a+n-1-i)=c;
 }
}
void main()
{
 int a[100],i,n;
    printf("请输入需要输入的数字的个数\n");
 scanf("%d",&n);
 printf("请输入你的数\n");
 for (i=0;i<=n-1;i++)
 {
  scanf("%d",a+i);
 }
 nixu(a,n);
 printf("逆序存放后为\n");
 for (i=0;i<=n-1;i++)
 {
  printf("%-5d ",*(a+i));
 }
 printf("\n");
}

11.利用指针作函数的形参,实现:输入一行字符,统计其中单词的个数,单词之间用空格隔开。

//
//功能描述     :统计单词个数
//返回值       :void
//编写日期     :2018年12月01日

#include "stdio.h"
void tongji(int *a,char *b)
{
 int i;
 for (i=0;*(b+i);i++)
 {
  if (*(b+i)==' ')
  continue;
  if ((*(b+i)>='a'&&*(b+i)<='z')||(*(b+i)>='A'&&*(b+i)<='Z'))
  {
   if (*(b+i-1)==' '||i==0)
   {
    (*a)++;
   }
  }
 }
}
void main()
{
 char b[10000];
 int a=0;
 printf("请输入你的句子\n");
 gets(b);
 tongji(&a,b);
 printf("一共有%d个单词\n",a);
}

12、有一个班3个学生,各学4门课,计算总平均分数,以及第n个学生的成绩。

//
//功能描述     :计算总平均分数,以及第n个学生的成绩
//返回值       :void
//编写日期     :2018年12月01日

#include "stdio.h"
void aver(double *a,int (*b)[4])
{
 int i,j,sum=0;
 for (i=0;i<3;i++)
 {
  for (j=0;j<4;j++)
  {
   sum+= *(*(b+i)+j);
  }
 }
 *a=sum/3.0;
}
void cha(int *n,int (*b)[4])
{
 int i;
 printf("第%d个学生的成绩为\n",*n);
 for (i=0;i<4;i++)
 {
  printf("%-3d",*(*(b+(*n-1))+i));
 }
 printf("\n");
}
void main()
{
 int i,j,b[3][4],n;
 double a;
 printf("请输入三个学生的四门成绩\n");
 for (i=0;i<3;i++)
 {
  for (j=0;j<4;j++)
  {
   scanf("%d",*(b+i)+j);
  }
 }
 aver(&a,b);
 printf("学生的平均成绩为\n");
 printf("%lf\n",a);
 printf("请输入你需要查询第几个学生的成绩\n");
 scanf("%d",&n);
    cha(&n,b);
}

13、利用指针作函数的形参,求数组中元素的平均值

//
//功能描述     :计算数组的平均值
//返回值       :void
//编写日期     :2018年12月01日

#include "stdio.h"
void aver(double *a,int *b,int n)
{
 int i,sum=0;
 for (i=0;i<n;i++)
 {
   sum+= *(b+i);
 }
 *a=sum/3.0;
}
void main()
{
 int i,b[100],n;
 double a;
 printf("请输入你需要输入几个数\n");
 scanf("%d",&n);
 printf("请输入%d个数\n",n);
 for (i=0;i<n;i++)
 {
   scanf("%d",b+i);
 }
 aver(&a,b,n);
 printf("平均值为\n");
 printf("%lf\n",a);
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值