C/C++教程

软件创新实验室培训C++笔记1

本文主要是介绍软件创新实验室培训C++笔记1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

循环一

1.输出1-n之间所有偶数

2.斐波那契数列

3.表演打分

4.棋盘上的学问

5.统计

6.素数的判断

7.最大公约数

8.数字反转

9.回文日期

10.回文日期2(构造法)

11.级数求和

12.角谷猜想

13.统计正数

14.求自然常数e的值

15.正常血压

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	if (n > 2)
		cout << "2";//由题意知第一个数前没有空格所以单独拿出来
	for (int i = 1; i <= n; i++) {
		if (i != 2 && i % 2 == 0)//偶数判断对2求余为0
			cout << " " << i;//注意这里末尾不要加endl否则每次循环结束都会自动换行
	}
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int k, a = 1, b = 1, c = 1;//将c赋值为一则k=1或k=2时输出皆为1
	cin >> k;
	for (int i = 3; i <= k; i++) {
		c = a + b;//交换变量前后相加
		a = b;
		b = c;
	}
	cout << c << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, s = 0, sum = 0, max = -1, min = 101;//将max定义为最小值,min定义为最大值
	for (int i = 1; i <= 10; i++) {
		cin >> n;
		if (n > max)//把每个输入的值与max做比较,比max大就更新max的值
			max = n;
		if (n < min)//把每个输入的值与min做比较,比min小就更新min的值
			min = n;
		sum = sum + n;//将每个输入的n通过每次循环加在一起赋给sum

	}
	s = sum - max - min;
	cout << fixed << setprecision(3) << s * 1.0 / 8 << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	unsigned long long  f = 1, sum = 0;//由于最后f乘等的值,sum加等的值大所以用unsigned long long类型定义
	cin >> n;
	for (int i = 1; i <= n; i++) {
		sum += f;
		f *= 2;//这里也可以用f=pow(2,i-1);,需要放在sum语句上面,缺点是运算时间会变长
	}
	cout << sum << endl;
	return 0;
}

continue 语句 作用:提前结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下 一次是否执行循环的判定。 注意,此语句只能在循环结构使用,经常与选择结构结合使用,用以结束本次 循环。

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, sum = 0;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		//if (i % 2 == 0 || i % 3 == 0)
			//sum++;
			if(i%2 && i%3)continue;//i%2并且i%3不等于0时continue返回到循环里面不执行sum++
			sum++//即i%2=0或者i%3=0条件为假跳出if语句执行sum++
	}
	cout << sum << endl;
	return 0;
}

出循环体,执行循环结构后面的语句。 说明:break只能终止并跳出最近一层的结构。break不能用于循环语句和switch语句之 外的任何其它语句之中。 一般形式:break;

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, f = 0;
	cin >> n;
	for (int i = 2; i * i < n; i++)//循环到该数的平方根,减少循环次数和计算时间
	 {
		if (n % i == 0)//如果n%i=0说明n有因子不是素数
			f = 1;
			break;//遇到n的因子就跳出循环,减少循环次数
	}
	if (f == 0)
		cout << "YES" << endl;
	else
		cout << "NO" << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int m, n, a;
	cin >> m >> n;
	while (a) {
		a = m % n;
		m = n;
		n = a;
	}
	cout << m << endl;
	return 0;

}

另一种写法:

#include <bits/stdc++.h>
using namespace std;
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = n > m ? m : n; i > 0; i--) {
		if (n % i == 0 && m % i == 0) {
			cout << i << endl;
			break;
		}
	}
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, a;
	cin >> n;
	while (n) {
		a = n % 10;
		cout << a;
		n /= 10;
	}
	return 0;
}

以上是最近一开始写的,有几个问题1.负号无法按要求输出 2.前置0没有去掉

看了老师的代码后发现sum=sum*10+n%10;这个等式真的很绝,不仅方便而且直接解决掉了上面两个错误

技巧1:数字反转法

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, sum = 0, a;
	cin >> n;
	while (n) {
		a = n % 10;
		sum = sum * 10 + a;//牢记这个方法!!!通过循环将每次模等的结果乘10
		n /= 10;
	}
	cout << sum << endl;
	return 0;

}

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, sum = 0, y, m, d, f = 0;
	cin >> n;
	for (int i = n; i > 0; i /= 10)
		sum = sum * 10 + i % 10;//这里用到了上面数字反转的技巧
	if (sum != n)
		cout << "NO";//判断是否是回文数字
	else {
		y = n / 10000, m = n / 100 % 100, d = n % 100;
		if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d < 32)
			f = 1;//1,3,5,7,8,10,12月均是31天
		else if (m == 2) {
			if ((y % 4 == 0 && y % 100 != 0 || y % 400 == 0) && d < 30)
				f = 1;//2月是闰年则29天,不是闰年则28天
			else if (d < 29)
				f = 1;
		} else if ((m == 2 || m == 4 || m == 6 || m == 9 || m == 11) && d < 31)
			f = 1;//2,4,6,9,11月均是30天
	}
	if (f)//f=1为真执行该语句输出YES否则输出NO
		cout << "YES";
	else
		cout << "NO";
	return 0;
}

 这个相比于上面的难了一些,大多数人第一想法估计是暴力枚举的方法,把范围内的数挨个通过循环判断是否为回文数以及回文日期,但是这样不仅麻烦而且很可能运行超时,这里老师介绍给我们了一个方法构造法 :构造出所有的回文日期(由分析知一共365种)并判断是否在所给范围内

技巧2:构造法

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, m, sum = 0;
	cin >> n >> m;
	for (int i = 1; i <= 12; i++) { //i表示月份
		int k = 31;
		if (i == 2)
			k = 29;
		if (i == 4 || i == 6 || i == 11 || i == 9)
			k = 30;
		for (int j = 1; j <= k; j++) { //j表示日期
			int y = j % 10 * 1000 + j / 10 * 100 + i % 10 * 10 + i / 10; //通过月份和日期反推年份
			y = y * 10000 + i * 100 + j;
			if (y >= n && y <= m)
				sum++;
		}
	}
	cout << sum << endl;
	return 0;
}

4 whlie循环 while 语句的格式如下: while(表达式){ 循环体 } 

#include <bits/stdc++.h>
using namespace std;
int main() {
	int k;
	long long i = 1;
	double sum = 0.0;
	cin >> k;
	while (sum <= k) {
		sum = sum + 1.0 / i;
		i++;
	}
	cout << i << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int main() {
	int n;
	cin >> n;
	while (n != 1) {
		if (n % 2 == 0) {
			cout << n << "/2=" << n / 2 << endl;//按格式输出
			n = n / 2;//先输出再更新n的值
		} else {
			cout << n << "*3+1=" << n * 3 + 1 << endl;
			n = n * 3 + 1;
		}
	}
	if (n == 1)
		cout << "End" << endl;
	return 0;
}

 do-while 语句 do-while 语句是 C++ 中用于解决至少执行一次重复操作(循环体)的循 环语句。 do-while 语句的格式如下: do{ 循环体 }while(表达式);

#include <bits/stdc++.h>
using namespace std;
int main() {
	int n, f = 0;
	do {
		cin >> n;
		if (n > 0)
			f++;
	} while (n);
	cout << f << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int main() {
	int n;
	double sum = 1.0;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		long long f = 1;//要在循环内定义乘等器
		for (int j = 1; j <= i; j++) {
			f *= j;
		}
		sum = sum + 1.0 / f;
	}

	cout << fixed << setprecision(10) << sum << endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int main() {
	int n, a, b, f = 0, max = 0;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a >> b;
		if (a >= 90 && a <= 140 && b >= 60 && b <= 90) {
			f++;
			if (f > max)
				max = f;
		} else
			f = 0;

	}
	cout << f << endl;
	return 0;
}

这篇关于软件创新实验室培训C++笔记1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!