C程序设计 第四版(谭浩强)-学习笔记-第十天

/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:有一个整型数组a,有10个元素,要求输出数组中的全部元素(指针) 
    位置:C程序设计(第四版)2010年6月第四版 233页例8.6
*/
#include<stdio.h>
int main()
{   
//方法一:下标法
//  int a[10];
//  int i;
//  printf("please enter 10 integer numbers:");
//  for(i=0;i<10;i++)
//      scanf("%d",&a[i]);
//  for(i=0;i<10;i++)
//      printf("%d ",a[i]);//用下标找到 
//  printf("\n"); 
//  return 0;

//方法二:通过数组名计算数组元素地址,找出元素的值
//  int a[10];
//  int i;
//  printf("please enter 10 integer numbers:");
//  for(i=0;i<10;i++)
//      scanf("%d",(a+i));//scanf("%d",&a[i]);(a+i)就是地址 
//  for(i=0;i<10;i++)
//      printf("%d ",* (a+i));//用地址找到 
//  printf("\n");
//  return 0;

//方法三: 用指针变量指向数组元素
    int a[10];
    int * p,i;
    printf("please enter 10 integer numbers:");
//  for(i=0;i<10;i++)
//      scanf("%d",&a[i]);
    for(p=a;p<(a+10);p++)//p++指向下一个元素地址,a+10是值第10个元素地址等同于a[10] 
        scanf("%d",p); 
    for(p=a;p<(a+10);p++)//p++指向下一个元素地址 
        printf("%d ",* p);
    printf("\0");
    return 0;
}
/*Dev-c++输出结果: 
    please enter 10 integer numbers:0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
*/
/*Dev-c++输出结果: 
    please enter 10 integer numbers:11 22 33 44 55 66 77 88 99 100
    11 22 33 44 55 66 77 88 99 100
*/
/*Dev-c++输出结果: 
    please enter 10 integer numbers:1 2 3 4 5 6 7 8 10 55
    1 2 3 4 5 6 7 8 10 55
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:通过指针变量输出整型数组a的10个元素(指针) 
    位置:C程序设计(第四版)2010年6月第四版 235页例8.7
*/
#include<stdio.h>
int main()
{   
    int * p,i,a[10];
    p=a;//p指向a[0] 
    printf("please enter 10 integer numbers:");
    for(i=0;i<10;i++)
        scanf("%d",p++);//输入10个整数给a[0]~a[10]
    p=a;//缺少这个则p已经指向a[10]了,需要重新指向a[0] 
    for(i=0;i<10;i++,p++)
        printf("%d ",* p);//想输出a[0]~a[10] 
    printf("\n"); 
    return 0;
}
/*Dev-c++输出结果: 
    please enter 10 integer numbers:0 1 2 3 4 5 6 7 8 9
    38 0 0 3 6487624 0 7738224 0 4199400 0
*/
/*Dev-c++输出结果: 
    please enter 10 integer numbers:0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:将数组a中n个整数按相反顺序存放(指针) 
    位置:C程序设计(第四版)2010年6月第四版 239页例8.8
*/
#include<stdio.h>
int main()
{   
    void inv(int x[],int n);
    int i,a[10]={3,7,9,11,0,6,7,5,4,2};
    printf("The original array:\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    inv(a,10);
    printf("The array has been inverted:\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
//void inv(int x[],int n)
//{
//  int temp,i,j,m=(n-1)/2;
//  for(i=0;i<=m;i++)
//  {
//      j=n-1-i;
//      temp=x[i];
//      x[i]=x[j];
//      x[j]=temp;
//  }
//  return;
//}
//修函函数的形参为指针变量 
void inv(int * x,int n)
{
    int * p,temp,* i,* j,m=(n-1)/2;
    i=x;//前面元素的地址 
    j=x+n-1;//后面元素的地址 
    p=x+m;//范围,前一半 
    for(;i<=p;i++,j--)
    {
        temp=* i;
        * i=* j;
        * j=temp;
    }
    return;
}
/*Dev-c++输出结果: 
    The original array:
    3 7 9 11 0 6 7 5 4 2
    The array has been inverted:
    2 4 5 7 6 0 11 9 7 3
*/
/*Dev-c++输出结果: 
    The original array:
    3 7 9 11 0 6 7 5 4 2
    The array has been inverted:
    2 4 5 7 6 0 11 9 7 3
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:将数组a中n个整数按相反顺序存放,用指针变量作实参(指针) 
    位置:C程序设计(第四版)2010年6月第四版 242页例8.9
*/
#include<stdio.h>
int main()
{   
    void inv(int x[],int n);
    int i,arr[10],* p=arr;
    printf("The original array:\n");
    for(i=0;i<10;i++,p++)
        scanf("%d",p);
    printf("\n");
    p=arr;//重新指向a[0] 
    inv(p,10);
    printf("The array has been inverted:\n");
    for(p=arr;p<arr+10;p++)
        printf("%d ",* p);
    printf("\n");
    return 0;
}
void inv(int * x,int n)
{
    int * p,temp,* i,* j,m=(n-1)/2;
    i=x;//前面元素的地址 
    j=x+n-1;//后面元素的地址 
    p=x+m;//范围,前一半 
    for(;i<=p;i++,j--)
    {
        temp=* i;
        * i=* j;
        * j=temp;
    }
    return;
}
/*Dev-c++输出结果: 
    The original array:
    1 2 3 4 5 6 7 8 9 10

    The array has been inverted:
    10 9 8 7 6 5 4 3 2 1
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:用指针方法对10个整数按由大到小顺序排序(指针) 
    位置:C程序设计(第四版)2010年6月第四版 244页例8.10
*/
#include<stdio.h>
int main()
{   
    void sort(int x[],int n);
    int i,* p,a[10];
    p=a;//指向a[0] 
    printf("please enter 10 integer numbers:");
    for(i=0;i<10;i++)
        scanf("%d",p++);//先输入,然后指向下一个地址 
    p=a;//重新指向a[0] 
    sort(p,10);
    for(i=0;i<10;i++)
    {
        printf("%d ",*p);//输出该地址的数据 
        p++;
    }
    printf("\n");
    return 0;
}
//下标法: 
//void sort(int x[],int n)
//{
//  int i,j,k,t;
//  for(i=0;i<n-1;i++)//选择排序法 
//  {
//      k=i;
//      for(j=i+1;j<n;j++)
//          if(x[j]>x[k])
//              k=j;
//          if(k!=i)//表示进行了交换 
//          {
//              t=x[i];
//              x[i]=x[k];
//              x[k]=t;
//          }
//  }
//}
void sort(int * x,int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(* (x+j)>* (x+k))
                k=j;
            if(k!=i)//表示进行了交换 
            {
                t=*(x+i);
                * (x+i)=* (x+k);
                * (x+k)=t;
            }
    }   
} 
/*Dev-c++输出结果: 
    please enter 10 integer numbers:12 2 54 654 -5 -65 89 5 0 4555
    4555 654 89 54 12 5 2 0 -5 -65
*/
/*Dev-c++输出结果: 
    please enter 10 integer numbers:1 2 3 4 5 6 7 8 9 10
    10 9 8 7 6 5 4 3 2 1
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:输出二维数组的有关数据(地址和值)(指针) 
    位置:C程序设计(第四版)2010年6月第四版 248页例8.11
*/
#include<stdio.h>
int main()
{
//总结:
//1.有&的都是地址(有一个[]的是行首地址,有两个[]是n行m列元素地址) 
//2.有一个*都是n行0列元素地址
//3.有两个*都是n行m列元素值
//4.有一个[]的是n行0列的地址
//5.有两个[]的是n行m列元素值
//6.a+n是n行首地址

//例子:
//1.   &a[0]:0行首地址;
//  &a[0][0]:0行0列元素地址
//2.    * a:0行0列元素地址
//  * (a+1):1行0列地址
//3.* (* (a+1)+0):1行0列元素值
//4.   a[0]:0行0列元素地址
//5.a[0][0]:0行0列元素值
//6.a+n:n行首地址 

    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    printf("0行首地址a:%d,0行0列元素地址* a:%d\n",a,* a);//0行首地址和0行0列元素地址 
    printf("0行0列元素地址a[0],* (a+0):%d,%d\n",a[0],* (a+0));//0行0列元素地址 
    printf("0行首地址&a[0]:%d,0行0列元素地址&a[0][0]:%d\n",&a[0],&a[0][0]);//0行首地址和0行0列元素地址 
    printf("1行0列元素地址a[1]:%d,1行首地址a+1:%d\n",a[1],a+1);//1行0列元素地址和1行首地址 
    printf("1行0列元素地址&a[1][0],* (a+1)+0:%d,%d\n",&a[1][0],* (a+1)+0);//1行0列元素地址 
    printf("2行0列元素地址a[2],* (a+2):%d,%d\n",a[2],* (a+2));//2行0列元素地址 
    printf("2行首地址&a[2],a+2:%d,%d\n",&a[2],a+2);//2行首地址 
    printf("1行0列元素地址a[1][0],* (* (a+1)+0):%d,%d\n",a[1][0],* (* (a+1)+0));//1行0列元素地址 
    printf("2行0列元素地址* a[2],* (* (a+2)+0):%d,%d\n",* a[2],* (* (a+2)+0));//2行0列元素地址 
    return 0;
}
/*Dev-c++输出结果: 
    0行首地址a:6487584,0行0列元素地址* a:6487584
    0行0列元素地址a[0],* (a+0):6487584,6487584
    0行首地址&a[0]:6487584,0行0列元素地址&a[0][0]:6487584
    1行0列元素地址a[1]:6487600,1行首地址a+1:6487600
    1行0列元素地址&a[1][0],* (a+1)+0:6487600,6487600
    2行0列元素地址a[2],* (a+2):6487616,6487616
    2行首地址&a[2],a+2:6487616,6487616
    1行0列元素地址a[1][0],* (* (a+1)+0):9,9
    2行0列元素地址* a[2],* (* (a+2)+0):17,17
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:有一个3*4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值(指针) 
    位置:C程序设计(第四版)2010年6月第四版 249页例8.12
*/
#include<stdio.h>
int main()
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int * p;
    for(p=a[0];p<a[0]+12;p++)
    {
        if((p-a[0])%4==0)//p-a[0]两个元素之间的个数,这行代码的意思是每4个元素换行 
            printf("\n");
        printf("%4d",* p);
    }
    printf("\n");
    return 0;
}
/*Dev-c++输出结果: 

       1   3   5   7
       9  11  13  15
      17  19  21  23
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:输出二维数组任一行任一列元素的值(指针) 
    位置:C程序设计(第四版)2010年6月第四版 251页例8.13
*/
#include<stdio.h>
int main()
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int (* p)[4],i,j;//指针变量p指向包含4个整型元素的一维数组 
    p=a;
    printf("please enter row and colum:");
    scanf("%d,%d",&i,&j);
    printf("a[%d,%d]=%d\n",i,j,* (* (p+i)+j)); //数组i行j列元素的值 
    return 0;
}
/*Dev-c++输出结果: 
    please enter row and colum:1,2
    a[1,2]=13
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩(指针) 
    位置:C程序设计(第四版)2010年6月第四版 252页例8.14
*/
#include<stdio.h>
int main()
{
    void average(float * p,int n);
    void search(float (* p)[4],int n);
    float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
    average( * score,12);//传递0行0列元素地址 
    search(score,2);//传递0行首地址 ,求序号为2和学生成绩 
    return 0;
}
void average(float * p,int n)//定义求平均成绩的函数 
{
    float * p_end;
    float sum=0,aver;
    p_end=p+n-1;
    for(;p<=p_end;p++)
        sum=sum+(* p);
    aver=sum/n;
    printf("average=%5.2f\n",aver);
}
void search(float (* p)[4],int n)//p是指向具有4个元素的一维数组的指针 
{
    int i;
    printf("The score of NO.%d are:\n",n);
    for(i=0;i<4;i++)
        printf("%5.2f ",* (* (p+n)+i));//输出n行i列的值 
    printf("\n");
}
/*Dev-c++输出结果: 
    average=82.25
    The score of NO.2 are:
    90.00 99.00 100.00 98.00
*/


/*  创建时间:20171230
    创建人:fangweijun(773714759@qq.com)
    功能:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩(指针)
          查找有一门以上课程不及格的学生,输出他们的全部课程的成绩 
    位置:C程序设计(第四版)2010年6月第四版 254页例8.15
*/
#include<stdio.h>
int main()
{
    void average(float * p,int n);
    void search(float (* p)[4],int n);
    void searchlow(float (* p)[4],int n);
    float score[3][4]={{65,57,70,60},{80,48,35,81},{90,99,100,98}};
    average( * score,12);//传递0行0列元素地址 
    search(score,2);//传递0行首地址 ,求序号为2和学生成绩 
    searchlow(score,3);
    return 0;
}
void average(float * p,int n)//定义求平均成绩的函数 
{
    float * p_end;
    float sum=0,aver;
    p_end=p+n-1;
    for(;p<=p_end;p++)
        sum=sum+(* p);
    aver=sum/n;
    printf("average=%5.2f\n",aver);
}
void search(float (* p)[4],int n)//p是指向具有4个元素的一维数组的指针 
{
    int i;
    printf("The score of NO.%d are:\n",n);
    for(i=0;i<4;i++)
        printf("%5.2f ",* (* (p+n)+i));//输出n行i列的值 
    printf("\n");
}
void searchlow(float (* p)[4],int n)//定义查找有一门不及格学生,并输出全部课程成绩的函数 
{
    int i,j,flag;
    for(j=0;j<n;j++)//n个学生 
    {
        flag=0;
        for(i=0;i<4;i++)//4门成绩 
            if(* (* (p+j)+i)<60)
                flag=1;
            if(flag==1)
            {
                printf("NO.%d fails,his scores are:\n",j+1);
                for(i=0;i<4;i++)
                    printf("%5.1f",* (* (p+j)+i));//输出这个学生的全部成绩 
                printf("\n");   
            } 
    }
} 
/*Dev-c++输出结果: 
    average=73.58
    The score of NO.2 are:
    90.00 99.00 100.00 98.00
    NO.1 fails,his scores are:
     65.0 57.0 70.0 60.0
    NO.2 fails,his scores are:
     80.0 48.0 35.0 81.0
*/
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值