C语言例题练手(1)

前几篇博客的内容已经涉及了C语言的部分语法知识,我们可以尝试做一些编程题,或者换一种说法就是可以写出什么样的程序以此来解决一些问题。

题目来自牛客网https://www.nowcoder.com和C语言菜鸟教程C 语言教程 | 菜鸟教程

数值计算

【例1】带余除法计算------实际应用场景:计算器等自动计算

思路

我们需要输入两个整数因此需要输入函数printf并且用变量定义输入值,定义的数据类型是整型类型;需要输出两个数相除的结果因此用/、需要输出余数因此要引入新的算术操作符%表示求余数、和输出函数scanf++(++ ++因为scanf也可以,故不再写成scanf_s,原scanf_s只是比scanf安全程度更高)++,根据上面的思路我们开始写出相对应的代码。

程序

复制代码
#include<stdio.h>//包含头文件
int main()//程序入口
{
    int a = 0,b = 0;//定义数据变量和类型
    scanf("%d %d",&a,&b);//输入变量的值,%d中间有空格隔开让其更美观
    printf("%d %d",a/b,a%b);//输出运算结果,分别是商和余数,%d中间有空格隔开让其更美观
    return 0;
}
运行

【例2】交换两个数------位置、货币、物品交换

描述

给定两个整数a和b,交换两个数的数值。

输入描述

输入两个整数a和b,中间用空格隔开。

输出描述

输出a和b两个数值交换的结果。

思路

需要输入函数和提示信息、实现两个数值的交换、输出函数。

程序

解法一:

复制代码
#include<stdio.h>
int main()
{
    int a = 0, b = 0;
    scanf("%d %d", &a, &b);
    printf("交换之前:a=%d b=%d\n", a, b);

    //创建临时变量
    int c = 0;
    c = a;//交换数值用到临时变量c,来暂时存储a的值因为下一步a就要被b覆盖,并且后面重新赋值给b,于是实现了交换
    a = b;
    b = c;

    printf("交换之后:a=%d b=%d\n", a, b);
    return 0;
}
运行

补充:当交换的数值是浮点数时同样也可以实现,只需要把数据类型和占位符变化一下即可。

解法二:不使用临时变量

复制代码
#include <stdio.h>
int main()
{
    int a = 0, b = 0;
    scanf_s("%d %d", &a, &b);
    printf("交换之前:a=%d b=%d\n", a, b);//例如a=11,b=99

    a = a + b;  // ( 11 + 99 = 110)  此时 a 的变量为两数之和,b 未改变
    b = a - b;  // ( 110 - 99 = 11)  
    a = a - b;  // ( 110 - 11 = 99)

    printf("交换之后:a=%d, b=%d\n", a, b);
}

【例3】计算自然数的和------计算物品个数和

描述

自然数数列,0,1,2,3,4,5......指非负整数递增并且每次只加1的数列,给定项数,求该项对应的数和前面数值的总和

输入

输入整数项数

输出

输出整数总和

思路

需要循环、输出函数

程序

for循环
复制代码
#include<stdio.h>
int main()
{
    int a;
    printf("输入项数: ");
    scanf("%d",&a);

    //刚开始总和sum为0,然后通过循环i自增,其实是遍历了0~a(包括a)项的所有数值,因为刚好自然数列的数值和项数的本身重合
    int sum=0;//需要先定义并且初始化才能使用,定义也可以放在跟a在一块
    for(int i=0;i<=a;i++)
    {
        sum=sum+i;
    }

    printf("sum=%d",sum);
    return 0;
}
运行

补充:这类问题其实是等差数列(公差为1)的求和问题。也可以用while循环来写

while循环
复制代码
#include <stdio.h>
int main()
{
    int a, i, sum = 0;//while循环没有for循环可以定义自增变量i的功能,所以在这里先行定义
    printf("输入项数: ");
    scanf("%d",&a);
 
    i = 1;//定义从1开始可以减少一次while循环,因为0加进去并不会影响总和
    while ( i <=a )
    {
        sum += i;
        ++i;
    }

    printf("sum = %d",sum);
    return 0;
}
运行
相关推荐
爱学习的小邓同学2 分钟前
数据结构 --- 队列
c语言·数据结构
啟明起鸣6 小时前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
秋说11 小时前
【PTA数据结构 | C语言版】线性表循环右移
c语言·数据结构·算法
芯岭技术13 小时前
MS32C001-C单片机,32位ARM M0+内核,宽电压、低功耗、小封装。
c语言·arm开发·单片机
minji...15 小时前
数据结构 算法复杂度(1)
c语言·开发语言·数据结构·算法
秋说16 小时前
【PTA数据结构 | C语言版】在顺序表 list 的第 i 个位置上插入元素 x
c语言·数据结构·list
楼田莉子16 小时前
数据学习之队列
c语言·开发语言·数据结构·学习·算法
秋说17 小时前
【PTA数据结构 | C语言版】返回单链表 list 中第 i 个元素值
c语言·数据结构·list
双叶83617 小时前
(C++)任务管理系统(正式版)(迭代器)(list列表基础教程)(STL基础知识)
c语言·开发语言·数据结构·c++·list
七七七七0717 小时前
类与对象【下篇】-- 关于类的其它语法
c语言·开发语言·c++