这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能。
(1)补充完下面的程序,使程序输出星号下面的星号图:
#include <stdio.h> void printstars(int m) //定义能输出一行m个星号的函数 { int j; for (j=1; j<=m; ++j) printf("*"); } int main( ) { int n=6; //n代表要输出的行数 int i; for(i=1; i<=n; ++i) { //请在下面写上调用printstars函数的语句,使程序输出右图 printstars(2*i-1);; printf("\n"); } return 0; }运行结果:
#include<stdio.h> void printchs(int n,char c) { int j; for(j=1;j<=n;++j) printf("%c",c); } int main() { int n=6; int i; for(i=1;i<=n;i++) { printchs(n-i,' '); printchs(2*i-1,'*'); printf("\n"); } return 0; }运行结果:
#include<stdio.h> void printchs(int n,char c) { int j; for(j=1;j<=n;++j) printf("%c",c); } int main() { int n=6; int i; for(i=1;i<=n;i++) { printchs(n-i,' '); printchs(2*i-1,'A'+i-1); printf("\n"); } return 0; }
#include<stdio.h> void pstar(int n,char c) { int i; for(i=1;i<=n;i++) printf("%c",c); } int main() { int i; //111 printf("<1>\n"); for(i=6;i>=1;--i) { pstar(2*i-1,'*'); printf("\n"); } printf("\n"); //222 printf("<2>\n"); for(i=1;i<=6;i++) { pstar(6-i,' '); pstar(i,'*'); printf("\n"); } printf("\n"); //333 printf("<3>\n"); for(i=6;i>=1;--i) { pstar(6-i,' '); pstar(2*i-1,'*'); printf("\n"); } printf("\n"); //444 printf("<4>\n"); for(i=1;i<=6;i++) { pstar(6-i,' '); pstar(2*i-1,'*'); printf("\n"); } printf("\n"); //555 printf("<5>\n"); for(i=0;i<=4;i++) { pstar(5-i,' '); printf("*"); pstar(2*i-1,' '); if(i!=0) printf("*"); printf("\n"); } pstar(2*i+1,'*'); printf("\n"); //666 printf("\n<6>\n"); for(i=1;i<=6;i++) { pstar(6-i,' '); pstar(2*i-1,'*'); printf("\n"); } for(i=5;i>=1;i--) { pstar(6-i,' '); pstar(2*i-1,'*'); printf("\n"); } return 0; }运行结果:
#include<stdio.h> double f(double); int main() { double x; printf("请输入x的值:"); scanf("%lf",&x); printf("解得:f(%.2f)=%.2f\n",x,f(x)); return 0; } double f(double x) { double y; if(x<=0.30) y=0; else if(x>0.30&&x<0.80) y=(x-0.30)/(0.80-0.30); else if(x>=0.80) y=1; return y; }运行结果:
#include <stdio.h> int gcd(int x,int y) //用辗转相除法,求两数的最大公约数 { int r; while(y>0) { r=x%y; x=y; y=r; } return x; } int main() { int a,b,g; scanf("%d %d", &a, &b); g=gcd(a,b); printf("最大公约数是:%d\n", g); return 0; <span style="font-size:12px;">} </span>运行结果:
#include<stdio.h> int gcd(int x,int y) { int m; while(y>0) { m=x%y; x=y; y=m; } return x; } int gcds(int x,int y,int z,int w) { int a,b,g; a=gcd(x,y); b=gcd(z,w); g=gcd(a,b); return g; } int main() { int a,b,c,d,g; scanf("%d %d %d %d",&a,&b,&c,&d); g=gcds(a,b,c,d); printf("最大公约数:%d\n",g); return 0; }运行结果:
#include<stdio.h> long fac(int); int main() { int a,b,c,n,m; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) { n=a*100+b*10+c; m=fac(a)+fac(b)+fac(c); if(m==n) printf("%d ",n); } return 0; } long fac(int n) { int i,m=1; for(i=1;i<=n;i++) m*=i; return m; }运行结果:
#include<stdio.h> int fac(int); int main() { int c,m,n; printf("请输入m n:"); scanf("%d %d",&m,&n); if(m>=n) { c=fac(m)/(fac(n)*fac(m-n)); printf("组合数c(m,n)为:%d\n",c); } else printf("输入错误!m不应小于n!\n"); return 0; } int fac(int k) { int i,f=1; for(i=1;i<=k;i++) f=f*i; return f; }运行结果:
#include<stdio.h> int days(int y,int m,int d); int main() { int year,month,day; printf("输入年 月 日"); scanf("%d %d %d",&year,&month,&day); printf("这是该年的第%d几天\n",days(year,month,day)); return 0; } int days(int y,int m,int d) { int i,num=d; for(i=1;i<2016m;i++) { switch(i) { case 4: case 6: case 9: case 11: num=num+30; break; case 2: if((y%4==0&&y%100!=0)||(y%400==0)) num=num+29; else num=num+28; break; default: num=num+31; break; } } return num; }运行结果:
#include<stdio.h> int reverse(int); int main() { int m,n; scanf("%d", &m); n=reverse(m); printf("%d\n", n); return 0; } int reverse(int x) { int k,num=0; while(x!=0) { k=x%10; x=x/10; num=k+10*num; } return num; }运行结果:
#include<stdio.h> int isPalindrome(int); int main() { int m; scanf("%d",&m); if(isPalindrome(m)) printf("%d是回文数\n",m); else printf("%d不是回文数\n",m); return 0; } int isPalindrome(int m) { int k,num=0,z=m; while(m!=0) { k=m%10; m=m/10; num=k+10*num; } if (num==z) z=1; else z=0; return z; }运行结果:
#include<stdio.h> #include<math.h> int isPrime(int); int main() { int num; scanf("%d",&num); if(isPrime(num)) printf("是素数\n"); else printf("不是素数"); return 0; } int isPrime (int n) { int i,j=1; int k=(int)(sqrt(n)); for(i=2;i<=k;i++) { if(n%i==0) { j=0; break; } } return j; }运行结果:
#include<stdio.h> #include<math.h> int isPrime(int); int isPalindrome(int); int reverse(int); int main() { int num; printf("输出1000以内的所有素数:\n"); for(num=2;num<=1000;num++) { if(isPrime(num)) printf("%d\t",num); } printf("\n\n"); printf("输出1000以内的所有回文数:\n"); for(num=2;num<=1000;num++) { if(isPalindrome(num)) printf("%d\t",num); } printf("\n\n"); printf("输出1000以内的所有回文素数:\n"); for(num=2;num<=1000;num++) if(isPrime(num)&&isPalindrome(num)) printf("%d\t",num); printf("\n"); printf("1000以内的所有可逆素数:\n"); for(num=2;num<=1000;num++) { if(isPrime(num)&&isPrime(reverse(num))) printf("%d\t",num); } return 0; } int isPrime (int n) { int i,j=1; int k=(int)(sqrt(n)); for(i=2;i<=k;i++) { if(n%i==0) { j=0; break; } } return j; } int isPalindrome(int m) { int k,num=0,z; z=m; while(m!=0) { k=m%10; m=m/10; num=k+10*num; } if (num==z) z=1; else z=0; return z; } int reverse(int x) { int k,num=0; while(x!=0) { k=x%10; x=x/10; num=k+10*num; } return num; }运行结果:
#include<stdio.h> #define pi 3.1415926 double mysin(double x); double myabs(double x); int main() { printf("sin(π/2)的值为%.5f\n",mysin(pi/2)); printf("sin(56°)的值为%.5f\n",mysin(56.0*pi/180)); return 0; } double mysin(double x) { double num,sum=x,t=x,n2=1; int i=-1,n=1; while(myabs(num)>1e-5) { t=t*x*x; n2=n2*(n+1)*(n+2); num=i*t/n2; sum=sum+num; i=-i; n+=2; } return sum; } double myabs(double x) { return ((x>=0)?x:-x); }运行结果: