分支与循环语句的简单应用(c语言)
Posted yumuing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分支与循环语句的简单应用(c语言)相关的知识,希望对你有一定的参考价值。
打印倍数
int main()
{
int x = 0;//倍数目标
int y = 0;//倍数范围
int i = 1;
scanf("%d %d", &x,&y);
for (; x <= y; x = i * x)
{
printf("%d ", x);
i++;
};
return 0;
}
三数排序
int main()
{
int a;//最大值
int b;//中间值
int c;//最小值
scanf("%d %d %d", &a, &b,&c);//随机输入数值(无序)
if (a < b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp;
tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
int tmp;
tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d", a, b, c);
return 0;
}
求两数间最大公约数(辗转相除法)
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
{
int a;//数字a
int b;//数字b
int ret;
scanf("%d %d", &a, &b);
while (ret=a % b)//a%b=0时跳出循环
{
a = b;
b = ret;
}
printf("%d", b);
return 0;
}
判断某个范围内各个自然数的个位或十位是否为九
int main()
{
int a;//判断目标
int b;//范围
int count=0;//计数
scanf("%d %d",&a,&b);
for (a = 1; a <= b; a++)
{
if (a % 10 == 9)
{
printf(" %d", a);
count++;
}
//若使用else if会缺少99(个位和十位都是9,必须重复计数)
if (a / 10 == 9)
{
printf(" %d", a);
count++;
}
};
printf("\\ncount=%d", count);
return 0;
}
打印素数
素数是除一及其本身外无其他公约数的自然数2。
判断方法:
试除法(将小于指定数的自然数一一试除,皆无法整除者为素数)
int main()
{
int i = 0;
int k = 0;//起始数
int p = 0;//结束数
int j = 0;
int count = 0;//计数范围内素数个数
scanf("%d %d ",&k,&p)
for (i = k; i <= p; i++)//给出范围内各个数
{
//素数的判断
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
break;
}
if (j == i)
{
count++;
printf("%d ", i);
}
}
printf("\\ncount=%d", count);
return 0;
}
优化:
{
int i = 0;
int k = 0;//起始数
int p = 0;//结束数
int count = 0;
for (i = k; i <=p; i += 2)//跳过所有偶数,减少计算量。
{
int j = 0;
//素数的判断:无法被2到指定数的开方数整除的自然数
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
break;
}
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\\ncount=%d", count);
return 0;
}
求某个范围的闰年
- 非整百年份:能被4整除的是闰年。(如2004年就是闰年,2001年不是闰年)
- 整百年份:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
int main()
{
int a;
int b;
int count = 0;
scanf("%d %d", &a, &b);
for (; a < b; a++)
{
if (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0))
{
printf("%d ", a);
count++;
}
}
printf("\\ncount=%d", count);
return 0;
}
计算阶乘(计算数学上的n!)
int main()
{
long x=0;//目标n
int y=0;
int ret = 1;
scanf("%d/n", &x);
for (y = 1; y <= x; y++)//给出计算所需值
{
ret = ret * y;//进行累乘
};
printf("%d\\n", ret);
return 0;
}
加大难度:计算阶乘相加
int main()
{
long x = 1;
int y = 0;
int ret = 1;//累乘媒介
int sum = 0;//相加结果
int n = 0;//阶乘范围
scanf("%d/n", &n);
while(x<=n)
{
ret = 1;
for (y = 1; y <= x; y++)
{
ret = ret * y;
};
sum += ret;
x++;
}
printf("%d", sum);
return 0;
}
打印1 / 2 + 1 / 3 - 1 / 4.... - 1 / 100结果
int main()
{
int a = 1;
int f = 1;
double sum = 0;
//由于计算结果为小数,只能使用浮点数
double b = 0.0;
for (b=1; b <= 100; b++)
{
sum +=( f * 1 / b);
f = -f;//交替出现加号与减号
}
printf("%lf", sum);//浮点数对应%lf
return 0;
}
二分查找
注:只能在有序数组中才能使用。
int main()
{
int left = 0;//左下标
int right = 0;//右下标
int k = 0;//查找值
int n = 0;//数组长度
int z = 0;//中间值
char arr[] = { 1,2,3,4,5,6,8,9 };//查找范围
scanf("%d", &k);
right = n - 1;
n = sizeof(arr) / sizeof(arr[0]);//计算数组大小
while (left <= right)//易错:等于号不可省略
{
z = (left + right) / 2;
if (arr[z] < k)
{
left = z + 1;
}
else if (arr[z] > k)
{
right = z - 1;
}
else
{
printf("找到了,下标是%d", z);
break;
}
}
if (left > right)
printf("找不到");
return 0;
}
打印乘法口诀表
右下角
int main()
{
int a;//行数
int b;//列数
for (a= 1; a <= 9; a++)
{
for (b = 1; b <= a; b++)
{
printf("%d*%d=%d\\t", b, a, a * b);//\\t一个制表符距离
}
printf("\\n");
}
return 0;
}
正方形
int main()
{
int a;//行数
int b;//列数
for (a = 1; a <= 9; a++)
{
for (b = 1; b <=9; b++)
{
//%-2d为向左对齐两个字符
printf(" %d*%d=%-2d", a, b, a * b);
}
printf("\\n");
}
return 0;
}
总结
或许,以上只是常见的c语言编程题,但在这其中我领会了一些简单算法的应用,直至懂得了分支与循环语句的基础使用逻辑。相信我将会慢慢进步,在这条道路上。
以上是关于分支与循环语句的简单应用(c语言)的主要内容,如果未能解决你的问题,请参考以下文章