一.第一部分:初始c语言
1.基本框架
最少的组成,写出程序最大框架
2.数据的表现形式 1>变量应该先进行声明时候在进行使用#includeint a = 3; int b = 8; int c; int main() { c = a + b; }
上面的代码就是在主函数之前定义变量a和变量b,同时赋值。
2>标识符与变量名1)变量名的命名由字母与下划线组成,不可以以数字开头。
错误命名:int 3Mark;(数字开头命名错误!)
2)变量名的命名区分大小写,比如
int Mark;int mark;(两个不是同一个变量名!)
3)驼峰命名法:是指混合使用大小写字母来构成变量和函数的名字
3>数据类型1)整形数据
int datas = 10
2)字符型
3)浮点数据
float data2 = 3.25;
4)常数
在运行过程中不可以改变的数据
#define PI 3.14(将PI设定取值为3.14,在以后可以用“PI”代替3.14)
3.输入输出 1>printf-打印函数1)原样输出:直接输出需要打印的字符串
2)条件输出
| 格式字符 | 说明 |
| d | 用于打印输出十进制数 |
| c | 用于打印单个字符--输出一个字母 |
| s | 用于输出多个字符 |
| f | 用于输出小数 |
| x | 以16进制的格式进行输出 |
| p | 一般打印内存地址,16进制格式输出——输出地址:取变量地址运算符号:“&” |
语句格式:printf(格式控制,输出列表);
例如printf("%dn",a);
格式控制部分分为两部分:
| 格式声明 | 以%开头的组成,作用是将输出的数据转换为指定的格式然后输出, |
| 普通字符 | 用于进行原样输出的部分 |
输出列表:程序需要输出的一些数据,可以是变量,可以是常亮,也可以是表达式。
案例:将函数定义的数据进行输出打印
#include2>scanf-扫描键盘函数int a = 300 float b = 201.21 int main() { printf("将定义的整形%d数据打印输出",a); printf("将定义的小数%f数据进行打印输出",b); return 0; }
1)一般格式:scanf(格式控制,地址列表)
格式控制:与printf中的含义相同。
地址列表:由若干个地址组成的表列,可以是变量的地址,或者是字符串的首地址。
注意
第一:格式控制后面的应该是变量地址,不是变量名,例如
scanf("%f%f%f",a,b,c);(这时错误的写法,没有取地址)
scanf("%f%f%f",&a,&b,&c);(正确写法)
第二:在格式控制字符串中除了格式声明之外还有其他字符,则应该在输入时在对应位置上输入一直相同的字符串
案例:
#includeint main() { int a; printf("请输入一个整数 n"); scanf("%d",&a); printf(“你输入的数据是: %dn”,a); }
输出结果:
如果改变一下
#includeint main() { int a; printf("请输入一个整数 n"); scanf("data=%d",&a); printf(“你输入的数据是: %dn”,a); }
输出结果为,不是想要的结果
再次进行输入
由此可以看出,如果在“格式控制”中发现除了“地址表列”之外的字符。上面的例子就是“data=”是之外的字符,因此,我们在输入的时候需要将data=输入进去,然后输出就可以。
第三:对于连续输入的几组数据时,在格式控制中对于连续的几个数据不要再中间添加任何字符,直接连续书写。
#includeint data1 = a; int data2 = b; int data3 = c; float data4 = d; int main() { printf("输入四个整形数据n"); scanf("%d%d%d%f",&data1,&data2,&data3,&data4); printf("按照输入顺序,你的输入结果是: data1 = %d,data2 = %d,data3 = %d,data4 = %f ,"data1,data2,data3,data4); }
结果
小结1.对于printf函数而言,控制语句部分将需要打印的部分用“%+数据表示方法”代替,地址列表中写入需要打印的变量名
2.对于scanf函数而言,地址表列部分需要对变量名进行取地址,否则不会成功。
二:流程控制语句 1.选择结构与判断语句 1>if……else……(1)6种运算关系符
| < | 小于 | 优先级相同(高) |
| > | 大于 | |
| <= | 小于等于 | |
| >= | 大于等于 | |
| == | 等于 | 优先级相同(低) |
| != | 不等于 |
(2)逻辑运算符
| && | 逻辑与 | a&&b | 如果a与b都为真,则结果为真,否则为假 |
| || | 逻辑或 | a||b | 如果a与b只有一个为真,则全部为真;两个都是假,则全部为假 |
| ! | 逻辑非 | !a | 如果a为真,则!a为假;如果a为假,则!a为真 |
(3)语句结构:
if(表达式)
语句1;
else
语句2;
执行结果:如果表达式为真,则执行语句1,否则就执行语句2.
案例:
#includeint main() { int a; int b; int c; printf("请分别对a和b进行赋值输入n"); scanf("%d%d",&a,&b); if(a>10 && b<30) { c = 60; } else { c = 70; } printf("当前输出的c的值是: %dn",c); }
执行结果如下
if……else……嵌套案例
#includeint main() { int a; int b; int c; int d; int f; int g; printf("请输入5组数据进行赋值输入n"); scanf("%d%d%d%d%d",&a,&b,&c,&d,&f); if(a>10 && b<30) { if(c<100 && d>300) { if(f>210) { g = 65; } else { g = 365; } } else { g = 55; } } else { g = 70; } printf("当前输出的c的值是: %dn",g); }
执行结果如下
2>switch……case……(1)语句结构
switch(表达式)
case1:语句1;
case2:语句2;
…………
执行结果:通过判断表达式中的值,来进行语句执行的选择,执行与表达式的值相同的case值后面的语句。
(2)存在意义:对于多层语句结构可以使用if语句进行处理,但是由于层数较多,因此程序可读性减低,因此可以使用Switch语句对于多分支结构进行处理。
(3)编程案例:通过分数进行等级划分。
#includeint main() { int datas; printf("请输入你的成绩n"); scanf("%d",&datas); switch(datas/10) { case 0: case 1: case 2: case 3: case 4: case 5: printf("您的成绩不合格,请重新考试,等级是D"); break; case 6: case 7: printf("您的成绩已经及格,等级是C"); break; case 8: case 9: printf("您的成绩成绩较为优秀,等级是B"); break; case 10: printf("您的成绩属于优秀,等级为A"); break; default: printf("成绩输入非法,请重新输入"); return 0; } }
执行结果:
3>while与for循环语句1)while循环语句
语句结构:
while(表达式)
{语句;}
执行过程:当while后面的表达式一直为真,那么就会反复执行后面的语句。
存在意义:在程序中,只有选择结构与顺序结构是不够的,因为还需要经常处理一些循环问题,比如,对前30个整数进行加和,又比如,求出全班50学生的数学成绩等。
应用:对前100整数求和
#includeint main() { int sum_data = 0; //声明求和之后的数值 int data = 1; //从1到100的数据 while(data<=100) { sum_data = sum_data + data; data = data + 1; } printf("0到100数据加和为:%dn",sum_data); return 0; }
2)for循环
语句结构:for(表达式1;表达式2;表达式3)
| 表达式1 | 设置初始条件,执行一次,可以为一个或多个变量赋予初值 |
| 表达式2 | 循环条件表达式,用于是否继续进行循环。每次循环之前需要对其进行检查,看是否满足条件 |
| 表达式3 | 作为循环调整,循环变量增值,执行完循环体之后进行的 |
其他形式:对于其他形式的for循环,可能会出现分别省略表达式1、表达式2或表达式3.
应用:对前100整数求和
形式1:表达式全部完整,符合for循环传统结构
#includeint main() { int sum_data = 0; int datas; for(datas=1;datas<=100;datas++) { sum_data = sum_data + datas; } printf("0到100数据加和为:%dn",sum_data); return 0 ; }
形式2:表达式1缺失,缺少初值---在整个程序前面加上初值即可。
#includeint main() { int sum_data = 0; int datas = 1; for(;datas<=100;datas++) { sum_data = sum_data + datas; } printf("0到100数据加和为:%dn",sum_data); return 0 ; }
形式3:表达式3缺失,缺少循环执行内容---在for循环中加上循环执行内容。
#includeint main() { int sum_data = 0; int datas; for(datas=1;datas<=100;) { sum_data = sum_data + datas; datas = datas + 1; } printf("0到100数据加和为:%dn",sum_data); }
注意:如果需要在for循环后面缺少表达式,那么对应位置的分号不可以丢失不写,否则就会出问题。
4>通过break提前结束循环案例:在全校1000学生中,进行慈善募捐,当捐款总数达到10万元时就结束,统计此时的捐款人数以及每个人平均捐款数目
#include5>contine提前结束本次循环int main() { int people_num = 1; //捐款人数 int people_total = 0; //捐款总金额 int money; //每个人捐款人数 while(people_num<1000) { printf("请输入捐款金额:n"); scanf("%d",&money); people_total = people_total + money; printf("当前捐款总金额是:%dn",people_total); if(people_total>=10000) { printf("捐款金额已经达到目标"); break; } people_num = people_num + 1; } printf("当前捐款总金额是:%dn",people_total); printf("当前捐款人数:%dn",people_num); printf("每个人平均捐款金额:%fn",(float)people_total/people_num); return 0; }
案例:找出在指定范围中可以被整除的所有整数,比如请找出在范围A-B之间可以被C整除的数
#includeint main() { int datas_min; //设定查找范围最小值 int datas_max; //设定查找范围最大值 int num; //设定需要查找的倍数 int datas; printf("请分别输入查找范围最小值、最大值以及查找倍数"); scanf("%d%d%d",&datas_min,&datas_max,&num); for(datas=datas_min;datas<=datas_max;datas++) { if(datas %num != 0) { continue; } printf("%d ",datas); } }
练习:输入两个正整数m与n,求其最大公约数和最小公倍数
#includeint main() { int m; //第一个正整数 int n; //第二个正整数 int max; //最大公因数 int min; //最小公倍数 int w; //临时变量1 int q; //临时变量2 printf("请输入两个正整数n"); scanf("%d%d",&m,&n); w = m; q = n; printf("临时变量1:%dn",w); printf("临时变量2:%dn",q); while(w != q) { if(w>q) { w = w - q; } if(q>w) { q = q - w; } } if(w == q) { max = q; } min = (m*n)/max; printf("最大公因数是:%dn",max); printf("最小公倍数是:%dn",min); return 0; }
执行结果



