c语言逆数不用循环,C语言入门-循环

一、循环

输入一个数字,输出该数字有几位

#include

int main()

{

int x;

int n = 0;

scanf("%d" , &x);

n++;

x /= 10;

while(x > 0){

n++;

x /= 10;

}

printf("%d\n",n);

return 0;

}

二、while循环

循环体内要有改变条件的机会,避免死循环

while循环的意思就是:当条件满足时,不断地重复循环体内的语句

循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行

看我们上面的代码,是否有点多余的成分,我们来进行改造,但是还有一个问题就是输入0的时候是没有位数的

#include

int main()

{

int x;

int n = 0;

scanf("%d" , &x);

while(x > 0){

n++;

x /= 10;

}

printf("%d\n",n);

return 0;

}

三、do-while循环

在进入循环的时候不检查,再执行一轮之后再进行检查条件是否满足,至少是执行一次循环具体格式如下

do{

循环体

}whlie(条件)

数位数的算法

用户输入x

初始化n为0

x = x /10 , 去掉个位

n++

如果n > 0 ,回到3

否则n就是结果

把上面的代码进行改造

#include

int main()

{

int x;

int n = 0;

scanf("%d" , &x);

do{

n++;

x /= 10;

}while(x > 0);

printf("%d\n",n);

return 0;

}

此时输入0也是可以显示位数,

四、循环计算

int x;

int ret = 0;

scanf("%d" , &x);

int t = x;

while(x > 1){

x /= 2;

ret++;

}

printf("log2x of %d is %d" , t , ret );

猜数游戏

让计算机想一个数字,然后让用户来猜,用户每输入一个数组,就告诉他是大了还是小了,直到用户猜中为止,并且告诉用户猜了多少次

这里用到了一个随机数

#include

#include

#include

int main(){

srand(time(0));

int a = rand();

// 但是这个随机数有点大,这里取余100

printf("%d\n" , a%100);

return 0;

}

具体的实现如下:

#include

#include

#include

int main(){

srand(time(0));

int number = rand()%100+1;

int a = 0;

int count = 0;

// 用来作弊

// printf("%d\n",number);

while(number != a){

printf("亲,请输入100以内的数字:");

scanf("%d", &a);

if(a > number){

printf("亲,你输入的数字大了\n");

}else if(a < number){

printf("亲,你输入的数字小了\n");

}

count++;

}

printf("恭喜你,输入正确!你一共输入了%d次" , count);

return 0;

}

算平均数

让用户输入一系列正整数,然后输入-1表示输入结束,然后计算这些数字的平均数

int number;

int count = 0;

int sum = 0;

printf("请输入数字(-1结束):");

scanf("%d" , &number);

while(number != -1){

printf("请输入数字(-1结束):");

count++;

sum += number;

scanf("%d" , &number);

}

printf("你一共输入了%d次,平均数为%d", count , sum/count) ;

五、整数求逆

对一个整数做%10的操作,就得到他的个位数

对一个整数做/10的操作,就去掉他的个位数

求:输入一个正整数,输入逆序的数

int number;

int digit;

int ret = 0;

printf("请输入数字:");

scanf("%d" , &number) ;

while(number != 0){

digit = number%10;

//printf("%d",digit);

ret = ret * 10 + digit;

printf("x=%d,digit=%d,ret=%d\n", number, digit, ret);

number /= 10;

}

printf("%d",ret);

六、for循环

for循环像一个计数循环,设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计算器以一定步进行调整。

计算n!

#include

int main(){

int n;

scanf("%d" , &n);

int fact = 1;

// for(int i = 1; i<=n; i++){

// fact *= i;

// }

for(int i = n; i>1; i--){

fact *= i;

}

printf("%d!=%d" , n , fact);

return 0;

}

循环的计算和选择

for(初始动作;条件;每轮的动作){

​ 循环体;

}

for中的每一个表达式都是可以省略的,分号不能省

#include

int main(){

int i;

for(i = 0; i<5; i++){

printf("i=%d\n" , i);

}

printf("\n最后的i=%d\n",i);

return 0;

}

i=0

i=1

i=2

i=3

i=4

最后的i=5

如果有固定的次数,用for循环

如果必须执行一次,用do_while

其他情况用while

七、循环控制

素数:只能被1和自己整除的数,不包括1

int x;

scanf("%d" , &x);

int i;

int isPrime = 1;

for(i=2; i

if( x % i == 0){

isPrime = 0;

break;

}

}

if( isPrime == 1){

printf("是素数\n");

}else{

printf("不是素数\n");

}

嵌套的循环

100以内的素数

#include

int main(){

int x;

for( x=1; x<=100; x++){

int i;

int isPrime = 1;

for(i=2; i

if(x % i == 0){

isPrime = 0;

break;

}

}

if (isPrime == 1){

printf("%d\n" , x);

}

}

return 0;

}

也可以这样,算出50个素数

#include

int main(){

int x;

int cnt = 0;

// for( x=1; cnt<50; x++){

x = 1;

while(cnt < 50){

int i;

int isPrime = 1;

for(i=2; i

if(x % i == 0){

isPrime = 0;

break;

}

}

if (isPrime == 1){

cnt++ ;

// 制表符

printf("%d\t" , x);

if(cnt % 5 == 0){

printf("\n");

}

}

x++ ;

}

return 0;

}

从嵌套的循环中跳出

break和continue只能对它所在的那层循环,

goto:直接跳转到你指定的位置

凑硬币

如何用1角、2角、5角硬币凑出10元以内的金额,接力break,太麻烦了

int x;

int exit = 0;

int one, two, five;

printf("请输入金额:");

scanf("%d", &x);

for(one = 1; one < x *10; one++){

for(two=1; two < x*10/2; two++){

for(five=1; five < x*10/5; five++){

if(one + two*2 + five*5 == x*10){

printf("可以用%d个1角和%d个2角和%d个5角的组成%d元\n",one ,two,five,x);

exit = 1;

break;

}

}

if (exit == 1) break;

}

if (exit == 1) break;

}

goto,当有多层循环的时候可以使用这个,其他的时候不要使用

#include

int main(){

int x;

int one, two, five;

printf("请输入金额:");

scanf("%d", &x);

for(one = 1; one < x *10; one++){

for(two=1; two < x*10/2; two++){

for(five=1; five < x*10/5; five++){

if(one + two*2 + five*5 == x*10){

printf("可以用%d个1角和%d个2角和%d个5角的组成%d元\n",one ,two,five,x);

// 直接跳到你指定的位置

goto out;

}

}

}

}

out:

return 0;

}

八、循环应用

前n项求和

$$

f(n) = 1+1/2+1/3 +....+1/n

$$

#include

int main(){

int n;

int i;

double sum = 0.0;

scanf("%d" , &n);

for(i=1; i<=n; i++){

sum += 1.0/i;

printf("%f\n", sum);

}

return 0;

}

但是这样呢?

$$

f(n)=1-1/2+1/3-1/4+...+1/n

$$

这个方法就比较多了,这里我自己写了一个

#include

int main(){

int n;

int i;

double sum = 0.0;

scanf("%d" , &n);

for(i=1; i<=n; i++){

if(i%2 == 0){

sum -= 1.0/i;

}else{

sum += 1.0/i;

}

printf("%f\n", sum);

}

return 0;

}

整数分解

输入一个非负整数,正序输出它的每一位数字

输入:1314

输出:1 3 1 4

#include

int main(){

int x;

printf("输入任意位数数字:\n");

scanf("%d" , &x);

// 记录位数

int mask = 1;

// 输入的值赋值给t,用于记录输入数字的位数

int t = x;

while( t > 9){

t /= 10;

mask *= 10;

}

// 用户输入进来的值,以及用户输入值的位数

printf("x=%d, mask=%d\n",x, mask );

do{

int d = x / mask;

printf("%d",d );

// 最后一位不用输出空格

if (mask > 9)

{

printf(" ");

}

// 得到他的个位数

x %= mask;

// 去掉它的个位数

mask /= 10;

}while( mask >0);

printf("\n");

return 0;

}

求最大公约数

输入两个数a和b,输出它们的最大公约数

输入:12 18

输出:6

普通计算

int a,b;

int min;

printf("请输入两个数字:");

scanf("%d %d" , &a, &b);

if(a < b){

min = a;

}else{

min = b;

}

int ret = 0;

int i;

for (i = 1; i <= min; i++)

{

if ( a%i == 0)

{

if ( b%i == 0)

{

ret = i;

}

}

}

printf("%d和%d的最大公约数是%d\n", a , b , ret );

但是还有更厉害的

如果b等于0,计算结束,a就是最大公约数

否则,计算a除以b的余数,让a等于b,而b等于那个余数

回到第一步

a

b

t(余数)

12

18

12

18

12

6

12

6

0

6

0

代码如下:

#include

int main(){

int a,b;

int t;

scanf("%d %d" , &a , &b);

while(b != 0){

t = a % b;

a = b;

b = t;121

printf("%d,%d\n", a ,b);

}

printf("最大的公约数是%d\n", a);

return 0;

}

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[C语言入门-循环]http://www.zyiz.net/tech/detail-91842.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值