C语言经典案例-2

简介: C语言经典案例

今天继续给大家分享C语言学习的经典练手案例


1.商品优惠计算机


商品优惠计算器 使用if语句编程实现输入购货金额,输出实际付款金额。购货折扣率如下:

购货金额≤500元 不打折

500元<购货金额≤1000元 9折

1000元<购货金额 8折


#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
    float money = 0.0;
    float pay = 0.0;
    bool run = true;
    while (run)
    {
        printf("\n请输入购货金额:\n");
        scanf("%f", &money);
        if (money > 1000)
{
  pay = money * 0.8;
  printf("打八折,应付金额:%.2f\n", pay);
}
else if ((money > 500) && (money <= 1000))500
{
  pay = money * 0.9;
  printf("打九折,应付金额:%.2f\n", pay);
}
else if (money <= 500)
{
  printf("不打折,应付金额:%.2f\n", money);
}
    }
    return 0;
}

程序运行截图:




2.递归函数


编写求1,2,3,n这n个数累加的递归函数


分析:第一步:确定参数,n个数放在数组中,数组作为容器,把数放在容器中,我们要对容器里面的数进行加和,因此数组是一个参数;有了容器,但是容器里面这么多数,我们不知道该对哪一个数进行加和,所以数在数组里面的下标也要作为参数。所以,数组是参数,数的下标值是第二个参数


第二步:找规律,1,2,3,4,5,6,,,,,,n这些数的规律是什么?后一个数比前一个数多1,所以我们在调用函数自身时,n+1和n-1肯定是要用到的(具体用哪一个根据你要传入的实参值而定,在此我们选择下标实参n-1(即数组中的第n个数),所以在代码中用到的是(n-1)


第三步:递归出口,递归是函数调用自身,但是不能不停地调用自身,否则就成了死循环了,在此题中,我们用到的规律是(n-1),所以当下标参数到0时(即到了第一个数字arr[0]),函数停止调用新的自身,开始回退,直到将所有调用的自身函数运行一遍,返回结果。


#include<stdio.h>
#include<stdlib.h>
/*递归有两个过程
1.递推
2.回退
我们往往只需要考虑一个过程,因为两个过程是对称的
在此我们考虑递推过程*/
/*递归函数,返回数组arr[0]到arr[i]的和*/
int fact(int arr[], int i)    //数组,当前数组下标
{
    if (i == 0)               //递归出口,当递推到arr[0]时开始回退
        return arr[0];
    else
        return arr[i] + fact(arr, i-1);  //递推,当还没有加到arr[0]时,继续往前面加
}
int main() {
    int n;
    int arr[100];
    printf("输入n的值(n>=1):");
    scanf_s("%d", &n);
    for (int i = 0; i < n; i++)         //将1到n保存到数组中
        arr[i] = i + 1;
    printf("1到%d的和为:%d\n", n,fact(arr,n-1));   //打印和
    system("pause");                    //暂停,控制闪屏
    return 0;
}


3.六角填数


题目描述


如下图所示六角形中,有12个点,依次填入1~12的数字,使得每条直线上的数字之和都相同。其中,已经替你填好了点1,2,3的数字,请你计算其他位置所代表的数字是多少?



输入


输入仅一行,以空格隔开,分别表示已经填好的点1,2,3的数字。


输出


输出仅一行,以空格隔开,分别表示所有位置所代表的数字。


样例输入:


1 8 2


样例输出:


1 8 2 9 7 11 10 12 3 5 6 4


代码:


#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define eps 10e-10
#define N 15
int a[N];
bool vis[N];
void dfs(int x)
{
    if (x == 1 || x == 2 || x == 3)
    {
        dfs(x + 1);
        return;
    }
    if (x > 12)
    {
        int t[6];
        t[0] = a[1] + a[3] + a[6] + a[8];
        t[1] = a[1] + a[4] + a[7] + a[11];
        t[2] = a[2] + a[3] + a[4] + a[5];
        t[3] = a[2] + a[6] + a[9] + a[12];
        t[4] = a[8] + a[9] + a[10] + a[11];
        t[5] = a[12] + a[10] + a[7] + a[5];
        for (int i = 1; i < 6; ++i)
        {
            if (t[i] != t[i - 1])
                return;
        }
        for (int i = 1; i <= 12; i++)
            cout << a[i] << " ";
        return;
    }
    for (int i = 1; i < 13; ++i)
    {
    if(!vis[i])
    {
      vis[i] = 1;
      a[x] = i;
      dfs(x+1);
      vis[i] = 0;
    }
    }
}
int main()
{
    memset(vis, 0, sizeof(vis));
    cin >> a[1];
    vis[a[1]] = 1;
    cin >> a[2];
    vis[a[2]] = 1;
    cin >> a[3];
    vis[a[3]] = 1;
    dfs(1);
    return 0;
}


今天就到这里,大家继续加油!

目录
相关文章
|
6月前
|
C语言
C 语言中布尔值的用法和案例解析
在编程中,您经常需要一种只能有两个值的数据类型,例如: - 是/否 - 开/关 - 真/假 为此,C语言有一个 `bool` 数据类型,称为布尔值。
209 1
|
5月前
|
机器学习/深度学习 移动开发 人工智能
C语言程序设计的50个小案例
C语言程序设计的50个小案例
|
6月前
|
存储 C语言
C语言基础专题 - 通过案例历学 - 共用体
C语言基础专题 - 通过案例历学 - 共用体
49 0
|
6月前
|
C语言
C语言基础专题 - 通过案例历学 - 结构体
C语言基础专题 - 通过案例历学 - 结构体
44 0
|
C语言
C语言经典案例-1
C语言是很多学习编程的同学最先接触的编程语言,我个人也是,在大一上就是开始接触,但是我比较特殊,在这之前自己先学习了一些其他的编程语言(但是严格说,我大学第一次学的编程语言就是C语言),然后大一上那会C语言就是没有好好听课,现在准备用一段时间捡起来。
70 0
|
C语言
头歌c语言实训项目-综合案例课外练习:大奖赛现场统分
头歌c语言实训项目-综合案例课外练习:大奖赛现场统分
头歌c语言实训项目-综合案例课外练习:大奖赛现场统分
|
存储 C语言
头歌c语言实训项目-综合案例课外练习:学生成绩管理系统
头歌c语言实训项目-综合案例课外练习:学生成绩管理系统
205 0
|
C语言
头歌c语言实训项目-综合案例课外练习:火柴游戏
头歌c语言实训项目-综合案例课外练习:火柴游戏
146 0
|
C语言
【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例
【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例
65 0
|
C语言 索引
C语言 文件读写综合案例:读取LOL信息
C语言 文件读写综合案例:读取LOL信息
342 0
C语言 文件读写综合案例:读取LOL信息