明解C语言入门篇_第10章_指针
前言
本文为业余学习《明解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章_指针相关推荐
- 明解C语言入门篇练习题第十三章
练习13-1 #include <stdio.h> int main(void) {FILE *fp;char file_name[128];printf("file name: ...
- 《明解C语言 入门篇》第5章 数组 练习题解答
练习5-1 数组的赋值 练习5-2 数组的赋值 练习5-3 数组的初始化 练习5-4 数组的倒序复制 练习5-5 数组元素倒序排列 练习5-6 赋值表达式的判断 练习5-7 对象式宏的应用 练习5-8 ...
- 明解C语言入门篇_第12章_结构体
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第9章_字符串的基本知识
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第8章_动手编写各种程序吧
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第4章_程序的循环控制
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第13章_文件处理
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第7章_基本数据类型
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第6章_函数
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
最新文章
- 编写spring应用
- + ,- (加号,减号) 是数字类型吗?(sql server 2000中)
- .NET Framework介绍
- Delphi中高级DLL的编写和调用
- 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
- 李航-HMM-直接计算法
- 【渝粤教育】广东开放大学 机械制造基础 形成性考核 (55)
- android 网易item广告,Android仿网易严选商品详情页
- Photoshop投影和CSS box-shadow转换
- 《算法竞赛入门经典》习题及反思 -2
- cmake find_package 原理简介以及使用说明
- win10资源管理器频繁重启可能原因及解决方案
- msi笔记本u盘装linux,微星msiGT72S笔记本一键u盘装系统win10教程
- Linux 的常用系统及网络命令
- 如何规避苹果审查,实现app store上的app版本强制更新
- 常用八大测试用例设计方法
- Python 实现 周志华 《机器学习》 BP算法
- 原生JS实现抛物线动画以及动态模糊效果
- 余额宝 算法 php,把10000元放进余额宝,一年后支付宝会给多少利息?你计算过吗?...
- ABAP 显示长文本
热门文章
- 内网端口映射详解(花生壳)
- 蒙特卡洛方法 (Monte Carlo Method)(5)
- 安卓 蓝牙遥控器键值配对 kl文件
- 2023考研常识知识之五类数学有哪些区别
- ubuntu 14.04 成功迁移根分区到SSD
- 微机原理与接口技术课内实验-NUAA-Masm for Windows
- VS 无法启动程序(系统找不到指定路径)的解决方法
- 支付宝手机网站支付补全信息提示 系统综合评估签约条件不满足解决
- IDEA中执行scala程序报错Error:scalac: Error: scala/Function1 java.lang.NoClassDefoundError:Scala/Function1
- 海康威视工业相机MAC地址