一、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