用几道经典例题来回忆一下C语言的基础知识吧<( ̄︶ ̄)↗[GO!]
输入一个年份year,判断year是否是闰年?
【闰年的判断规则】
(1):能被4整除,并且不能被100整除
(2):能被400整除
#include<iostream>
using namespace std;
int main()
{
int year;
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
cout << year << "是闰年" << endl;
else
cout << year << "不是闰年" << endl;
return 0;
}
知识点:逻辑运算符&& || if语句
输入:1234
输出:4 3 2 1
【思路】
如果想要逆序打印整数的每一位,则需要得到这个数的最后一位,直至得到这个数的第一位
知识点:n % 10 得到这个数的最后一位,n / 10去除这个数的最后一位,所以先%10再/10,/到最后为0就停止
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while (n)
{
int a;
a = n % 10;
cout << a << " " ;
n = n / 10;
}
return 0;
}
输入:1234
输出:4
#include<iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int count = 1;
while (n)
{
n = n / 10;
if (n != 0)
count++;
}
cout << count << endl;
return 0;
}
注:素数是指只能被1和它自身整除的数
如:7
7 不能被2~6整除,所以7是素数
#include<iostream>
using namespace std;
int main()
{
int i = 0;
int j = 0;
for (i = 100;i <= 200;i++)
{
for (j = 2;j <= i – 1;j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
cout << i << " ";
}
return 0;
}
输入:2 3 1
输出:3 2 1
【思路】:让3个数从大到小输出的话,一开始就假定a>b>c,当然真实情况肯定不可能真就是a>b>c,所以我们要引入一个新变量,假设a是最小的,然后让a同b,c分别比较并且让ab,ac互换,让a变成最大的量,同理b重复a的操作,假设b<c,让bc交换,让b>c,最后得到a>b>c
#include<iostream>
using namespace std;
int main()
{
int a, b, c,tmp;
cin >> a >> b >> c;
if (a < b)
{
tmp = a;
a = b;
b = tmp; //此时a>b
}
if (a < c)
{
tmp = a;
a = c;
c = tmp; //此时a>c
}
if (b < c)
{
tmp = b;
b = c;
c = tmp; //此时b>c
}
cout << a << b << c;//此时a>b>c
return 0;
}
【思路】:用大数对小数取余,再把小数当成新大数,余数当新小数,重复取余,直到余数为0,此时得到的数就是这两个数的最大公约数
原理:辗转相除法(欧几里得算法)
#include<iostream>
using namespace std;
int main()
{
int a = 0;
int b = 0;
int c = 0;
int tmp = 0;
cout << "请输入两个数:";
cin >> a >> b;
if (a < b)//这一步可有可无,求最大公约数不用管谁大谁小,原理:小数 % 大数 = 小数本身,一次循环就自动把大小交换
{
tmp = a;
a = b;
b = tmp;
}
while (b != 0)//当余数不为0时,就一直循环
{
c = a % b;//大数%小数
a = b;//小数变大数
b = c;//余数变小数
}
cout << "最大公约数是:" << a << endl;//当b=0时,下一轮的除数a就是最大公约数
return 0;
}
可以用二分查找,效率更高
#include<iostream>
using namespace std;
int Find(int arr[], int right, int left, int key)
{
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == key)
{
return mid;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
right = mid – 1;
}
}
return –1;
}
int main()
{
int nums[] = { 1,2,3,4,5,6,7,8,9 };
int len = sizeof(nums) / sizeof(nums[0]);
int key;
cout << "请输入要查找的数字" << endl;
cin >> key;
int index = Find(nums, len – 1, 0, key);
if (index != –1)
{
cout << "找到了下标是:" << index << endl;
}
return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int i = 0;
for (i = 1;i <= 9;i++)
{
int j = 0;
for (j = 1;j <= i;j++)
{
cout << left<< j << '*' << i << '=' << setw(4) << i * j;
}
cout << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int flg = 1;
double sum = 0;//注意是double类型的
int i = 0;
for (i = 1;i <= 100;i++)
{
sum = sum + (1.0 / i) * flg;//注意是1.0不是1,否则整除完变0
flg = –flg;
}
cout << sum << endl;
return 0;
}
数列:1, 1, 2, 3, 5, 8, 13, 21, 34 …
从第 3 项开始,每一项 = 前两项之和
#include<iostream>
using namespace std;
int fib(int n)
{
if (n == 1 || n == 2)
return 1;
else
return fib(n – 1) + fib(n – 2);
}
int main()
{
int n;
cin >> n;
cout << fib(n);
return 0;
}
搞定!
网硕互联帮助中心



评论前必须登录!
注册