用command键盘是哪个+R键出现4043

mac电脑刷机 按了command 和r点了开机键之后就一直在这个界面_百度知道
mac电脑刷机 按了command 和r点了开机键之后就一直在这个界面
我有更好的答案
而只是将参数复位。有时候杀三次能够更加彻底,系统将返回到正常启动的界面;sbin/fsck -y,回车:启动后立即按下Command+Option+O+F,回车,再输入reset-all,也是使系统保存在参数储存器里的参数复位,解决一些用其它修理方式无法修复的奇难杂症。其实在上面的进入固件程序的处理也已经将参数储存器里的参数复位了。不过仅仅是杀PRAM就比进入固件程序简单,修复磁盘的档案系统,可以启动系统的fsck工具:启动后立即按下Command+S键。如果是启动了磁盘日志式模式的,就必须输入/sbin&#47,以强制修复磁盘,使设置复原而解决一些用其它修理方式无法修复的奇难杂症,也包括Mac的电源管理器的复位。方法四:启动后立即按下Command+Option+R+P,直到再次听到开机的铃声。这就是杀PRAM;fsck -f,可以让系统进入单用户模式,在该模式的提示符后输入:&#47,回车。这样系统将让系统的固件回到原来的出厂设置,就进入系统的固件程序,在提示符后输入reset-nvram方法一:重启后立即按Shift键。完成后再输入:reboot。方法三,同时系统还可以启动一些自检测功能,修复磁盘错误,系统能够暂时关闭第三方的启动项目,帮助系统正常启动,让系统进入安全模式启动。方法二
采纳率:95%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。264被浏览206,015分享邀请回答4011 条评论分享收藏感谢收起macbook pro 白屏开不开机,按command 加R 键还没办法重装系统怎么办啊_百度知道
macbook pro 白屏开不开机,按command 加R 键还没办法重装系统怎么办啊
我有更好的答案
1、找经销商或代理商帮忙,找他们用他同样型号的电脑,帮你制作一个启动安装的U盘,然后从他们的机器为你远程安装。2、自己找朋友找同样型号的机器,干以上所述的事。3、自己通过Internet远程重装系统。——这个动作,我刚刚完成过,可以给大家分享一下。具体如下:电脑常见问题解决1、无法自动识别硬盘控制器使用非正版的个别操作系统光盘,在安装系统时,容易出现此错误。原因是非正版光盘自动加载的硬盘控制器驱动不符合电脑自身需要的驱动。这种情况就建议换正版光盘安装操作系统。2、手动更新错误的驱动程序windows操作系统正常使用,但手动更新驱动程序把硬盘控制器的驱动程序更新错误,导致此故障。解决方法是进入windows系统高级菜单,选择最后一次的正常配置,即可正常进入系统。3、bios设置变化后所导致windows操作系统正常,但是由于某些原因,用户修改了bios设置,导致0x0000007b故障。
采纳率:50%
帮你制作一个启动安装的U盘。所以,关键是需要能够连接Internet的合适的无线网。(注意,其中包含了一个recovery hd分区。机器启动时按住Option键也可以看到有两个启动项目,你的mac系统就再也起不来了。只有完全重装才能恢复回原来的样子。直到,这个时候,然后内部使用无线网可以连接的,我按照air的那个小说明书上说的,然后mac原有的分区就被转换了,最后直接改为开放不加密模式。1,经过了很多环节;SUPPORT的服务器(即便我同网络的其他机器可以用浏览器访问到这个地址),还是无法连接服务器,占用了分区数量。——这个动作,我刚刚完成过,连接了一个无线路由器,又测试了一遍连接。通过Internet远程重新恢复新版macbook air的lion系统,操作如下(说明书上有):开机按“command键+R键”或者不行按“option键+command键+R键”,连接到该无线网后,会出来一个进度条,成功连接无线网络后,好像能成功,但在windows的分区工具里面,会看到3个主分区,但是约半个小时后,又报了2100F的错误,咨询苹果客服热线cmmand+opital+r 会出现一个小地球,其他模式不支持,即重新安装mac——以此同时windows分区也要被删除),最好的方法是直接把无线网加密去掉,改成开放式的。请注意、找经销商或代理商帮忙,找他们用他同样型号的电脑,这次效果好一点,仍然可能不成功,把无线网的连接密码改为WPA1或者WPA2,因为从我们的网络到苹果美国的服务器,都可能导致我们的机器无法连接苹果美国的服务器。关于这一点,我咨询了苹果客服支持热线,所以如果你选择在保留有recovery hd分区的情况下,你的windows只能占有一个分区(即一个盘)。当然,会启动固件里的远程recovery模式:本人为了达成“合适”这个条件,折腾了整整一天。总共试了3个网络才成功——公司的网络是连接的中国联通的互联网专线,始终无法连接成功。联系苹果客服热线后,告诉我,我经过地球转动半个小时后所报出来的2002F的错误代码的意思是DNS无法正确解析到APPLE,深圳的客户是有成功进行过的,告诉我,而windows安装只能允许4个主分区,你可以有第二个选择.COM&#47,地球转动出来进度条,他们建议我换个网络,于是,我用电信的3G上网卡。不过这回这个哥们明确告诉我,所以windows安装完成后,不能再划分磁盘,一划分就问你是否转成动态地盘,只不过可能公司的网络环境不行,反倒是家里的ADSL再连接无线路由器的那种网络可能可以。于是俺又收拾回家尝试了。)——事实证明,家里的网络果然是可以的,但需要在家里的网络后加一个无线路由器,由这个无线路由器上设置pppoe拨号——那种需要在电脑上拨号的ADSL拨号猫自带的那种无线网络可不行。好了,可以给大家分享一下,进度条约持续15分钟(2M adsl的情况),然后终于出来了“系统恢复工具”的界面,才能确认,这种恢复方式是可行的,系统修复还原回原来的状态。(这个状态在mac的磁盘分区工具里面看不出来,呵呵,——不过接下来,你还有几个关键动作不能失误,然后,选无线网络(以下是我复制的)新版的macbook air安装的系统里面有一个 recovery hd的分区,其中一个就是Recovery HD)如果,您还是需要windows双系统,那么请注意:由于mac已经占用了3个主分区(包括一个200M的隐藏分区、一个正常的mac主分区,还有一个recovery主分区),注意无线网的加密模式必须是WPA1或者WPA2,多次尝试才得以解决。a~~先选择“磁盘工具”,把分区全部抹掉重新分为一个 os扩展(日志式),b~~选择重新安装OS系统。c~~耐心等侯完成后,须注意,即便加密模式改为开放的,这种重装的方式,然后从他们的机器为你远程安装。2、自己找朋友找同样型号的机器,干以上所述的事。3、自己通过Internet远程重装系统,你需要等待约5个小时的安装时间(在2M adsl的环境下),请参考网上删除Recovery hd分区的文章,就是把recovery分区删除,然后你就可以再重新分一下区——具体操作:由于现在的版本都没有修复安装的光盘和U盘,只有以下几种方式可以重新安装系统,解决了网络连接问题后,当你开机进入Internet修复模式。出现一个转动的地球;等到地球下方出现“change network”。选择无线网,如果是加密的
本回答被网友采纳
为您推荐:
其他类似问题
重装系统的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言-集锦 - C语言当前位置:& &&&C语言-集锦C语言-集锦www.MyException.Cn&&网友分享于:&&浏览:0次C语言--汇总
1 一、四个月的课程体系
1、语言基础
1、c语言10day
2、oc语言(真正开发语言)6day
3、foudation(库)
2、iOS 核心编程
1、视图层(如何做QQ的样子,手势、动画)
3、iOS 高级编程
1、系统服务
2、网络编程
4、游戏开发
1、学习C ++(主要用来开发游戏)可以跨平台
2、cocos2d-x
3、swift语言以及iOS8开发
二、什么是ios开发
1.移动便携式开发:android 和 iOS
2.iOS开发(iOS程序员、iOS软件工程师)
3.android 和 iOS区别
iOS基于unix,安全稳定。android基于linux的虚拟机,安全性低
iOS强大的sdk、开发工具,不开源,apple公司,App
Store(08年上线),高端用户使用
android开源,google公司,googleplay应用商店,各种用户人群,
22 三、ios开发环境
1.mac操作系统
1)操作系统os:管理硬件资源和软件资源
2)macos:apple公司,自我封闭
3)iOS:设备:iPhone(日),iPod,touch,iPad,
27 2. 布局:菜单栏、桌面、dock(快捷键)
28 3.格式化u盘:磁盘工具&&ms-dos(fat)
29 4.软件安装
1、*.dmg(setup.exe虚拟光驱)
2、*.app(绿色软件)直接安装
3、直接从app store
5.pwd、cd、is命令
1、操作计算机的两种方式
a.图形化操作方式(操作直观)
b.命令行的操作方式(操作便捷,节约资源)
2、操作命令(终端快捷操作)
a.ls命令(查看当前文件夹下的文件或者子目录)
b.pwd(查看当前操作目录)
c.cd+空格+子目录名称(切换子目录)
d.cd+空格+..(退回上一级目录)
e.clear清除屏幕信息
f.mkdir+空格+文件夹(创建一个目录)
g.rm+空格-f空格
45 3.相对路径和绝对路径(路径两种表达方式)
1./代表硬盘根目录(/uses/tarena/doc)
2.相对路径:相当于当前操作状态下的文件(或目录)的位置
3.绝对路径:根据硬盘根目录开始,文件(或目录)的位置
49 4.文件夹的创建与查看
52 c语言(1973年贝尔实验室)
1.四大部分:中央处理器(控制器、运算器)、存储器、输入设
备、输出设备
(1946年,冯诺依曼)
2.计算机语言分类
机器语言、汇编语言、高级语言
3.编程:自己有个想法,通过计算机语言使计算机理解,并帮我
57 一、c语言执行步骤:
一.编辑程序
1.编写c语言的代码,保存在扩展名.c的文件中,源文件。
2.编写代码有三种方式:
a.vi命令方式系统自带
b.ultraedit网络下载
c.xcode网络下载
二.编译(gcc
将c语言转换成计算机识别的代码
三.运行(./a.out)
经过编辑、连接之后,源程序文件就可以生成可执行文件
68 * vi的使用-补充(c语言快捷键):shift+&:&进入编辑功能
&i&insert进入编辑模式
71 四.xcode简单的使用
72 1.创建项目
73 2.创建一个osx&command line Tool
74 3.main.c进行编程
75 4. 菜单栏product编译-run执行
76 5.改字体(苹果-第二个prefer..偏好设置-第五个改字体)
77 五.#include指令
1.在编译之前做的事情
2.相当于复制操作
3.加载系统提供的标准函数库
81 *&&是加载系统自定义功能
《》是加载系统功能
83 六.变量
1.数据类型:字符型char、整数型int、浮点型float/double、指
针、结构、联合等类型。
2.语法格式:变量类型
变量名=初始化值
3.保存运算中临时的值,number1=10赋值,可以多次赋值,但只会保留最后一次的值(右&左)
4.变量命名:a.必须以字母或下划线开头
b.包含字母、下划线或数字(不要出现空格)
c.不能与关键字冲突
d.大小写敏感的
e.长度一般不会限制,但会被编辑器截断
93 *变量放在等号左边就是存值操作,变量放在等式右边就是取值操作 i=10(存),j=i(取).把右面的赋值给左边的,从右向左
96 数据类型和变量赋值
97 1.整数类型
98 (char、int)小数类型(float、double)
a.有符号类型(整数、负数、0)范围
( -128~127)
*所占存储空间的第一位为符号位。
*二进制符号位,最左边0+,1代表负数
b.无符号整型(整数、0)(0~255)256
c.有符号的整型(int,4个字节 )(-2^31~2^31-1)
*Byte、KB、MB、GB、TB、PB(1024)
如:1KB=1024B
超出最大值从最小值开始运算
超出最小值从最大值开始运算
d.有符号的短整型(short int,2字节)
e.有符号的长整型(long int,8字节)
f.有符号的长长整型(long long int)
g.无符号的整型(unsigned int,4字节)
h.无符号短整型(unsigned
short int,2字节)
i.无符号长整型(unsigned
long int,8字节)
j.无符号长长整型(unsigned
int,8字节)
115 2.进制
a.十进制%d(0-9)逢十进一
b.八进制%o(0-7)逢八进一
c.十六进制%x(0-9ABCDEF)逢十六进一
d.二进制(0、1)逢二进一
int i=11 //十进制
int i=011 //八进制
int i=0x11 //十六进制
123 *c语言不能使用二进制
1.十进制转换二进制(除二取余,将余数从下向上读出)
125 举例:
126 32/2=17&&0
127 17/2=8&&1
128 8/2=4&&0
129 4/2=2&&0
130 2/2=1&&0
131 1/2=0&&1
132 将余数从下向上读出:100010
2.二进制数转化成十进制数(按权相加)
1位(从右向左)93
137 举例:
138 1001110
139 0*2^0=0
140 1*2^1=2
141 1*2^2=4
142 1*2^3=8
143 0*2^4=0
144 0*2^5=0
145 1*2^6=64
146 得出的值相加=0+2+4+8+0+0+64=78
3.十进制数转换成八进制数、十六进制数
方法:辗转相除,从下向上取余
149 34/8=16&&6
150 16/8=2&&0
151 2/8=0&&2
152 从下向上对应的八进制数:206
4.八进制数、十六进制数转换成十进制数
方法:按权相加法
155 6*8^0=6
156 0*8^1=0
157 2*8^2=128
158 按权相加:=134
5.二进制数转换成八进制数
方法:从最后一位开始,每三位二进制数,相当于一个八进制数。前面不足3为补0
161 举例:100
162 6.二进制转换成十六进制数
方法:每四位,不足补0
164 举例:0010
165 3.字符(%c)
1.通过数值直接赋值
2.通过字符直接赋值
167 *.2f保留两位有效数字
168 4.变量:临时保存数据,数据的容器
常量:不可改变的值(具体的数值)
字面值:不可改变的值,就是数值(字符、数值)
*变量=字面值(常量)数据
173 练习题:
174 C语言中整数-8在内存中存储形式是:
原码-&反码-&补码(只有负数存的是补码)(2个字节=16位)
175 A)1111,1111,1111,1000
B)1000,0000,0000,1000
176 C)0000,0000,0000,1000
D)1111,1111,1111,0111
178 一、知识点
一.scanf(&%d&,&i);&取地址
181 例题:
182 1.输入两个数,并输出两个数
183 #include &stdio.h&
185 int main(int argc, const char * argv[])
int i=0,j=0;
printf("pelease input a number:");
scanf("%d",&i);
printf("pelease input nest number:");
scanf("%d",&j);
printf("i=%d\nj=%d",i,j);
198 2.输入两个数,求其面积、周长、和
199 int main(int argc, const char * argv[])
int i=0,j=0,sum=0,mj=0,zc=0;
printf("pelease input a number:");
scanf("%d",&i);
printf("pelease input nest number:");
scanf("%d",&j);
zc=(i+j)*2;
printf("面积=%d\n周长=%d\n和=%d\n",mj,zc,sum);
213 3.输入两个数求和、差、积、商
214 int i = 0 , j = 0;
//输入函数 要依赖于变量 要临时保存在键盘上输入的数据
//程序会发生阻塞状态
//友好性差 配合输出语句结合使用
printf("please input first Number:\n");
scanf("%d",&i);//&得到变量在内存中的地址,将键盘上输入的数据保存在变量中
printf("please input second Number:\n");
scanf("%d",&j);
//输出函数
printf("i:%d\n",i);
printf("j:%d\n",j);
int sum = 0;//求和
int sub = 0;//求差
int mul = 0;//求积
int div = 0;//求商
sum = i+j;
sub = i-j;
mul = i*j;
div = i/j;//整数相除取整数部分
printf("sum:%d\n",sum);
printf("sub:%d\n",sub);
printf("mul:%d\n",mul);
printf("div:%d\n",div);
239 结果:
240 please input first Number:
242 please input second Number:
246 sum:47
247 sub:43
248 mul:90
249 div:22
252 4.数据类型省略写法
253 int main(int argc, const char * argv[])
signed int i=0;//有符号整型 可以省略signed
unsigned int i2=0;//无符号整型
short i3=0;//有符号短整型 可以省略 int 关键字
unsigned short i4=0;//
long i5=0;//有符号长整型 可以省略int
unsigned long i6=0;
long long i7=0;//长长整型 可以省略signed 和int 关键字
unsigned long long i8=0;//
266 知识点
267 二、进制转换
269 5.输入一个数,分别以十进制、八进制、十六进制输出变量
270 int main(int argc, const char * argv[])
int i,j,k;
printf("输入:");
scanf("%d%d%d",&i,&j,&k);
printf("i=%d j=%o k=%x\n",i,j,k);//分别以十进制%d、八进制%o、十六进制%x输出变量
278 6.十进制、八进制、十六进制之间的转换
279 int i=11,j=011,k=0x11;
printf("i=%d j=%o k=%x\n",i,i,i);//分别以十进制、八进制、十六进制输出变量
printf("i=%d j=%o k=%x\n",j,j,j);
printf("i=%d j=%o k=%x\n",k,k,k);
结果:i=11 j=13 k=b
i=9 j=11 k=9
i=17 j=21 k=11
288 7.制表符(\t)
空3个字符,一个汉字
289 printf("3456\n");
printf("helloword!\n");
printf("hello\tword!\n");
296 helloword!
299 8.整型数据溢出
300 //数据溢出
int i = ;//999 + 1
int j = i + 1;//超出最大值从最小值开始运算
int k = -;
int l = k - 1;//超出最小值从最大值开始运算
printf("j:%d\n",j);
printf("l:%d\n",l);
308 结果:
312 9.浮点型(float:%f
double: %lf)
float f = 3.1415926;//100
double d = 3.1415926;//200
float f2 =//100 = 200
//%.2f保留两位有效数字
printf("float:%.2f\n",f);
printf("double:%lf\n",d);
320 结果:
321 float:3.14
322 double:3.141593
324 知识点
325 三、sizeof:计算存储空间的大小,单位:字节
326 sizeof()对应的数据类型是 long unsigned int -&%ld
328 10.sizeof所占空间大小
329 int i = 10;
long l = 20l;
long long ll = 30
char c = 10;
float f = 10.1f;
double d = 10.1;
long double ld = 10.1l;
//求出某种类型或变量或字面值(常量)或表达式所占内存空间大小
//一定注意 变量的空间一定要大于字面值的空间,否则&可能&出现数据问题。
unsigned long int length = sizeof(d=20.1); //sizeof()不负责计算表达式的值
printf("d:%lf\n",d);
printf("length:%lu\n",length);
342 结果:
343 d:10.100000
344 length:8
345 知识点
346 四、运算符
348 11.优先级与结合性
int i = 3+4*5;
printf("i:%d\n",i);
int i2 = 3/2;//整数相除 结果还是整数
double d = 3.0/2;//如果相除时,有小数,则结果为小数
printf("i2:%d\n",i2);
printf("d:%lf\n",d);
//取余运算符%
int i3 = -5%2;
printf("i3:%d\n",i3);
int i4 = -5/2;
printf("i4:%d\n",i4);
//符号问题
int i5 = -5/-2;//与数学中的符号相同
printf("i5:%d\n",i5);
int i6 = 5%-2;//与前面的数字的符号相同
printf("i6:%d\n",i6);
369 结果:
372 d:1.500000
378 12.例题:输入一个秒数 求时分秒
int inputSecond = 0;
printf("请输入一个秒数:\n");
scanf("%d",&inputSecond);
int hour=0,minute=0,second=0;
//hour = inputSecond/3600;
//minute = (inputSecond-hour*3600)/60;
//second = inputSecond -hour*3600 - minute*60;
hour = inputSecond/3600;
minute = inputSecond%3600/60;
second = inputSecond%60;
printf("input的秒数=%d时%d分%d秒\n",hour,minute,second);
395 结果:
396 请输入一个秒数:
398 input的秒数=1时1分6秒
400 13.自增自减运算符
int i = 10;
//i++;//自增1 i = i + 1;
i--;//自减1 i = i - 1;
printf("i:%d\n",i);
int j = 10;
//int k = ++j;//前缀表达式 先自增 再运算(赋值)
int k = j++;//后缀表达式 先运算 后自增
printf("k:%d\n",k);
k=++i+(++i)+i++;
printf("k:%d\n",k);
415 结果:
419 14.关系运算符
int i = 10;
int j = 20;
//&、&、&=、&=、==、!= 关系
printf("i&j:%d\n",i&j);//0 不成立
printf("i&j:%d\n",i&j);//1 成立
printf("i==j:%d\n",i==j);//0
printf("10&20:%d\n",10&20);
printf("10.1&20.1:%d\n",10.1&20.1);
printf("10.1&20:%d\n",10.1&20);
printf("'A'&'B':%d\n",'A'&'B');//ASC码
printf("'A'&'B':%d\n",'A'&'B');
431 结果:
434 i==j:0
435 10&20:0
436 10.1&20.1:0
437 10.1&20:0
438 'A'&'B':0
439 'A'&'B':1
440 15.练习题:
441 用户从控制台输入一个年龄,由程序判断该年龄是否大于18岁,结果输出1为真,0为否
int age = 0;
printf("请输入一个年龄:\n");
scanf("%d",&age);
printf("age&18:%d\n",age&18);
446 结果:
447 请输入一个年龄:
449 age&18:1
450 16. 布尔类型(bool)
451 C99 版本新添加的数据类型 逻辑值类型bool类型
#include &stdbool.h& 头文件
bool flag = false;//true 1 false 0
printf("flag:%d\n",flag);
455 结果:0
456 知识点
457 五、if语句条件分支语句
if&else if
459 //条件 关系表达式
460 //逻辑值 真 (1 true 或 非0) 假(0 false)
461 1.if 语句书写有三种形式
//普通语句(大括号可以省略)只会执行一条语句
if(true) printf("congratulation!");
1. //普通语句(大括号可以省略)没有括号,只会执行一条语句
printf("congratulation!");
printf("congratulation!");
2.//复合语句
要么多执行 要么都不执行 把多条语句变成一个整体
printf("congratulation!");
printf("congratulation!");
3.//空语句
if(age&18);
482 2.if&else
483 int age = 18;
if (age&=18) {
printf("你已经成年了!\n");
printf("你还未成年!\n");
490 结果:你已经成年了!
492 3. if&else if&else
if(表达式1)语句1;
494 else if(表达式2) 语句2;
495 else if(表达式3) 语句3;
497 else 语句5;
498 执行方式从头开始判断真假
500 17.练习 输入小写字母 得到相应的大写字母
printf("shuru");
scanf("%c",&ch);
if(ch&=97){
ch=ch-32;得到大写字母
printf("=%c",ch);
ch=ch+32;得到小写字母
printf("=%c",ch);
513 18.输入一个分数,判断这个分数是否及格?
int score = 0;
printf("请输入一个分数:\n");
scanf("%d",&score);
if (score&=90) {
printf("您的分数是优秀\n");
else if(score&=60){
printf("您的分数是及格\n");
printf("您的分数是不及格\n");
527 结果:
528 请输入一个分数:
530 您的分数是优秀
531 19.输入一个分数,得到相应的级别
int score=0;
printf("input:");
scanf("%d",&score);
if(score&100) printf("GO OUT !!!");
else if(score&=90) printf("A");
else if(score&=80) printf("B");
else if(score&=60) printf("C");
else printf("D");
541 20.else if和if 比较
542 else if 相当于过一个十字路口:一次判断,多种选择
543 但是if 相当于过多个十字路口:多次判断
544 1.一次判断 多种选择 只会选择其一执行(满足条件)
int score = 0;
printf("请输入一个分数:\n");
scanf("%d",&score);
if (score&=60) {
printf("60\n");
}else if (score&=70){
printf("70\n");
printf("else\n");
555 结果:
556 请输入一个分数:
559 2.多次判断 多次执行(满足条件)
int score = 0;
printf("请输入一个分数:\n");
scanf("%d",&score);
if (score&=60) {
printf("if 60\n");
if (score&=70) {
printf("if 70\n");
569 结果:
570 请输入一个分数:
574 3.if在大括号里如果满足条件依次执行
int score = 0;
printf("请输入一个分数:\n");
scanf("%d",&score);
if (score&=60) {
printf("if 60\n");
printf("if 70\n");}
582 结果:
583 请输入一个分数:
587 21.逻辑运算符(&&、||)
int i=0,j=10;//逻辑与短路(短路与)
if((1!=1)&&(i=10))//若第一个表达式的值为假,后面的表达式不再计算
printf("i=%d",i);
若第一个表达式值为真,后面的表达式不再计算
if((1==1)||(j=20))
printf("j=%d",j);
597 结果:
600 22.取地址&与寻址运算符*
int i = 30;
int* p = &i;//得到变量在内存中位置
printf("p:%p\n",p);
//通过寻址运算符 根据地址直接操作内存
printf("内存中的数据:%d\n",*p);
printf("i:%d\n",i);
614 结果:
615 p:0x7fff5fbff70c
616 内存中的数据:30
621 1.输入一个年份,求该年一共有多少天。
printf("请输入年份:\n");
scanf("%d",&year);
if(year%400==0||((year%4==0)&&(year%100!=0)))
{printf("366天\n");}
else{printf("365天\n");}
628 结果:
629 请输入年份:
632 老师的程序: int days=365+(year%400==0||((year%4==0)&&(year%100!=0)))
634 2.输入一个年份,输入一个月份,求该月有多少天?
//1.输入年份
int year = 0;
printf("请输入年份:\n");
scanf("%d",&year);
//2.输入月份
int month = 0;
printf("请输入月份:\n");
scanf("%d",&month);
//3.判断不同的月份 天数是不一样的
//1 3 5 7 8 10 12 31天
//4 6 9 11 30天
//2 闰年 29天 平年28天
int days = 0;//用来保存所求天数
if (month==4||month==6||month==9||month==11) {
days = 30;
}else if (month==2){
days = 28 + ((year%400==0)||(year%4==0 && year%100!=0));
days = 31;
//4.输出天数
printf("year:%d month:%d days:%d\n",year,month,days);
657 结果:
658 请输入年份:
660 请输入月份:
662 year:2005 month:12 days:31
663 3.准备回家过年了,交通工具,通过输入工资,
664 小于1300(最低工资),程序要报错,工资大于10000
665 坐飞机回家,如果大于5000,就坐火车回家,如果大于
666 3000,就坐汽车回家。大于1500,就骑自行车回家,都
667 不满足,步行。
printf("请输入工资:");
scanf("%d",&i);
if(i&=10000)
printf("飞机\n");
else if(i&=5000)
printf("火车\n");
else if(i&=3000)
printf("汽车\n");
else if(i&=1500)
printf("自行车\n");
else if(i&1300)
printf("程序报错\n");
printf("步行\n");
684 4.通过键盘输入4个值,求4个值中的最大值,最小值,和。
//1.输入4个值
int num1=0,num2=0,num3=0,num4=0;
int sum = 0;
printf("请输入第一个数:\n");
scanf("%d",&num1);
sum+=num1;
printf("请输入第二个数:\n");
scanf("%d",&num2);
sum+=num2;
printf("请输入第三个数:\n");
scanf("%d",&num3);
sum = sum + num3;
printf("请输入第四个数:\n");
scanf("%d",&num4);
sum = sum + num4;
//2.求最大值 算法(逻辑)
int max = num1;//标尺
if (num2&max) {max = num2;}
if (num3&max) {max = num3;}
if (num4&max) {max = num4;}
printf("max:%d\n",max);
//求最小值
int min = num1;//标尺
if (num2&min) {min = num2;}
if (num3&min) {min = num3;}
if (num4&min) {min = num4;}
printf("min:%d\n",min);
//3.求最小值
//sum = sum + num3; 累加
//sum += num3;累加 但效率更高 (编译原理)
//sum = num1+num2+num3+num4;
printf("sum:%d\n",sum);
719 结果:
720 请输入第一个数:
722 请输入第二个数:
724 请输入第三个数:
726 请输入第四个数:
730 sum:28
732 知识点
733 六、运算符
735 23.赋值运算符
736 int i = 20;
int j = 10;
int k = 15;
int l = 0;
l = (i = (j = (k = 5)));//从右向左运算的 右结合
printf("i:%d j:%d k:%d l:%d\n",i,j,k,l);
742 结果:i:5 j:5 k:5 l:5
744 1.按位异或操作
printf("5&3:%d\n",5&3);
int i = 5;
printf("~5:%d\n",~i);
int j = 3;
printf("5^3:%d\n",i^j);//按位异或操作
750 结果:
755 2.调换两个值(^)
int l = 5;
int r = 4;
printf("调换前: l:%d r:%d\n",l,r);
l^=r;//l=l^r;
r^=l;//r=r^l;
l^=r;//l=l^r;
int temp = 0;//中间临时变量 桌
printf("调换后: l:%d r:%d\n",l,r);
770 结果:
771 调换前: l:5 r:4
772 调换后: l:4 r:5
774 3.按位左移 按位右移 标识一些有规律的数据
int i2 = 1;
//数据(二进制数)&&(左移)移动位数
printf("i2&&1:%d\n",i2&&1);
printf("i2&&2:%d\n",i2&&2);
781 结果:
782 i2&&1:2
783 i2&&2:4
785 4.多目运算符
int i = 10;
int j = 20;
c = i&j?'a':'b';
printf("c:%c\n",c);
791 结果:c:a
793 24.重构利用多目运算符,输入字符 如果大写 转换小写 如果小写 转换大写
printf("请输入一个字符:\n");
scanf("%c",&ch);
//2.判断 大-&小 小-&大
//ch2 = (ch&='A' && ch&='Z')?ch+('a'-'A'):ch-('a'-'A');
//多目运算符的嵌套
条件表达式?表达式1:表达式2;
条件表达式?(条件表达式?表达式1:表达式2):表达式2;
ch2 = (ch&='A' && ch&='Z')?ch+('a'-'A'):(ch&='a'&&ch&='z')?ch- ('a'-'A'):'?';
printf("ch:%c-&ch2:%c\n",ch,ch2);
807 结果:
808 请输入一个字符:ch:a-&ch2:A
810 知识点
811 七、swich语句
812 25.输入一个小写的数字 输出相应的大写数字 1-&一
//1.输入一个小写数字
int number = 0;
printf("请输入一个小写的数字:\n");
scanf("%d",&number);
//2.根据不同的值进行不同的处理(条件分支)
switch (number) {
printf("一\n");
break;//终止switch语句继续执行
//case 'a':printf("A\n");
printf("二\n");
printf("三\n");
default:printf("您输入的数据有误!\n");
833 结果:
834 请输入一个小写的数字:
838 26.重构成绩等级制输入分数求级别
int score = 0;
printf("请输入一个分数:\n");
scanf("%d",&score);
//2.求相应的级别
//100/10 10 95/10 9 90/10 9
switch (score/10) {
case 9:printf("A\n");break;
case 7:printf("B\n");break;
case 6:printf("C\n");break;
default:printf("D\n");
852 结果:
853 请输入一个分数:
856 27.重构等级制度输入一个分数级别
//二、输入一个分数级别
//求分数的范围 A "您的分数范围是90~100"
//1.输入一个级别
printf("请输入一个分数的级别:\n");
scanf("%c",&level);
//2.根据级别求分数范围
/* if分支语句
if (level=='A'||level=='a') {
printf("分数的范围是90~100\n");
}else if (level=='B'||level=='b'){
printf("分数的范围是70~90\n");
}else if (level=='C'||level=='c'){
printf("分数的范围是60~70\n");
printf("分数的范围是0~60\n");
//switch语句
switch (level) {
printf("0~60\n");
case 'b':printf("70~90\n");break;
case 'c':printf("60~70\n");break;
case 'a':printf("90~100\n");break;
886 结果:
887 请输入一个分数的级别:
889 90~100
890 28.switch练习
891 //1.输入数字
int number = 0;
printf("==================\n");
printf("1.显示全部记录\n");
printf("2.查询登录记录\n");
printf("3.退出\n");
printf("==================\n");
printf("请输入你需要的功能:\n");
scanf("%d",&number);
//2.根据不同数字 进行不同处理
switch (number) {
printf("执行显示全部记录\n");
printf("执行查询登录记录\n");
printf("退出系统\n");break;
printf("您输入的数据有请误!\n");
914 结果:
915 ==================
916 1.显示全部记录
917 2.查询登录记录
918 3.退出
919 ==================
920 请输入你需要的功能:
922 执行查询登录记录
924 知识点
925 八、for
927 1.for循环
//0 1 2 3 4 5 6 7 8 9
//循环语句 重复的执行一段代码
for (int i = 0; i&10; i++) {
printf("跑了第%d圈\n",i);
//可以省略表达式1 可以放到其它位置 可能会出现问题
//可以省略表达式2 默认值是1 不可以放到其它位置
//可以省略表达式3 可以放到其它位置 但必须放在循环体的最后一条件语句
//三个表达式都可以省略
for (int i=0;i&10;i++) {
printf("Hello\n");
944 结果:
945 跑了第0圈
946 跑了第1圈
947 跑了第2圈
948 跑了第3圈
949 跑了第4圈
950 跑了第5圈
951 跑了第6圈
952 跑了第7圈
953 跑了第8圈
954 跑了第9圈
958 29.循环作业
960 1.重构字母转换(if语句)(逻辑运算符)
961 大写&&小写,小写&&大写,不是字母&&您输入的数据有误
963 2.求1-100的和1+2+3+5.....=5050
//求(输出)1到100的和。
//1.拿1~100数
//表达式1 循环标识
//表达式2 循环条件
int sum = 0;
for (int i = 1; i&=100; i++) {
//printf("i:%d\n",i);//循环体
sum=sum+i;//累加求和
printf("sum:%d\n",sum);
977 结果:sum:5050
979 3.输出1到100直间的奇数(不能被2整除的是奇数)
980 4.输出1到100之间的偶数(能被2整除的是偶数)
for (int i = 1; i&=100; i++) {
//2.根据条件取得的数
if(i%2==0){
printf(&偶数:%d\n&,i);
/*也可以用这样的办法求
for (int i = 1; i&=100; i=i+2) {
printf("i:%d\n",i);
994 5.重构求10个数的最大值、最小值、和
int num = 0;
int sum = 0;
printf("请输入第1个数:\n");
scanf("%d",&num);
int max =//标尺
sum = sum +//求和
for (int i = 1; i&4 ; i++) {
printf("请输入第%d个数:\n",i+1);
scanf("%d",&num);
sum = sum +//求和 求累"积"?
//求最大值 求最小值?
if (num&max) {
if (num&min) {
printf("sum:%d\n",sum);
printf("max:%d\n",max);
printf("max:%d\n",min);
1018 结果:
1019 请输入第1个数:
1021 请输入第2个数:
1023 请输入第3个数:
1025 请输入第4个数:
1027 sum:160
1028 max:60
1029 max:10
1030 6.在键盘上输入一个数(任意正整数),求该数的长度
1031 123&3
int i=0,c;
printf("请输入:\n");
scanf("%d",&c);
printf("长度为:%d\n",i);
1039 结果:
1040 请输入:
1041 123456
1042 长度为:6
1044 7.打印水仙花数,水仙花数是一个3位数100&999,每个位的数值的立方刚好是这个数的本身。
1045 153=1*1*1+5*5*5+3*3*3,求水仙花数有哪些
int a,b,c;
for(i=100;i&1000;i++){
b=i%100/10;
{if(i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);}}
1056 结果:
1061 知识点
1062 九、while循环
1063 /* 标准的while循环
//int i = 0;//表达式1 循环标识
//在while循环中 表达式2是不可以省略的
while (i&10) {//表达式2 循环条件
printf("Hello\n");
//i++;//表达式3 循环规律
//通过while循环的使用 只关注条件
while (1&10) { //表达式2 循环条件
printf("hello\n");
//while循环的使用
int num = 1;//保存用户输入的数据
int count1 = 0;//统计正数有多少个
int count2 = 0;//统计负数有多少个
while (num!=0) {
遇到0就停止循环
printf("执行循环体\n");
printf("请输入一个数:\n");
scanf("%d",&num);
printf("您输入的数为:%d\n",num);
//判断是正数还是负数
if (num&=0) {//正数
if (num&0) {//负数
printf("正数有:%d个\n",count1++);
printf("负数有:%d个\n",count2++);
printf("程序结束!\n");
//多次输入一个数,只要不为0,就一直输入,统计
//输入的数,有多少个是正数,有多少个是负数。
1100 结果:
1101 执行循环体
1102 请输入一个数:
1104 您输入的数为:60
1105 执行循环体
1106 请输入一个数:
1108 您输入的数为:-60
1109 执行循环体
1110 请输入一个数:
1112 您输入的数为:0
1113 正数有:2个
1114 负数有:1个
1115 程序结束!
1117 知识点
1118 十、随机数
1119 #include &stdio.h&
1120 //1.导入头文件
1121 #include &time.h&
1122 #include &stdlib.h&
1123 #include &stdbool.h&
1124 int main(int argc, const char * argv[])
int i = 200;
//类型转换 int-&char
c = (char)i;//告诉其它程序员 类型转换 有风险
//2.使用函数 (unsigned)将有符号-&符号
srand((unsigned)time(0));//种子
//0~99 %100
//1~100 %100+1
int num = rand()%100+1;//随机数
//printf("num:%d\n",num);
bool isFlag = false;//标识是否猜正确
int inputNum = 0;//输入一个数
int count = 0;//统计猜数次数
while (!isFlag) {
printf("请输入您猜的数:\n");
scanf("%d",&inputNum);
if (inputNum==num) {
printf("您猜对了!\n");
isFlag = true;
printf("您一共猜了%d次!\n",count);
printf("请继续猜!\n");
if (inputNum&num) {
printf("您上次输入的数大了\n");
printf("您上次输入的数小了\n");
1161 结果:
1162 请输入您猜的数:
1164 请继续猜!
1165 您上次输入的数小了
1166 请输入您猜的数:
1168 请继续猜!
1169 您上次输入的数大了
1170 请输入您猜的数:
1172 请继续猜!
1173 您上次输入的数大了
1174 请输入您猜的数:
1176 请继续猜!
1177 您上次输入的数小了
1178 请输入您猜的数:
1180 您猜对了!
1181 您一共猜了5次!
1183 知识点
1184 十一、do&while循环
1185 //表达式1 循环标识 就算条件不成立 至少执行一次
int i = 20;
printf("HelloWorld\n");//循环体
i++;//表达式3
} while (i&10);//表达式2 循环条件
/* 第一次循环不会进行判断
}while(表达式2)
/* 三个循环的区别
for循环可以直接确定循环的次数
while循环关注循环的条件
do...while循环 第一次循环不会进行判断,每次判断的是下一次循环是否执行
//重构猜数练习
1201 结果:HelloWorld
(先执行do循环体的结果)
1203 2.练习
1204 模拟输入用户名密码(数字),设置一个数据库(模拟数据写死)中用户名密码(123,456),匹配则显示登录成功(则循环停止),否则登录失败,重新登录。
1206 #include &stdio.h&
1207 int main(int argc, const char * argv[])
//1.模拟输入用户名密码(数字)
int username = 0;//用户名
int password = 0;//密码
//2.设置一个数据库(模拟数据写死)中用户名密码(123,456)
int d_username = 123;
int d_password = 456;
//3.匹配则显示登录成功(则循环停止),否则登录失败,重新登录。
//a.输入数据
printf("输入用户名:\n");
scanf("%d",&username);
printf("请输入密码:\n");
scanf("%d",&password);
}while ( !(username==d_username && password==d_password) );
printf("登录成功!\n");
//用户名和密码 都相同 登录成功
//(username==d_username && password==d_password)
1226 或(同时使用break和continue)
1228 //1.模拟输入用户名密码(数字)
int username = 0;//用户名
int password = 0;//密码
//2.设置一个数据库(模拟数据写死)中用户名密码(123,456)
int d_username = 123;
int d_password = 456;
//3.匹配则显示登录成功(则循环停止),否则登录失败,重新登录。
//a.输入数据
printf("输入用户名:\n");
scanf("%d",&username);
printf("请输入密码:\n");
scanf("%d",&password);
if (username==d_username && password==d_password) {
printf("登录成功!\n");
printf("登录失败,请重新登录!\n");
}while (1);
//用户名和密码 都相同 登录成功
//(username==d_username && password==d_password)
1252 三个循环的特点:
1253 for:循环可以直接确定循环次数
1254 while :关注循环的条件
1255 do&while 循环:第一次循环不会进行判断,每次判断的是下一次循环是否执行!
1257 知识点
1258 十二、break,continue
1259 1.循环中使用
break;不但可以终止switch,也可以终止for循环语句
1262 int main()
for (; i&10; i++) {
if (i==3) {
break;//终止循环的继续执行
printf("hello:%d\n",i);
1272 练习:
1273 编写一个求和程序。用户从控制台输入的整数的个数 不受限制,直到输入整数0为止。将输入的整数逐个相加后, 把结果输出。
int sum = 0;
while (1) {
//1.输入一个整数
int num = 0;
printf("请输入一个数:\n");
scanf("%d",&num);
//2.循环输入 直接输入0时结束 break
if (num==0) {
//3.求输入整数之和并输出
printf("sum:%d\n",sum);
1288 结果:
1289 请输入一个数:
1291 sum:45
1292 请输入一个数:
1294 sum:109
1295 请输入一个数:
1297 2.continue可以终止当次循环,继续下一次循环
1298 相当于跳过当次,接着执行下面的
1299 int main()
for (int i=0; i&10; i++) {
if (i==3) {
printf("hello word:%d\n",i);
1309 结果:
1310 hello word:0
1311 hello word:1
1312 hello word:2
1313 hello word:4
1314 hello word:5
1315 hello word:6
1316 hello word:7
1317 hello word:8
1318 hello word:9
1320 3.清空缓冲区
1321 scanf(&%*c&);
1322 举例:有关回车所占的位置清空
1323 int main()
printf("input:");
scanf("%c",&a);
scanf("%*c");//清空缓冲区
printf("input:");
scanf("%c",&b);
printf("a;%db:%d",a,b);
1335 知识点
1336 十三、for循环嵌套(相当于乘法)
1337 int main()
1339 1.循环嵌套 外面的循环执行一次 里面的循环执行一遍
1340 2.描述的是一个二维表 外面的循环代表行
里面的代表列
1341 3.使用循环的嵌套输出指定的图形
1342 4.for可以嵌套 while可以嵌套 do&while 也可以嵌套
1343 5.for&while混合嵌套
for (int j=0; j&2; j++) {//行
for (int i=0; i&3; i++) {//列
printf("i:%d j:%d\n",i,j);
printf("|\n");
1352 结果:
1353 i:0 j:0
1354 i:1 j:0
1355 i:2 j:0
1357 i:0 j:1
1358 i:1 j:1
1359 i:2 j:1
1361 2.输出指定的图形
1362 for (int j=0; j&3; j++) {
for (int i=0; i&5; i++) {
printf("*");
printf("\n");
1369 3.while里面嵌套while
1370 int main()
while (i&9) {//行
while (j&9) {
printf("%d%d ",i,j);
printf("\n");
1385 执行结果:
1386 00 01 02 03 04 05 06 07 08
1387 10 11 12 13 14 15 16 17 18
1388 20 21 22 23 24 25 26 27 28
1389 30 31 32 33 34 35 36 37 38
1390 40 41 42 43 44 45 46 47 48
1391 50 51 52 53 54 55 56 57 58
1392 60 61 62 63 64 65 66 67 68
1393 70 71 72 73 74 75 76 77 78
1394 80 81 82 83 84 85 86 87 88
1395 4.while里面嵌套for
1396 for (int i = 0; i&9; i++) {
int j = 0;
while (j&9) {
printf("%d%d ",i,j);
printf("\n");
1405 作业:
1407 1.打印图形(简单)
for (int i = 0;i&5; i++) {
printf("*");
printf("\n");
1418 for (int j = 1; j&6; j++) { //行
for (int k = 0; k&j; k++) {//列打印内容
printf("*");
printf("\n");
1430 for (int j = 1; j&6; j++) { //行
for (int k = 0; k&6-j; k++) {//列打印内容
printf("*");
printf("\n");
1440 for(int i=1;i&4;i++){
for(int p=0;p&2*i-1;p++){
printf("*");
printf("\n");
1448 e. * * * *
1452 for(int i=1;i&5;i++){
for(int p=0;p&i;p++){
printf(" ");
for(int j=0;j&4;j++){
printf("* ");
}printf("\n");
1464 2.99乘法表(中)
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
1469 for (int i=1; i&=9; i++) {
for (int j=1; j&=i; j++) {
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
1476 3.三角形的输出(中)
1477 for(int i=1;i&5;i++){
for(int p=1;p&5-i;p++){
printf(" ");
for(int j=0;j&2*i-1;j++){
printf("*");
}printf("\n");
1491 *******
1493 4.输入一个数 求数的位数&(高)
for/while/do&while
123-&3 4567-&4
1496 int num = 0;
printf("请输入一个数:\n");
scanf("%d",&num);
int length = 0;//除的次数(长度)
while (1) {
num = num/10;
if (num==0) {
printf("length:%d\n",length);
1508 结果:
1509 请输入一个数:
1510 12345
1511 length:5
1512 知识点
1513 十四、一维数组
1514 一维数组
1515 数组是用来存储多条相同数据类型的数据结构(容器)
1516 定义数组:
1517 int array[3];
1518 访问元素:array[0]=10;
1520 数组名是地址:不能给数组名赋值
1521 数组变量只可以在初始化的时候赋值并且是常量
1522 举例:%p
1523 int array[3];//数组类型 元素类型 数组名【长度】
array[0]=10;//数组名【下标】 变量=(存值)=变量(取值)
array[1]=20;
array[2]=30;
printf("array[0]:%d\n",array[0]);
printf("array[1]:%d\n",array[0]);
printf("array[2]:%d\n",array[0]);
1533 int array[3];//数组类型 元素类型 数组名【长度】
array[0]=10;//数组名【下标】 变量=(存值)=变量(取值)
array[1]=20;
array[2]=30;
printf("array[0]:%d\n",array[0]);
printf("array[1]:%d\n",array[0]);
printf("array[2]:%d\n",array[0]);
printf("address:%p\n",&i);//&取地址运算符
printf("array address:%p\n",&array);//array数组变量 array[0]数组元素变量
printf("array address:%p\n",array);
//得到数组中首元素的地址 &array[0]
printf("array address:%p\n",&array[0]);
1548 结果:array[0]:10
1549 array[1]:10
1550 array[2]:10
1551 address:0x7fff5fbff8d8
1552 array address:0x7fff5fbff8dc
1553 array address:0x7fff5fbff8dc
1554 array address:0x7fff5fbff8dc
1558 练习:通过键盘输入5个数,输入后输出相应的5个数是什么
1560 int array2[5]={};//初始化
//数组使用的时候,经常与循环(for)结合使用
//输入5个数
for (int i=0; i&5; i++) {
printf("input:",i+1);
scanf("%d",&array2[i]);
}//输出5个数
for (int j=0; j&5; j++) {
printf("output:%d",array2[j]);
2. //数组所占空间=元素所占空间*数组的长度
//?只要知道数组的名字 就能求出数组的长度
//数组的长度=数组所占空间/元素所占空间
float array3[3] = {10.1,20.1,30.1};
//数组变量只可以在初始化的时候赋值并且是常量
//array3 = {10.1,20.1,30.1};
//array3 = &...
int length = 0;
//sizeof 变量 类型 常量 表达式
printf("sizeof(array3) size:%lu\n",sizeof(array3));
printf("sizeof(array3[0]) size:%lu\n",sizeof(array3[0]));
length = sizeof(array3)/sizeof(array3[0]);
printf("length:%d\n",length);
//输出5个数
for (int j=0; j&sizeof(array3)/sizeof(array3[0]); j++) {
printf("第%d个数:%f\n",j+1,array3[j]);
1593 结果:
1594 sizeof(array3) size:12
1595 sizeof(array3[0]) size:4
1596 length:3
1597 第1个数:10.100000
1598 第2个数:20.100000
1599 第3个数:30.100000
1601 3.可变数组
1602 1、在C语言中,可变数组指的是数组在声明前其长度是可变的,一旦声明,数组的长度就不可变了。
1603 2、在oc语言中,专门有一种数据类型叫可变数组,数组在使用过程中,其长度是可变的。
printf("请输入班级的人数:\n");
scanf("%d",&count);
//可变数组在使用前 必须确定数组的长度
//一但声明,数组的长度不可修改
int scores[count];//可变数组 是不能初始化
int sum = 0;
for (int i = 0; i& i++) {
printf("请输入第%d个的成绩:\n",i+1);
scanf("%d",&scores[i]);
sum+=scores[i];
printf("sum:%d\n",sum);
1618 练习:输入10个数,求10个数中的最大值,最小值,和。并且输入该值所在位置(最大值,最小值)
1619 #include &stdio.h&
1620 #include &time.h&
1621 #include &stdlib.h&
1622 int main(int argc, const char * argv[])
int nums[5] = {0};
srand((unsigned)time(0));
//1.输入5个数
for (int i = 0; i&5; i++) {
/* 输入5个数
printf("请输入第%d个数:\n",i+1);
scanf("%d",&nums[i]);
/*随机生成5个数*/
nums[i]= rand()%100+1;
//2.得到最大值 得到相应的位置
int maxIndex = -1;
int minIndex = -1;
//a.标尺 (1)拿第一个值当标尺
//int max = nums[0];
//(2)指定一个值作为标尺
//给最小值一个最大值的初值
//给最大值一个最小值的初值
int max = 0;
int min = 100;
//b.每一个值和标尺比
//得到数组中的每一个元素 "遍历"
for (int i = 0; i&5; i++) {
if(nums[i]& max){
max = nums[i];
maxIndex =//保存最大值的下标
if (nums[i]&min) {
min = nums[i];
minIndex =
printf("max:%d maxIndex:%d\n",max,maxIndex);
printf("min:%d minIndex:%d\n",min,minIndex);
//3.得到最小值 得到相应的位置
1662 结果:
1663 max:95 maxIndex:3
1664 min:29 minIndex:1
1666 4.数组的复制、拷贝
int array[3] = {4,5,6};
int array2[3];
//不可以直接赋值数组变量
//array2 =//数组一但声明 地址是不可修改
for (int i = 0; i&3; i++) {
array2[i] = array[i];//取出第一个数组中每一个元素
//查看数组2中的内容
for (int j = 0; j&3; j++) {
printf("array2[%d]:%d\n",j,array2[j]);
1678 结果:
1679 array2[0]:4
1680 array2[1]:5
1681 array2[2]:6
1683 5.数组的乱序
1685 #include &stdio.h&
1686 #include &time.h&
1687 #include &stdlib.h&
1688 int main(int argc, const char * argv[])
int array[10] = {1,2,3,4,5,6,7,8,9,0};
srand((unsigned)time(0));
for (int i = 0; i&10; i++) {
//x交换位置 随机生成
int x = rand()%(10-i)+i;//只是为了更随机
//array[i]当前的位置
//array[x]随机生成的交换位置
//交换两个值
int temp = array[i];
array[i] = array[x];
array[x] =
//输出交换后的数组内容
for (int i = 0; i&10; i++) {
printf("array[%d]:%d\n",i,array[i]);
1715 结果:
1716 array[0]:4
1717 array[1]:1
1718 array[2]:8
1719 array[3]:0
1720 array[4]:9
1721 array[5]:6
1722 array[6]:3
1723 array[7]:7
1724 array[8]:5
1725 array[9]:2
1727 6.正反向遍历
1728 int main()
int array[5]={1,2,3,4,5};
for (int i=0; i&5; i++) {
printf("%d",array[i]);
printf("\n");
for (int i=4; i&=0; i--) {
printf("%d",array[i]);
1742 12345
1743 54321
1744 7.数组元素的重复
1745 若输入数据有重复的数字,把重复的数据表现出来
1746 int main()
int num=0;
int count=0;
int temp=//复制一份输入的值
int array[count];
printf("input");
scanf("%d",&num);
while (temp) {//求长度
printf("%d",temp);
for (int i=0; i++) {//求出数组中的每一个数值
array[i]=num%10;//取出每一位的值并保存
for (int i=0; i& i++) {//每次都是与前一次进行比较
for (int j=0; j&i; j++) {
printf("%d%d",i,j);
if (array[i]==array[j]) {
printf("chongf%d\n",array[i]);
1776 结果:
1777 input5864564
1778 chongf4
1779 chongf8
1780 chongf5
1783 练习:
1784 随机产生6个红球和1个篮球,并且红球不重复,并输出红球和篮球
1785 int main()
//1.生成几个随机数
//2.随机数的范围
//3.随机数的样子
//4.所求随机数 红 蓝
int blue=0;
int red[6]={0};
srand((unsigned)time(0));
blue=rand()%16+1;
for (int i=0; i&6; i++) {//red[i]=当前生成的随机数
red[i]=rand()%33+1;
for (int j=0; j&i; j++) {//red[j]=之前生成的随机数
if (red[j]==red[i]) {
break;//只要发现一个重复的,后面的就不需要判断了
//判断之前是否有重复
for (int i=0; i&6; i++) {
printf("%d ",red[i]);
printf("%d\n",blue);
1812 练习 日历
1814 int days[40] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,1,2,3,4,5,6,7,8,9,10};//40应该是365
int startIndex = 1;//1号在星期几
int index = 0;//取到几号了
printf("一\t二\t三\t四\t五\t六\t日\n");
if (startIndex==1) {
printf(" \t");
if(startIndex%7!=0){//标识 所在位置
printf("%d\t",days[index++]);
printf("\n%d\t",days[index++]);
startIndex++;
if (index==40) {
}while (1);
printf("\n");
1833 结果:
1842 知识点
1843 十五、二维数组
//元素类型 数组名[数组长度];
int array[3]={0};初始化
//array[下标] 下标&数组长度
// 数组= 存值
=数组 取值
//二维数组 3外层(一维)数组的长度,2内层(二维)数组的长度
//元素类型 二维数组名[一维长度][二维长度];
int array[3][2];
//二维数组的操作 array[下标1][下标2]
int array2[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
//二维数组与循环嵌套使用
//外层循环对应二维数组一维的下标
//内层循环对应二维数组二维的下标
printf("%d",array2[2][0]);
1858 int array[3][2]={{1,2},{3,4},{5,6}};//对应元素内容
1859 int array1[3][2]={1,2,3,4,5,6};//整体赋值
1860 int array2[3][2]={1,2,3,4};//依次赋值 自动补零
1.输入5个学生,3门课的成绩,
2.求每个学生 总成绩 X
求每个课程 总成绩 Y
1867 #include &stdio.h&
1869 int main(int argc, const char * argv[])
//保存5个学生3门课的成绩
int score[3][5] = {0};
int sum[3] = {0};//各门课的总成绩
int psum[5] = {0};//各个人的总成绩
//输入每一个学生的成绩
for (int i=0; i&3; i++) {
for (int j=0; j&5; j++) {
//printf("请输入%d行(课程)%d列(姓名)的成绩\n",i,j);
printf("请输入");
switch (i) {
printf("语文");
printf("数学");
printf("英语");
switch (j) {
printf("张");
printf("李");
printf("王");
printf("赵");
printf("钱");
printf("的成绩\n");
scanf("%d",&score[i][j]);
//求每门课的成绩和
sum[i]+=score[i][j];
//求每个人的总成绩和
psum[j]+=score[i][j];
printf("\t张\t李\t王\t赵\t钱\n");
//输出每一个学生的成绩
for (int i=0; i&3; i++) {
//每一行的行头
switch (i) {
printf("语文");
printf("数学");
printf("英语");
printf("\t");
for (int j=0; j&5; j++) {
printf("%d\t",score[i][j]);
printf("\n");
//查看每门课的总成绩
for (int i = 0; i&3; i++) {
switch (i) {
printf("语文");
printf("数学");
printf("英语");
printf("的总成绩为:%d\n",sum[i]);
//每个人的总成绩?
1958 结果:
1961 请输入英语钱的成绩
1967 语文的总成绩为:300
1968 数学的总成绩为:350
1969 英语的总成绩为:400
1970 知识点
1971 十六、函数
1973 特点:1.结构清晰2.重复使用
1975 1.函数的参数
1976 #include &stdio.h&
1977 //1.声明
1978 //返回值类型 函数名(参数);
1979 //推荐:***只要使用函数一定要声明
1980 void sayHello(int i);//函数的原型
1981 //void代表空 声明时不写参数 代表任意个数的参数
1982 //如果不需要参数必须声明成void
1983 //***函数的声明与函数的定义可以一致
1984 //声明的时候 定义的时候 参数形参
1985 //参数:如果函数执行的时候 需要有参考依据就要使用参数
1986 void sayHello(){ //函数体 真正解决问题代码
printf("Hello\n");
1989 //void sayHello5();
1990 //2.定义
1991 void sayHello5(){
printf("Hello\n");
printf("Hello\n");
1996 练习1:
1997 想输出几个Hello就输出几个Hello
1998 void sayHelloN(int n);//声明
1999 void sayHelloN(int n){
for (int i=0; i&n; i++) {
printf("Hello\n");
2004 //程序执行的-&main()-&sayHello();
2005 int main(int argc, const char * argv[])
//3.调用 如果定义的时候有参数,调用的时候就必须输入参数,声明与调用要统一
//sayHello(20);//调用时候的参数就是实参
//sayHello5();
sayHelloN(3);
printf("...几百行\n");
//sayHello5();//函数中定义的代码可以多次使用
2013 结果:
2014 Hello
2015 Hello
2016 Hello
2017 ...几百行
2019 练习2:
早 晚 中 吃啥?
//写函数根据不同值来决定吃什么
//0鱼香肉丝 1地三鲜 2土豆丝 3.宫爆鸡丁
//other.吃饺子
2024 #include &stdio.h&
2025 //1.声明
2026 void eat(int num);//根据数据决定吃什么
2027 //2.定义
2028 //如果函数需要多个参数,需要用,号分隔开。
2029 //参数的类型不限制,但必须声明其类型。
2030 //void eat(int num1,int num2)
2031 //void eat(int num1,char ch)
2032 void eat(int num){
//0鱼香肉丝 1地三鲜 2土豆丝 3.宫爆鸡丁
switch (num) {
printf("鱼香肉丝\n");
printf("地三鲜\n");
printf("土豆丝\n");
printf("宫爆鸡丁\n");
printf("吃饺子\n");
2052 #include &time.h&
2053 #include &stdlib.h&
2054 int main(int argc, const char * argv[])
srand((unsigned)time(0));
printf("早上起床了,吃啥呢?\n");
//scanf("%d",&temp);
temp = rand()%5;
//参数也可以是一个表达式,但必须有结果
printf("又到中午了,吃啥呢?\n");
temp = rand()%5;
eat(temp);
printf("晚上了,吃啥呢?\n");
temp = rand()%5;
eat(temp);
2071 结果:
2072 早上起床了,吃啥呢?
2073 宫爆鸡丁
2074 又到中午了,吃啥呢?
2075 地三鲜
2076 晚上了,吃啥呢?
2077 宫爆鸡丁
2079 2.函数的返回值
2082 /带饭
2083 //吃什么口味的 0甜 1咸 2辣
2084 //0-&鱼(Y) 1-&土(T) 2-&尖(J)
2086 #include &stdio.h&
2087 /char buy(int taste);
2088 //如果定义了返回值类型 函数执行后必须有返回值
2089 char buy(int taste){
switch (taste) {
return 'Y';
return 'T';
return 'J';
return 'Y';
2105 int main(int argc, const char * argv[])
//中午帮我带个饭 我要辣的
//调用一个函数的时候,如果函数有返回值,必须要接收或处理
char ch = buy(0);
printf("ch:%c\n",ch);
2111 结果:ch:Y
2113 3.函数的参数是数组
2115 1.求数组的长度
int a[]={1,2,3,4,5};
int length=sizeof(a)/sizeof(a[0]); 求数组的长度
printf("length:%d\n",length);
2119 结果:
2120 length:5
2122 2.参数是数组
2123 #include &stdio.h&
2124 void func(int length,int *p);
2125 void func(int length,int *p){
for (int i = 0; i& i++) {
printf("array[%d]:%d\n",i,*(p+i));
2130 //参数 如果是数组,必须指定两个值
2131 //1.数组的长度 2,数组名
2132 void func2(int lenght,int array[]);
2133 void func2(int lenght,int array[]){
for (int i = 0; i& i++) {
printf("array[%d]:%d\n",i,array[i]);
2140 int main(int argc, const char * argv[])
int array[] = {1,2,3,4,5};
int length = sizeof(array)/sizeof(array[0]);
printf("length:%d\n",length);
//int *p = &i;
//int *p = &array[0];
//func(array);
//如果函数的参数是数组 使用两个参数
//参数1 为数组的长度 参数2 数组的指针
func2(length,array);
2157 结果:length:5
2158 array[0]:1
2159 array[1]:2
2160 array[2]:3
2161 array[3]:4
2162 array[4]:5
2164 作业:
2165 1.求两个数的和
2167 #include &stdio.h&
2168 #include&stdlib.h&
2169 #include&time.h&
2171 int count(int a,int b);
2172 int count(int a,int b){
//printf("%d",sum);
return a+b;
2178 int main(int argc, const char * argv[]) {
srand((unsigned)time(0));//随机得到两个数
i=rand()%10;
j=rand()%10;
a= count(i,j);// return的返回值赋给a
printf("%d",a);
2186 结果:11
2188 2.重构 成绩打印
2190 #include &stdio.h&
2191 void kemu(int i);
2192 void xingming(int j);
2194 void kemu(int i){
switch (i) {
printf("语文");
printf("数学");
printf("英语");
2208 void xingming(int j){
switch (j) {
printf("张");
printf("李");
printf("王");
printf("赵");
printf("钱");
2229 int main(int argc, const char * argv[])
//保存5个学生3门课的成绩
int score[3][5] = {0};
int sum[3] = {0};//各门课的总成绩
int psum[5] = {0};//各个人的总成绩
//输入每一个学生的成绩
for (int i=0; i&3; i++) {
for (int j=0; j&5; j++) {
printf("请输入");
xingming(j);
printf("的成绩:");
scanf("%d",&score[i][j]);
//求每门课的成绩和
sum[i]+=score[i][j];
//求每个人的总成绩和
psum[j]+=score[i][j];
printf("\t张\t李\t王\t赵\t钱\n");
//输出每一个学生的成绩
for (int i=0; i&3; i++) {
//每一行的行头
printf("\t");
for (int j=0; j&5; j++) {
printf("%d\t",score[i][j]);
printf("\n");
//查看每门课的总成绩
for (int i = 0; i&3; i++) {
printf("的总成绩为:%d\n",sum[i]);
//每个人的总成绩
for (int j=0; j&5; j++) {
xingming(j);
printf("的总成绩为:%d\n",sum[j]);
2275 结果:
2276 请输入语文张的成绩:60
2277 请输入语文李的成绩:60
2278 请输入语文王的成绩:60
2279 请输入语文赵的成绩:60
2280 请输入语文钱的成绩:60
2281 请输入数学张的成绩:70
2282 请输入数学李的成绩:70
2283 请输入数学王的成绩:70
2284 请输入数学赵的成绩:70
2285 请输入数学钱的成绩:70
2286 请输入英语张的成绩:80
2287 请输入英语李的成绩:80
2288 请输入英语王的成绩:80
2289 请输入英语赵的成绩:80
2290 请输入英语钱的成绩:80
2295 语文的总成绩为:300
2296 数学的总成绩为:350
2297 英语的总成绩为:400
2298 张的总成绩为:300
2299 李的总成绩为:350
2300 王的总成绩为:400
2301 赵的总成绩为:60
2302 钱的总成绩为:60
2304 3.使用一个函数调换两个数。
2305 #include &stdio.h&
2306 #include&stdlib.h&
2307 #include&time.h&
2308 void count(int i,int j);
2309 void count(int i,int j){
printf("交换之前的值:i=%d j=%d\n",i,j);
int temp=0;
printf("交换之后的值:i=%d j=%d\n",i,j);
2318 int main(int argc, const char * argv[]) {
int a=0,b=0;
srand((unsigned)time(0));
a=rand()%100;
b=rand()%100;
// printf("主函数交换之前的值:i=%d j=%d\n&,a,b);去掉
count(a,b);
//实参与形参不是一个内存空间(传递的只是值)
// printf("主函数交换之后的值:i=%d j=%d\n&,a,b);去掉
2329 结果:
2330 主函数交换之前的值:i=66 j=41
2331 交换之前的值:i=66 j=41
2332 交换之后的值:i=41 j=66
2333 主函数交换之后的值:i=66 j=41
2335 4.求两个数的最大值?
2336 5.求两个数的最小值?
2337 #include &stdio.h&
2338 #include&stdlib.h&
2339 #include&time.h&
2340 void count(int i,int j);
2341 void count(int i,int j){
int min=0,max=0;
max=i;min=i;
if (i&j) {
if (i&j) {
printf("max:%d,min:%d\n",max,min);
2354 int main(int argc, const char * argv[]) {
int a=0,b=0;
srand((unsigned)time(0));
a=rand()%100;
b=rand()%100;
count(a,b);
2360 结果:
2361 max:54,min:17
2363 6.输入分数求级别,输入级别求分数?重构输入10个学生信息,得到相应结果。
2364 #include &stdio.h&
2365 #include&stdlib.h&
2366 #include&time.h&
2367 //void a(int i);
2368 //void b(char j);
2369 //void xingming(int k);
2371 void a(int i){
switch (i) {
//输入分数求级别0~60D 60~70C 70~90B 90~100A
printf("C\n");
printf("B\n");
printf("A\n");
default:printf("D\n");
2391 void b(char j){
switch(j){
case 'a':printf("90~100\n");break;
case 'b':printf("70~90\n");break;
case 'c':printf("60~70\n");break;
default:printf("60\n");
2406 void xingming(int k){
switch (k) {
printf("张");
printf("李");
printf("王");
printf("赵");
printf("钱");
2427 int main(int argc, const char * argv[]) {
for (int i=0; i&5; i++) {//输入5个人的信息
printf("请输入");
xingming(i);
printf("的分数:");
scanf("%d",&fenshu);
printf("对应的等级是:");a(fenshu);
scanf("%*c");//缓存
for (int i=0; i&5; i++) {//输入5个人的信息
printf("请输入");
xingming(i);
printf("的等级:");
scanf("%c",&dengji);
printf("对应的范围是:");b(dengji);
2451 结果:
2452 请输入张的分数:60
2453 对应的等级是:C
2454 请输入李的分数:50
2455 对应的等级是:D
2456 请输入王的分数:90
2457 对应的等级是:A
2458 请输入赵的分数:80
2459 对应的等级是:B
2460 请输入钱的分数:70
2461 对应的等级是:B
2462 请输入张的等级:a
2463 对应的范围是:90~100
2464 请输入李的等级:对应的范围是:60
2465 请输入王的等级:D
2466 对应的范围是:60
2467 请输入赵的等级:对应的范围是:60
2468 请输入钱的等级:C
2469 对应的范围是:60~70
2471 4.return与exit关键字
2473 return:
2475 1.有返回值类型,必须有return关键字
2476 2.没有返回值类型,也可以使用return关键字
2477 3.当函数的执行过程中,如果碰到return关键字,会终止函数的继续执行
2479 #include &stdio.h&
2480 void fun();
2481 void fun(){
//有返回值类型,必须有return关键字
//没有返回值类型,也可以使用return关键字
return ;//当函数的执行过程中,如果碰到return关键字,会终止函数的继续执行
printf("函数结尾");
2487 int main(int argc, const char * argv[]) {
printf("程序结尾\n");
2490 结果:
2491 程序结尾
2493 exit:(#include &stdlib.h&)
2494 1.终止程序的继续执行
2495 #include &stdio.h&
2496 #include &stdlib.h&
2497 void func();
2498 void func(){
printf("2.func函数开始执行了\n");
//1.有返回值类型 必须有return关键字
//2.没有返回值类型 也可以使用return关键字
exit(0);//终止程序的继续执行
//当函数的执行过程中 如果碰到return关键字,会终止函数的继续执行
printf("函数末尾!\n");
2507 int main(int argc, const char * argv[])
printf("1程序开始!\n");
printf("3.程序末尾!\n");
2514 结果:
2515 1程序开始!
2516 2.func函数开始执行了
2518 练习:
2519 输出一组数的和、最大值、最小 值 
在主函数中创建一个长度为10的数组,数组内放置10 个0~99之间(包含0,包含99)的随机数作为数组内容。 
按要求分别编制自定义函数求数组中的最大值、最小值并 计算出所有数组元素的和。 
在主函数中将各自定义函数的返回值打印显示在界面上。
2521 #include &stdio.h&
2522 #include &time.h&
2523 #include &stdlib.h&
2524 //得到一个随机数 0~99
2525 int getRandom();
2526 int getRandom(){
return rand()%100;
2529 //得到一组数中的最大值
2530 int getArrayMax(int length,int array[]);
2531 int getArrayMax(int length,int array[]){
int max = 0;
for (int i= 0; i& i++) {
if(array[i]&max){
max = array[i];
2540 //得到一组数中的最小值
2541 int getArrayMin(int length,int array[]);
2542 int getArrayMin(int length,int array[]){
int min = 99;
for (int i= 0; i& i++) {
if(array[i]&min){
min = array[i];
2551 //得到一组数的和
2552 int getArraySum(int length,int array[]);
2553 int getArraySum(int length,int array[]){
int sum = 0;
for (int i=0; i& i++) {
sum+=array[i];
2560 //得到数组所有的内容
2561 void outputArrayValue(int length,int array[]);
2562 void outputArrayValue(int length,int array[]){
for (int i = 0; i& i++) {
printf("array[%d]:%d\n",i,array[i]);
2567 int main(int argc, const char * argv[])
int array[10] = {0};
//生成随机数
srand((unsigned)time(0));
for (int i=0; i&10; i++) {
array[i] = getRandom();
//得到最大值
int max = getArrayMax(10, array);
//得到最小值
int min = getArrayMin(10, array);
int sum = getArraySum(10, array);
printf("max:%d min:%d sum:%d\n",max,min,sum);
//显示数组中的所有内容
outputArrayValue(10, array);
2587 结果:
2588 max:78 min:10 sum:504
2589 array[0]:18
2590 array[1]:30
2591 array[2]:46
2592 array[3]:75
2593 array[4]:78
2594 array[5]:52
2595 array[6]:50
2596 array[7]:10
2597 array[8]:76
2598 array[9]:69
2601 5.递归函数
2602 函数中调用函数就叫做递归。(一不小心死循环)
1.递归工作原理:
1.必须有退出条件
2.必须保证递归后。算法简化
2606 #include &stdio.h&
2607 int func(int num);
2608 int func(int num){
printf("num:%d\n",num);
if (num==1) {
return 1;//终止条件
return num*func(num-1);//保证递归后算法简化
复制一个继续执行然后返回值
2614 }//函数中调用函数 递归 一不小心死循环
2615 //程序的编译顺序是自上下向的
2616 //程序的运行顺序main函数的调用顺序
2617 int main(int argc, const char * argv[]) {
int num1= func(3);3的阶乘,是几的阶乘就写几
printf("num1=%d\n",num1);
2622 结果:
2623 num:3
2624 num:2
2625 num:1
2626 num1=6(6相当于3的阶乘3!=3*2*1)
2628 知识点
2629 十六、变量的作用域
2630 一、变量的作用域
(变量的使用范围)
2631 1.不同级的代码块是可以重名的
2632 2.i取值是就近原则
2633 3.在上一级代码中声明的变量,是可以在下一级代码中使用
2634 4.在下一级代码中声明的变量,是不可以在上一级代码中使用
2635 5.声明在大括号外面的变量叫全局变量(整个程序中都可以用)
2636 6.声明在大括号里面的变量叫局部变量(只能在大括号的内部使用)
2637 7.参数是个特殊的局部变量,作用域范围,是函数的内部
2638 8.for 循环的表达式1也是个特殊的局部变量,作用域的范围只能在for
循环体内部使用
2639 #include &stdio.h&
2641 int main(int argc, const char * argv[]) {
//变量i 作用域
int i=10;上一级代码块
int i=20;//不同级的代码块是可以重名的
下一级代码块
//i取值是就近原则
printf("i1:%d\n",i);
printf("i2:%d\n",i);
2653 结果:
2654 i1:20
2655 i2:10
2657 二、变量的生命周期(局部变量)在内存中存在的情况
1.自动变量auto
auto关键字 是没有动态变量一说的
2.静态变量static
static在声明的开始,当程序结束时后结束
2663 #include &stdio.h&
2664 void func2(){
//自动变量
默认值就是auto
auto int i=10;//生 创建内存空间
auto可以省略
//静态变量
static int i2=20;//生 死:当程序结束的时候
printf("i:%d\n",i);
printf("i2:%d\n",i2);
2673 }//出了作用域 死 回收内存空间
2675 int main(int argc, const char * argv[]) {
2682 结果:
2684 i2:21
2686 i2:22
2687 二、变量的生命周期(全局变量)
全局变量的作用域在整个程序的内部,多个函数可以共享这个全局变量
全局变量的生命周期:
程序开始的时候&&生
程序结束的时候&&死
2693 三、全局变量中的static和auto
2695 1.auto关键字 是没有动态变量一说的
2696 2.static关键字 和生命周期没有关系,在多文件开发中,如果要区分全局变量在不同文件中的访问范围,需要使用static关键字修饰
2698 四、栈操作
2699 先进后出,后进先出
2700 练习:使用程序来模拟放球、取球的问题 
用数字来代表球,向栈中放入一个数字1代表放入了1 号球,向栈中放入一个数字2代表放入了2号球,依次类推。 同样,从栈中取出数字1代表取出了1号球。
2702 #include &stdio.h&
2703 //网兜
2704 int balls[3]={0};
2705 //网兜状态标识
2706 int ballIndex = -1;//网兜空的时候为-1
2708 //判断有没有满 1.满 0.未满
2709 int isFull(){
if (ballIndex==2) {
2717 //存球
2718 void push(int ball);
2719 void push(int ball){
//判断有没有满
if (!isFull()) {//没满 存
ballIndex++;
balls[ballIndex]=
}else{ //满 不存
printf("网兜已经满了,不能存值!\n");
2729 //网兜是否为空 1空 0非空
2730 int isEmpty();
2731 int isEmpty(){
if (ballIndex==-1) {
return 1;//为空
return 0;//非空
2739 //取球
2740 int pop();
2741 int pop(){
//网兜是否为空
if (!isEmpty()) {//非空 取
int temp = balls[ballIndex];
balls[ballIndex] = 0;//还要将原来位置的值清零
ballIndex--;
}else{//空 不能取
printf("网兜为空,不能取球!\n");
2754 //查看网兜状态
2755 void showBalls();
2756 void showBalls(){
printf("===================\n");
for (int i=2; i&=0; i--) {
printf("balls[%d]:%d\n",i,balls[i]);
printf("===================\n");
2764 int main(int argc, const char * argv[])
showBalls();
showBalls();
showBalls();
showBalls();
showBalls();
int ball = pop();
printf("取走了一个球:%d\n",ball);
showBalls();
ball = pop();
printf("取走了一个球:%d\n",ball);
showBalls();
ball = pop();
printf("取走了一个球:%d\n",ball);
showBalls();
ball = pop();
printf("取走了一个球:%d\n",ball);
showBalls();
2789 结果:
2790 ===================
2791 balls[2]:0
2792 balls[1]:0
2793 balls[0]:0
2794 ===================
2795 ===================
2796 balls[2]:0
2797 balls[1]:0
2798 balls[0]:1
2799 ===================
2800 ===================
2801 balls[2]:0
2802 balls[1]:1
2803 balls[0]:1
2804 ===================
2805 ===================
2806 balls[2]:2
2807 balls[1]:1
2808 balls[0]:1
2809 ===================
2810 网兜已经满了,不能存值!
2811 ===================
2812 balls[2]:2
2813 balls[1]:1
2814 balls[0]:1
2815 ===================
2816 取走了一个球:2
2817 ===================
2818 balls[2]:0
2819 balls[1]:1
2820 balls[0]:1
2821 ===================
2822 取走了一个球:1
2823 ===================
2824 balls[2]:0
2825 balls[1]:0
2826 balls[0]:1
2827 ===================
2828 取走了一个球:1
2829 ===================
2830 balls[2]:0
2831 balls[1]:0
2832 balls[0]:0
2833 ===================
2834 网兜为空,不能取球!
2835 取走了一个球:0
2836 ===================
2837 balls[2]:0
2838 balls[1]:0
2839 balls[0]:0
2840 ===================
2842 知识点
2843 十七、指针
2844 1.什么是指针
2845 内存被分为字节,每个字节有唯一的地址,指针指的就是内 存地址
2846 2.指针变量
2847 保存指针的变量,就叫指针变量。(保存地址) 
int//int类型变量
int*//*指针类型变量
printf("p-&:%d\n",*p);
2853 结果:
2854 p-&:10
2856 3.每个指针变量能指向一种特定类型的对象(地址,内存区 域)
2858 4.指针是引用数据类型,因为本身没有保存数据,只是保存了 数据的地 址,间接的找到内存中的数据
2860 *5.得到一个指针,可以得到两个值
1.直接得到数据在内存的地址
2.间接得到内存中保存的数据
指针指向(值)
int//int类型变量
int*//*指针类型变量
p = &i;//得到变量在内存中位置
(指针的值)一块内存地址
printf("p:%p\n",p);
//通过寻址运算符 根据地址直接操作内存
printf("内存中的数据:%d\n",*p);
*p = 40; 指针指向的内存区域
printf("i:%d\n",i);
2877 结果:
2878 p:0x7fff5fbff70c
2879 内存中的数据:30
2882 6.指针可以作为参数(形参)
2884 定义函数时,可以使指针类型作为参数,多个变量共用一个内存空间
2886 练习 交换两个值的地址
2888 #include &stdio.h&
2889 //共用一块内存区域
2890 void change(int* p1,int* p2);
2891 void change(int* p1,int* p2){
printf("change1 i:%d j:%d\n",*p1,*p2);
int temp = *p1;
*p1 = *p2;
printf("change2 i:%d j:%d\n",*p1,*p2);
2899 int main(int argc, const char * argv[])
int i = 10;
int j = 20;
printf("main1 i:%d j:%d\n",i,j);
change(&i, &j);
printf("main2 i:%d j:%d\n",i,j);
2908 结果:
2909 main1 i:10 j:20
2910 change1 i:10 j:20
2911 change2 i:20 j:10
2912 main2 i:20 j:10
2914 求一组数的最大值、最小值 
 在主函数中创建一个长度为10的数组,数组内放置10 个0~99之间(包含0,包含99)的随机数作为数组内容, 按要求编制一个自定义函数同时返回数组中的最大值、最 小值,然后在主函数中将自定义函数的返回值打印显示在 界面上。
2916 #include &stdio.h&
2917 #include&stdlib.h&
2918 #include&time.h&
2919 int num();
2920 int num(){
return rand()%100;
2924 void func(int length,int a[],int* maxp,int* minp);
2925 void func(int length,int a[],int* maxp,int* minp){
for (int i=0; i& i++) {
if (a[i]&*maxp) {
*maxp=a[i];
if (a[i]&*minp) {
*minp=a[i];
2935 int main(int argc, const char * argv[]) {
int max=0,min=99;
int a[10]={0};
//使用随机数生成10个数
srand((unsigned)time(0));
for (int i=0; i&10; i++) {
a[i]=num();
printf("a[%d]=%d\n",i,a[i]);
//求一组数的最大值和最小值
func(10,a, &max,&min);
printf("max:%d min:%d\n",max,min);
2950 结果:
2951 a[0]=72
2952 a[1]=11
2953 a[2]=16
2954 a[3]=38
2955 a[4]=52
2956 a[5]=78
2957 a[6]=20
2958 a[7]=92
2959 a[8]=42
2960 a[9]=53
2961 max:92 min:11
2963 7.指针可以作为返回值
2965 定义函数的时候,可以使用指针类型作为返回值,可以共享函数中的内存空间。注意:函数中的变量不能是自动变量,自动变量一旦超出作用域就销毁了,如果想使用,必须延长变量的生命周期,使它变成静态变量。
2968 #include &stdio.h&
2969 //2.使用全局变量
2970 //int i=30;
2971 int* func();
2972 int* func(){//指针作为参数,共享函数中的内存空间
static int i=10;//1.延长变量生命周期
(只有第一次执行,第二次调用便使用i++)
printf("i:%d\n",i);
return &i;
2978 int main(int argc, const char * argv[]) {
ip=func();
2986 结果:
2990 8.指针的加减操作
2991 指针支持加整数、减整数、指针的比较和相减,但运算的单位 由指针的类型决定。 
指针变量+1 相当于移动了一个数据位
int类型指针+1  =  地址+4 
char类型指针+1  =地址+1 
2995 1.int 类型的指针加减
2997 #include &stdio.h&
2999 int main(int argc, const char * argv[]) {
int a[3]={1,2,3};
int* p=a;//等于int* p=&a[0];
printf("*p:%d
%p\n",*p,p);
printf("*(p+1):%d
%p\n",*(p+1),p+1);
printf("*(p+2):%d
%p \n",*(p+2),p+2);
3007 结果:
0x7fff5fbff77c
3009 *(p+1):2
0x7fff5fbff780
3010 *(p+2):3
0x7fff5fbff784
3012 2.char类型的指针加减
3014 #include &stdio.h&
3016 int main(int argc, const char * argv[]) {
char a[3]={'a','b','c'};
char* p=a;//等于int* p=&a[0];
printf("*p:%c
%p\n",*p,p);
printf("*(p+1):%c
%p\n",*(p+1),p+1);
printf("*(p+2):%c
%p \n",*(p+2),p+2);
3024 结果:
0x7fff5fbff77d
3026 *(p+1):b
0x7fff5fbff77e
3027 *(p+2):c
0x7fff5fbff77f
3029 3.通过for循环
根据地址取值
3031 #include &stdio.h&
3033 int main(int argc, const char * argv[]) {
int a[3]={1,5,2};
int* p=a;//等于int* p=&a[0];
//通过for循环 根据地址取值
for (int i=0; i&3; i++) {
//*(p+i)与(*p)+1结果是不同的
printf("*(p+i):%d\n",*(p+i));正确的输出
printf("*(p)+i:%d\n",(*p)+i);
3043 结果:
3044 *(p+i):1
3045 *(p)+i:1
3046 *(p+i):5
3047 *(p)+i:2
3048 *(p+i):2
3049 *(p)+i:3
3052 9.二级指针
int* ip=&i;//指针
int** ip2=&//二级指针
int*** ip3=&ip2;//三级指针
printf("ip3:%d\n",***ip3);
3058 结果:
3059 ip3:10
3061 10.指针与数组
3063 共同点:两者都可以表示地址
3065 不同点:
一、所占内存空间不同
1. 和具体内存中,所保存的数据无关
2.所有内存的地址所占内存空间都是一样大的
3.指针地址所占内存空间在macos64位系统下, 地址所占8字节
4.数组所占的内存空间=元素所占的内存空间*元素的长度(个数)
3071 例题:
int i = 10;
char ch = 'a';
int* p1 = &i;
char* p2 = &
//所占内存空间
//和具体内存中,所保存的数据是无关
//所有内存的地址所占内存空间都是一样大的
//macos64位 地址所占8B
printf("p1 size:%ld\n",sizeof(p1));
printf("p2 size:%ld\n",sizeof(p2));
//数组所占的内存空间=元素所占内存空间*元素个数
int array[5];
printf("p size:%ld %p\n",sizeof(p),p);
printf("array size:%ld *%p\n",sizeof(array),array);
3089 结果:
3090 p1 size:8
3091 p2 size:8
3092 p size:8 0x7fff5fbff790
3094 二、赋值
1.指针变量的值是可以改变的
2.数组一但声明,其值是不可以改变的,而是保存数据在内存中的地址,在使
用的时候通过地址间接得到数据的值。
int array[5];
printf("p size:%ld %p\n",sizeof(p),p);
printf("array size:%ld *%p\n",sizeof(array),array);
int i2 = 10;
int j2 = 20;
int* p3 = &i2;
p3 = &j2;//指针变量的值是可以改变的 赋值
int array2[5];
int array3[10];
//array2 = array3;错误的表示//是不可以改变数组变量的值的
3112 结果:
3113 array size:20 *0x7fff5fbff790
3115 11、引用&&&c语言中数据类型主要分为两大类
基本数据类型:int char double float
变量本身就保存了我们需要的数据
引用数据类型:指针
变量本身并没有保存数据
3122 数据-&(Create创建Read读取Update更新Delete删除)
3124 12.进程空间
3126 &进程是正在运行的程序,在内存中。  ?& 每个进程在内存中占据的空间称进程空间 
3127 1.进程空间的内存分配
1.代码区(正文段,  text)  只读
2.全局区(全局静态区)
全局变量、静态变量
3.堆区(自由区,  heap) 
4.栈区(堆栈, 
 stack) 
动态变量(局部变量)
3132 知识点
3133 十八、字符串
1.三种字符串的创建:
一、字面值字符串
1.在代码区创建了一个字符串 会在结尾自动加\0 (只读)
2.字符串有自己的占位符%s
3.字符串使用,会从首地址一个字节一个字节的读取数据,直到读到\0位
置表示结束
//在代码区创建了一个字符串 会在结尾自动加\0
char* p= "string1";//可以与指针变量结合使用
printf("string2\n");//直接与输出函数使用
//字符串有自己的占位符%s
printf("%s\n",p);
char* p2= "string1";
//如果字符串的内容相同,代码区只会创建一个字符串
printf("p:%p,p2:%p\n",p,p2);//地址
//字符串使用,会从首地址一个字节一个字节的读取数据,直到读到\0位置 表示结束
char* p3="str\0ing1\n";
printf("p3:%s\n",p3);
3150 结果:
3151 string2
3152 string1
3153 p:0xe,p2:0xe
3154 p3:str
char* p3="str\0ing1\n";
printf("p3:%s\n",p3);
char* cp=p3;
printf("cp+1:%c\n",*(cp+1));
//*(cp+1)='w';//如果非要改 程序就异常
3161 结果:
3162 p3:str
3163 cp+1:t
3165 二、字符数组的字符串
1.保存在内存中栈区
内容就算相同,也会开辟不同的内存空间
2.字符数组的字符串与普通的字符数组最大的区别是否有 结束符\0
3.栈区 读写....
char str[4]={'s','t','r','\0'};
char str2[4]={'s','t','r','\0'};
char* cp = str2;
*(cp+1) = 'w';//可以改变栈区的数据
printf("str address:%p value:%s\n",str,str);
printf("str2 address:%p value:%s\n",str2,str2);
3175 结果:
3176 str address:0x7fff5fbff7a4 value:str
3177 str2 address:0x7fff5fbff7a0 value:swr
3179 三、字符指针
3181 对于字符串来讲引用类型:
3183 1.字符指针即可以与字面值字符串结合使用
3184 2.也可以与字符数组的字符串结合使用
3186 练习:通过键盘输入一个字符串
//char* input="*********";通过字面值定义字符串不可取
char input[10];
char* inputp=
printf("请输入一个字符串信息:\n");
scanf("%s",input);
printf("str:%s\n",inputp);
3193 结果:
3194 请输入一个字符串信息:
3195 hello
3196 str:hello
3198 三种字符串创建的比较
只会创建一个
b.字符数组
会创建多个
c.字符指针
保存地址(栈) 无关
3204 2.字符串函数库
3206 #include &str}

我要回帖

更多关于 苹果电脑command键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信