练习题

来源:互联网 发布:安卓网络直播电视软件 编辑:程序博客网 时间:2024/04/28 01:23
    /*
     1.    将华氏温度转换为摄氏温度和绝对温度的公式分别为:
     c= (f-32)        (摄氏温度)
     k=273.16+c        (绝对温度)
     请编程序:当给出f时,求其相应摄氏温度和绝对温度。
     测试数据:① f=34
     ② f=100
     
    float f,k,c;
    printf("please input f:");
    scanf("%f",&f);
    c=(f-32);
    k=273.16+c;
    printf("摄氏温度是c=%-5.2f,绝对温度是k=%-5.2f",c,k);
    return 0;
     
     2.    写一个程序把极坐标(r,θ) (θ之单位为度)转换为直角坐标( X,Y)。转换公式是:
     x=r.cosθ
     y=r.sinθ
     测试数据:① r=10  θ=45°
            ② r=20  θ=90°
     
    const double PI=3.14;
    double  r,s;
    double  x,y;
    printf("please input r and s like(r,s):");
    scanf("%lf,%lf",&r,&s);
    x=r*cos(s*PI/180);
    y=r*sin(s*PI/180);
    printf("x=%lf,y=%lf",x,y);
     5.    输入一个3位整数,求出该数每个位上的数字之和。如123,每个位上的数字和就是1+2+3=6。
     
    int num=0;
    int sum=0;
    printf("please input a number:");
    scanf("%d",&num);
    while (num) {
        sum += num %10;
        num /=10;
    }
    printf("每个位上的数字和就是sum=%d",sum);
    return 0;
     
     6.    打印出以下图形
             *
           * * *
         * * * * *
       * * * * * * *
         * * * * *
           * * *
             *
    
    int i,j,k;
    for (i=0;i<=3;i++)
    {
        for (j=0;j<=2-i;j++)
            printf(" ");
        for (k=0;k<=2*i;k++)
             printf("*");
        printf("\n");
    }
    for (i=0;i<=2;i++)
    {
        for (j=0;j<=i;j++)
            printf(" ");
        for (k=0;k<=4-2*i;k++)
            printf("*");
        printf("\n");
    }
     7.    准备客票。某铁路线上共10个车站,问需要准备几种车票?
     
    int i,j,station,total=0;
    printf("输入车站数:");
    scanf("%d",&station);
    for (i=1;i<station;i++)
        for (j=i+1;j<=station;j++)
               total=total+1;
    printf("车票种类=%d \n",total);

    return 0;

    }

     */

1.    计算n的阶乘
     int n=0,mul=1;
     printf("please input n:");
     scanf("%d",&n);
     for (int i=1; i<=n; i++) {
     mul *=i;
     }
     printf("mul=%d",mul);
     2.    求 1到 100之间的奇数之和、偶数之积。
     
    int sumj=0,sumo=0;
    for (int i=1; i<=100; i++) {
        if (i%2==0)
        {
            sumo +=i;
        }
        else
        {
            sumj +=i;
        }
    }
    printf("奇数之和sumj=%d,偶数之和sumo=%d",sumj,sumo);
     4.    用循环语句编写求2^0+2^1+2^2+2^3+.....+2^63 的程序。
     
    double sum=1;//跳过2^0从2^1开始
    double mul=1;
    for (int i=1; i<64; i++) {
        
        mul *=2;
        sum +=mul;
    }
    printf("sum=%.0lf",sum);
     5.求1!+2!+3!+...+20!
     double sum=0;
     double mul=1;
     for (int i=1; i<=20; i++) {
     
     mul *=i;
     sum +=mul;
     }
     printf("sum=%.0lf",sum);
     
   6.    有一分数序列 2/1,3/2,4/3,5/4......,求出这个数列的前20项之和。
     
    
    float a[21]={0};
    float sum=0;
    a[0]=1;
    a[1]=2;
    for (int i=2; i<21; i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    for (int i=0;i<20; i++)
    {
        sum += a[i+1]/a[i];
    }
    printf("sum=%f",sum);
     12.    打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。例如 153是一个水仙花数,因为 153= (要求分别用一重循环和三重循环实现)。
     //方法1
     int x=0,y=0,z=0;//z,y,z 分别对应的是个 十 百
     for (int data=100; data<10000; data++)
     {
     x=data%10;
     y=data/10%10;
     z=data/10/10%10;
     if (data==x*x*x+y*y*y+z*z*z) {
     printf("%d\n",data);
     }
     }
     //方法2
     int data=0;
     for (int x=0; x<=9; x++)
     {
     for (int y=0; y<=9; y++)
     {
     for (int z=1; z<=9; z++)
     {
     data=z*100+y*10+x;
     if (data==x*x*x + y*y*y +z*z*z) {
     printf("%d\n",data);
     }
     }
     }
     }
    14.    3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25),恰好等于3025本身。请求出具有这样性质的全部四位数。
     
    int x=0,y=0;
    for(int data=1000;data<10000;data++)
    {
        x=data%100;
        y=data/100%100;
        if (data==(x+y)*(x+y)) {
            printf("%d\n",data);
        }
    }

 8.    求一个 3×3矩阵两条对角线上元素之和(每个元素只加一次)。
    
    int a[3][3]={0};
    for (int i=0; i<3; i++)
    {
        for (int j=0; j<3; j++)
        {
            a[i][j]=rand()%10;
        }
    }
    
    int sum=0;
    for (int i=0; i<3; i++)
    {
        for (int j=0; j<3; j++)
        {
            if (i==j || i+j==2)
            {
                sum +=a[i][j];
            }
        }
    }
    
    for (int i=0; i<3; i++)
    {
        for (int j=0; j<3; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    printf("对角线的和为sum=%d",sum);
     9.    打印如下形式的杨辉三角形
     1
     1   1
     1   2   1
     1   3   3   1
     1   4   6   4   1
     1   5   10  10  5   1
     输出前10行,从 0行开始,分别用一维数组和二维数组实现。
     
    int a[10][10]={0};
    for (int i=0; i<10; i++)
    {
        for (int j=0; j<=i; j++)
        {
            if (j==0 || i==j)
            {
                a[i][j]=1;
            }
            else
            {
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
            printf("%6d",a[i][j]);
        }
        printf("\n");
    }
    10.    有一个二维数组整型数组中,每一行都有一个最大值,编程求出这些最大值以及它们的和。
     
    int a[5][5]={0};
    for (int i=0; i<5; i++)
    {
        for (int j=0; j<5; j++) {
            a[i][j]=rand()%10;
        }
    }
    for (int i=0; i<5; i++)
    {
        for (int j=0; j<5; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    int max=0,sum=0;
    for (int i=0; i<5; i++)
    {
        max=a[i][0];
        for (int j=1; j<5; j++)
        {
            if (max<a[i][j])
            {
                max=a[i][j];
            }
        }
        printf("第%d行的最大值是%d\n",i+1,max);
        sum +=max;
    }
    printf("最大值的和为%d\n",sum);
     2.    有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
    
    int a[10]={0};
    for (int i=0;i<10; i++) {
        a[i]=rand()%100;
        printf("%4d",a[i]);
    }
    int min=0;
    int k=0;
    min=a[0];
    for (int i=1; i<10; i++)
    {
        if (min > a[i]) {
            min=a[i];
            k=i;
        }
    }
    printf("\nk=%d,min=%d\n",k,min);
    if(k!=0)
    {
        a[0]=a[0]+a[k];
        a[k]=a[0]-a[k];
        a[0]=a[0]-a[k];
    }
    for (int i=0;i<10; i++) {
        printf("%4d",a[i]);
    }
     
     
     
     1.    在数组中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max和min中。
     void find(int *a,int n ,int *max,int *min)
     {
     int i;
     *max=*min=0;
     for(i=1;i<n;i++)
     if(a[i]>a[*max])
     {
     *max=i;
     }
     else if(a[i]<a[*min])
     {
     *min=i;
     }
     return;
     }
     
     int a[7]={5,8,7,6,2,7,3};
     int max,min;
     find(a,7,&max,&min);
     printf("%d,%d\n",max,min);


0 0
原创粉丝点击