七十六操作符作业int main() {char ch 0;scanf(%c, ch);if (ch a ch z) {printf(%c\n, ch - 32);}elseprintf(%c\n, ch 32);return 0;}scanf()读取失败返回的是EOF,while(scanf(%c,ch)!EOF)//循环的条件判断大小写函数islower(),isupper(),#include stype.hgetchar();//能处理\n把字母后面隐藏的\n处理。、int main() {char ch 0;while (scanf(%c, ch) 1) {if ((ch A ch Z) || ch a ch z) {printf(%c是字母,ch);}elseprintf(%c不是字母, ch);}return 0;}七十七 指针和指针类型内存单元的编号称为指针指针为内存单元的编号。指针变量存放地址通过地址找到内存单元。可以通过取地址符来得到变量的地址。32位机器上32根地址线32位二进制需要4个字节即int型。指针在32位机器上是4个字节在64位机器上是8个字节。指针和指针类型。x86:32位环境。x64:64位的环境。sizeof()返回的值类型是无符号整型。指针类型决定了指针在被解引用的时候被访问几个字节int型的指针解引用的时候访问4个字节char类型的指针解引用访问1个字节。指针类型决定指针的步长。int*和float*虽然都是4个字节。七十九 指针_野指针指针运算野指针指针指向的位置不可知。一个局部变量不初始化放的是随机值。即改指针为野指针。int main() {int* p NULL;if (p ! NULL) {*p 100;}int a 10;return 0;如何规避野指针1.指针初始化 2.小心指针越界 3.指针指向空间释放即使NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性指针运算指针-整数指针-指针八十一 指针和数组指针减去指针的绝对值得到的是指针之间元素的个数不是所有指针都能相减指向同类型的指针才能相减。#include string.hint my_len(char* p){int count 0;while (*p !\0) {count;p;}return count;}int main() {char s[] abcedfegsag;int len strlen(abcedfegsag);printf(len等于%d\n, len);int changdumy_len(s);printf(mylen的长度是%d, changdu);return 0;}指针比较允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。数组一组相同类型元素的集合。指针变量是一个变量存放的是地址。八十二 指针——指针收尾二级指针存放指针地址的变量指针数组存放指针的数组就是指针数组等价于。八十三结构体上声明、初始化、成员访问、传参结构是一种集合成员可以说不同类型的变量。声明 类类型 即对象变量结构的成员可以是标量数组指针甚至其他结构体。结构体变量的初始化 张三浮点数在内存中不能精确存储。结构体成员的访问通过“访问struct peo {char name[20];char tele[12];char sex[2];int hight;};struct st {struct peo p;int num;float f;};void print2(struct peo* p) {printf(%s %s %s %d, p-name, p-tele, p-sex, p-hight);}int main() {struct peo p1 { 张三,18875545125,男,190 };struct st s1 { {李四,15542151451,女,193},100,3.014f };printf(%s %s %s %d\n, p1.name, p1.tele, p1.sex, p1.hight);printf(%s %s %s %d %d %f\n, s1.p.name, s1.p.tele, s1.p.sex, s1.p.hight, s1.num, s1.f);print2(p1);return 0;}八十五结构体下void print1struct S s)//结构体传参void print2struct s* ps)//结构体地址传参print1(s);//传结构体print2s);//传地址八十六街头提作业求一个数的二进制1的个数int count_num( unsigned int n) {int count 0;while (n) {if (n % 2 1) {count;}n / 2;} }int count(int* pc) {int n *pc;int count 0;int i 0;for (i 0; i 32; i) {if (((n i) 1)1)count;}return count;}int main() {int n 0;scanf(%d, n);int cnt count(n);printf(%d, cnt);}刷题leetcode和牛客网刷题牛客网有公司笔试全局变量和局部变量都是放在静态区。全局变量不初始化默认初始值为为0、局部变量放在栈区不初始化默认值是随机值为当前内存单元的状态值。int is_leepyear(int year) {if ((year % 4 0 year % 100 ! 0) || year % 400 0)return 1;}int main() {int y 0;int m 0;int d 0;int days[13] { 0,31,28,31,30,31,31,30,31,30,31 };while (scanf(%d%d, y, m) 2) {int d days[m];if (is_leepyear(y) 1 (m 2)){d;}printf(%d\n, d);}}八十七调试上使用调试技巧。代码上万后需要调试才能解决bug。调试基本步骤1.发现程序的存在。2.以隔离消除等方式对错误进行定位。3.确定错误产生的原因。4提出就诊错误的解决方法。5.对程序错误给予改正重新测试。debug和release的介绍debug通常称为调试版本包含调试信息不做任何优化便于程序员调试程序。release称为发布版本进行了各种优化使程序在代码大小和运行速度上都是最优的以便用户很好的使用。windows环境的调试技巧环境准备debug版本F5为启动调试通常用来直接跳到下一个断点处 F9断点拦截scanf()函数无法跳过。F10 逐过程调试逐函数、逐语句。想要进入函数内部使用F11F11更加细致。 断点处右击可以选择条件。ctrlf5开始执行不调试。Fn:辅助功能键。调试时候查看程序当前信息查看临时变量的值按F10开始调试——调试开始后找到调试窗口——监视、自动窗口监视数组时数组传入函数的为首元素地址监视窗口只能显示一个元素通过数字名逗号个数。能根据个数看数字内部元素的值。查看内存信息调试窗口——内存——直接填数组名1.栈区内存的使用习惯是先使用高地址处的空间再使用低地址处的空间。2.数组随着下标的增长地址是由低地址到高地址变化的3.如果i和arr之间由适当的空间利用数组的越界操作可能会覆盖到就可以会导致死循环的出现如何写出优秀代码优秀的代码:1.正常运行2bug很少3.效率高4.可读性高5.可维护性噶。6.注释清晰7.文档齐全常见的coding技巧1.使用assert 2.尽量使用const 3.养成良好的编码风格 4.添加必要的注释。5.避免编码的陷阱。strcpy()在拷贝的时候会把字符串中的\0也拷贝过去返回的是目标空间的起始地址。const修饰指针变量1.const放在*的左边 如const int* pnum;意思是p指向的对象不能通过p来改变了但是p变量本身的值是可以改变的。2.const放在*号的右边。意思是p指向的对象可以通过p来改变的但是不能修改p变量本身的值。编译常见错误1.编译型错误语法错误。解决双击直接看错误提示信息或凭经验搞定相对简单。2.链接型错误。出现再链接中间。无法解析的外部符号基本都是找不到不存在或者写错了。解决ctrlf搜索功能查找问题点。3.运行时错误。解决通过调试解决。git——版本管理工具后续有兴趣可以深入学些git一般使用命令来操作tortoisegit图形化界面。九十三作业讲解任何一个变量、表达式都有两个属性值属性和类型属性scanf()接收空格后中断使用gets()可以输入空格及以后的字符求次方函数bpow(a,n):即a的n次方为bint main() {int arr[] { 1,2,3,4,5 };short* p (short*)arr;int i 0;for (i 0; i 5; i) {*(p i) 0;}int j 0;for (j 0; j 5; j) {printf(%d, arr[j]);}return 0;}九十五作业讲解int main() {int line 5;scanf(%d, line);int i 0;for (i 0; i line; i) {int j 0;for (j 0; j line - 1 - i; j) {printf( );}for (j 0; j 2 * i 1; j) {printf(*);}printf(\n);}return 0;}struct是结构体类型关键字struct student是用户定义的结构体类型内部的num name score是结构体成员名结构体成员访问操作符包括., -,*,点箭头和解引用操作符二级指针也是指针存放一级指针的地址int(*arr)[10]arr是一个数组指针即指向数组的指针。一个源程序中main函数的位置可以在任意位置。一个c源程序可以由一个或者多个函数组成一个c源程序必须包含一个main函数c程序的基本组成单位是函数c语言本身没有输入输出语句//注释编译器看不到7 66 5 5 45 4 4 3 4 3 3 24 3 3 2 3 2 1 3 2 2 1 2 1 1 03 2 2 1 2 1 1 0 2 1 1 0 1 2 1 1 0 1 0 1 1 0 1102 1 1 0 1 0 1 1 0 110 101101 1011010110110101101011011010110110110101101101240九十七数据存储_整形存储整型char short int long longlong浮点型float double构造类型、自定义类型int arr[5]的类型为去掉数组名int [5]类型指针类型整形用补码存放方便加减使用加法器原码与补码的转化取反加一c:c c语言实现简单数据结构 c c STL 高阶数据结构 计算机网络 网络协议网络编程linux(操作系统系统编程数据库mysql)实战项目。课程方向大小端判断int a1;*(char *)a1;printf(“小端存储”。九十九整型存储有符号数整型提升按照符号位提升无符号数提升高位补0%u打印无符号整数内存存放补码一百浮点数存储Sleep(1000)暂停1000毫秒#include windows.h-1的补码是全1