前几篇博客的内容已经涉及了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=99a = 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;
}