第七章

1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

#include <stdio.h>
#include <math.h>
int gcd(int m,int n){
    int t,r;
    if(m<n){
        t=m;
        m=n;
        n=t;
    }
    r=m%n;
    while(r!=0){
        m=n;
        n=r;
        r=m%n;
    }
    return n;
}
int gbs(int m,int n){
    int t=gcd(m,n);
    return m*n/t;
}
int main(){
    printf("please input m and n:\n");
    int m,n;
    scanf("%d%d",&m,&n);
    printf("m=%d,n=%d的最大公因数=%d,最小公倍数=%d\n",m,n,gcd(m,n),gbs(m,n));
    return 0;
} 
 
View Code

2.求方程aX*x+b*x+c=0的根,用3个函数分别求当:b*b-4*a*c。大于0,等于0,小于0的根并输出结果

#include <stdio.h>
#include <math.h>
void OverZero(double a,double b,double c){
    double disc=b*b-4*a*c;
    double x1,x2;
    x1=(-b-sqrt(disc))/(2*a); 
    x2=(-b+sqrt(disc))/(2*a);
    printf("a=%lf,b=%lf,c=%lf时解为x1=%lf,x2=%lf\n",a,b,c,x1,x2);
}
void EquealZero(double a,double b,double c){
    double disc=b*b-4*a*c;
    double x=(-b-sqrt(disc))/(2*a);
    printf("a=%lf,b=%lf,c=%lf时解为x=%lf\n",a,b,c,x);
}
void LessZero(double a,double b,double c){
    double disc=-(b*b-4*a*c);
    double p=-b/(2*a);
    double q=sqrt(disc)/(2*a);
    printf("a=%lf,b=%lf,c=%lf时解为x1=%lf+%lfi,x2=%lf-%lfi\n",a,b,c,p,q,p,q);
}
int main(){
    printf("please input a,b,c:\n");
    double a,b,c,disc;
    scanf("%lf%lf%lf",&a,&b,&c);
    disc=b*b-4*a*c;
    if(disc>0){
       OverZero(a,b,c);    
    }else if(disc==0){
       EquealZero(a,b,c);
    }else{
       LessZero(a,b,c);    
    } 
    return 0;
} 
View Code

 

3.写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。

#include <stdio.h>
int prime(int n);
int main(){
    int n;
    printf("input an integer:");
    scanf("%d",&n);
    if(prime(n)){
        printf("%d is a prime.\n");
    }else{
        printf("%d is not a prime.\n");
    }
    return 0;
}
int prime(int n){
    int flag=1,i;
    for(i=2;i<n/2&&flag==1;i++)
      if(n%i==0) flag=0;
    return flag;
} 
View Code

 

4.写一个函数,使给定的一个3X3的二维数组转置,即行列互换 

#include <stdio.h>
#include <math.h>
#define N 3
void cover(int a[][3],int b[][3]){
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)
         b[i][j]=a[j][i];
    }
}
int main(){
    printf("请输入一个3X3的数组:\n");
    int i,j,a[N][N],b[N][N];
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)
        scanf("%d",&a[i][j]);
    }
    cover(a,b);
    printf("The cover info:\n");
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)
        printf("%5d",b[i][j]);
        printf("\n");
    }
    return 0;
}
View Code

 

5.写一个函数,使输入一个字符串按反序存放,在主函数中输入和输出字符 

#include <stdio.h>
#include <math.h>
#include <string.h>
void inverse(char str[]){
    char t;
    int i,j;
    for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--){
        t=str[i];
        str[i]=str[j-1];
        str[j-1]=t;
    }
}
int main(){
    char str[100];
    printf("input string:");
    scanf("%s",str);
    inverse(str);
    printf("inverse string:%s\n",str);
    return 0;
}
View Code

 

6.写一个函数,将两个字符串连接 

#include <stdio.h>
#include <string.h>
void concatenate(char string1[],char string2[],char string[]){
    int i,j;
    for(i=0;string1[i]!='\0';i++)
       string[i]=string1[i];
    for(j=0;string2[j]!='\0';j++)
        string[i+j]=string2[j];
    string[i+j]='\0';
}
int main(){
    char s1[100],s2[100],s[100];
    printf("input string1:");
    scanf("%s",s1);
    printf("input string2:");
    scanf("%s",s2);
    concatenate(s1,s2,s);
    printf("\n The new string is %s\n",s);
    return 0;
}
View Code

 

未完待续.........

 

posted @ 2020-10-20 20:07  薄眠抛却陈年事。  阅读(133)  评论(0编辑  收藏  举报