分支和循环相关练习2

似梦清欢
• 阅读 455

分支和循环相关练习2

::: tip 程序进入主函数,i从0到5,循环5次,输出5个sum(a)的值。sum(a)调用上面的函数,传过去的a的值为2,c=0,b=3,c+=1=1,b+=2=5,即2+5+1=8。第二次循环,a=2,c+=1=1,b+=2=7,即2+7+1=10.以此类推。 :::

::: warning 定义变量b时,在前面添加了static,b称作静态全局变量,只在定义它的源文件内有效,其他源文件无法访问它。 :::


分支和循环相关练习2

::: tip

  1. if语句后面加大括号可以跟多条语句
    1. 0表示假,非0表示真
    2. else语句和最近未匹配的if匹配 :::

分支和循环相关练习2


分支和循环相关练习2 ::: tip int b定义时候没有赋值,题干调用函数时候func(1)传入了1,即func(int a)中a的值为1,进入switch语句中,执行case1后b赋值30,因没有break跳出,b被后面的语句重新赋值,直到b=0,return b将b的值返回,即func(1)=0。 :::


分支和循环相关练习2 ::: tip switch后必须是整型常量表达式。int为整型,long为长整型,char是字符类型,即字符对应的ASCII码值,为整型,float为单精度浮点数,是浮点型。 :::


分支和循环相关练习2 ::: tip x%2的值为1,进入外层循环的case1,内层循环switch(y)中没有case3与之对应,执行default输出hello,default后没有break中止循环,继续执行外层循环case2,输出third,即屏幕打印hellothird。

:::


分支和循环相关练习2

#include <stdio.h>

int main ()
{
    int a = 0;
    for(a = 1;a<100;a++)
    {
        if(a%3 ==0)
        {
            printf("%d ",a);
        }
    }
    return 0;
}
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
--------------------------------
Process exited after 0.02896 seconds with return value 0

分支和循环相关练习2 ::: tip 求最大公约数,可以使用辗转相除法。 两个正整数a和b,他们的最大公约数等于a除以b的余数和b之间的最大公约数。 比如10和25,25除以10余5,那么10和25的最大公约数等同于5和10之间的最大公约数。 余数为0时,最大公约数是被除数。 :::

#include <stdio.h>

int main ()
{
    int a = 0;
    int b = 0;
    scanf("%d%d",&a,&b);
    int c;
    while(a%b)
    {
        c = a%b;
        a = b;
        b = c;
    }
    printf("%d",b);
    return 0;
}
24 18
6
--------------------------------
Process exited after 2.41 seconds with return value 0

分支和循环相关练习2

#include<stdio.h>

int main()
{
    int a = 0;
    int count = 0;
    for (a = 1;a <= 100;a++)
    {
        if (a/10 == 9)
            count ++;
        if (a%10 == 9)
            count ++;
    }
    printf("%d",count);
}
20
--------------------------------
Process exited after 0.1128 seconds with return value 2

分支和循环相关练习2 ::: tip 先写出一个for循环产生1-100的数字a,1/a就是每一项。需要小数时候需要把将1/a改为1.0/a,同时将和的变量类型设为double,打印结果时候将%d改为%lf。正负交替可以设置一个变量在循环内赋值负数的语句。 :::

#include <stdio.h>

int main()
{
    int a = 0;
    double sum = 0.0;
    int flag = 1;
    for(a = 1;a <= 100;a++)
    {
        sum += flag*1.0/a;
        flag = -flag;        
    }
    printf("%lf",sum);
    return 0;
}
0.688172
--------------------------------
Process exited after 0.01676 seconds with return value 0

还可以使用如下方法计算:

#include <stdio.h>

int main()
{
    int a = 0;
    double sum1 = 0.0;  //分母为正相加
    double sum2 = 0.0;  //分母为负相加
    double sum3 = 0.0;  
    for(a = 1;a <= 100;a++)
    {
        if(a%2 == 0)
            sum1 += 1.0/a;
        else
            sum2 += 1.0/a;
    }
    sum3 = sum1 -sum2;
    printf("%lf",sum3);
    return 0;
}
-0.688172
--------------------------------
Process exited after 0.01548 seconds with return value 0

分支和循环相关练习2 ::: tip 需要在一组数字中打印需要值时,需要创建一个数组,和一个数组下标变量,并通过sizeof(arr) / sizeof(arr[0])计算数组中元素个数。 :::

#include <stdio.h>

int main()
{
    int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
    int max = arr[0];
    int a = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for(a=1 ; a<sz ; a++)
    {
        if(arr[a] > max)
            max = arr[a];
    }
    printf("%d",max);
    return 0;
}
-1
--------------------------------
Process exited after 0.01311 seconds with return value 0

分支和循环相关练习2

#include <stdio.h>

int main()
{
    int a = 0;
    for(a=1 ; a<=9 ; a++)  //行数
    {
        int b = 0;
        for(b=1 ; b<=a ; b++)  //列数,列数最大等于行数
        {
            printf("%d*%d=%-2d ",a,b,a*b);  //%-2d表示输出结果后左对齐空两格
        }
        printf("\n");
    }
    return 0;
}
1*1=1
2*1=2  2*2=4
3*1=3  3*2=6  3*3=9
4*1=4  4*2=8  4*3=12 4*4=16
5*1=5  5*2=10 5*3=15 5*4=20 5*5=25
6*1=6  6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7  7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8  8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9  9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

--------------------------------
Process exited after 0.01892 seconds with return value 0
点赞
收藏
评论区
推荐文章

暂无数据

似梦清欢
似梦清欢
Lv1
慢慢来吧...
文章
17
粉丝
12
获赞
1