期末考试要考C语言,边复习边写博客,总结了一些自己不太明白或者可能出错的知识点。现自己已经弄明白,写的你们肯定也能明白,希望期末备考的同学们不挂科,也适合自学C语言的小白哦
这篇博客主要写指针,由易到难,会了指针,前面的例题也就都会了。

先来个冒泡排序热身吧

#include<stdio.h>
void swap(int *a,int *b){int temp = *a;*a = *b;*b = temp;
}int main(){int arr[6]={2,5,8,1,6 ,4};int i, j, temp,len=6;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]) {swap(&arr[j], &arr[j + 1]);}for (i = 0; i < len; i++){printf("%d ",arr[i]);}
}


https://blog.csdn.net/weixin_45755332/article/details/106892672

  1. 对三个数进行大小排序
# include <stdio.h>
int swap(int *p,int *q);
int main(){int  a=5, b=11, c=9;
int *p1=&a,*p2=&b,*p3=&c;
printf("%d %d %d\n",a,b,c);
printf("%d %d %d\n",p1,p2,p3);if (a>b){swap(p1,p2);}if(a>c){swap(p1,p3);}if (b>c){swap(p2,p3);}printf("%d %d %d\n",a,b,c);printf("%d %d %d\n",p1,p2,p3);
}int swap(int *p,int *q){int o;o = *p;*p = *q;*q = o;}5 11 9
6487556 6487552 6487548
5 9 11
6487556 6487552 6487548

这个swap函数必须用指针写,如果这样,两个数在函数内是交换了,但没有返回主函数,所以必须用指针写,由结果可以看出,函数交换了指针上存放的数值,指针本身并没有变。

int swap(int p,int q){int o;o = p;p = q;q = o;
}
  1. 对10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换
# include <stdio.h>
int swap(int *p,int *q);
int main( ){int a[10]={11,5,8,7,6,9,0,3,4,2} ,*min,*max,*p;max=min=a;p=a; for (;p<a+10;p++){if (*max<*p)max=p;}swap(a+9,max);for (p=a;p<a+10;p++){if(*min>*p)min=p;       }swap(a,min);for (p=a;p<a+10;p++)printf("%d ",*p);
}int swap(int *p,int *q){int o;o = *p;*p = *q;*q = o;
}

本题的主要思路就是先让max和min都等于第一个值的地址,让其与后面的每一个值的地址进行比较,(注意这里是指针的大小比较)如果min比后面的某个值x大,就把x的地址赋值给min,若还有个y比x还小,就把y的地址再赋值给min,直到找到最小的值。注意这时并没有进行数值交换,只是min这个指针指向了不同的数值,下面的swap函数才让其交换了地址所存放的数值。max是一样的。
有的同学可能会想到,用一个for循环,直接找出最大和最小的值不就行吗。不行!
因为这里有个bug如果a=>第一个数是最大的,b=>最后一个数为最小的,a||b 之能交换一个最值,a&b直接不交换。要是非得用也行, 看老谭怎么写的吧

  1. 有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
# include <stdio.h>
int main(){int i, k, m, n, num[50], *p;printf("input number of person: n=" );scanf("%d", &n);p=num;for(i=0;i<n;i++)     //给人数编号*(p+i)=i+1;i=0;              //i为每次循环时计数变量k=0;              //k为按1 2 3报数的计数变量m=0;              //m 是出局的人数while(m<n-1){      //m 是出局的人数,因有n个人,最后剩一个人,最多出局(n-1)个人if( *(p+i) != 0)   //判断这个序号(原来的序号)是否出局k++;       //如果这个号没有出局,就报数,计数器加1,要是出局了就不算这个号了if(k==3){        //报3的出局*(p+i)=0;  //将出局的这个人标记为0k=0;      //使计数器置零,重新数1 2 3m++;     //出局人数计数器加1}        i++;      //将指针后移,虽然i不是指针,但p+i就是指针了,i为指针服务if(i==n)      //如果指针移到了尾部,则返回到头部i=0;      //因为编号是从1开始的,所以i=0,以确保下一个是开头}int a=0;           for(i=0;i<n;i++){ //因为报到3的就设置成0了,所以加起来就是最后那个序号 a+=num[i];        }printf("最后一个是%d ",a);}


4. 将一个3x3矩阵进行转置操作

# include<stdio.h>
int main(){int a[3][3]={1, 2,3, 4, 5 ,6, 7 ,8 ,9 },t ,*p;printf("原矩阵\n");for (int i=0;i<3;i++){for (int j=0;j<3;j++)printf("%d ",a[i][j]);printf("\n");}p=&a[0][0];for (int i=0;i<3;i++){for (int j=i;j<3;j++){t=*(p+3*i+j);*(p+3*i+j)=*(p+3*j+i);*(p+3*j+i)=t;}}printf("转置矩阵\n");for (int i=0;i<3;i++){for (int j=0;j<3;j++)printf("%d ",a[i][j]);printf("\n");}}原矩阵
1 2 3
4 5 6
7 8 9
转置矩阵
1 4 7
2 5 8
3 6 9

这个指针挺简单的,关键是两两交换为啥那样。
在这个33矩阵a中, a [ i ] [ j ] a[i][j] a[i][j]就是第3i+j个数,如 a [ 2 ] [ 1 ] a[2][1] a[2][1]就是第3*2+1=7个数(注意C语言是从0开始计数的)。*p是数组中第一个数第地址, ( p + 3 ∗ i + j ) (p+3*i+j) (p+3∗i+j)j就是a[i][j]的地址,转置矩阵的 a [ i ] [ j ] = a [ j ] [ i ] a[i][j]=a[j][i] a[i][j]=a[j][i],两个地址交换一下就ok了

C语言不挂科之我爱谭浩强——编程题拿高分(附例题答案和知识点详解)相关推荐

  1. C语言不挂科之我爱谭浩强——选择填空拿满分(附例题答案和知识点详解)

    C语言程序的基本单位是___C___. A.程序行 B.语句 C.函数 D.字符 请选出可用作C语言用户标识符的一组标识符___B___. A.void . define . WORD B.a3_b3 ...

  2. 《C语言程序设计(第四版)谭浩强》学习笔记

    <C语言程序设计(第五版)谭浩强>学习笔记 C语言程序设计(第五版)谭浩强>学习笔记 1 C语言概述 1.7 简单的C程序介绍 1.9 C源程序的结构特点 1.12 C语言词汇 2 ...

  3. C语言程序设计,第四版 ,谭浩强。绝对原版,最新的资料

    C语言程序设计第四版 转载于:https://blog.51cto.com/7342347/1217300

  4. c语言谭浩强第六章答案,C语言谭浩强版本第6章课后练习题答案..doc

    第6章课后练习题 单项选择题 以下程序执行后,a是: int a =0,i,j; for (i=5;i>0;i--) for(j=0;j<4;j++) a++; 20 25 24 30 执 ...

  5. C语言程序设计(第4版)谭浩强著—学习笔记chapter two 数据的存储与运算

    第二章 数据的存储与运算 2.1数据在计算机中如何存储 关于整型数据的运算 关于实型数据的运算 关于字符型数据的运算 符号常量 2.2算术运算符和算数表达式 算数运算符 C算数运算式 提高部分(未完) ...

  6. C语言程序设计(第4版)谭浩强著—学习笔记chapter one 程序设计与C语言

    第一章 程序设计与C语言 1.1机器语言和高级语言 1.2 C语言的出现和发展过程 1.3简单的C语言程序 stdio.h main函数 printf函数 scanf函数 格式字符串 \n换行符 re ...

  7. C语言程序设计第五版谭浩强著 第7章习题以及答案 函数系列

    1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输入. #include<stdio.h> void main(void) {in ...

  8. C语言程序设计(第五版)谭浩强著 第4章习题答案

    1. 算数运算: 加.减.乘.除.取余等运算的统称 关系运算: 关系运算就是"比较运算",将两个数值进行比较,判断其比较的结果是否符合给定的条件. 逻辑运算: 与&& ...

  9. C语言谭浩强第三版第九章例题及课后题:预处理命令

    目录 9.1定义一个带参数的宏,使两个参数的值互换 9.2输入两个整数,求它们相除的余数 9.3求三角形面积 9.4(5)判断闰年 9.5分析下面的宏所定义的输出格式 9.6设计输出实数的格式 9.7 ...

最新文章

  1. 最小生成树板子-AcWing 858. Prim算法求最小生成树
  2. hdu5384(AC自动机+纪录重复单词出现的次数)
  3. spark on k8s准确完整的测试步骤:提交Pi计算程序至k8s集群
  4. linux中tree命令
  5. 如何开始使用任何类型的数据? - 第1部分
  6. 360技术嘉年华第七季——测试之美 报名啦
  7. 韩顺平循序渐进学java 第21.22.23.24讲 集合
  8. 嵌入式Linux开发工具(vim的使用)
  9. bos物流项目面试问题汇总
  10. 嵌入式开发板硬件操作入门学习3——电机驱动板
  11. 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)
  12. 计算机多媒体最新参考文献,多媒体技术计算机论文,关于基于多媒体技术计算机教学因相关参考文献资料-免费论文范文...
  13. ETCD 一 什么是ETCD
  14. JMeter察看结果树响应数据都是相同原因
  15. python 背记手册 PDF 打包版
  16. 硅谷互联网巨头们对区块链PlusFo超级链感兴趣?原因何在!
  17. Hibernate 一对一关系映射总结篇
  18. 创客学院 level1第二节学习完成
  19. ITE平台开发 chapter4 - https通信
  20. Android 图片下载或上传时请求失败。

热门文章

  1. Java使用POi导出Excel(包含图片)
  2. linux写脚本文件
  3. HTML5 Web SQL 数据库 讲解及使用
  4. eclipse2019安装
  5. 串口RS232/RS485/RS422的DB9引脚定义
  6. 十二种可吸筹的技术形态
  7. 数据库原理及应用实验三参考答案
  8. ctd数据 matlab,CTD数据库了解一下,分析你还少了这张图(基因-药物-疾病)
  9. FreeRadius 服务器环境搭建(CHAP 版)
  10. 哈工大团队开源医学智能问诊大模型 | 华佗: 基于中文医学知识的LLaMa指令微调模型