云计算百科
云计算领域专业知识百科平台

C语言:从输入输出到递归的阶段复习

用几道经典例题来回忆一下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;
    }

  • 找出100~200之间的素数,打印在屏幕上
    注:素数是指只能被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;
    }

  • 将3个整数从大到小输出
    输入: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;
    }

  • 打印9*9表
  • #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;
    }

  • 计算1-1/2+1/3-1/4+…+1/99-1/100
  • #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;
    }

  • 求第n个斐波那契数
    数列: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;
    }

    搞定!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » C语言:从输入输出到递归的阶段复习
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!