文章目录
- [一、 实验目的和要求](#一、 实验目的和要求)
- 二、实验环境(实验设备)
- 三、实验原理及内容
-
- 实验题目(1):编写程序exp1_1.c,求阶乘问题。
- [实验题目(2):编写程序exp1_2.c,计算摄氏温度26°C 对应的华氏温度。](#实验题目(2):编写程序exp1_2.c,计算摄氏温度26°C 对应的华氏温度。)
- 实验题目(3):编写程序exp1_3.c,计算分段函数。
- 实验题目(4):编写程序exp1_4.c,生成3的乘方表。
一、 实验目的和要求
(1)初识C语言上机环境,学会编辑、编译、链接并运行程序,查找并修改简单的语法错误。
(2)正确调用输入输出处理的函数scanf( )、printf( )进行数据的I/O,观察输出格式,掌握键盘输入方法。
(3)初步认识顺序、分支、循环结构。
(4)需在PTA在线测评通过程序。
二、实验环境(实验设备)
硬件:微型计算机
在线平台:PTA
自备软件:VS / VS Code / Dev-C++ / 等
三、实验原理及内容
实验准备:在D盘上建立以自己学号命名的文件夹(例如:B25040101)(以后实验的所有文件存于此文件夹下);进入VS(或其他)集成开发环境,建立一个C项目,然后向该项目中以新建方式添加一个源文件,实验一的第1题可取名为:exp1_1.c,实验二的第3题可取名为:exp2_3.c等。
实验内容:实验一的题目选自实验指导书的实验1和实验2。
补充说明:先在自己电脑完成程序,自行准备多组数据进行运行测试,可使用调试工具;将已完成的代码复制到PTA平台相对于的实验作业集进行在线测评。
实验题目(1):编写程序exp1_1.c,求阶乘问题。
输入一个正整数n,输出n!。
实验解答:
源程序代码如下:
c
#include<stdio.h>
int main(void)
{
int N,i,prt;
scanf("%d",&N);
prt=1;
for(i=1;i<=N;i++){
prt=prt*i;
}
printf("%d",prt);
return 0;
}
程序运行及分析:
1)运行程序,输入6,输出结果为720。
2)运行程序,输入12,输出结果为479001600。
3)运行程序,输入20,输出结果为-2102132736。这个结果错误。
思考该问题: 20的阶乘结果太大,超出了int型最大表示位数。
实验题目(2):编写程序exp1_2.c,计算摄氏温度26°C 对应的华氏温度。
计算公式:
F = 9 5 C + 32 , F=\frac{9}{5}C+32, F=59C+32,
式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
输出格式:celsius = 26, fahr = 对应的华氏温度整数值
实验解答:
源程序中,如定义 int C=26 , F;
计算公式表达为:F = 9 * C / 5 + 32;
运行程序,输出结果为celsius = 26, fahr = 78。这个结果正确。
源程序中,如定义 int C=26 , F;
计算公式表达为:F = 9 / 5 * C + 32;
运行程序,输出结果为celsius = 26, fahr = 58。这个结果错误。
在数学中上面计算公式×与÷的顺序颠倒,结果是一样的,C语言中不可以颠倒。
思考该问题:这题出得有点问题吧,结果不一样啊,fahr=58输出的结果虽然不符合要求,但是计算过程是正确的,只是计算时精确度不一样。因为计算过程中所有数值为int型,所以在计算除法时会出现误差。
先乘后除时除法为234/5,等于46余4,舍去余数得46;
先除后乘时9/5=1余4舍去余数得1,再乘26得26。
源程序中,如定义 int C=26 ; double F; ,输出格式与要求不变,源程序代码如下:
c
#include<stdio.h>
int main(void)
{
int C,fahr;
double F;
C = 26;
F = 9.0 * C / 5 + 32;
fahr = F;
printf("celsius = %d, fahr = %d", C, fahr);
return 0;
}
实验题目(3):编写程序exp1_3.c,计算分段函数。
输入实数x,计算并输出下列分段函数f(x)的值(保留2位小数)。请调用函数sqrt()求平方根。
f\left(x\right)=x+12+2*x+1xx x≥0 x<0
输入输出格式如下所示:
输入示例:-0.5
输出示例:f(-0.50)=-2.75
实验解答:
源程序代码如下:
c
#include<stdio.h>
#include<math.h>
int main(void)
{
double x,y;
scanf("%lf",&x);
if(x<0){
y=pow(x,2)+2*x+1/x;
}else{
y=sqrt(x);
}
printf("f(%.2lf)=%.2lf",x,y);
return 0;
}
程序运行结果:
1)运行程序,输入10,输出结果为f(10.00)=3.16。
2)运行程序,输入-0.5,输出结果为f(-0.50)=-2.75。
3)运行程序,输入0,输出结果为f(0.00)=0.00。
实验题目(4):编写程序exp1_4.c,生成3的乘方表。
输入一个非负整数n,生成一张3的乘方表,输出30 到 3n的值。可调用函数pow()求乘方,注:该函数返回值为double类型。
输入输出格式如下所示:
输入示例:3
输出示例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
源程序代码如下:
c
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,i,y;
scanf("%d",&n);
y=0;
for(i=0;i<=n;i++){
y=pow(3,i);
printf("pow(3,%d) = %d\n",i,y);
}
return 0;
}
程序运行结果截图:
