英才班 C语言上机练习题.ppt_第1页
英才班 C语言上机练习题.ppt_第2页
英才班 C语言上机练习题.ppt_第3页
英才班 C语言上机练习题.ppt_第4页
英才班 C语言上机练习题.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言上机练习题,计算机科学与工程学院 曹 晟 第一次,程序请写在实验报告中,所有同学都要在下课之前交上本次实验报告;同时抽点若干位同学,观看程序运行结果。实验报告和观看结果综合作为每次实验课程的分数。若某次题目没有做完,需在下次实验报告中补上完整程序。 采取个人上机,分组讨论(自由分组,点名分组)形式。 实验课成绩与期末考试成绩综合评定本课程最终成绩。,本次要求,必答题:教材习题1.9,2.22。 附加题:若上述2题均已做完,请做下面, 附加题作为平时成绩加分参考。 (1)输入任意一整数,输出其绝对值 (2)输入两个数x和y,x能被y整除则显示yes,反之显示no (3)求一元二次方程ax2+bx+c=0的实根,实验报告内容,实验项目名称:简单程序设计 实验目的:掌握在VC+/TC环境下编辑,编译,连接和运行C程序的方法和过程 实验原理:C语言的一般特点,如标准输入输出,各种表达式的运用等 实验内容:教材习题 实验器材:PC机 实验步骤及操作:,附加题1:输入任意一整数,输出其绝对值,1 #include 2 void main() 3 int x,y; 4 scanf(“%d”, 9 ,附加题2:输入两个数x和y,x能被y整除则显示yes,反之显示no,1 #include 2 void main() 3 int x,y; 4 printf(“input x,y:”); 5 scanf(“%d,%d”, 10 ,附加题3:求一元二次方程ax2+bx+c=0的根,#include #include main() float a,b,c,d,a2,x1,x2; printf(“Input a,b,cn”); scanf(“%f,%f,%f”, ,if(d=0) x2=sqrt(d)/a2; printf(“real root:n”); printf(“root1=%f,root2=%fn”,x1+x2,x1-x2); else x2=sqrt(-d)/a2; printf(“complex root:n”); printf(“root1=%f+%fin”,x1,x2); printf(“root2=%f-%fin”,x1,x2); ,本次要求,程序请写在实验报告中,所有同学都要在下课之前交上本次实验报告。 请注意:因实验中心要求21:50准时下课,否则超时电脑将被关闭,所以请同学们务必把握好时间,在21:50之前把本次实验报告交上来(基本要求不包括附加题)。,实验报告内容,实验项目名称:控制语句的应用 实验目的:掌握顺序、分支、循环结构各种语句的一般功能和执行过程 实验原理:for语句、while语句、do while、do while语句等基本用法 实验内容:教材习题 实验器材:PC机 实验步骤及操作:具体的程序代码 ,本次要求,必答题:教材习题2.23,2.24。 附加题: (1)从键盘输入带有三位小数的实数,编制程序将该数的第三位小数以四舍五入的形式去掉。 (2)编写程序,输入三角形的三个边长A,B,C,求三角形的面积S (3)求代数和 s=1-1/2+1/3-1/4+-1/100,附加题1:从键盘输入带有三位小数的实数,编制程序将该数的第三位小数以四舍五入的形式去掉,程序设计思路 本题要用到取整函数:floor(x) floor(x)为计算不大于x的最大整数,结果为double型 为了实现对小数点后第三位四舍五入,首先将输入的x乘100,再加0.5后作为floor的自变量,最后再除100,即得所需结果,#include #include main() double a,b; printf(“Input real an”); scanf(“%lf”, ,附加题3:求和 s=1-1/2+1/3-1/4+-1/100,程序设计思路: 设置k循环k=1,2,100,k作为每一项的分母, 当k为奇数时,即满足k%2=1时,实施s+=1.0/k 其他即当k为偶数时,实施s-=1.0/k,#include main() int k,n; float s=0; for(k=1;k=100;k+) if(k%2=1) s+=1.0/k; else s-=1.0/k; printf(“s=%9.6f”,s); ,#include #include /*利用海伦公式求解*/ void main() float a,b,c,Area,p;/*a,b,c代表边长,Area代表面积,p代表三边之和的平均值*/ printf(“Please input the lengths of triangles three edges“); printf(“n“); scanf(“%f,%f,%f“, ,#include #include float area(float,float,float); void main() float a,b,c; printf(“请输入三角形的三个边长值:n“) scanf(“%f,%f,%f“,/* 以下是计算任意三角形面积的函数 */ float area(float a,float b,float c) float s,area_s; s=(a+b+c)/2.0; area_s=sqrt(s*(s-a)*(s-b)*(s-c); return(area_s); ,#include #include float TriArea(float a,float b,float c) float p,area; p=(a+b+c)/2; area=sqrt(p*(p-a)*(p-b)*(p-c); return area; void main() float a,b,c,Area; printf(“Please input the lengths of triangles three edges“); printf(“n“); scanf(“%f,%f,%f“, ,实验报告内容,实验项目名称:控制语句的应用 实验目的:掌握顺序、分支、循环结构各种语句的一般功能和执行过程 实验原理:for语句、while语句、do while、do while语句等基本用法 实验内容:教材习题 实验器材:PC机 实验步骤及操作:具体的程序代码 ,本次要求,必答题:教材习题3.4,3.16。 附加题:若上述2题均已做完,请做下面, 附加题作为平时成绩加分参考。 (1)求和: (2)编写程序计算用5元、2元和1元3种零币兑换100元整币的不同零兑种数 (3)水仙花数:一个三位数的各位数字的立方和等于该三位数,如153=13+53+33,求所有的水仙花数; 玫瑰花数:一个四位数的各位数字的四次方和等于该四位数,如1634=14+64+34+44 ,求所有的玫瑰花数。,水仙花数,main() int i,j,k,n; for(n=100;n1000;n+) i=n/100;j=(n/10)%10;k=n%10; if(n=i*i*i+j*j*j+k*k*k) printf(“%d”,n); ,水仙花数,main() int i,j,k,n; for(i=1;i10;i+) for(j=0;j10;j+) for(k=0;k10;k+) n=i*100+j*10+k; if(n=i*i*i+j*j*j+k*k*k) printf(“%d”,n); ,编写程序计算用5元、2元和1元3种零币兑换100元整币的不同零兑种数,1 #include 2 void main() 3 int x,f,t,n; 4 x=0; 5 for(t=0;t=0) x+; /* 变量n为非负时,用x统计兑零种数 */ 9 printf(“%d“,x); 10 ,为减少无效循环,将第6行进一步精简: 1 #include 2 void main() 3 int x,f,t,n; 4 x=0; 5 for(t=0;t=0) x+; /* 变量n为非负时,用x统计兑零种数 */ 9 printf(“%d“,x); 10 ,程序设计思路,和式的每一项分母为阶乘 在i循环中设置变量t 通过t=t*i实现阶乘 然后通过s=s+1.0/t实现求和,main() int i,n;long t; float s=1; scanf(“%d”, ,必答题:教材习题3.7,3.8。 附加题: 1、张邱建算经中有题:今有鸡翁一值钱五,鸡母一值钱三,鸡雏一值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何? 2、满足 的正整数x,y,z称为倒勾股数,求30,100之间所有的倒勾股数 3、倍反序数:若一个四位整数n的4倍恰好是其反序数,称n为四位4倍反序数(如2178就是一个)。试求出所有四位4倍反序数。,必答题2:张邱建算经中有题:今有鸡翁一值钱五,鸡母一值钱三,鸡雏一值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何? 本题实际是求解一个不定方程组;设鸡翁、母、雏数分别为x,y,z,根据题意可得到方程组: 设置三重循环对x,y,z进行穷举。要注意,根据z/3可知z必须为3的整数倍。判断若同时满足以上两个方程式,打印输出方程的解。,1 #include 2 void main() 3 int x,y,z; 4 for(x=1;x=19;x+) 5 for(y=1;y=33;y+) 6 for(z=1;z=100;z+) 7 if(z%3=0 9 ,必答题3:满足 的正整数x,y,z称为倒勾股数,求30,100之间所有的倒勾股数. 显然,x,y,z不可能相等,且xz, yz。为避免重复,不妨设xyz。 在指定区间a,b上根据x,y,z的大小关系设置3重循环:z从a,b-2,y从z+1,b-1,x从y+1,b; 对每一组x,y,z如果直接应用条件式做判别,会因分数计算不可避免的误差而造成结果的遗失,若通分后整理得到如下等式: 则可以避免遗漏的发生。,1 #include 2 void main() 3 long a,b,x,y,z,n=0; 4 scanf(“%ld,%ld”, 12 ,倍反序数,设置n循环穷举四位数 关键是如何求四位数n的反序数m 设置k循环,循环4次 每次实施m=m*10+t%10,t=t/10 其中m取初值0,t取初值n,倍反序数,void main() int n,k,t,m,j=0; for(n=1000;n=9999;n+) m=0;t=n; for(k=1;k=4;k+) m=m*10+t%10;t=t/10; if(m=4*n) j+;printf(“%dn”,n); printf(“共%d个解。n”,j); ,必答题:教材习题4.5 附加题: 优美乘积:在等式 中,若数字0,1,2,3,4,5,6,7,8,9在a,b,c这个数中出现一次且只出现一次,称这样的等式为优美乘积式。例如 , , 都是优美乘积式。设计程序求出所有优美乘积式,并统计优美乘积式的个数。,期中考试,必答题1:求一个3*3矩阵对角线元素之和(提示:利用双重for循环控制输入二维数组,再将aii累加后输出) 必答题2:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?这些数分别是多少? 必答题3:今有五羊四犬三鸡二兔值钱一千四百九十六,四羊二犬六鸡三兔值钱一千一百七十五,三羊一犬七鸡五兔值钱九百五十八,二羊三犬五鸡一兔值钱八百六十一。问羊犬鸡兔各几何?(选自九章算术) 必答题4:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 附加题: 一个顽猴在一座有30级台阶的小山上爬山跳跃,上山一步可跳1级或3级,求上山有多少种不同跳法。(提示:利用数组,同时找到递推关系),附加题:优美乘积 在等式 中,若数字0,1,2,3,4,5,6,7, 8,9 在a,b,c这个数中出现一次且只出现一次,称这样的 等式为优美乘积式。例如 和 都是优美乘积式。设计程序求出 所有优美乘积式,并统计优美乘积式的个数。 分析: (1)对于a*b=c(ab),a,b,c共10位数字,可知a为1位或2位数,b为3位或4位数,设置循环对a,b实施穷举,对每一组a,b,由c=a*b确定c;,附加题:优美乘积 在等式 中,若数字0,1,2,3,4,5,6,7, 8,9在a,b,c这3 个数中出现一次且只出现一次,称这样的等式为优美乘积式。 例如 和 都是优美乘积式。设 计程序求出所有优美乘积式,并统计优美乘积式的个数。 分析: (2)关键在于判断10个数字在a,b,c中各出现一次,不重复也无遗 漏。可以把每一组a,b,c分离转化为单个数字x,设置数组f(x) 统计数字x的各数。检验当x=0,1,2时,若f(x)=1都成立,说 明那个数字0-9有且仅有出现一次; (3)为了方便循环处理,设置m3数组存放a,b,c.,1 #include 2 void main() 3 long int x,y,t,i,k,m4,f11,a,b,c,n=0; 4 for(a=2;a0) 11 x=y%10;fx=fx+1;y=y/10; /*分离数字,f数组统计*/ 12 for(t=0,i=0;i=9;i+) 13 if(fi!=1) t=1; /*检验数字0-9各只出现一次*/ 14 if(t=0) 15 printf(“%3ld*%4ld=%5ld”,a,b,c); n+; /*用n统计个数*/ 16 if(n%4=0) printf(“n”,n); 17 printf(“n n=%d n”,n); ,求一个3*3矩阵对角线元素之和,main() float a33,sum=0; int i,j; printf(“please input rectangle element:n“); for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%f“, ,1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?数分别是多少?,main() int i,j,k; printf(“n“); for(i=1;i5;i+) *以下为三重循环*/ for(j=1;j5;j+) for (k=1;k5;k+) if (i!=k ,今有五羊四犬三鸡二兔值钱一千四百九十六,四羊二犬六鸡三兔值钱一千一百七十五,三羊一犬七鸡五兔值钱九百五十八,二羊三犬五鸡一兔值钱八百六十一。问羊犬鸡兔各几何?,main() int x,y,z,u; for(x=1;x=1496/5;x+) for(z=1;z=(958-3*x)/7;z+) for(u=1;u=(958-3*x-7*z)/5;u+) y=958-3*x-7*z-5*u; if(y0) break; if(5*x+4*y+3*z+2*u=1496 ,将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5,程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n, 重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。,main() int n,i; printf(“nplease input a number:n“); scanf(“%d“,一个顽猴在一座有30级台阶的小山上爬山跳跃,上山一步可跳1级或3级,求上山有多少种不同跳法,采用数组递推求解。递推可以这样理解:上山最后一步到达第30级台阶可完成上山,共有f(30)中不同的爬法;到第30级之前位于哪一级呢?无非是第29级(上跳1级即到),有f(29)种;或位于第27级(上跳3级即到),有f(27)种,于是有f(30)=f(29)+f(27); 其余关系可以此类推,得到一般的递推关系: f(k)=f(k-1)+f(k-3); 初始条件显然有:f(1)=1,f(2)=1,f(3)=2.,#include void main() int k,n;long f1000; printf(“请输入台阶总数n:“); scanf(“%d“, ,本次要求,(1)杨辉三角,历史悠久,是我国古代数学家杨辉揭示二项式展开式各项的系数的数字三角形,奥妙无穷:每一行的首尾两数均为1,第k行共k个数,除首尾两数外,其余各数均为上一行的肩上两数之和。示图是4行杨辉三角形。请设计程序,打印杨辉三角形的前n行(n从键盘输入)。(提示:采用二维数组),例子 1 1 1 1 2 1 1 3 3 1,设置二维数组a(n,n),根据构成规律实施递推: 初始值:a(i,1)=a(i,i)=1 (i=1,2,n) 递推式:a(i,j)=a(i-1,j-1)+a(i-1,j) (i=3,n,j=2,i-1) 为了打印输出左右对称的等腰数字三角形,设置二重循环:i控制打印n行,每一行开始换行,打印40-3i个空格;设置j循环控制打印第i行的i个数组元素aij.,1 1 1 1 2 1 1 3 3 1,1 #include 2 void main() 3 int n,i,j,k,a2020; 4 printf(“请输入杨辉三角形的行数:“); 5 scanf(“%d“, 17 ,(2)编程显示集合2m ,3m|m=1,n=1中由小到大排列的第30项及前30项之和。 (3)某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。,main() int k,n,long a,b,s,f100; printf(“求数列的第n项与前n项之和,请输入n:”); scanf(“%d”, ,main() int a,i,aa4,t; scanf(“%d“, ,海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?,main() int i,m,j,k,count; for(i=4;i10000;i+=4) count=0; m=i; for(k=0;k5;k+) j=i/4*5+1; i=j; if(j%4=0) count+; else break; i=m; if(count=4) printf(“%dn“,count); break; ,有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。,#define nmax 50 main() int i,k,m,n,numnmax,*p; printf(“please input the total of numbers:“); scanf(“%d“, while(mn-1), if(*(p+i)!=0) k+; if(k=3) *(p+i)=0; k=0; m+; i+; if(i=n) i=0; while(*p=0) p+; printf(“%d is leftn“,*p); ,本次要求,必答题: (1)教材习题5.9和5.11 (2)编写程序实现用多种方法输入输出数组中的 所有元素的值 (3) x=x+1,x+=1,x+,哪种写法效率最高? 为什么? (4)编写函数fun(),其功能是删除一个字符串中 的所有空格。例如,输入字符串“The string is:”,则应输出“Thestringis:”,下标表示法,void main() int a8,i; for(i=0;i8;i+) scanf(“%d“, ,地址表示法,void main() int a8,i; for(i=0;i8;i+) scanf(“%d“,a+i); for(i=0;i8;i+) printf(“%d “,*(a+i); printf(“n“); ,指针表示法,void main() int a8,i,*p; p= ,x=x+1,x+=1,x+,哪个效率最高?,x=x+1最低 (1)读取右x的地址 (2)x+1 (3)读取左x的地址 (4)将右值传给左边的x(编译器并不认为左右x的地址相同) x+=1其次 (1)读取右x的地址 (2)x+1 (3)将得到的值传给x(因为x的地址已经读出) x+效率最高 (1)读取右x的地址 (2)x自增1,编写函数fun(),其功能是删除一个字符串中的所有空格。例如,输入字符串“The string is:”,则应输出“Thestringis:”,程序思路: 本题涉及字符串与返回指针的函数。分析函数fun()中的参数和返回值,该函数的返回值是一个指针(就函数的功能看,一定是处理之后的字符串); 可以通过一个指针在str中由前到后移动,每次移动一个字符位,判断其是否为空格。若是,则将其删除,否则不变; 要删除一个空格的操作,比较快速的方法是使用strcpy()函数,也可以循环逐个将后续字符赋予前一个元素。,用自然语言表示的算法,(1) char *p=str,*n (2) *p?是,则继续下一步;否则,转(10) (3) *p=?是,则继续下一步;否则,转(9) (4) n=p (5) *(n+1)?是,则继续下一步;否则,转(8) (6) *n=*(n+1) (7) n+,转(5) (8) *n=0,转(2) (9) p+,转(2) (10) Return str,程序,1 #include 2 #include 3 #include 4 char *fun(char *str) 5 char *p=str,*n; 6 while(*p) 7 if(*p=) 8 n=p; 9 while(*(n+1) 10 *n=*(n+1); n+; 11 *n=0; 12 13 else p+; 14 15 return str; 16 17 void main() 18 char s100,*ds; 19 clrscr(); 20 printf(“nPlease enter a string:”); 21 gets(s); 22 ds=fun(s); 23 printf(“nResult:%sn”,ds); ,本次要求,必答题: (1)教材习题6.5和6.10 (2)用函数调用方式编程求四则运算a/b+d/c, a/b-d/c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论