1. 关于阶乘的数值问题,尝试用各种循环语句实现:
    (1)编写程序求n阶乘。输入一个正整数n,输出其阶乘 的值。
    (2)编写程序求阶乘和。对于一个正整数m,输出1~m的阶乘和 。
    (3)编写程序求常量e的近似值,估算公式如下:

    (4)编写程序计算的 值,公式如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//输入一个正整数n,输出其阶乘的值。
int factorial(int n){int i;int fac = 1;for(i=1;i<=n;i++){fac *= i;}return fac;
}//求阶乘和
int factorial_sum(int n){int i;int fac;int fac_sum = 0;for(i=1;i<=n;i++){fac = factorial(i);fac_sum += fac;}return fac_sum;
}//求常量e的近似值
float ee(int n){int i;float e=1.0;int fac;for(i=1;i<=n;i++){fac = factorial(i);e = e + 1.0/fac;printf("%d \t %f \n",fac,e);}return e;
}//计算的e^x值
float eex(double x,int n){int i;float ex = 1.0;int fac;for(i=1;i<=n;i++){fac = factorial(i);ex = ex + pow(x,i)/fac;}return ex;
}int main()
{printf("请输入选择的操作:\n");printf("(1)求n阶乘。\n (2)求阶乘和\n(3)求常量e的近似值\n(4)计算的e^x值\n");int secletion;scanf("%d",&secletion);switch(secletion){case 1:{printf("求n阶乘\n");int n;scanf("%d",&n);int fac;fac = factorial(n);printf("%d\n",fac);break;}case 2:{printf("求阶乘和\n");int n;scanf("%d",&n);int fac_sum;fac_sum = factorial_sum(n);printf("%d\n",fac_sum);break;}case 3:{printf("求常量e的近似值\n");int n;scanf("%d",&n);float e;e = ee(n);printf("%.6f\n",e);break;}case 4:{printf("计算的e^x值\n");double x;int n;scanf("%lf%d",&x,&n);float ex;ex = eex(x,n);printf("%.6f\n",ex);break;}default:printf("输入错误");break;}return 0;
}

#include <stdio.h>
#include <stdlib.h>//方法1
float pi_1(){float pi_4 = 0;int i=1;float flag = 1;int zf = 1;//判断正负while(flag > 1e-6){flag = 1.0/(2*i-1);pi_4 += zf*(flag);zf = -zf;//printf("%.6f\t",flag);i++;}return 4*pi_4;
}
//方法2
double pi_2(){double pi_2 = 1.0;int i=1;double flag = 1.1;while(flag-1 > 1e-10){flag = (double) (2*i*2*i)/(double)((2*i-1)*(2*i+1));printf("%.6lf\t",flag);pi_2 *= flag;i++;}return 2*pi_2;
}
int main()
{printf("请输入计算pi的方法:\n");int sel;scanf("%d",&sel);switch(sel){case 1:{printf("方法1求得的pi值为:%.6f\n",pi_1());break;}case 2:{printf("方法2求得的pi值为:%.6lf\n",pi_2());break;}default:printf("输入错误\n");break;}return 0;
}
  1. 分别用穷举法和迭代法求两个整数的最大公约数。输入两个正整数m和n,编程求它们的最大公约数。
    最简单的求最大公约数算法为遍历法,即在小于两数最小值的所有整数中寻找公约数,能将两数整除的最大因子为最大公约数。为了加快搜寻速度,常采用辗转相除法求最大公约数: m 与 n 的最大公约数等于 n 与 m%n 的最大公约数;用n和m%n替换原来的 m与n的值;直到n = 0时,当前 m的值为所求最大公约数。
    例如,m = 24,n = 9时:
    (1)24和 9 的最大公约数等于 ( 24 % 9 ) = 6 和 9 的最大公约数;
    (2)9 和 6 的最大公约数等于 ( 9 % 6 ) = 3 和 6 的最大公约数;
    (3)6 和 3 的最大公约数等于 ( 6 % 3 ) = 0 和 3 的最大公约数;
    因此 24 和 9 的最大公约数等于 3。
#include <stdio.h>
#include <stdlib.h>
//穷举法Maximum common divisor
int mcd_1(int m,int n){int i;for(i=m;i>=1;i--){if(m%i == 0 && n%i==0){break;}}return i;}
//迭代法
int mcd_2(int m,int n){int t;while(m!=0){t = n%m;n = m;m = t;}return n;
}int main()
{printf("请输入两个数:\n");int m,n;scanf("%d %d",&m,&n);if(m>n){int t = n;n = m;m = t;}else if(m == n){printf("%d\n",m);return 0;}printf("请输入选择的操作:1,穷举法;2,迭代法\n");int sel;scanf("%d",&sel);switch(sel){case 1:{printf("%d\n",mcd_1(m,n));break;}case 2:{printf("%d\n",mcd_2(m,n));break;}default :{printf("输入错误");break;}}return 0;
}
  1. 菲波那契在数学代表作《算盘书》提出了这样的问题:有小兔一对,若在它们出生后第二个月成年,第三个月就有生殖能力,而有生殖能力的一对兔子每一个月都生一对兔子。设所生的一对兔均为一雌一雄,且均无死亡。问新生的一对兔子一年后可以繁殖成多少对兔子?该问题可以用菲波那契数列解决。
    Fibonacci 数列:0,1,1,2,3,5,8,13,21,34,……
    f0 = 0
    f1 = 1
    fn = fn-1 + fn-2 ( n >= 2 )
    用迭代的方法输出数列的前20项,每行输出8个数。
#include <stdio.h>
#include <stdlib.h>int main()
{printf("输入n(n>=2):\n");int n;scanf("%d",&n);int f0 = 0;int f1 = 1;int fi =0;int i=1;while(i < n){if(i==1){printf("%d\t",f0);}else if(i==2){printf("%d\t",f1);}else{fi = f0 + f1;f0 = f1;f1 = fi;printf("%d\t",fi);}if(i%8 == 0){printf("\n");}i++;}return 0;
}

5.屏幕打印图中的三角形图案.

图8.13 输出三角形

#include <stdio.h>
#include <stdlib.h>int main()
{printf("选择输出的三角形类型:a,b,c,d\n");char ch;ch = getchar();switch(ch){case 'a':{int i;int j;for(i=1;i<=10;i++){for(j=1;j<=i;j++){printf("*");}printf("\n");}break;}case 'b':{int i;int j;for(i=10;i>=1;i--){for(j=1;j<=i;j++){printf("*");}printf("\n");}break;}case 'c':{int i,j,k;for(i=10;i>=1;i--){for(k=0;k<10-i;k++){printf(" ");}for(j=i;j>=1;j--){printf("*");}printf("\n");}break;}case 'd':{int i,j,k;for(i=1;i<=10;i++){for(k=0;k>10-i;k++){printf(" ");}for(j=1;j<=i;j++){printf("*");}printf("\n");}break;}default :{printf("输入错误");break;}}return 0;
}

6.编程判断一个数是否为素数,输出n~m内的所有素数,并统计素数的个数。

#include <stdio.h>
#include <stdlib.h>//判断一个数是不是素数
int sushu(int n){int i;int flag = 1;for(i=2;i<n;i++){if(n%i == 0){flag =0;break;}}return flag;
}
//2,输出n~m内的所有素数
void sushu_2(int n,int m){int i;for(i=n;i<=m;i++){int flag;flag = sushu(i);if(flag == 1){printf("%d\t",i);}}
}
int main()
{printf("请选择操作:1,一个数是否为素数 2,输出n~m内的所有素数\n");int sel;scanf("%d",&sel);switch(sel){case 1:{int n;scanf("%d",&n);int flag;flag = sushu(n);if(flag == 1){printf("素数\n");}else if(flag == 0){printf("不是素数\n");}break;}case 2:{int n,m;scanf("%d %d",&n,&m);sushu_2(n,m);break;}default :{printf("输入错误");break;}}return 0;
}
  1. 输入一个正整数,如果该数不是素数,则将其分解质因数,输出所有的因子。
    例如:输入90,打印出90 = 2 * 3 * 3 * 5。
#include <stdio.h>
#include <stdlib.h>
//判断一个数是不是素数
int sushu(int n){int i;int flag = 1;for(i=2;i<n;i++){if(n%i == 0){flag =0;break;}}return flag;
}
//分解质因数
void zys(int n){int i;printf("%d=",n);for(i=2;i<=n;i++){while(n%i == 0){if(n != i){n = n/i;printf("%d*",i);}else{n = n/i;printf("%d",i);break;}}}
}
int main()
{printf("请输入一个数:\n");int n;scanf("%d",&n);int flag = sushu(n);if(flag == 0){zys(n);}else if(flag == 1){printf("素数\n");}return 0;
}
  1. 输入5位以内的任何数字,分离每一位的数值,并输出各位的和。
    如入输入2345, 输出2+3+4+5=14。
#include <stdio.h>
#include <stdlib.h>int main()
{printf("请输入5位以内的数字:\n");int n;scanf("%d",&n);int a[5]={0,0,0,0,0};int count=0;while(n != 0){a[count] = n%10;n = n/10;count++;//最后的时候,多加了一个1}int i;int sum=0;for(i=count-1;i>0;i--){printf("%d+",a[i]);sum += a[i];}printf("%d",a[0]);sum += a[0];printf("=%d",sum);return 0;
}

9[选作].编程实现猜数游戏
由程序自动生成一个1到10之间随机整数,请参加游戏的人猜,游戏者通过键盘输入猜测的数字,如果猜对了则结束游戏;否则输出提示信息,显示所猜的数是太大还是太小。 游戏结束后输出猜字的次数。 若规定输入猜测字的次数不得超过6次,若多于6次仍未猜中则自动结束游戏,并输出“输局”的信息。如果在游戏过程中,玩家可以随时终止游戏,在提示玩家继续输入新的猜测数时,可由用户选择是否继续进行游戏。

#include <stdio.h>
#include <stdlib.h>int main()
{int rn;int guess;rn = rand()%10+1;int count;int flag=0;for(count=1;count<=6;count++){printf("请猜一个1到10之间的数:(输入-1结束游戏)\n");scanf("%d",&guess);if(guess == rn){printf("成功\n");flag = 1;break;}else if(guess < rn && guess>=1){printf("太小\n");}else if(guess > rn){printf("太大\n");}else if(guess == -1){printf("结束游戏\n");break;}}if(count > 6 && flag == 0){printf("*******************输局*********************\n");}return 0;
}

《C程序设计快速进阶大学教程》第8章编程题相关推荐

  1. Python程序设计与算法基础教程第四章上机题

    第四章来了 1.杨辉三角,很简单 print("1".center(20)) print("1 1".center(20)) print("1 2 1 ...

  2. python期末编程题_Python 语言程序设计二级教程第七章编程题

    编程题1 f=open('file1.txt','w') f.write('My name is Lin') f.write('I am from China') f.close() k=open(' ...

  3. javaweb不同用户需要几张表_程序员必备2020版:JavaWeb快速进阶全套教程

    Java Web应用由一组Servlet.HTML页.类.以及其它可以被绑定的资源构成.它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行. JavaWeb项目简单来说就是一个应 ...

  4. Python 程序设计快速入门简易教程

    Python 程序设计快速入门简易教程 Python语言快速检索 一些需要知道的事 一个简单的Python程序 Python的基本数据类型 Python的基本运算符 Python的常用函数 impor ...

  5. C++程序设计案例实训教程第9章

    第9章  面向对象技术基础 (本资料qq讨论群112133686) 面向对象程序设计通过抽象.封装.继承和多态使程序代码达到最大限度的可重用和可扩展,提高软件的生产能力,控制软件开发和维护的费用.类是 ...

  6. C++程序设计案例实训教程第8章

    第68章  关于函数高级话题 C语言是面向函数的语言.C++面向过程的程序设计沿用了C语言使用函数的方法,主函数以外的函数大多是被封装在类中的,主函数或其它函数可以通过类对象调用类中的函数,这样大大降 ...

  7. C++程序设计案例实训教程第2章(qq讨论群112133686)

    第2章  类型转换及流程控制 C++是一种通用的程序设计语言,特别适合于面向对象的程序设计.它支持数据抽象,支持面向对象的程序设计和通用性程序设计.面向对象程序设计是一种程序设计技术,是对一组问题编写 ...

  8. C++程序设计案例实训教程第3章

    第3章  数    组 数组是类型名.标识符和维数组成的复合数据类型.类型名规定了存放在数组中元素的类型,标识符也就是数组名称,而维数则指定数组中包含元素的个数.数组实际上是内存中连续存储的一组同种数 ...

  9. C++程序设计案例实训教程第10章

    第10章  关于对象的高级专题 数据的共享和保护机制是C++的重要特性之一.其包含的内容主要为标识符的作用域.可见性和生存期,通过类的静态成员实现同一个类的不同对象之间数据和操作的共享,通过常成员来设 ...

最新文章

  1. x9此计算机上没有hasp_mastercam x9安装步骤
  2. [导入]MsAjax Lib- Boolean.parse 函数
  3. python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...
  4. 直播报名 | 券商如何精细化运营?
  5. 最长公共子序列问题 (LCS)
  6. python3.7.4安装(Windows10)
  7. android系统账户管理(AccountManagerService+AccountAuthenticator)
  8. [html] 页面上的登录表单记住了密码(显示星号),但我又忘了密码,如何找回这个密码呢?
  9. 上手Caffe(一)
  10. python 第一行 报错_初学Python-只需4步,爬取网站图片
  11. spring创建webservice项目
  12. 少年,你知道怎么用一行代码解决分布式事务问题吗?
  13. 资产组合管理中有哪些基础概念?
  14. linux安装gcc等程序包,Linux手动安装gcc-8.3.0
  15. 微信支付一面(C++后台)
  16. LaTeX大括号用法
  17. 常用工具及常用解决方案
  18. Jquery获取input file的base64码
  19. JS 缓存: Service Worker 实现离线应用
  20. Linux模拟试题及答案(全)

热门文章

  1. YYKit系列之——YYCache使用
  2. 一测振系统包括微型计算机,激振器之振动测试系统组成及基本仪器的使用方法 ......
  3. React - review 2
  4. kafka消费者--coordinate分析
  5. 逆水寒服务器紫荆之巅有关消息,逆水寒ol:官方钦定19个热门服务器?四大服舞阳城门口人们为患!...
  6. YOLOv5 修改detect模块以方便调用(单类型目标)
  7. perl 、shell、python之shell脚本入门
  8. 线性代数几种特殊类型行列式_及其计算
  9. 奕泽linux升级,想升级音响丰田奕泽告诉你怎么做
  10. 神经网络尺寸和表达能力