C语言程序设计|PTA|第2章 用C语言编写程序

一、PTA习题详解

练习2-1 Programming in C is fun! – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    printf("Programming in C is fun!");
    
    return 0;
}

练习2-3 输出倒三角图案 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    printf("* * * *\n");
    printf(" * * *\n");
    printf("  * *\n");
    printf("   *");
    
    return 0;
}

练习2-4 温度转换 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int fahr=150;
    int cels=5*(fahr-32)/9;

    printf("fahr = %d, celsius = %d",fahr,cels);
        
    return 0;
}

练习2-6 计算物体自由下落的距离 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>             //  包含常见数学计算函数sqrt() pow()等

#define G_CONSTENT 10    // 宏定义常量 

int main(){
    int time=3;
    double height=0.5*G_CONSTENT*pow(time,2);
    // %.2f表示保留两位小数(具有四舍五入特性) 默认保留六位小数
    printf("height = %.2f",height);
    
    return 0;
}

练习2-8 计算摄氏温度 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int fahr;
    scanf("%d",&fahr);          // &记得加上

    int celsius=5*(fahr-32)/9;

    printf("Celsius = %d",celsius);
    
    return 0;
}

练习2-9 整数四则运算 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int a,b;
    scanf("%d %d",&a,&b);

    printf("%d + %d = %d\n",a,b,a+b); 
    printf("%d - %d = %d\n",a,b,a-b); 
    printf("%d * %d = %d\n",a,b,a*b); 
    printf("%d / %d = %d",a,b,a/b); 
    
    return 0;
}

练习2-10 计算分段函数[1] – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

// 返回:分段函数的函数值
double func(double x){
    double result=0;
    if(x!=0){
        result=1/x;
    }
    return result;
}

int main(){
    double x;           // 浮点使用double不使用float
    scanf("%lf",&x); // double占位符为%lf

    double result=func(x);

    printf("f(%.1f) = %.1f",x,result);
    
    return 0;
}

练习2-11 计算分段函数[2] – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>

// 返回:分段函数的函数值
double func(double x){
    double res;
    if(x>=0){
        res=sqrt(x);
    }else{
        res=pow(x+1,2)+2*x+1/x;
    }
    return res;
}

int main(){
    double x;
    scanf("%lf",&x);

    double result=func(x);

    printf("f(%.2f) = %.2f",x,result);
    
    return 0;
}

练习2-12 输出华氏-摄氏温度转换表 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int lower,upper;
    scanf("%d %d",&lower,&upper);
    if(lower>upper || upper>100){
        printf("Invalid.");
        return 0;
    }
    // 输出表头
    printf("fahr celsius\n");
    // 输出表体
    for(int fahr=lower;fahr<=upper;fahr+=2){
        // 强制类型转换 防止整型运算造成的截断
        double celsius=5*((double)fahr-32)/9;
        // %6.1f表示占据六个字符宽度(默认靠右),保留1位小数
        printf("%d%6.1f\n",fahr,celsius);
    }
    
    return 0;
}

练习2-13 求N分之一序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);

    double result=0;
    for(int i=1;i<=n;++i){
        // 1.0保证是浮点数除法
        result+=1.0/i;
    }

    printf("sum = %.6f",result);
    
    return 0;
}

练习2-14 求奇数分之一序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);

    double result=0;
    for(int i=1;i<=n;++i){
        result+=1.0/(2*i-1);
    }

    printf("sum = %.6f",result);
    
    return 0;
}

练习2-15 求简单交错序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);

    double result=0;
    int flagCur=-1;
    double numAbsCur;
    for(int i=1;i<=n;++i){
        numAbsCur=1.0/(3*i-2);
        flagCur*=-1;
        result+=flagCur*numAbsCur;
    }

    printf("sum = %.3f",result);
    
    return 0;
}

练习2-17 生成3的乘方表 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>

int main(){
    int n;
    scanf("%d",&n);

    for(int i=0;i<=n;++i){
        // 强制类型转换保证将pow()函数计算的double转化为long
        printf("pow(3,%d) = %ld\n",i,(long)pow(3,i));
    }
    
    return 0;
}

练习2-18 求组合数 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

// 返回:n的阶乘n!
double fact(int n){
    double result=1;
    if(n==0 || n==1){
        return result;
    }
    for(int i=2;i<=n;++i){
        result*=i;
    }
    return result;
}

int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    
    double result=fact(n)/(fact(m)*fact(n-m));

    // %.0f保留整数(四舍五入)
    printf("result = %.0f",result);
    
    return 0;
}

习题2-1 求整数均值 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int nums[4];
    for(int i=0;i<4;++i){
        scanf("%d",&nums[i]);
    }
    // 求和
    int sum=0;
    for(int i=0;i<4;++i){
        sum+=nums[i];
    }
    // 求均值
    double average=sum/4.0;

    printf("Sum = %d; Average = %.1f",sum,average);
    
    return 0;
}

习题2-2 阶梯电价 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#define PRICE_BASIC 0.53
#define PRICE_EXTRA 0.05

// 计算电费
double price(double elec){
    double result=0;
    // 阶梯收费
    result+=PRICE_BASIC*elec;
    if(elec>50){
        result+=PRICE_EXTRA*(elec-50);
    }
    return result;
}

int main(){
    double elec;
    scanf("%lf",&elec);
    if(elec<0){
        printf("Invalid Value!");
        return 0;
    }
    
    double pri=price(elec);

    printf("cost = %.2f",pri);
    
    return 0;
}

习题2-3 求平方与倒数序列的部分和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    // 求平方与倒数序列的部分和
    double sum=0;
    for(int i=m;i<=n;++i){
        sum+=i*i+1.0/i;
    }

    printf("sum = %f",sum);
    
    return 0;
}

习题2-4 求交错序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    // 求交错序列的和
    double sum=0;
    int flag=-1;
    for(int i=1;i<=n;++i){
        flag*=-1;
        sum+=flag*(double)i/(2*i-1);
    }

    printf("%.3f",sum);
    
    return 0;
}

习题2-5 求平方根序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>

int main(){
    int n;
    scanf("%d",&n);

    double sum=0;
    for(int i=1;i<=n;++i){
        sum+=sqrt(i);
    }

    printf("sum = %.2f",sum);
    
    return 0;
}

习题2-6 求阶乘序列前N项和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

// 返回:正整数的阶乘
double fact(int n){
    if(n==0 || n==1){
        return 1.0;
    }
    double result=1.0;
    for(int i=2;i<=n;++i){
        result*=i;
    }
    return result;
}

int main(){
    int n;
    scanf("%d",&n);
    // 求阶乘序列的和
    double sum=0;
    for(int i=1;i<=n;++i){
        sum+=fact(i);
    }

    printf("%.0f\n",sum);
    
    return 0;
}

TO BE CONTINUED

发表评论