前言

本文为业余学习《明解C语言入门篇》的记录,包含代码清单和练习题。
开始学习时间:2022年8月21日
+++++++++++++++++++++++++++++++
第1章 初识C语言
第2章 运算和数据类型
第3章 分支结构程序
第4章 程序的循环控制
第5章 数组
第6章 函数
第7章 基本数据类型
第8章 动手编写各种程序吧
第9章 字符串的基本知识
第10章 指针
第11章 字符串和指针
第12章 结构体
第13章 文件处理
+++++++++++++++++++++++++++++++

第10章、指针

10-1 指针

代码清单 10-1

//计算两个整数的和与差(误例)#include <stdio.h>void sum_diff(int n1,int n2,int sum,int diff);int main()
{int na,nb;int wa=0,sa=0;puts("请输入两个整数。");printf("整数A:");  scanf("%d",&na);printf("整数B:");  scanf("%d",&nb);sum_diff(na,nb,wa,sa);printf("两数之和为%d,之差为%d。\n",wa,sa);return 0;
}void sum_diff(int n1,int n2,int sum,int diff)
{sum=n1+n2;diff=(n1>n2)?n1-n2:n2-n1;
}

代码清单 10-2

//显示对象的地址#include <stdio.h>int main()
{int n;double x;int a[3];int i;printf("n的地址:%p\n",&n);printf("x的地址:%p\n",&x);for(i=0;i<3;i++){printf("a[%d]的地址:%p\n",i,&a[i]);}return 0;
}

代码清单 10-3

//通过指针间接地操作身高#include <stdio.h>int main()
{int sato=178;int sanaka=175;int masaki=179;int *isako,*hiroko;isako=&sato;hiroko=&masaki;printf("伊沙子喜欢的人的身高:%d\n",*isako);printf("洋子喜欢的人的身高:%d\n",*hiroko);isako=&sanaka;*hiroko=180;printf("\n佐藤的身高:%d\n",sato);printf("佐中的身高:%d\n",sanaka);printf("真崎的身高:%d\n",masaki);printf("伊沙子喜欢的人的身高:%d\n",*isako);printf("洋子喜欢的人的身高:%d\n",*hiroko);return 0;
}

10-2 指针和函数

代码清单 10-4

//通过指针间接修改身高#include <stdio.h>void hiroko(int *height);int main()
{int sato=178;int sanaka=175;int masaki=179;hiroko(&masaki);printf("佐藤的身高:%d\n",sato);printf("佐中的身高:%d\n",sanaka);printf("真崎的身高:%d\n",masaki);return 0;
}void hiroko(int *height)
{if(*height<180){*height=180;}
}

代码清单 10-5

//计算两个整数的和与差#include <stdio.h>void sum_diff(int n1,int n2,int *sum,int *diff);int main()
{int na,nb;int wa=0,sa=0;puts("请输入两个整数。");printf("整数A:");  scanf("%d",&na);printf("整数B:");  scanf("%d",&nb);sum_diff(na,nb,&wa,&sa);printf("两数之和为%d,之差为%d。\n",wa,sa);return 0;
}void sum_diff(int n1,int n2,int *sum,int *diff)
{*sum=n1+n2;*diff=n1>n2?n1-n2:n2-n1;
}

代码清单 10-6

//将两个整数值互换#include <stdio.h>void swap(int *n1,int *n2);int main()
{int a,b;printf("a = "); scanf("%d",&a);printf("b = "); scanf("%d",&b);swap(&a,&b);puts("a和b的值互换后:");printf("a = %d\n",a);printf("b = %d\n",b);return 0;
}void swap(int *n1,int *n2)
{int temp=*n1;*n1=*n2;*n2=temp;
}

练习 10-1

//编写函数adjust_point,n指向的值小于0则改为0,大于100则改为100,否则不变。#include <stdio.h>void adjust_point(int *n);int main()
{int x;int retry;do{printf("x = ");scanf("%d",&x);adjust_point(&x);printf("x-->:%d\n",x);printf("是否继续?是[1]/否[0]:");scanf("%d",&retry);}while(retry==1);return 0;
}void adjust_point(int *n)
{if(*n<0){*n=0;}if(*n>100){*n=100;}
}

练习 10-2

//编写函数,将日期改为前一天和后一天,须判断闰年日期。#include <stdio.h>void date_pre(int *y,int *m,int *d);
void date_after(int *y,int *m,int *d);
int days(int year,int month);
int IsLeap(int year);int main()
{int year,month,date;printf("Year:");  scanf("%d",&year);printf("Month:");  scanf("%d",&month);printf("Date:");  scanf("%d",&date);printf("输入的日期:%d-%d-%d\n",year,month,date);date_pre(&year,&month,&date);printf("前一天日期:%d-%d-%d\n",year,month,date);date_after(&year,&month,&date);date_after(&year,&month,&date);printf("后一天日期:%d-%d-%d\n",year,month,date);return 0;
}void date_pre(int *y,int *m,int *d)
{(*d)--;if(*d==0){*d=days(*y,--*m);}if(*m==0){(*y)--;*m=12;}
}void date_after(int *y,int *m,int *d)
{(*d)++;if(*d>days(*y,*m)){*d=1;(*m)++;}if(*m>12){(*y)++;*m=1;}
}int days(int year,int month)
{int ds;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: ds=31; break;case 2: if(IsLeap(year)){ds=29;}else{ds=28;} break;default:ds=30; break;}return ds;
}int IsLeap(int year)
{return year % 4 == 0 && year % 100 != 0||year % 400 == 0;
}

代码清单 10-7

//将两个整数值按升序排列#include <stdio.h>void swap(int *px,int *py);
void sort2(int *n1,int *n2);int main()
{int na,nb;printf("请输入整数A:");  scanf("%d",&na);printf("请输入整数B:");   scanf("%d",&nb);sort2(&na,&nb);printf("整数A是%d。\n",na);printf("整数B是%d。\n",nb);return 0;
}void swap(int *px,int *py)
{int temp;temp=*px;*px=*py;*py=temp;
}void sort2(int *n1,int *n2)
{if(*n1>*n2){swap(n1,n2);}
}

练习 10-3

//将n1、n2、n3指向的三个整数按升序排列#include <stdio.h>void sort3(int *n1,int *n2,int *n3);int main()
{int a,b,c;printf("整数a:"); scanf("%d",&a);printf("整数b:");   scanf("%d",&b);printf("整数c:");   scanf("%d",&c);sort3(&a,&b,&c);printf("a = %d\nb = %d\nc = %d\n",a,b,c);return 0;
}void sort3(int *n1,int *n2,int *n3)
{int temp;if(*n1>*n2){temp=*n1;*n1=*n2;*n2=temp;}if(*n1>*n3){temp=*n1;*n1=*n3;*n3=temp;}if(*n2>*n3){temp=*n2;*n2=*n3;*n3=temp;}
}

代码清单 10-8

//将两个实数进行互换(误例)#include <stdio.h>void swap(int *px,int *py);int main()
{double da,db;printf("实数A:");  scanf("%lf",&da);printf("实数B:"); scanf("%lf",&db);swap(&da,&db);printf("A = %f\n",da);printf("B = %f\n",db);return 0;
}void swap(int *px,int *py)
{int temp;temp=*px;*px=*py;*py=temp;
}

10-3 指针和数组

代码清单 10-9

//显示数组元素的地址(指向元素的指针)#include <stdio.h>int main()
{int i;int a[5]={1,2,3,4,5};int *p=a;for(i=0;i<5;i++){printf("&a[%d] = %p p+%d = %p\n",i,&a[i],i,p+i);}return 0;
}

代码清单 10-10

//显示数组元素的值和地址#include <stdio.h>int main()
{int i;int a[5]={1,2,3,4,5};int *p=a;for(i=0;i<5;i++){printf("a[%d]=%d, *(a+%d)=%d, p[%d]=%d, *(p+%d)=%d\n",i,a[i],i,*(a+i),i,p[i],i,*(p+i));}for(i=0;i<5;i++){printf("&a[%d]=%p, a+%d=%p, &p[%d]=%p, p+%d=%p\n",i,&a[i],i,a+i,i,&p[i],i,p+i);}return 0;
}

代码清单 10-11

//用ary_set(&a[2],2,99)调用代码清单10-11中的ary_set函数#include <stdio.h>void ary_set(int v[],int n,int val);int main()
{int i;int a[]={1,2,3,4,5};ary_set(a,5,99);for(i=0;i<5;i++){printf("a[%d] = %d\n",i,a[i]);}return 0;
}void ary_set(int v[],int n,int val)
{int i;for(i=0;i<n;i++){v[i]=val;}
}

练习 10-4

//编写函数,接收元素类型为int型、元素个数为n的数组,并为所有元素赋上和下标相同的值#include <stdio.h>void set_idx(int *v,int n);int main()
{int arr[5];int i;set_idx(arr,5);for(i=0;i<5;i++){printf("arr[%d] = %d\n",i,arr[i]);}return 0;
}void set_idx(int *v,int n)
{int i;for(i=0;i<n;i++){v[i]=i;}
}

练习 10-5

//用ary_set(&a[2],2,99)调用代码清单10-11中的ary_set函数#include <stdio.h>void ary_set(int v[],int n,int val);int main()
{int i;int a[]={1,2,3,4,5};ary_set(&a[2],2,99);for(i=0;i<5;i++){printf("a[%d] = %d\n",i,a[i]);}return 0;
}void ary_set(int v[],int n,int val)
// v接收的地址是a+2,n=2,所以下面改变的是a[2]和a[3]的值,a[0]、a[1]和a[4]的值不变
{int i;for(i=0;i<n;i++){v[i]=val;}
}

总结

summary

//学生成绩排序#include <stdio.h>#define NUMBER 5void swap(int *px,int *py);
void bsort(int arr[],int n);int main()
{int i;int score[NUMBER];printf("请输入%d名学生的成绩。\n",NUMBER);for(i=0;i<NUMBER;i++){printf("%d号:",i+1);scanf("%d",&score[i]);}bsort(score,NUMBER);puts("分数升序排列。");for(i=0;i<NUMBER;i++){printf("%d号:%d\n",i+1,score[i]);       }return 0;
}void swap(int *px,int *py)
{int temp=*px;*px=*py;*py=temp;
}void bsort(int arr[],int n)
{int i,j;for(i=0;i<n-1;i++){for(j=n-1;j>i;j--){if(arr[j-1]>arr[j]){swap(&arr[j-1],&arr[j]);}}}
}

明解C语言入门篇_第10章_指针相关推荐

  1. 明解C语言入门篇练习题第十三章

    练习13-1 #include <stdio.h> int main(void) {FILE *fp;char file_name[128];printf("file name: ...

  2. 《明解C语言 入门篇》第5章 数组 练习题解答

    练习5-1 数组的赋值 练习5-2 数组的赋值 练习5-3 数组的初始化 练习5-4 数组的倒序复制 练习5-5 数组元素倒序排列 练习5-6 赋值表达式的判断 练习5-7 对象式宏的应用 练习5-8 ...

  3. 明解C语言入门篇_第12章_结构体

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  4. 明解C语言入门篇_第9章_字符串的基本知识

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  5. 明解C语言入门篇_第8章_动手编写各种程序吧

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  6. 明解C语言入门篇_第4章_程序的循环控制

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  7. 明解C语言入门篇_第13章_文件处理

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  8. 明解C语言入门篇_第7章_基本数据类型

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  9. 明解C语言入门篇_第6章_函数

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

最新文章

  1. 编写spring应用
  2. + ,- (加号,减号) 是数字类型吗?(sql server 2000中)
  3. .NET Framework介绍
  4. Delphi中高级DLL的编写和调用
  5. 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
  6. 李航-HMM-直接计算法
  7. 【渝粤教育】广东开放大学 机械制造基础 形成性考核 (55)
  8. android 网易item广告,Android仿网易严选商品详情页
  9. Photoshop投影和CSS box-shadow转换
  10. 《算法竞赛入门经典》习题及反思 -2
  11. cmake find_package 原理简介以及使用说明
  12. win10资源管理器频繁重启可能原因及解决方案
  13. msi笔记本u盘装linux,微星msiGT72S笔记本一键u盘装系统win10教程
  14. Linux 的常用系统及网络命令
  15. 如何规避苹果审查,实现app store上的app版本强制更新
  16. 常用八大测试用例设计方法
  17. Python 实现 周志华 《机器学习》 BP算法
  18. 原生JS实现抛物线动画以及动态模糊效果
  19. 余额宝 算法 php,把10000元放进余额宝,一年后支付宝会给多少利息?你计算过吗?...
  20. ABAP 显示长文本

热门文章

  1. 内网端口映射详解(花生壳)
  2. 蒙特卡洛方法 (Monte Carlo Method)(5)
  3. 安卓 蓝牙遥控器键值配对 kl文件
  4. 2023考研常识知识之五类数学有哪些区别
  5. ubuntu 14.04 成功迁移根分区到SSD
  6. 微机原理与接口技术课内实验-NUAA-Masm for Windows
  7. VS 无法启动程序(系统找不到指定路径)的解决方法
  8. 支付宝手机网站支付补全信息提示 系统综合评估签约条件不满足解决
  9. IDEA中执行scala程序报错Error:scalac: Error: scala/Function1 java.lang.NoClassDefoundError:Scala/Function1
  10. 海康威视工业相机MAC地址