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;
}
运行
相关推荐
wuyk5553 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
wuminyu5 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
小龙报9 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
SNAKEpc1213810 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
YSL07012412 小时前
字符函数和字符串函数
c语言
Aurorar0rua15 小时前
CS50 x 2024 Notes Memory - 03
c语言·开发语言·学习方法
捷瑞电子工坊1 天前
嵌入式秋招面经:5大核心模块高频考题与实战避坑总结
c语言·stm32·嵌入式工程师·rtos·通信协议·嵌入式面试
天空'之城1 天前
C 语言工业级通用组件手写 30:安全内存拷贝组件
c语言·内存拷贝·工业级组件·安全内存操作
LuminousCPP1 天前
数据结构-双向循环链表
c语言·数据结构·笔记·链表
小僧景贤1 天前
嵌入式C语言 第二篇:基础语法|嵌入式C与标准C的核心差异
c语言·开发语言·嵌入式c语言