目录
mooc学习笔记
线上开发环境:https://clin.icourse163.org/
软件:https://sourceforge.net/projects/orwelldevcpp/?source=directory
1. 前言
安装好Dev-C++,打开运行第一个程序;
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
“”中为字符串,printf原封不动输出,\n输出换行,每行结束用 ;,注意0o的区别。
程序框架:
#include <stdio.h>
int main()
{
return 0;
}
点计算
#include <stdio.h>
int main()
{
printf("12+34=%d",12+34);
return 0;
}
注释://,多行/* */
2. 计算
2.1 变量
定义:<数据类型><数据名>,使用之前,必须定义数据类型
赋值,用于初始化
int price=0,a;
输入
scanf("%d",&price);//输入,注意一定要与“”中的“东西”一样
常量与变量
固定不变的数,叫常数。直接写在程序中的叫直接量。定义一个常量,采用const,const(不变的)为修饰符,一旦初始化就不能修改;
const int AMOUNT = 100;
列子:
关注scanf的使用
#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}
关注const的使用
#include <stdio.h>
int main()
{
const int AMOUNT = 100;
int price = 0;
printf("请输入金额(元):");
scanf("%d", &price);
int change = AMOUNT - price;
printf("找您%d元。\n", change);
return 0;
}
关注double、%lf、%f的使用
#include <stdio.h>
int main()
{
printf("请分别输入身高的英尺和英寸,"
"如输入\"5 7\"表示5英尺7英寸:");
double foot;
double inch;
scanf("%lf %lf", &foot, &inch);
printf("身高是%f米。\n",
((foot + inch / 12) * 0.3048));
return 0;
}
2.2 数据类型
两个整数做运算时,结果只是整数;
浮点数,表达由小数点的数;浮点与整数运算,结果为浮点;浮点定义double双精度,输入%f
double foot;
double inch;
scanf("%lf %lf",&foot,&inch);//double类型对应lf
printf("身高是%f米。\n",((foot+inch/12)*0.3048)) ;//输出是f
例1,如果认为结果是浮点数,请以小数点后一位小数来表示
10/3.0*3 结果为 10.0
10/3*3.0 结果为 9.0
例2,
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d", &a, &b);
double c = (a+b)/2.0;
printf("%d和%d的平均值=%f\n", a, b, c);
return 0;
}
2.3 表达式
一系列的运算,包含运算符、算子;注意运算优先级
交换两个变量
int temp = a;
a = b;
b = temp;
注意套路的学习
复合运算符
五个运算符与“=”结合起来,“+=”、“%=”、“/=”、“-=”、“*=",%模运算,求的是余,比如(int)13/4,结果是3;而13%4,结果就是1(余1)
递增递减运算符
“++”、“--”,放在变量前面,称为前缀形式;放在变量后面,成为后缀形式;
区别,count++后缀,运算给count加1,表达式值为count原来值;++count前缀,运算给count加1,表达式值为count+1以后值;
3. 判断与循环
3.1 判断
注意格式与用法
根据比较的结果,决定做、还是不做某些动作,就要用到if语句。
if(判断的条件)
{
条件成立,做......
else
{
条件不成立,做....
}
}
能做判断的基础,是能对数据做比较,需要用到关系运算。C语言提供了六个关系运算符:== 相等 != 不相等 > 大于 >= 大于或等于 < 小于 <= 小于或等于
关系运算的结果是一个逻辑值,逻辑值只有两种可能的值:true(真,表示成立)或false(假,表示不成立)。当两个值的关系符合关系运算符的预期时,关系运算的结果为true,否则为false。
if没有{}是,只有跟着的一句有效。
阅读代码:
#include <stdio.h>
int main()
{
const int MINOR = 35;
int age = 0;
printf("请输入你的年龄: ");
scanf("%d", &age);
printf("你的年龄是%d岁。\n", age);
if ( age < MINOR ) {
printf("年轻是美好的,");
}
printf("年龄决定了你的精神世界,好好珍惜吧。\n");
return 0;
}
#include <stdio.h>
int main()
{
// 初始化
int price = 0;
int bill = 0;
// 读入金额和票面
printf("请输入金额:");
scanf("%d", &price);
printf("请输入票面:");
scanf("%d", &bill);
// 计算找零
printf("应该找您:%d\n", bill - price);
return 0;
}
#include <stdio.h>
int main()
{
// 初始化
int price = 0;
int bill = 0;
// 读入金额和票面
printf("请输入金额:");
scanf("%d", &price);
printf("请输入票面:");
scanf("%d", &bill);
// 计算找零
if ( bill >= price ) {
printf("应该找您:%d\n", bill - price);
}
return 0;
}
#include <stdio.h>
int main()
{
// 初始化
int price = 0;
int bill = 0;
// 读入金额和票面
printf("请输入金额:");
scanf("%d", &price);
printf("请输入票面:");
scanf("%d", &bill);
// 计算找零
if ( bill >= price ) {
printf("应该找您:%d\n", bill - price);
} else {
printf("你的钱不够\n");
}
#include <stdio.h>
int main()
{
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
int ih = hour2 - hour1;
int im = minute2 - minute1;
if ( im <0 ) {
im = 60 + im;
ih --;
}
printf("时间差是%d小时%d分。\n", ih, im);
return 0;
}
#include <stdio.h>
int main()
{
int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
int max = b;
if ( a > b ) {
max = a;
}
printf("大的那个是%d\n", max);
return 0;
}
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d", &a, &b, &c);
int max = 0;
if ( a>b ) {
if ( a>c ) {
max = a;
} else {
max = c;
}
} else {
if ( b>c ) {
max = b;
} else {
max = c;
}
}
printf("The max is %d\n", max);
return 0;
}
#include <stdio.h>
int main()
{
const double RATE = 8.25;
const int STANDARD = 40;
double pay = 0.0;
int hours;
printf("请输入工作的小时数: ");
scanf("%d", &hours);
printf("\n");
if (hours > STANDARD)
pay = STANDARD * RATE +
(hours-STANDARD) * (RATE * 1.5);
else
pay = hours * RATE;
printf("应付工资: %f\n", pay);
return 0;
}
#include <stdio.h>
int main()
{
const int PASS=60;
int score;
printf("请输入成绩: ");
scanf("%d", &score);
printf("你输入的成绩是%d.\n", score);
if ( score < PASS )
printf("很遗憾,这个成绩没有及格。");
else {
printf("祝贺你,这个成绩及格了。");
printf("再见\n");
}
return 0;
}
3.2 循环
在满足条件时,不断地重复执行一些动作。
while语句是一个循环语句,它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体。
do-while循环和while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。
循环体内有改变判断条件的语句,否则会出现逻辑错误;
for循环,循环开始就做判断,for(初始条件;判断;变化){ },
4. 进一步判断与循环
4.1 逻辑类型与运算
bool类型,要使用ture或Flase,使用#include<stdbool>。
解决方法,不要把赋值加入到表达式中;
条件运算符
逗号运算,一般在for中使用;
4.2 级联与嵌套判断
4.3 多步分支
/*
f(x) = -1 ; x < 0
0 ; x == 0
2x ; x > 0
*/
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
switch(x<0){
case 0:
x *= 2; //如果x是0 则乘以任何数结果都是0。
break;
case 1:
x = -1;
break;
default: //default即使没有任何语句执行也不要省略。
break;
}
printf("f(x) = %d\n",x);
return 0;
}
4.4 循环例子
4.5. 循环控制
多重循环
接力break
或者
5. 数组与函数
5.1 数组
数据可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据,我们可以用数组来保存这些数据,而不是用很多个独立的变量。数组是长度固定的数据结构,用来存放指定的类型的数据。一个数组里可以有很多个数据,所有的数据的类型都是相同的。
#include <stdio.h>
int main()
{
int x,i=0;
//定义
int number[100];
//赋值
number[i] = 7;
//使用
x = number[i];
return 0;
}
5.2 函数
5.2.1 函数定义
函数原型声明,函数定义;
5.2.2 参数传递
5.2.3 本地变量、块、变量空间(重点)
注意,用传值、变量空间与块 去理解
函数注意
5.2.4 二维数组
6. 数组运算
6.1 数据运算
数组的集成初始化
可避免出错
6.2 素数
第二种:
6.3 搜索