前言:刷题博客主要记录在学习编程语言时,练习的一系列题目,比较适合C语言的初学者用来巩固提高编程能力,其余可见专栏。
解题思路——
--需求分析:
---需要将乘法口诀表输出,格式如下:
1*1=1 1*2=2 2*2=4 ...... 1*9=9 2*9=18............9*9=81
--实现方案:
--定义两个变量a、b作乘数;定义变量c接收a*b;
--根据需求形式,在每行一个变量不变,另一个变量++——嵌套循环结构实现;
--外层循环:变量a控制行数(1~9);
--内层循环:变量b控制每行的列数;
#include <stdio.h>
int main()
{
//定义两个乘数变量
int a = 0;
int b = 0;
//定义乘积变量
//外层循环——变量充当第二个乘数,输出完一行再++
for (a = 1; a < 10; a++)
{
//内层循环——变量充当第一个乘数,随着运行++
for (b = 1; b <= a; b++)
{
int c = a * b;
printf("%d*%d=%-2d ", b, a, c);//优化:-2代表左对齐,强制宽度为2,显得齐
}
//每打印完一行,换行,美观
printf("\n");
}
return 0;
}解题思路——
--需求分析
--要求:在输入的十个整数中找到最大值;
--实现方案
--定义变量num接收屏幕输入、定义变量max接收最大值;
--scanf,在屏幕上输入10个数,并先只读取第一个整数存在num中;初始化max,将num赋给max,用作后面的比较;
--实现主体需要循环来输入剩余9个数,scanf每读取一个整数,与max比较,大则更新,反之继续循环读取;
#include <stdio.h>
int main()
{
int num, max;//定义整数、最大值变量
printf("请输入10个数值:\n");
scanf("%d", &num);//读取屏幕输入的第一个整数
//初始化最大值变量,默认输入的第一个数为最大值
max = num;
//使用循环,输入剩余9个数
for (int i = 1; i < 10; i++)
{
scanf("%d", &num);//输入9个数值
//用if语句来比较大小
if (num > max)
{
max = num;//如果有后续输入的数值比num大,则替换成为max
}
}
printf("最大值是:%d\n", max);
return 0;
}解题思路——
--需求分析
--要求:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
-- 实现方案
--定义变量int a,充当分母;定义变量double term作分数(1.0/a);定义变量double sum求和;
--循环节构:将变量a生成1~100的数值作分母;
--循环中嵌套选择:用于分数符号的改变;
--根据数据规律得,负数都是分母为2的倍数的分数;参考之前的实现1~100中3的倍数求和,选择出2的倍数的分母;
int main()
{
int a = 0;//定义变量充当分母
double sum = 0.0;//累加和
double term = 0.0;//分数变量
//主体实现循环结构
for (a = 1; a <= 100; a++)//完成分母的增长
{
term = 1.0 / a;
//根据要求得知,分母是2的倍数的分数为负数
//由选择语句实现符号变换
if (a % 2 == 0)
{
term = -term;
}
sum += term;//求和
}
printf("和是:%f", sum);
return 0;
}解题思路——
--需求分析
--要求:编写程序数一下 1到 100 的所有整数中出现多少个数字9;
--实现方案
--根据需求目前定义变量num用来存储数值输、定义变量sum求和;
--根据主体结构,每次判断符合后,定义变量count进行计数;
--如何判断?:首先要确定怎么判断是"9",可以沿用上一题的思路,但只是判断每个位数的数值"==9";
--判断方法:对于个位数,用选择语句直接判断==9;对于两位数,采取取余/取整再进行判断;
--结果预测:遍历1~100后,应输出19;
int main()
{
int num = 0;//定义变量用于生成1~100数值
int count = 0;//记录9出现的次数
//循环生成数值
for (num = 1; num <= 100; num++)
{
if (num == 9)
{
count++;
}
else if ((num % 10) == 9)
{
count++;
}
else if((num / 10) == 9)
{
count++;
}
}
printf("9的个数是:%d", count);
return 0;
}
输出:19//与预测相符解题思路——
--需求分析
--定义两个变量mun1、num2:接收键盘输入;
--定义变量gcd(Greatest Common Divisor)接收最大公约数 ;
--循环结构:定义变量a,在循环中生成1~num1(较小值)数值,循环条件--a<较小值(节约遍历时间);循环嵌套选择——选择a,num1、num2同时满足 %a == 0;
--键盘输入:根据上面需要,输入时先较小值再较大值;
int main()
{
//定义变量接收输入
int num1 = 0;//小
int num2 = 0;//大
//屏幕输入两个整数
printf("请按从小到大的顺序输入两个整数:");
//屏幕输入
scanf("%d%d", &num1, &num2);
int a = 0;//定义变量,进行除数遍历
//循环生成整数
int gcd = 1;//存储被除数的约数最大值——Greatest Common Divisor (GCD)
//求num1的约数
for (a = 2; a <= num1; a++)//界限取小的数,
{
//a=2,因为gcd提前初始化1;
//判断num1的约数是否num2适配
if (((num1 % a) == 0) && ((num2 % a) == 0))
{
gcd = a;//存储最大公约数
}
}
printf("二者最大公约数是:%d", gcd);
return 0;
}--上面的代码确实可行,但要讲究效率;循环中从2到较小值遍历费时,可以直接反向遍历寻找GCD;
--对于键盘输入端,限制多,可以使用前面学的三目操作符(条件操作符)来简化操作;
--exp1 ? exp2 : exp3;
int main()
{
//定义变量接收输入
int num1 = 0;
int num2 = 0;
//存储被除数的约数最大值——Greatest Common Divisor (GCD)
int gcd = 1;
printf("请输入两个整数:");
scanf("%d%d", &num1, &num2);
//判断较小值
int min = (num1 < num2) ? num1 : num2;
//反向遍历
for (int a = min; a >= 1; a--)
{
if (((num1 % a) == 0) && ((num2 % a) == 0))
{
gcd = a;//存储最大公约数
break;//找到符合的最大值后,跳出循环
}
}
printf("二者最大公约数是:%d", gcd);
return 0;
}--这提醒我们,就算代码已经实现了功能,也要继续探索是否能够再次简化,节约时间等。
结语:本篇内容收录在《C语言刷题集》中,本篇主要分享的是有关分支循环语句题目的练习,难度不一,一定程度上能够有效提升编程能力,喜欢的朋友们,三连后一起来学习吧!!!