10 11学年第二学期程序设计实验教案new
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10 11学年第二学期程序设计实验教案new
10-11学年第二学期程序设计实验教案new
1.输入并运行下面最简单的c程序。
(1)输出helloworld字符串。
#include
mian(){printf(\
(3)2.5+2*7%2/4#includeintmain()
{printf(\return0;
}
(4)3*(int)sqrt(34)-sin(6)*5+0x2af#include#include
intmain()
{printf(\-sin(6)*5+0x2af);return0;}
(5)4.5+8%5*(int)(2.7+4.5)/2%4#include#includeintmain()
{printf(\resultis%f\\n\+8%5*(int)(2.7+4.5)/2%4);return0;}
3编程排序5x2?2x?6的两个根。
提示:对这个具体问题,可以先人工计算出判别式的值,以此作为已知信息就可以编程程序了。
将输入的文件存盘。
通过build菜单或适当的工具按钮对程序展开编程和相连接。
继续执行相连接后的程序。
#includeintmain()
{printf(\}
return0;
(2)输出并运转谋三个数之和的程序。
#include
mian()
{printf(\}
输出该程序并计算机上安装,然后展开编程和没了
接,如果出错,进行调试,直到无错为止。
运行程序,并查看运行结果,判断结果正确与否。
修正输入格式和三个数据,再次编程、相连接和运转程序,分析运转结果。
#includeintmain()
{printf(\}
return0;
#include#includeintmain()
{doublediat=2*2-4*5*6;printf(\-2/2.0/5,sqrt(-diat)/2.0/5,-2/2.0/5,-sqrt(-diat)/2.0/5);
return0;}1定义谋圆球的体积、表面积,谋圆柱体的体积、表面积的函数。
#include#definepi3.141593#definesquare(r)r*r
#definecubic(r)r*r*r
doublecircle_volume(doubler){return4/3.0*pi*cubic(r);}
doublesurfacearea(doubler){return4.0*pi*square(r);
1
2.编程计算表达式的值。
(1)
120024?4?5
include
intmain()
{printf(\return0;}
(2)#include#includeintmain()
{printf(\resultis%f\\n\*3.141593*sqrt(13+pow(2.718282,2.0))));return0;}
}
doublecylinder_volume(doubler,doubleh){returnpi*square(r)*h;}
doublecylinder_sfarea(doubler,doubleh){return2.0*pi*r*(r+h);}
1.定义函数:doubletmax(double,double,
double),它回到三个参数中最小的一个。
写下一个主函数试验各种参数情况。
include
doubletmax(doublea,doubleb,doublec){doublemax;}intmain(){doublex,y,z;
printf(\scanf(\
printf(\,z));return0;
max=a;
if(b>max)max=b;if(c>max)max=c;returnmax;
printf(\}
intmain(){print6or7();print();
return0;}
3.scanf函数输入一个百分制成绩,输出成绩
等级a、b、c、d、e,其中90~100分成
a,80~89分为b,70~79分为c,60~69分为d,60分以下分为e。
建议百分制成绩用整数输出,在输出前必须存有提示信息,输出后必须推论成绩的合理性,对不合理的成绩,应当输入失效信息。
输入结果中应当包含百分制和等级成绩,并要存有文字说明。
采用if语句和switch语句分别同时实现。
#include/*intifelse_stru(){
intscore;printf(\scanf(\printf(\
while((score<0)||(score>100))
{printf(\error!pleaseinputone
input
one
score(0-100):\
}
2.请写一个程序,它打印出1到100之间被
6或者7相乘的所有的数;修正这个程序,并使它列印出来1至100之间只被6或者7之
一整除的数(不包括同时被两者整除的那些数)。
#includevoidprint6or7(){inti;}
voidprint(){inti;
score(0-100):\
scanf(\}if(score>=90)
printf(\elseif(score>=80)
printf(\elseif(score>=70)
printf(\
elseif(score>=60)
printf(\else
printf(\
2
for(i=1;i<=100;++i)if((i%6==0)||(i%7==0))printf(\printf(\
for(i=1;i<=100;++i)
if(((i%6==0)||(i%7==0))&&(ib!=0))printf(\
return0;
}*/
intswitch_stru(){intscore;printf(\score(0-100):\
input
one
returnsum;}
intmain()
{longk,i;doublesum=0.0;
printf(\scanf(\printf(\
while(k<1)
{printf(\valueerror!pleaseinputkvalue(k>=1)again:\
}
scanf(\printf(\
scanf(\printf(\
while((score<0)||(score>100)){printf(\error!pleaseinputone score(0-100):\
scanf(\
}
switch(score/10){case
10:case
9:printf(\
case8:printf(\case7:printf(\
case
6:printf(\
default:printf(\
for(i=1;i<=k;++i){sum+=jiecheng(i);
}
printf(\
printf(\
}
5.考虑不用函数(例如isprime)直接写出对
6~200的偶数检验哥德巴赫猜想的程序(利用循环、条件、break语句等,不采用goto语句)。
将这样写下的程序与用定义函数的方式写下的程序比较。
比如实地考察两个函数的行数、字节数,其中各种控制结构的嵌套深度,控制结构采用的个数等。
#include
intmain()
{intn,m,k,misprime,nmisprime;/*misprime=0,m不是素数,否则m是素数;nmisprime=0,(n-m)不是素数,否则(n-m)是素数*/
for(n=6;n<=200;n+=2)for(m=3;m<=n/2;m+=2){for(k=2;k*k<=m;++k)/*推论m与否素数*/
{if(m%k==0)
{misprime=0;break;}
misprime=1;
e');break;
}
return0;}
intmain(){
ifelse_stru();
switch_stru();return0;}
4.写下函数排序1!+2!+...+k!。
用主函数先行
验函数对一系列k值计算出的结果。
你写出的函数对1到10计算结果都正确吗?如果出现错误,弄清楚是什么原因。
这个程序能对k=30得到正确结果吗?(另外,你能只用一重循环完成函数的定义吗?)#include
doublejiecheng(longk){doublesum=1.0;longi;
for(i=1;i<=k;++i)sum*=i;
3
}
for(k=2;k*k<=(n-m);++k)/*判
断(n-m)是否素数*/
{
if((n-m)%k==0)
{nmisprime=0;break;
cmn?n!(n?m)!m!
建议:
(1)编写一个函数计算n!
(2)撰写主函数,由键盘输入n和m,调用(1)中的函数顺利完成排序。
(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。
(4)运转程序并排序c8、c7、c8、c7、
5217}
nmisprime=1;
}if(misprime&&nmisprime){printf(\
=
%d
+%d\\n\break;
}}return0;}
1.编写程序,设计一个辨别素数的函数,在主函数中输出一个整数,调用这个判别函数,并输入与否为素数的信息。
#include
intisprime(intn)/*推论一个数与否为素数*/{intm;
for(m=2;m*m<=n;++m)if(n%m==0)return0;/*发现因子,不是素数*/return1;/*所有可能性均考虑过,没有因子,是素数*/}
intmain(){intn;
printf(\while(scanf(\{while(getchar()!='\\n');printf(\incorrect.anagain.\}
if(isprime(n))
printf(\else
printf(\
is
not
a
prime
c08。
#include
longfact(intn)/*计算阶乘*/{returnn==0?1:n*fact(n-1);}intmain(){intn,m; printf(\while(scanf(\!=2||((n<0)||(m<0)||(n<m)))
{while(getchar()!='\\n');printf(\incorrect.twointeger
again(n>m>=0):\}printf(\=%d,m=%d,cnm=%d\\n\return0;
}
3.将一个正整数n以恰好相反的顺序输入的递回算法可以如下叙述:如果要输出的整数只有一位则输出该整数否则输出整数的个位数字结束
逆向输入除个位以外的全部数字
integer
据此算法设计的递回算法如下:voidprintn(intn)
{if((n>=0)&&(n<=9))printf(\else
{printf(\printn(n/10);
number.\\n\return0;
}
2.编写程序,计算下面公式并输出结果。
4
}}
恳请撰写主程序,调用上述算法,逆向输入正整数n。
例如输出123,则输入321。
#include
intprintn(intn)
if((n>=0)&&(n<=9))
printf(\else
{printf(\
return0;}
intmain(){
isdaffodil();
}
1.设计程序按步骤完成下列任务:
(1)撰写函数sort,同时实现对整数数组排序的
功能,具体排序方法自己选择。
(2)主函数中,定义数组并使用初始化方
法得出数组初值。
测试数据为{16,5,8,12,1,17,3,6,10,2}。
(3)主函数中调用sort函数实现对测试数
据排序的功能。
建议分别列印出来排序前后数组元素的值。
#includeintsort(intlength,intarr[]){inti,j,t;
for(j=0;j<length-1;++j)
interger
for(i=0;i<length-1-j;++i)
if(arr[i]>arr[i+1]){t=arr[i];arr[i]=arr[i+1];}
arr[i+1]=t;
printn(n/10);}return0;}
intmain(){intn;
printf(\
while(scanf(\{while(getchar()!='\\n');
incorrect.an
printf(\again:\
}
printf(\printf(\printn(n);printf(\return0;
}
5.编程打印所有“水仙花数”。
(一个三位的
十进制数,其三个数位的数字之立方和等同于这个数,表示其为水仙花
数)#includeintisdaffodil(){inti,a,b,c;
for(i=100;i<1000;++i){a=i/100;i)
printf(\for(i=0;i<length;++i)printf(\printf(\
return0;}
intmain()
{inti,n,array[]={16,5,8,12,1,17,3,6,10,2};n=sizeof(array)/sizeof(array[0]);pri ntf(\
for(i=0;i<n;++i)
printf(\printf(\
b=(i-100*a)/10;
c=i%10;
if((a*a*a+b*b*b+c*c*c)==
printf(\
sort(n,array);return0;
5
}
putchar('\\n');
2.
下面程序实现将一个字符串倒置的功能,编写程序,从键
strcpy(arr1,arr);
daozhi(arr);
盘拒绝接受一个字符串,利用得出的函数daozhi认定输出的字符串与否为回文。
倒置是指将字符串中的字符按相反顺序排列,如abcde倒置后变为edcba。
所谓回文是指正序和反序字符排列方式相同的字符串,如abcdcba是回文。
字符串倒转的函数如下:
printf(\if(strcmp(arr,arr1)==0)
else
printf(\}
return0;
printf(\
voiddaozhi(charstr[])
{inti,k,n;
charc,*s=str;
for(n=0;s[n]!='\\0';n++);/*
统计数据串长*/
n--;/*最后一个字符位置*/
printf(\for(i=0;i<=n/2;i++){c=str[i];
str[i]=str[n-i];str[n-i]=c;}}
提示信息:采用字符串函数strcpy和strcmp。
#include#includeenum{num=1024};voiddaozhi(charstr[])
{
inti,n;
charc,*s=str;
for(n=0;s[n]!='\\0';++n);//n=strlen(str);--n;//
printf(\
4.设有下列矩阵:
1261014371115481216a=
5913
编写程序,用二维数组存储矩阵元素,从键盘输入数据,将矩阵单位矩阵后按行输入。
#include
enum{rows=4,columns=4};intmain()
{
int
i,j,arr[rows][columns],arr1[rows][columns];
for(i=0;i<rows;++i)for(j=0;j<columns;++j)scanf(\putchar('\\n');
printf(\for(i=0;i<rows;++i){}
for(j=0;j<columns;++j)printf(\putchar('\\n');
for(i=0;i<=n/2;++i){}}intmain()
{
chararr[num],arr1[num];inti=0;
printf(\
c=s[i];s[i]=s[n-i];s[n-i]=c;
for(i=0;i<rows;++i)for(j=0;j<columns;++j)arr1[j][i]=arr[i][j];printf(\for(i=0;
i<rows;++i)
{for(j=0;j<columns;++j)printf(\}
putchar('\\n'); scanf(\
6
return0;
}。