中国科学技术大学C语言上机操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机操作11
实验目的:
1. 函数与递归
2. 程序设计实例
3. 程序调试
实验操作
1. 若
2...222项共n a n +++=,
编制程序求10050,20105,,,a a a a a ,该数列是否存在极限,若存在请求出并进行验证。(提示:定义函数double a(int n))
2. fun(int x){
if(x/2>0) fun(x/2-2);
printf("%d ",x);}
main(){
fun(20);
printf("\n");}
运行结果是 。
A )20 8 2 -1
B )2 8 20
C )8
D )-1 2 8 20
3. #include
#include
double mysqrt(double a,double x0){
double x1,y;
x1=0.5*(x0+a/x0);
if(fabs(x1-x0)>0.00001) y=mysqrt (a,x1);
else y=x1;
return y;}
int main(){
double x;
printf("Enter x: ");
scanf("%lf",&x);
printf("The sqrt of %f=%f\n",x,mysqrt(x,1.0));}
上述程序是应用递归算法求某数a 的平方根,请填空。求平方根的迭代公式如下:
)(210
01x a x x += 4. (简易计算器)假定它从键盘上读入如下形式的输入行:
128+365
254+1438
程序每读入一个形式正确的行之后就计算并输出结果,直到用户要求结束。
#include
#include
using namespace std;
int main(){
int left,right;
printf("Small Calculateor\n");
printf("Any no-digit character to stop.\n");
while(scanf("%d",&left)==1){
if(getchar()!='+'||scanf("%d",&right)!=1){
printf("Format incorrect.Format:nnnn+mmmm\n");
while(getchar()!='\n') /*丢掉本行剩余字符*/
;
}
printf("%d+%d=%d\n",left,right,left+right);
}
system(“pause”);
}
进一步思考:如何实现其他计算功能?
注:本章中的输入命令采用EOF文件结束标志方法暂时实现不了,要等到学完文件操作后才有可能使用到。
5.程序调试:编程包括编制代码和调试程序两部分,其中调试占用2/3时间强,可见其重
要性,对于初学者而言,要做到如下几点可以最大程度减少程序出错的可能性:
a)如果看不到程序里面的错误,请先将程序的格式整理好。
b)注意不同数据类型混合计算可能出现的意外结果,并避免除零现象
c)如果不知道循环在干什么,何不在循环体中加上循环内容的输出呢。
上机操作12
实验目的:
4.数据类型
5.随机数函数应用
6.函数形参和实参
7.函数原型和声明
8.常量定义
实验操作
6.下列哪条在书写数65上不是合法的方式?
…A‟0b1000001 0101 0x41
7.假设程序包含下列声明:
char c='\1';
short int s=2;
int i=-3;
long int m=5;
float f=6.5;
double d=7.5;
请给出下列每个表达式的值和类型。
a) c*i b) f/c c) f-d
d) s+m e) d/s f) (int)f
8.请定义函数判断一个点与坐标原点的距离是否小于1,是否在单位圆内。借助这一函数
写一个通过随机模拟(Monte Carlo)方法计算圆周率值的程序:每次计算机生成两个0到1之间的实数(利用标准库的随机数生成函数产生这种实数),看这两个值形成的点是否在单位圆内。生成一系列随机点,统计位于单位圆内的点数与总点数,看它们之比的4倍是否趋向圆周率值。请生成100,200,…,1000,10000个数据点做试验。
#include
#include
int incircle(double x,double y){ return x*x+y*y<=1.0?1:0; } //判断点(x,y)是否在单位圆内int main(){
int i,n,m=0; //m代表落在单位圆内的点数,初始值为0;n代表模拟的次数
double x,y;
printf("enter the max simulation times: ");
scanf("%d",&n);
srand(99); //初始化种子,这里设定为99,可以自行调整
for(i=1;i<=n;i++){
x=rand()/32767.0;
y=rand()/32767.0;
m+=incircle(x,y);
}
printf("the estimate of pi is %f among %d simulation times\n",4.0*m/n,n);
}
(注:该法原理来自一正方形中点落在其最大内切圆内的概率是圆和正方形的面积之比,为什么?)9.假设函数f有下列定义:int f(int a, int b){……},那么下列哪条语句是合法的?(假设i
的类型为int而x的类型为float。)
a)i=f(83,12);
b)x=f(83,12);
c)i=f(3.15,9.28);
d)x=f(3.15,9.28);
e)f(83,12);
10.对于返回为空且有一个float型形式参数的函数,下列哪个函数原型是有效的?
a)void f(float x);
b)void f(float);
c)void f(x);
d)f(float x);
11.下列计算三角形面积的函数有两处错误,找出这些错误,并且说明修改它们的方法。(提
示:公式没有错误)
float triangle_area(float base,height)
float product;{
product=base*height;