07.10C
来源:互联网 发布:拓普网络怎么样 编辑:程序博客网 时间:2024/06/17 22:43
【项目1-函数版星号图】
这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能。
(1)补充完下面的程序,使程序输出星号下面的星号图:
解法:(1)
#include <stdio.h>#include <stdlib.h>void printch(char ch);int main(){ printch('*'); return 0;}void printch(char ch){ int i,j; for(i=1;i<=6;++i) { for(j=1;j<=(2*i-1);++j) { printf("%c",ch); } printf("\n"); }}
(2)解法
#include <stdlib.h>void printch(char ch,int i);int main(){ int n=6; int i; for(i=1;i<=n;++i) { printch('*',i); } return 0;}void printch(char ch,int i){ int j; for(j=1;j<=6-i;++j) { printf(" "); } for(j=1;j<=2*i-1;++j) { printf("%c",ch); } printf("\n");}
(3)解法
#include <stdio.h>#include <stdlib.h>void printch(char ch,int i);int main(){ int n=6; int i; for(i=1;i<=n;++i) { printch('A'+i-1,i); } return 0;}void printch(char ch,int i){ int j; for(j=1;j<=6-i;++j) { printf(" "); } for(j=1;j<=2*i-1;++j) { printf("%c",ch); } printf("\n");}
项目2-求解分段函数的值】
提示:函数求解的结果要在main()中使用,要用return <表达式>得到返回值。
通过这个项目,体会函数利用返回值的方法。
解法:
#include <stdio.h>
#include <stdlib.h>
#define x1 0.3
#define x2 0.8
double piecewise_function(double);
int main()
{
printf("please enter a number between 0 and 1:");
double x;
double y;
scanf("%lf",&x);
y = piecewise_function(x);
printf("the result of this piecewise function is %lf",y);
return 0;
}
double piecewise_function(double x)
{
double result=0;
if(x<x1)
{
result=0;
}
if(x>=x1&&x<=x2)
{
result=(x-0.3)/(0.8-0.3);
}
if(x>=x2)
{
result=1;
}
return(result);
}
【项目3-求最大公约数】
(1)输入两个数,并求出其最大公约数。请写出求最大公约数的函数
(2)在上面程序基础上,增加函数gcds函数的声明和定义,实现求4数最大公约数的功能
提示:①既然gcd函数已经实现了求两数最大公约数的功能,gcds可以调用gcd分别求出两对的最大公约数,再求最大公约数的最大公约数;②修改main函数,以完成对新新定义的函数的测试。
解法:
#include <stdio.h>#include <stdlib.h>#define n1 3int gcd(int,int);int main(){ printf("please input numbers:"); int a,b,c,c_gcd; int i=0; scanf("%d %d",&a,&b); while(i<=n1) { scanf("%d",&c); c_gcd=gcd(gcd(a,b),c); ++i; } printf("the greatest common divisor of these two numbers is:%d",c_gcd); return 0;}int gcd(int m,int n){ int r; do { r=m%n; m=n; n=r; }while(r!=0); return(m);}
【项目4-求阶乘函数】
(1)请输出满足条件n=a!+b!+c!的所有三位数n,其中,a、b、c分别是n的百、十、个位数。要求用自定义函数实现求阶乘。
(2)求组合数:求组合数公式为:
编一程序,输入m和n的值,求组合数。要求分别定义求阶乘和求组合的函数,求组合数的函数调用求阶乘的函数来实现求解,在main()函数中,负责输入输出及调用求组合数的函数。
(1):解法
#include <stdio.h>#include <stdlib.h>int factorial(int);int main(){ printf("please enter a number between 1000 and 999:"); int n; int m; int iA_unit=0; int iB_ten=0; int iC_hundred=0; int iFac_a=0,iFac_b=0,iFac_c=0; scanf("%d",&n); for(m=143;m<=999;++m) { iA_unit=m%10; iB_ten=m/10%10; iC_hundred=m/100; iFac_a=factorial(iA_unit); iFac_b=factorial(iB_ten); iFac_c=factorial(iC_hundred); if(m==(iFac_a+iFac_b+iFac_c)) { printf("%d ",m); } } return 0;}int factorial(int num){ int iFac_m=1; int i; for(i=1;i<=num;++i) { iFac_m *= i; } return(iFac_m);}(2):解法#include <stdio.h>#include <stdlib.h>int factorial(int);int main(){ printf("please input two values of m and n:"); int m,n; int c; scanf("%d%d",&m,&n); c=factorial(m)/(factorial(n)*factorial(m-n)); printf("the result is:%f",c); return 0;}int factorial(int num){ int iFac_m=1; int i; for(i=1;i<=num;++i) { iFac_m *= i; } return(iFac_m);}
【项目5-当年第几天】
定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。
#include <stdio.h>#include <stdlib.h>int dayth(int,int,int);int main(){ printf("please enter year month day successively:"); int iYear,iMonth,iDay; int n=0; scanf("%d%d%d",&iYear,&iMonth,&iDay); n=dayth(iYear,iMonth,iDay); printf("the date is the %d th day of the year:",n); return 0;} int dayth(int year,int month,int day) { int m;//第几天 int month_2;//2月天数 if(year%4==0&&year%400==0) month_2=29; else month_2=28; switch(month) { case 1:m=day;break; case 2:m=31+day;break; case 3:m=31+month_2+day;break; case 4:m=31*2+month_2+day;break; case 5:m=31*2+30+month_2+day;break; case 6:m=31*3+30+month_2+day;break; case 7:m=31*3+30*2+month_2+day;break; case 8:m=31*4+30*2+month_2+day;break; case 9:m=31*5+30*2+month_2+day;break; case 10:m=31*5+30*3+month_2+day;break; case 11:m=31*6+30*2+month_2+day;break; case 12:m=31*6+30*3+month_2+day;break; } return(m); }
【项目6-回文、素数】
(1)编制一个函数reverse,返回给定数据的“反序数”,例如输入1234,输出4321。请编制reverse函数,在下面代码的基础上补充相关的部分,实现要求的功能。
(2)编制isPalindrome(),用于判断参数是否是回文数——回文数,即从前往后读和从后往前读都一样的数,如1221和121都是回文数,而1231、123都不是回文数。isPalindrome()函数的返回值是int型,是回文返回1(真),不是回文,返回0(假)。请编制isPalindrome(函数,在下面代码的基础上补充相关的部分,实现要求的功能。
(3)编制一个返回值为int型的函数isPrimer(),用于判断参数是否为素数(是素数返回1-真,不是回文,返回0-假),自编main函数用于测试。
(4)(4)编制main函数,调用上面定义的3个函数,完成
- 输出1000以内的所有素数。
- 输出1000以内的所有回文数。
- 输出1000以内的所有回文素数。
- 若一个素数的反序数仍为素数,则称它为可逆素数。求10000以内的所有可逆素数。
#include <stdio.h>#include <stdlib.h>int reverse(int);int isPalindrome(int);int isPrimer(int);int main(){ printf("please enter a multi-digit number:"); int n; int n_reverse; scanf("%d",&n); n_reverse=reverse(n); if(isPalindrome(n)==1) printf("this number is a palindrome number and its value is:%d\n",n_reverse); else printf("this number is not a palindrome number\n"); if(isPrimer(n)==1) printf("this number is a primer number\n"); else printf("this number is a primer number\n"); return 0;}int reverse(int m){ int m_rev=0; int k; k=m; while(k!=0) { m_rev=10*m_rev+k%10; k=k/10; } return(m_rev);}int isPalindrome(int m){ int a; if(m==reverse(m)) a=1; else a=0; return(a);}int isPrimer(int m){ int i,a; for(i=2;i<m;++i) { if(m/i==0) a=0; else a=1; } return(a);}
【项目7-太乐了】
先听故事,再编程序。
故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?sin说:是啊,太乐了!
故事讲完了。下面是sin函数的泰勒展式:
(注:x取弧度值,而非角度值)
用sin泰勒展式编写程序,求出sin(π/2)和sin(56°)的值,精度要求达到小数点后6位(即当最后一项的绝对值小于0.00001时,累加结束,求绝对值的函数也可以自定义函数myabs实现)。
说明:sin听相声“太乐”了,变成了多项式,连太太cos都不认识了。利用泰勒公式将任意函数展开为多项式进行计算,是计算机求解数值问题的一个重要手段。高等数学中的“泰勒定理”为我们解决这一大类问题提供了理论依据与方法指导。高等数学、线性代数等课程为我们提供解决各种问题的基础知识,是大学中最为实用的学科,学好,必须的。
实际上,C语言的数学库(#include<math.h>)中已经提供了sin和cos函数,以及求绝对值的函数fabs,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin、mycos、myabs。
解法:
#include <stdio.h>#include <stdlib.h>#define a 0.00001double mysin(double);double myabs(double);int main(){ double r; double sin_value; printf("please enter a radian:"); scanf("%lf",&r); sin_value=mysin(r); printf("the value of sin(r) is :%lf",sin_value); return 0;}double myabs(double x){ if(x<0) x=(-x); else x=x; return(x);}int factorial(int num){ int iFac_m=1; int i; for(i=1;i<=num;++i) { iFac_m *= i; } return(iFac_m);}double mysin(double dRad){ double dError; double dSum; double dPow; int n; int sign=-1; int i=1; double x=dRad; dSum=x; dPow=x; do { n=2*i+1; dError=(sign*(dPow*x*x))/factorial(n); dSum += dError; sign=-sign; ++i; }while(myabs(dError)>0.00001); return(dSum);}
- 07.10C
- JZOJ2017.07.10 C组
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- C
- kafka基本简介
- Git:Git重置(git reset)
- 一个简单的数据质量检查和汇总工具——Profiler
- Kruskal最小生成树
- iOS开发UI篇—程序启动原理和UIApplication
- 07.10C
- 英里 英尺 英寸的换算
- cmd命令
- Android多媒体之MediaPlayerService
- 实现一个可以在队列满时,将溢出的部分缓存入文件,待空闲时取出的队列
- 使用HBuilder开发移动APP:开发环境准备 (转)
- 1 1 2 3 5 8 13 21 34
- Node.js Express 框架
- leetcode_c++:哈希:Isomorphic Strings(205)