感性认识计算机程序(Week 4)
引入
编程序 = 给计算机设计好运行步骤
程序 = 人们用来告诉计算机应该做什么的东西
问题➡️该告诉计算机什么?用什么形式告诉?
如果要创造一门“程序设计语言“
问题1: 是不是无论什么”单词“,计算机都能明白
问题2: 是不是我们无论在程序里写什么“数”和“计算符号”,计算机都能明白?
问题3: 我们需要多少“句式”才够描述各种逻辑
答案1:NO。定义一些有特定含义的“关键字”,计算机只能明白这些字的意义。
可以通过少量词定义更多词(30+关键字)
答案2:NO。定义一些“数据的类型”和相应的“操作符号”,计算机只能明白这些类型。(10+基本数据类型,30+运算符号)
答案3:顺序、分支、循环,只需要3种。
程序中的套话
#include <iostream>
using namespace std;
int main()
{
//Type your code in here
retuen 0;
}
简单的程序
定义变量,输出数据:
int a = 0;
cout<<a<<endl;
定义变量,输入数据:
int a = 0;
cout<<"请输入一个数"<<endl;
cin>>a;
cout<<"我刚刚输入的a:"<<a<<endl;
实型变量,顺序语句:
float a = 0,b = 0,temp = 0;
cout<<"Input a and b:"<<endl;
cin>>a>>b;
cout<<"a = "<<a<<",b = "<<b<<endl;
temp = a; a = b; b = temp;
cout<<"a = "<<a<<",b = "<<b<<endl;
分支语句(if语句)
int x = 0,y = 0;
cin>>x>>y;
if(x>y)
cout<<"Max number is:"<<x<<endl;
else
cout<<"Max number is:"<<y<<endl;
循环语句(for语句)
int i = 0;
cout<<"20以内的奇数: "<<endl;
for(i = 0;i < 20;i++)
{
if(i%2!=0)
cout<<i<<endl;
}
循环语句,数组
int i = 0;
char a[10] = {'a','b','c','d','e','f','g','h','i','j'}
cout<<"字母表中序号为奇数的前五个字母:"<<endl;
for(i = 0; i < 10; i=i+2)
{
cout<<a[i]<<endl;
}
综合程序,注释和缩进增加可读性
char a='';//用于存放用户输入的字母
cout<<"猜我是哪个字母,最多5次:" <<endl;
int i = 0;//用于记录猜过多少次
for(i = 0;i < 5;i++)
{
cin>>a;
if(a=='G')//如果猜中
{
cout<<"Good Job!"<<endl;
break;//终止循环
}
else //如果没有被猜中
cout<<"Wrong! Try it again!"
}
好程序的特点
- 结果运行正确
- 程序易于被他人看懂
- 程序结构清楚
作业
Quiz1
实现冒泡排序
#include <iostream>
using namespace std;
int main() {
int n, a[1000];//一共n个数,n不超过1000,a用来保存这些数
cin>>n;//输入n个数
for (int i = 0; i < n; i++) {
cin>>a[i];
}
//冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
for (int i = 0; i < n; i++) {
for (int j = 1; j < n-i; j++) {
if(a[j-1]>a[j])
{
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
// 依次输出
for (int i = 0; i < n; i++) {
cout<<a[i]<<endl;
}
return 0;
}
Quiz2
奇偶排序(一)
#include "iostream"
using namespace std;
int main(){
int a[10];
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
//首先,我们把奇数放到数组左边,偶数放到数组右边
int l = 0, r = 9;//用左手和右手分别指向数组两端
while (l <= r){
bool leftIsOdd = a[l] % 2 == 1;
bool rightIsEven = a[r] % 2 == 0;
if (leftIsOdd){
l++;
} else if (rightIsEven){
r--;
} else if (!leftIsOdd && !rightIsEven){
int temp = a[l];
a[l] = a[r];
a[r] = temp;
}
}
//对l左边(奇数部分)进行冒泡排序
int start = 0, end = l;
for (int i = start; i < end-1; i++) {
for (int j = start+1; j <start + end - i ; j++) {
if(a[j-1] > a[j]){
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
//对l右边(偶数部分)进行冒泡排序
start = l, end = 10;
for (int i = start; i < end - 1; i++) {
for(int j = start + 1; j < start + end - i;j++){
if(a[j-1] > a[j]){
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i < 10; i++) {
cout<<a[i]<<' ';
}
return 0;
}
Quiz3
奇偶排序(二)
#include <iostream>
using namespace std;
int main(){
int a[10];
for (int i = 0; i < 10; i++) {
cin>>a[i];
}
//冒泡,不断比较相邻的两个数,如果顺序错了,那么就交换
for (int i = 0; i < 9; i++) {
for (int j = 1; j < 10-i; j++) {
//与刚才的冒泡排序不同,我们不只是通过比较数字大小决定顺序
//如果左边的为偶数,右边的为奇数,顺序也是需要颠倒的
bool leftIsEven = a[j - 1] % 2 == 0;
bool rightIsEven = a[j] % 2 == 0;
if((leftIsEven && !rightIsEven) ||
(leftIsEven == rightIsEven && a[j-1]>a[j])){
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i < 10; i++) {
cout<<a[i]<<' ';
}
return 0;
}