day 1
打开终端: ctrl + alt + t
最大化: ctrl + alt + 回车
窗口模式: 点击"查看"—>点击"立即适应客户机"
放大字体: ctrl + shift + ‘+’
缩小字体: ctrl + ‘-’
终端命令行: linux@ubuntu:~$
linux:当前登录的用户
用户:
1.普通用户
可以有多个,也可以一个没有,名字没有限制
2.超级用户
有且只有一个,名字必须为root
su 用户名
切换当前登录的用户
exit
退出当前切换的用户
ubuntu: 操作系统名字
~: 当前所在目录,该目录为当前登录用户的家目录
家目录: 每个用户都拥有属于自己的家目录
command [-options] arg1 arg2 arg3 …
1.ls
查看当前目录下所有的文件
蓝色:目录文件(文件夹)
绿色:拥有执行权限文件
红色:压缩文件
白色:普通文件(文本文件)
注意:
1.Linux系统中不以文件名后缀区分文件类型
2.Linux系统中文件名区分大小写
3.Linux系统中文件名不能包含空格字符
2.touch filename
创建空普通文件
3.rm filename
删除普通文件
4.mkdir dirname
创建空文件夹
5.rmdir dirname
删除空目录文件
6.rm -rf dirname
删除非空目录(谨慎使用)
7.cd dirname
进入dirname目录
cd … 进入当前目录的上一级目录
cd . 进入当前目录
cd / 进入根目录
cd ~ 进入当前登录用户的家目录
cd - 进入之前的目录
8.pwd
查看文件绝对路径
Linux系统目录结构:
文件系统满足树形结构
最顶层目录: / 根目录
/bin :存储二进制文件
/etc :存放配置文件
/mnt :存放挂载文件
/proc :存放进程相关文件
/boot :存放启动代码
/dev :存放设备文件
/lib :存放库文件
/var :存放日志文件
/root :root用户的家目录
/home :存放普通用户家目录的目录
linux -> /home/linux
zhangsan -> /home/zhangsan
lisi -> /home/lisi
相对路径: 登录用户不同,所在目录不同,相同路径具有不同的含义
file
./file
…/file
~/file
绝对路径: 登录用户不同,所在目录不同,相同路径具有相同含义
/home/linux/Desktop
9.cp 拷贝
cp filename dirname
将filename文件拷贝到dirname目录下
cp srcdirname dstdirname -rf
将srcdirname文件夹拷贝到dstdirname文件夹下
10.mv 移动
mv srcfilename dstdirname
将源文件移动到目的目录下
mv 修改文件名字
mv oldname newname
=======================================================
1.vim filename.c
使用vim软件打开filename.c文件
2.vim默认进入底行模式
三种模式:
1.插入模式
2.底行模式(默认)
3.命令模式
底行模式 -> 插入模式 点击i键
插入模式 -> 底行模式 点击ESC键
底行模式 -> 命令模式 输入:
命令模式:
:w 只保存不退出
:q 只退出不保存
:wq 保存并且退出
:q! 不保存强制退出
:wq! 保存并且强制退出
3.gcc编译器
gcc filename.c
编译filename.c默认生成a.out
gcc filename.c -o filename
编译filename.c指定生成filename文件
注意: 编译时语法错误及逻辑错误
4.C语言开发步骤:
1.vi filename.c
2.点击i键
3.编写程序
4.点击ESC键
5.保存退出
6.gcc filename.c
7…/a.out
示例格式:
#include //头文件
int main(void)
{
return 0;
}
=========================================================
day2
1.点击设置按钮
2.点击"System Setting"
3.点击"Language Support"
4.Keyboard input method system选择ibus
5.点击"close"
6.点击设置按钮
7.点击shutdown
8.点击restart
9.重启后按下"ctrl + 空格" 切换中/英文输入
======================================
一、预处理
处理和#号相关代码
1.头文件
将头文件展开
2.宏定义
将宏定义实现替换
3.条件编译
满足条件的代码加入编译,不满足条件的代码
不加入编译
gcc -E filename.c -o filename.i
编译 :将C语言程序编译成汇编程序
gcc -S filename.c -o filename.s
汇编: 将汇编程序编译成二进制程序
gcc -c filename.c -o filename.o
链接 :将二进制程序链接成为一个可执行程序
gcc filename.c -o filename
======================================
1.语法错误
2.逻辑错误
GDB调试步骤:
1.编译程序时加入-g选项
gcc filename.c -g
2.使用gdb调试工具调试a.out
gdb a.out
3.使用命令对程序完成调试:
**l**: 查看代码
**b 行号/函数**:设置断点 运行到 行号/函数 停止
**r**: 运行代码
**n**: 分步执行
**p 变量名**:查看变量中的值
**q**: 退出
**c**: 继续运行直到程序结束/断点处
**s**: 进入函数中调试
=========================================================
Vim 编辑器
Gcc 编译器
Gdb 调试器
终端 执行代码
=========================================================
32关键字
1.基本数据类型、运算符、表达式
2.常用输入输出函数
3.流程控制
4.数组
5.指针
6.函数
7.构造数据类型
8.指针高级
9.函数高级
10.内存管理
学习方法:
1.避免看代码
2.多敲多练
3.思考
低级语言:
1.执行速度快
2.开发效率低
3.移植性差
C语言:高级语言
C C++ Java C#
1.执行速度慢
2.开发效率高
3.移植性好
程序如何在计算机中运行:
程序存放在外存中,运行时加载到内存中,CPU与内存交互执行程序代码指令,操作程序中的变量
表1:
进制 | 包含数字 | 操作 |
---|---|---|
二进制 | 0,1 | 逢二进一 |
八进制 | 0 1 2 3 4 5 6 7 | 逢八进一 |
十进制 | 0 1 2 3 4 5 6 7 8 9 | 逢十进一 |
十六进制 | 0 1 2 3 4 5 6 7 8 9 a b c d e f | 逢十六进一 |
表2:
进制转换 | 操作过程 |
---|---|
二进制、八进制、十六进制转化为十进制 | 对应位*对应位的权值再求和 |
十进制转化为二进制、八进制、十六进制 | 十进制数除以进制数,得到的余数逆序排列则得到对应进制的数 |
二进制与八进制、十六进制的转化: | 1位八进制数对应3位二进制数;1位十六进制数对应4位二进制数 |
=========================================================
数据类型:操作数据对象的类型
基本数据类型:C语言能够直接识别的数据类型
构造数据类型:先自定义数据类型再操作该数据类型
1.整数类型:
整数类型中,每种数据类型均有有符号(signed)和无符号(unsigned)两种形式,默认为有符号类型(signed)
表一:无特殊标记为32位和64位编译器
数据类型名 | 字节空间大小 | 值域范围 |
---|---|---|
short int短整形 | 2 | signed: -2^15 - 2^15 -1即: -32768 - 32767 |
unsigned short int无符号短整形 | 2 | unsigned: 0 - 2^16 -1,即 0 - 65535 |
int 整形 | 4,16位:2 | signed: -2^31 - 2^31 - 1 |
unsigned int 无符号整形 | 4 | unsigned:0 - 2^32 -1 |
long 长整型 | 32位:4;64位:8 | signed: -2^31 - 2^31 - 1 |
long long | 8 | |
unsigned long | 32位:4;64位:8 | unsigned:0 - 2^32 -1 |
char 字符型 | 1 | signed:-128 - 127 |
unsigned char | 1 | unsigned: 0 - 255 |
string 字符串 | 32 | |
指针 | 32位:4 ;64位:8 | 0 - 2^32 -1,32位的寻址空间,32个bit及4字节,同理64位编辑器 |
ASCII码表: 规定字符和数字间的转化关系。
前32号元素不能在终端显示,32号之后的元素都可以在终端显示
'A':65
'a' :97
'\n':10
'0' :48
'\0':0
man 帮助手册
1.标准命令
2.系统调用
3.库函数
4.设备说明
5.文件格式
6.娱乐
7.杂项
8.管理员命令
2.浮点数类型:
表二:无特殊标记为32位和64位编译器
数据类型 | 字节空间大小 | 值域范围 |
---|---|---|
float 单精度浮点型 | 4 | 精确到小数点后6 - 7位有效数字 |
double 双精度浮点型 | 8 | 精确到小数点后15 - 16位有效数字 |
浮点数均为有符号类型,没有无符号类型的概念
注意:
浮点数类型存储和整数类型存储方法不一样,浮点数类型表示非常大的数或者非常小的数
判断float类型数与0是否相等
-0.000001 < f < 0.000001
3.缺省类型:
void 作为函数参数、返回值或修饰指针
4.逻辑类型:
数据类型 | 字节空间大小 | 值域范围 |
---|---|---|
bool 布尔值 | 1 | true :1;false:0 |
在C语言中非0值为逻辑真值,0值为逻辑假值
常量:程序运行过程中间值不允许发生改变的量
1.整形常量(默认为int类型)
100 十进制常量
0100 八进制常量
0x100 十六进制常量
123l 长整型
100L 长整型
123ul 无符号长整型
123UL 无符号长整型
2.浮点型常量(默认为double类型)
3.1415 double
3.1415f float类型
3.1415e-10
3.1415E10
3.字符常量
‘A’ 65 char
‘#’
‘a’ 97 char
‘0’ 48
大写字母变小写: +32
小写字母变大写: -32
字符型数字变整形数字: - '0’
===========================================================================================================
day3
1.字符常量(默认char类型)
eg: ‘A’, ‘B’ ,‘C’,‘a’, ‘b’ ,‘c’,’#’ ,’~’ ,’;’,‘1’, ‘2’, ‘3’, ‘4’
‘\n’:换行符;
‘\b’:退格符;
‘\t’:横向制表符;
‘\v’:纵向制表符;
‘\r’:回车符;
‘\’:\字符 ;
注意下列字符与数字的区别
‘0’:字符0;
‘\0’:字符\0;
0:数字0;
‘0’ != ‘\0’;
‘0’ != 0;
‘\0’ == 0;
‘\123’:八进制123对应的字符
‘\x12’:十六进制12对应的字符
字符串常量(默认char *类型)
eg:“ABC”
字符串结尾有一个用来标识结尾的’\0’字符
“12\0”
“123\123”
“123\086”
“123\086”
“A” ‘A’ + ‘\0’
‘A’ ‘A’
2.标识常量
#define M 50
宏定义可以是小写,但一般都是用大写
define宏定义只是代码的替换,中间不进行任何数据计算的操作
宏定义能加括号就加括号,不要吝啬小括号
变量:在程序运行过程当中,值允许发生改变的量
1.变量的定义:存储类型 数据类型 变量名;
存储类型:
auto(默认) 自动型变量/局部变量
register 寄存器变量
extern 外部变量
static 静态变量
数据类型:
基本数据类型:int short float double long char bool
构造数据类型:struct union enum
变量名:
1.可以由字母、数字、下划线构成,但不能以数字开头
2.变量名不允许与C语言关键字重名
3.变量名最好不要与库函数重名
见名知意
eg:int iTmpCnt tmp_cnt
unsigned int uiMaxNum max_num
long lMinNum min_num
unsignd long ulAvgScore avg_score
存储类型:
auto:
1.将数据存放在栈区中,局部变量作用域在离定义该变量最近的大括号之内
2.执行到定义变量时为变量分配内存空间
3.超过变量作用域回收变量空间
register:
1.将数据存放在寄存器中,如果寄存器满,则等价于auto类型
extern:
1.声明变量为外部存储
static:
1.将数据存放在数据区中
2.未经初始化为0值
3.编译时分配存储空间
4.结束时回收空间
1.static 限定变量的作用域
2.防止多文件编程时,变量或函数重名
auto int a;
声明与定义的区别:
声明:声明已有变量的类型不为变量分配空间
定义:为变量分配存储空间
int Num;
extern int Num;
作用域:变量能够使用的范围
生存周期:变量从开始分配空间到空间被回收的过程
变量的初始化: 定义变量时为变量赋初值
※ 初始化 != 赋值
=========================================================
语句:以;号结尾的一段代码
表达式:由一个或者多个运算符连接的变量和常量组成的式子表达式一定有值
1.显示类型转换(强制类型转换)
float f = 3.1415;
(int)f
int(f)
2.隐式类型转换
如果运算符左右两边数据类型不一致,则会转化成同一种类型再进行数据计算和数据处理
转换规则:
低精度 -> 高精度
数据类型所占字节数越多精度范围越高
无符号精度范围高于有符号精度范围
浮点数类型精度范围高于整形精度范围
低: int <- short char
高: double <- float
eg: char Num1 = 100;
char Num2 = 200;
char + char int
float + float double
char + int int
unsigned int + int unsigned int
int + float double
=========================================================
1.算数运算符
+,-,*,/,%,++:自增运算符,-- :自减运算符,i++:先用再加,++i:先加再用
eg:int i = 0;
int Num = 0;
Num = ++i+i++;
result:Num=2,i=2
eg: Num = i++ + i;
result:Num=0 ,i=1
2.关系运算符
> ,<,=,==常量放在等号的左边,!=,>=,<=
3.逻辑运算符
&&: 既…又…
||: 要么…要么…
!: 真取非得假
假取非得真
规则:
&&:一假为假 全真为真
||:一真为真 全假为假
!:真取非得假 假取非得真
★截断特性:
逻辑与左边为假值,右边不再计算
逻辑或左边为真值,右边不再计算
4.位运算符
进行数据计算:
& 按位与
| 按位或
~ 按位取反
^ 按位异或 相同为0相异为1
>> 右移 缩小
右移n位等价于该数除以2^n
<< 左移 放大
左移n位等价于该数乘以2^n
规则 :与0得0 ;或1置1 ;异或取反;其余不变
int Num1 = 100;
int Num2 = 200;
★
n ^ n :0
n ^ 0 : n
让Num第n位置1:
Num = Num | (1 << n)
让Num第n位置0:
Num = Num & ~(1 << n)
5.赋值运算符
=,+=,-=,*=,/=,&=,|=,%=
截断:
大数据放入小空间,直接截取低位
扩展:
小数据放入大空间,有符号数扩展符号位,无符号数扩0
6.特殊运算符
单目运算符:!
双目运算符
三目运算符:? :
a > b ? a : (b > c ? b : c);
从右至左
表达式1?表达式2:表达式3;
表达式1是否成立?成立执行表达式2:不成立执行表达式3;
((0 == year % 4) && (year % 100 != 0)) || (0 == year % 400) ? printf("闰年") : printf("平年");
7.逗号运算符
int a = 0;
int b = 0;
int c = 0;
(a++, b++, c++, a+b, b+c, a+c)
逗号表达式的结果是最后一个表达式的值
8.sizeof运算符
sizeof(数据类型/变量名)
sizeof(int)
sizeof(a)
★运算符优先级:
括号
单目运算符 从右至左
双目运算符
算数运算符
移位运算符
关系运算符
位运算符
逻辑运算符
三目运算符 从右至左
赋值运算符 从右至左
逗号运算符
作业:
1.从终端获得两个2位数,将第一个数的个位作为新数的千位,将
第二个数的个位作为新数的百位,将第二个数的十位作为新数的十位
将第一个数的十位作为新数的个位,打印该新数
输入:12 34
输出:2431
#include
int main(void)
{
int a,b;
int s;
printf("请输入两位数:\n");
scanf("%d,%d",&a,&b);
s=a%10*1000+b%10*100+b/10*10+a/10;
printf("%d\n",s);
return 0;
}
2.从终端输入三角形三边长,求三角形的周长和面积
#include
#include
int main()
{
double a,b,c,p=0,s=0,l=0;
printf("请输入三角形的三条边:");
scanf("%lf,%lf,%lf",&a,&b,&c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
l=a+b+c;
if(a+b>c&&b+c>a&&a+c>b)
{
printf("%lf\n",l);
printf("%lf\n",s);
}
else
printf("输入的三条边不构成三角形!");
return 0;
}
3.从终端输入一个年份,打印该年为闰年还是平年
#include
int main(void)
{
int i;
printf("请输入一个年份:");
scanf("%d",&i);
if((i%400==0)||(i%4==0&&i%100!=0))
printf("%d年为润年\n",i);
else
printf("%d年为平年\n",i);
return 0;
}
==================================================================================================================day4
头文件 #include
函数:putchar,getchar , printf, scanf , puts, gets
1:putchar:
向终端输出一个字符
1.向终端输入字符
2.只能输出一个字符,多次输出,多次调用
==========================
2:getchar
从终端获得一个字符
1.只能读字符
2.只能接第一个字符
char ch;
ch = getchar();
3. printf:
向终端输出格式化字符串
1.printf打印非输出控制符
printf(“hello world”);
\n:换行符
\:\字符
\t:横向制表符
\v:纵向制表符
\a:响铃
\b:退格符
\r:回到最左端
":"号
2.printf打印输出控制符
printf(“Num = %d\n”, Num);
%d 按照有符号十进制打印
%c 按照字符打印
%u 按照无符号类型打印
%f 按照浮点数类型打印
%lf 按照双精度浮点数类型打印
%s 按照字符串打印
%p 按照指针打印
%o 按照八进制打印
%x 按照十六进制打印
%#o/%#x 打印八进制/十六进制前的0和0x
%e 按照指数打印
%% 打印%号
3.printf打印多个输出控制符
int Num1 = 100;
int Num2 = 200;
printf("Num1 = %d, Num2 = %d\n", Num1, Num2);
eg:
#include
int main(int argc, const char *argv[])
{
int Num = 100;
printf("hello\0world\n");
printf("zhangsan say:\"today is a good day!\"\n");
printf("Num = %d\n", Num);
return 0;
}
4.printf格式化打印:
%-nd
n:域宽 不足域宽高位补' '
-:左对齐
%0nd:
0:不足域宽高位用0补齐
%.mf:
m:保留小数点后m位有效数字
scanf:
格式化输入函数
注意事项:
1.scanf从数据不匹配的位置开始,不再向后读取
2.scanf中严禁出现\n字符
3.scanf中除了%s不加&,其余格式就要加&
4.scanf中除了%c可以接收’ ‘和’\n’字符外,其余形式均无法接收’ ‘和’\n’
5.scanf中%c可以接收’ ‘和’\n’ _%c接收除’ ‘和’\n’以外的字符
1.从终端接收非输入控制符
scanf(“m”);
2.从终端接收输入控制符
int Num = 0;
scanf("%d", &Num);
%d 从终端接十进制数
%c 从终端接字符
%s 从终端接字符串
%f 从终端接float类型
%lf 从终端接double类型
eg
#include
int main(int argc, const char *argv[])
{
int Num1 = 0;
int Num2 = 0;
char ch1 = 0;
char ch2 = 0;
scanf(" %c %c", &ch1, &ch2);
printf("ch1 = %c\n", ch1);
printf("ch2 = %c\n", ch2);
#if 0
scanf("%d%d", &Num1, &Num2);
printf("Num1 = %d\n", Num1);
printf("Num2 = %d\n", Num2);
#endif
return 0;
}
3.从终端接收多个输入控制符
int Num1 = 0;
int Num2 = 0;
scanf("%d %d", &Num1, &Num2);
puts:
向终端打印一行字符串
puts会多打印一个’\n’字符
#include
int main(int argc, const char *argv[])
{
char Str[32] = {"how are you"};
puts("ABCD");
puts("hello world");
puts(Str);
return 0;
}
gets
gets:从终端接收一个字符串
gets会去掉接收的’\n’字符
#include
int main(int argc, const char *argv[])
{
char Str[32];
// gets(Str);
scanf("%s", Str);
printf("Str = %s\n", Str);
return 0;
}
作业:
1、输入任意一个三位数,将其各位数字反序输出(例如输入123,输出321).
#include
int main()
{
int i,a,b,c,d;
printf("请输入任意一个三位数:");
scanf("%d",&i);
a=i/100;
b=i%100/10;
c=i%10;
d=c*100+b*10+a;
printf("%d\n",d);
return 0;
}
2、输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。
若是,则输出“YES”,不是则输出“NOT”
(要求用条件表达式进行判断,不使用if语句)
#include
int main()
{
int a,b,c;
char * result;
printf("请输入三个数字:");
scanf("%d %d %d",&a,&b,&c);
result = ((a % 2)+(b % 2)+(c % 2) == 2) ? "YES" : "NO";
printf("%s\n",result);
return 0;
}
3.从终端输入接收字符,并输出该字符,遇到’q’结束
a
a
b
#
#
q
#include
int main(int argc, const char *argv[])
{
char a;
do
{
scanf("%c",&a);
printf("%c\n",a);
}
while(a != 'q');
return 0;
}
方法2
#include
int main(int argc, const char *argv[])
{
char ch = 0;
ch = getchar();
for (; ch != 'q';)
{
putchar(ch);
ch = getchar();
}
return 0;
}
=======================================================
day5
1.顺序结构
默认从main函数第一句一直向后执行到main函数结束
2.分支结构:
1.判断使用分支结构
2.同一类数据执行不同操作
1.if分支
1.简单分支
if (表达式)
{
A;
}
else
{
B;
}
注意:
1.if可以省略else单独使用,else不能省略if单独使用
2.if默认控制一句代码,只控制一句代码时,也要加上括号
3.if后面不要加;号
4.if后面必须加条件,else不允许加条件
练习:
从终端获得一个数,如果该数为奇数,则打印"奇数"
如果该数为偶数,则打印"偶数"
从终端获得两个数,如果第一个数大,则输出第一个数,如果第二个数大,则两数交换,输出第一个数
方法1
#include
int main(int argc, const char *argv[])
{
int Num1 = 100;
int Num2 = 200;
int Num3 = 300;
int MaxNum = 0;
#if 0
MaxNum = Num1 > Num2 ? Num1 : Num2;
MaxNum = MaxNum > Num3 ? MaxNum : Num3;
#endif
MaxNum = Num1 > Num2 ? (Num1 > Num3 ? Num1 : Num3) : (Num2 > Num3 ? Num2 : Num3);
printf("MaxNum = %d\n", MaxNum);
return 0;
}
方法2
#include
int main(int argc, const char *argv[])
{
int Num1 = 0;
int Num2 = 0;
printf("请输入两个数:\n");
scanf("%d %d", &Num1, &Num2);
if (Num1 > Num2)
{
printf("%d > %d\n", Num1, Num2);
}
else if (Num1 < Num2)
{
printf("%d < %d\n", Num1, Num2);
}
else
{
printf("%d == %d\n", Num1, Num2);
}
return 0;
}
2.阶梯分支
if (表达式1)
{
A;
}
else if (表达式2)
{
B;
}
else if (表达式3)
{
C;
}
else
{
D;
}
练习:从终端输入一个成绩,为该成绩评级:
90 - 100 优秀
80 - 89 良好
70 - 79 中等
60 - 69 及格
0 - 59 不及格
#include
int main(int argc, const char *argv[])
{
int Num = 0;
printf("请输入一个数:\n");
scanf("%d", &Num);
if (Num >= 60)
{
if (Num >= 70)
{
if (Num >= 80)
{
if (Num >= 90)
{
printf("优秀!\n");
}
else
{
printf("良好!\n");
}
}
else
{
printf("中等!\n");
}
}
else
{
printf("及格!\n");
}
}
else
{
printf("不及格!\n");
}
return 0;
}
练习:
1. 从键盘输入一个字符,输出该字符的按字典排列顺序的下一个字符,
例如,输入a,则输出b。如果输入的字符不在26个英语字母中,
则显示输入数据有误,如果输入的字符是z或Z,则输出a或A。
#include
int main(int argc, const char *argv[])
{
char ch = 0;
printf("请输入一个字符:\n");
ch = getchar();
if ('z' == ch || 'Z' == ch)
{
ch -= 25;
printf("%c\n", ch);
}
else if ((ch >= 'a' && ch <= 'y') || (ch >= 'A' && ch <= 'Y'))
{
ch += 1;
printf("%c\n", ch);
}
else
{
printf("输入有误!\n");
}
return 0;
}
3.嵌套分支(最多允许嵌套 3 - 5层)
if (表达式1)
{
if (表达式2)
{
if (表达式3)
{
...
}
}
}
2.switch分支
1.switch基本形式:
switch (表达式)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
case 常量3:语句3;break;
default:
语句4;
}
注意:
1.switch后面必须为整形表达式,不能为浮点数类型
2.case后面必须为常量(不能使用变量或常量表达式)
3.switch后面的表达式与常量匹配一次,并按顺序向下执行
练习:
利用switch实现从终端输入一个成绩,打印成绩评级
90 - 100 优秀
80 - 89 良好
70 - 79 中等
60 - 69 及格
0 - 59 不及格
#include
int main(int argc, const char *argv[])
{
int Score = 0;
printf("请输入分数:\n");
scanf("%d", &Score);
switch (Score / 10)
{
case 10:
case 9:printf("优秀!\n");break;
case 8:printf("良好!\n");break;
case 7:printf("中等!\n");break;
case 6:printf("及格!\n");break;
default:
printf("不及格!\n");
}
return 0;
}
2.switch嵌套形式:
输入两个数字,09中大奖,0x中小奖,其余情况不中奖
#include
int main(int argc, const char *argv[])
{
int Num1 = 0;
int Num2 = 0;
printf("请输入两个数:(0-9)\n");
scanf("%d %d", &Num1, &Num2);
switch (Num1)
{
case 0:switch (Num2)
{
case 9:printf("恭喜!大奖100W!\n");break;
default:
printf("小奖, 1块!\n");
};break;
default:
printf("谢谢参与!\n");
}
return 0;
}
1.循环执行某段代码,使用循环语句
2.有规律的代码用循环
1.for
1.基本形式
for (表达式1; 表达式2; 表达式3)
{
语句;
}
练习:
1.计算0 - 100的求和
#include
int main(int argc, const char *argv[])
{
int Sum = 0;
int i = 0;
for (i = 1; i <= 100; i++)
{
Sum += i;
}
printf("Sum = %d, i = %d\n", Sum, i);
return 0;
}
2.计算0 - 1000之间,能同时被2 3 5整除余1的所有数的和值
#include
int main(int argc, const char *argv[])
{
int i = 0;
int Sum = 0;
for (i = 0; i < 1001; i++)
{
if (1 == i % 2 && 1 == i % 3 && 1 == i % 5)
{
Sum += i;
}
}
printf("Sum = %d\n", Sum);
return 0;
}
作业:3.编程:
1.编程实现从终端输入i获得结果
1+2+…+i i <= 5
result =100-i-(i-1)-…-1 5 < i <= 10
i^2 i > 10
#include
int main(int argc, const char *argv[])
{
int i = 0;
int a;
int result = 0;
int b;
printf("请输入一个数字:\n");
scanf("%d", &i);
if(i <= 5)
{
for(a = 1; a <= i; a++)
{
result += a;
}
}
else if(i > 5 && i <= 10)
{
for(a = 10; a <= i; a++)
{
b += a;
}
result = 100-b;
}
else if(i > 10)
{
result = i * i;
}
printf("%d\n",result);
return 0;
}
2.从终端输入m,求满足以下公式的k的最大值
2^k <= m
#include
int main(int argc, const char *argv[])
{
int m = 0;
int k;
int result =1;
printf("请输入一个数字:\n");
scanf("%d", &m);
if(m > 1)
{
for(k = 0; result <= m/2; k++)
{
result *= 2;
}
printf("k = %d\n",k);
}
else
printf("k = 0\n");
return 0;
}
思考题:鸡兔同笼共50只,140只脚,请打印鸡兔的个数
#include
int main(int argc, const char *argv[])
{
int a = 0;//鸡
int b = 0;//兔
for(a = 0; a <= 50; a++)
{
b = 50 - a;
if(a * 2 + b * 4 == 140)
{
printf("鸡有%d只,兔有%d只\n",a,b);
}
}
return 0;
}
2.while
3.do…while
4.goto
========================================
day6
练习:
打印99乘法表
#include
int main(int argc, const char *argv[])
{
int x = 0;
int y = 0;
for (y = 1; y <= 9; y++)
{
for (x = 1; x <= y; x++)
{
printf("%d*%d=%-2d ", x, y, x*y);
}
printf("\n");
}
return 0;
}
2.while
while与for可以转换
已知循环次数用for
未知循环次数用while
1.基本格式
while (表达式)
{
语句1;
语句2;
语句3;
}
求1-100的和
#include
int main(int argc, const char *argv[])
{
int Sum = 0;
int i = 0;
while (i < 101)
{
Sum += i;
i++;
}
printf("Sum = %d, i = %d\n", Sum, i);
return 0;
}
练习:从终端接收n个数,直到-1停止,请计算这若干个数
的平均值
10
10
10
10
-1
#include
int main(int argc, const char *argv[])
{
int Num = 0;
int Cnt = 0;
int Sum = 0;
while (Num != -1)
{
printf("请输入一个数:\n");
scanf("%d", &Num);
if (Num != -1)
{
Sum += Num;
Cnt++;
}
}
printf("平均值:%.2lf\n", (double)Sum / (double)Cnt);
return 0;
}
2.while (1)
{
…
}
while(1);
3.do…while
do {
语句;
} while (表达式);
0-100求和
#include
int main(int argc, const char *argv[])
{
int Sum = 0;
int i = 0;
do {
Sum += i;
i++;
} while (i < 101);
printf("Sum = %d, i = %d\n", Sum, i);
return 0;
}
人机交互、界面控制
4.goto
不能使用goto用来循环,可以用来出错处理
#include
int main(int argc, const char *argv[])
{
int i = 0;
int Sum = 0;
loop:
Sum += i;
i++;
if (i < 101)
{
goto loop;
}
printf("Sum = %d, i = %d\n", Sum, i);
return 0;
}
1.break
跳出当前循环
break在循环语句或switch中使用用来跳出
#include
int main(int argc, const char *argv[])
{
int i = 0;
int j = 0;
for (j = 0; j < 3; j++)
{
printf("================\n");
for (i = 0; i < 5; i++)
{
if (2 == i)
{
// break;
// continue;
return 0;
}
printf("***********\n");
}
}
return 0;
}
break结果:
2.continue
结束本次循环
在循环中屏蔽某几次操作使用continue
结果:
3.return
结束当前函数
练习:去掉一个最高分,去掉一个最低分求平均分
#include
int main(int argc, const char *argv[])
{
int Score = 0;
int MaxScore = 0;
int MinScore = 100;
int Sum = 0;
int Cnt = 0;
while (1)
{
scanf("%d", &Score);
if (-1 == Score)
{
break;
}
Sum += Score;
Cnt++;
if (Score > MaxScore)
{
MaxScore = Score;
}
if (Score < MinScore)
{
MinScore = Score;
}
}
printf("最终得分:%.2lf\n", (double)(Sum - MaxScore - MinScore) / (double)(Cnt - 2));
return 0;
}
2.找出能被2,3,5整除的前20个数
#include
int main(int argc, const char *argv[])
{
int Num = 0;
int Cnt = 0;
while (Cnt < 20)
{
if (1 == Num % 2 && 1 == Num % 3 && 1 == Num % 5)
{
printf("Num = %d\n", Num);
Cnt++;
}
Num++;
}
return 0;
}
3.编程题:
1.从终端输入一个n,求斐波那契额数列前n项的和值
1 1 2 3 5 8 13 21 34 55 89 …
#include
int fun(int n)
{
if(n ==1 || n == 2)
{
return 1;
}
else
{
return fun(n-2) + fun(n-1);
}
}
int main(int argc, const char *argv[])
{
int n ;//用户输入的第n项
int i;
int sum = 0;//前n项的和
scanf("%d",&n);
sum = fun(n+2) - 1;
printf("%d\n",sum);
return 0;
}
2.打印出所有的水仙花数
1.是一个三位数
2.每位上的立方相加为该数本身
153 == 3*3*3 + 5*5*5 + 1*1*1
#include
int main(int argc, const char *argv[])
{
int i = 0;
int ge = 0;
int bai = 0;
int shi = 0;
for(i = 100; i < 1000; i++)
{
bai = i/100;
shi = i%100/10;
ge = i%10;
if(i == bai*bai*bai+shi*shi*shi+ge*ge*ge)
{
printf("%d\n",i);
}
}
return 0;
}
思考题:
编写程序,输入一个正整数,计算并显示该整数的各位数字
之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。
#include
int main(int argc, const char *argv[])
{
int i = 0;
int sum = 0;
printf("请输入一个数字:\n");
scanf("%d",&i);
while(i>0)
{
sum += i % 10;//i%10取各位
i /= 10;//取三位数前两为
}
printf("%d\n",sum);
return 0;
}