计算机科学与技术第4次上机实验.docx

上传人:b****3 文档编号:10926551 上传时间:2023-05-28 格式:DOCX 页数:14 大小:129.66KB
下载 相关 举报
计算机科学与技术第4次上机实验.docx_第1页
第1页 / 共14页
计算机科学与技术第4次上机实验.docx_第2页
第2页 / 共14页
计算机科学与技术第4次上机实验.docx_第3页
第3页 / 共14页
计算机科学与技术第4次上机实验.docx_第4页
第4页 / 共14页
计算机科学与技术第4次上机实验.docx_第5页
第5页 / 共14页
计算机科学与技术第4次上机实验.docx_第6页
第6页 / 共14页
计算机科学与技术第4次上机实验.docx_第7页
第7页 / 共14页
计算机科学与技术第4次上机实验.docx_第8页
第8页 / 共14页
计算机科学与技术第4次上机实验.docx_第9页
第9页 / 共14页
计算机科学与技术第4次上机实验.docx_第10页
第10页 / 共14页
计算机科学与技术第4次上机实验.docx_第11页
第11页 / 共14页
计算机科学与技术第4次上机实验.docx_第12页
第12页 / 共14页
计算机科学与技术第4次上机实验.docx_第13页
第13页 / 共14页
计算机科学与技术第4次上机实验.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机科学与技术第4次上机实验.docx

《计算机科学与技术第4次上机实验.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术第4次上机实验.docx(14页珍藏版)》请在冰点文库上搜索。

计算机科学与技术第4次上机实验.docx

计算机科学与技术第4次上机实验

哈尔滨工程大学

《程序设计基础》实验报告

基础实践一

 

姓名:

麦豆班级:

学号:

实验时间:

2018年5月3日

 

成绩

哈尔滨工程大学计算机基础课程教学中心

实验题目1:

写一个函数,Sn=a+aa+aaa+···+aa···a

求多项式的前n项和,其中a是一个数字。

n由键盘输入。

 

设计思想:

声明函数sum,利用循环求得sum最终值并返回sum值

 

实验代码及注释:

#include

intsum(inta,intn);//sum函数声明

intmain()

{

intn;

inta;

printf("请输入a,n:

\n");

scanf("%d%d",&a,&n);

printf("前%d项和为%d\n",n,sum(a,n));//调用函数sum

return0;

}

intsum(inta,intn)

{

intsum=0;

inti;

intcount;

count=0;

for(i=1;i<=n;i++)

{

count=count*10+a;//每次乘10加a

sum=sum+count;

}

returnsum;

}

验证与结论:

 

总结与心得体会:

声明函数时后面一定要有分号,但写函数时不需要。

实验题目2:

编程实现求10000以内的回文数。

其中,函数实现判断任一正整数是否为回文数。

所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如121和1331都是回文数。

 

设计思想:

声明judje函数,判断number是否为回文数。

在函数内部先判断数字number位数,由于回文数为对称结构,故通过位数来确定判断次数,每次判断数字首位与个位然后去掉首位与个位再次判断直至循环结束。

另外需要对个位数另行判断,个位数一定为回文数。

如果为回文数返回1,否则返回0。

 

实验代码及注释:

#include

#include

intjudje(intnumber);//声明judje函数

intmain()

{

inti;

for(i=0;i<10000;i++)

{

if(judje(i)==1)//judje为1的数输出

printf("%d\t",i);

}

return0;

}

intjudje(intnumber)//判断number是否为回文数

{

intjudje,i=0,middle_number,parity,j;//回文数判断变量,数字位数,数字位数中间变量,数字位数奇偶

intmiddle_number2;//取掉首位个位剩余数

intshouwei,gewei;//首位,个位

middle_number2=number;//全部赋初值

middle_number=number;

do//判断数字位数

{i++;

middle_number=middle_number/10;//对数字除以10直到为0

}

while(middle_number!

=0);

parity=i/2;//运算次数

for(j=1;j<=parity;j++)

{

shouwei=middle_number2/pow(10.0,(double)(i-2*j+1));//首位数字

gewei=middle_number2%10;//个位数字

middle_number2=(middle_number2-shouwei*pow(10.0,(double)(i-2*j+1)))/10;//将首位与个位去除后剩余的数

if((shouwei==gewei)&&j==parity)//个位与首位相等且都已比较完成

{

judje=1;//1为真

}

elseif(shouwei!

=gewei)

{

judje=0;

break;

}

}

if(parity==0)//如果为个位数一定为回文数

judje=1;

returnjudje;

}

 

验证与结论:

 

总结与心得体会:

通过函数可以使代码更加简洁,流程更加清晰。

 

实验题目3:

假设你每月在储蓄账户上存100元,年利率是5%,则每月的利率是0.05/12=0.00417。

第一个月后,账户上的值变成100*(1+0.00417)=100.417;第二个月后,账户上的值变成(100+100.417)*(1+0.00417)=201.252;第三个月后,账户上的值变成(100+201.252)*(1+0.00417)=302.507,以此类推。

写一个函数,根据用户输入的每月的存款数、年利率和月份数,计算给定月份后账户上的钱数。

 

设计思想:

声明final_money,由题意可知每个月钱数为上个月钱数加每月存的钱数乘以每月利率,在函数内部由循环得到钱数,返回final_money。

 

实验代码及注释:

#include

doublefinal_money(doublemoney,doublelilv,intn);//函数声明

intmain()

{

doublemoney,lilv;//每月存款数,年利率

intn;//月份

printf("请输入每月存款数、年利率和存款月份数(以空格隔开):

\n");

scanf("%lf%lf%d",&money,&lilv,&n);

printf("账户上的剩余钱数为%.3lf",final_money(money,lilv,n));

return0;

}

doublefinal_money(doublemoney,doublelilv,intn)//存款数、年利率和月份数

{

doublefinal_money=0;//赋初值

inti;//循环变量

for(i=1;i<=n;i++)

{

final_money=(final_money+money)*(1+lilv/12);//表达式

}

returnfinal_money;//返回钱数

}

 

验证与结论:

 

 

总结与心得体会:

函数参数可以是多个但返回值只有一个。

 

实验题目4:

用递归法将一个整数n转换成字符串。

例如,输入483,应输出的字符串“483”,n的位数不确定,可以是任意位数的整数。

设计思想:

声明函数,在函数将数每次除以10反复递归调用直到为0,而余数加上'0'可以产生相应的字符。

实验代码及注释:

#include

voidchange(intn);

intmain()

{

intn;

printf("请输入整数n:

");

scanf("%d",&n);

printf("输出相应字符串:

");

if(n<0)

{putchar('-');//先输出一个‘-’号

n=-n;//转化为正值

}

change(n);

printf("\n");

return0;

}

voidchange(intn)

{

inti;

i=n/10;

if(i!

=0)

change(i);//对n每次除以10反复递归调用直到为0

putchar(n%10+'0');//余数加上'0'可以产生相应的字符

}

验证与结论:

 

总结与心得体会:

余数可以加上48来得到相应的字符但加’0’会更加简单。

函数递归必须要有限制条件,转换字符串函数限制条件就是i为0。

实验题目5:

用递归方法求n阶勒让德多项式的值。

设计思想:

直接利用函数递归,当阶数值为o返回1,阶数值为1返回输入的数。

另外阶数值在递归时需要强制转换为float类型,否则式子计算为整型数。

 

实验代码及注释:

#include

floatnumber(floatx,intn);//函数声明

intmain()

{

intn;//阶数

floatx;//循环变量充当输入的数

printf("请输入x值和阶数:

\n");

scanf("%f%d",&x,&n);

printf("%.2f\n",number(x,n));

return0;

}

floatnumber(floatx,intn)

{

if(n==0)

{

return1;

}

elseif(n==1)

returnx;

return(2*n-1)*x*number(x,n-1)/(float)n-(n-1)*number(x,n-2)/(float)n;//递归求n阶勒让德多项式注意n为整数需要强制转换

}

验证与结论:

 

总结与心得体会:

递归是c语言中最基础也是极为重要的算法,核心是函数自身对自身的调用。

注意整型除以整型仍为整型,故需要对阶数值强制转换。

实验题目6:

编程求20以内正整数的阶乘。

要求:

写一函数求任一整数的阶乘,在函数内部通过定义静态局部变量求阶乘。

设计思想:

声明一个factorial函数,在函数内部定义静态变量,利用循环求阶乘值,由于局部静态变量会保留上一次运行的值,故求20以内正整数的阶乘只能调用一次factorial函数,求19的阶乘然后利用循环从19往下输出直到1的阶乘。

 

实验代码及注释:

#include

longlongfactorial(intnumber);//函数声明

intmain()

{

inti=19;

longlongx;//数据极大必须用longlong数据类型

x=factorial(i);//仅调用一次函数

//printf("%ld",x);

for(i=19;i>0;i--)

{

printf("%d!

是%lld\n",i,x);//longlong用%lld输出

x/=i;//除掉之后多余的数的到当前i的阶乘

}

return0;

}

longlongfactorial(intnumber)//求任意整数阶乘函数

{

staticlonglongy=1;//静态变量只赋一次初值以后函数调用会保留上一次的值

inti;

for(i=1;i

{

y=y*(i+1);//用循环求阶乘

}

returny;//返回阶乘值

}

 

验证与结论:

 

总结与心得体会:

局部静态变量会保留上一次运行的值,故在此题中只调用了一次函数.另外由于10以上阶乘数极大,声明类型时用了longlong类型。

 

 

实验题目7:

编程实现两个整形变量内容互换。

用带参数的宏实现变量内容的交换。

 

设计思想:

直接用带参数的宏充当函数来对两个整型变量交换。

 

实验代码及注释:

#include

#definechange(x,y)mid=x;\

x=y;\

y=mid//宏定义两个整形变量内容互换

intmain()

{

intx,y,mid;

printf("请输入xy的值:

\n");

scanf("%d%d",&x,&y);

bet赌betbetchange(x,y);//宏

will将would×printf("替换后xy值%d\t%d",x,y);

drive驾驶drovedrivenreturn0;

}

不规则动词表

beat击打beatbeaten

 

验证与结论:

 

show显露showedshowed/shown

meet遇到metmet

 

run跑ranrun总结与心得体会:

带参数的宏可以充当函数来使用,由于宏不是语句,末尾不能加分号。

宏对参数类型不做检查,是优点也是缺点,在使用时要注意。

 

steal偷stolestolen

sing唱歌sangsung

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2