C程序设计 第四版(谭浩强)-学习笔记-第九天

/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写一个函数,将一个字符串中的元音字母复制到另一字符串中,然后输出 
    位置:C程序设计(第四版)2010年6月第四版 218页习题7
*/
#include<stdio.h>
int main()
{   
    void cpy(char [],char []);
    char str[80],c[80];
    printf("input string:");
    gets(str);
    cpy(str,c);
    printf("The vowel letters are:%s\n",c);
    return 0;
}
void cpy(char s[],char c[])
{
    int i,j;
    for(i=0,j=0;s[i]!='\0';i++)
        if(s[i]=='a' || s[i]=='A' || s[i]=='e' || s[i]=='E' || s[i]=='i' || s[i]=='I' || s[i]=='o' || s[i]=='O' || s[i]=='u' || s[i]=='U')
        {
            c[j]=s[i];
            j++;
        }
        c[j]='\0';
} 
/*Dev-c++输出结果: 
    input string:abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRST
    The vowel letters are:aeiouAEIO
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写一个函数,输入一个4位数,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出1 9 9 0 
    位置:C程序设计(第四版)2010年6月第四版 218页习题8
*/
#include<stdio.h>
#include<string.h> 
int main()
{   
    void insert(char []);
    char str[80];
    printf("input four digits:");
    scanf("%s",str);
    insert(str);
    return 0;
}
void insert(char str[])
{
    int i;
    printf("%d\n",strlen(str));
    for(i=strlen(str);i>0;i--)
    {   
        str[2*i]=str[i];//如果输入1995,当i=4时赋值'\0',当i=3时赋值5,当i=2时赋值9,当i=1时赋值9,最后的1不动 
        str[2*i-1]=' ';
    }
    printf("output:\n%s\n",str);
}
/*Dev-c++输出结果: 
    input four digits:1995
    output:
    1 9 9 5
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果 
    位置:C程序设计(第四版)2010年6月第四版 218页习题9
*/
#include<stdio.h>
int letter,digit,space,others;
int main()
{   
    void count(char []);
    char text[80];
    printf("input string:\n");
    gets(text);
    printf("string:");
    puts(text);
    letter=0;
    digit=0;
    space=0;
    others=0;
    count(text);
    printf("\nletter:%d\ndigit:%d\nspace:%d\nothers:%d\n",letter,digit,space,others);
    return 0;
}
void count(char str[])
{
    int i;
    for(i=0;str[i]!='\0';i++)
    if((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))
        letter++;
    else if(str[i]>='0' && str[i]<='9')
        digit++;
    else if(str[i]==32)
        space++;
    else
        others++; 
}
/*Dev-c++输出结果: 
    input string:
    i am a student i am 9 age;
    string:i am a student i am 9 age;

    letter:17
    digit:1
    space:7
    others:1
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写一个函数,输入一行字符,将此字符串中最长的单词输出 
    位置:C程序设计(第四版)2010年6月第四版 218页习题10
*/
#include<stdio.h>
#include<string.h> 
int main()
{   
    int alphabetic(char);
    int longest(char []);
    int i;
    char line[100];
    printf("input one line:\n");
    gets(line);
    printf("The longest word is:");
    for(i=longest(line);alphabetic(line[i]);i++)
        printf("%c",line[i]);
    printf("\n");
    return 0;
}
int alphabetic(char c)
{
    if((c>='a' && c<='z') || (c>='A' && c<='Z'))
        return(1);
    else
        return(0);
}
int longest(char string[])
{
    int len=0,i,length=0,flag=1,place=0,point;
    for(i=0;i<=strlen(string);i++)
        if(alphabetic(string[i]))//是字母的时候执行此操作 
            if(flag)
            {
                point=i;//记录单词开始的位置 
                flag=0;//未开始,用来跳转统计单词数 
            }
            else
                len++;//统计单词数 
        else//不是字母的时候执行此操作(空格) 
        {
            flag=1;
            if(len>=length)
            {
                length=len;//最长单词的个数 
                place=point;//最长单词开始的位置 
                len=0;
            }
        }
    return(place);
}
/*Dev-c++输出结果: 
    input one line:
    i am a student
    The longest word is:student
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写一个函数,用“起泡法”对输入的10个字符按有小到大顺序排列 
    位置:C程序设计(第四版)2010年6月第四版 218页习题11
*/
#include<stdio.h>
#include<string.h>
#define N 10
char str[N];
int main()
{   
    void sort(char []);
    int i,flag;
    for(flag=1;flag==1;)
    {
        printf("input string:\n");
        scanf("%s",&str);
        if(strlen(str)>N)
            printf("string too long,input again!\n");
        else
            flag=0; 
    }
    sort(str);
    printf("string sorred:\n");
    for(i=0;i<N;i++)
        printf("%c",str[i]);
    printf("\n");
    return 0;
}
void sort(char str[])
{
    int i,j;
    char t;
    for(j=1;j<N;j++)//冒泡排序法 
        for(i=0;(i<N-j) && (str[i]!='\0');i++)
            if(str[i]>str[i+1])//两两比较 
            {
                t=str[i];
                str[i]=str[i+1];
                str[i+1]=t;
            }   
} 
/*Dev-c++输出结果: 
    input string:
    ddffertyujj
    string too long,input again!
    input string:
    asdfghjklo
    string sorred:
    adfghjklos
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:用牛顿迭代法求根。方程:ax^3+bx^2+cx+d=0;系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出跟后由主函数输出 
    公式:x=x0-f(x0)/f'(x0) 
    位置:C程序设计(第四版)2010年6月第四版 218页习题12
*/
#include<stdio.h>
#include<math.h>
int main()
{   
    float solut(float a,float b,float c,float d);
    float a,b,c,d;
    printf("input a,b,c,d:");
    scanf("%f,%f,%f,%f",&a,&b,&c,&d);
    printf("x=%10.7f\n",solut(a,b,c,d));
    return 0;
}
float solut(float a,float b,float c,float d)
{
    float x=1,x0,f,f1;
    do
    {
        x0=x;
        f=((a*x0+b)*x0+c)*x0+d;
        f1=(3*a*x0+2*b)*x0+c;
        x=x0-f/f1;
    }
    while(fabs(x-x0)>=1e-3);
    return(x);
}
/*Dev-c++输出结果: 
    input a,b,c,d:1,2,3,4
    x=-1.6506293
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:用递归方式求n阶勒让德多项式的值,递归公式为:
    公式:Pn(x)=1(n=0);
          Pn(x)=x(n=1);
          Pn(x)=((2n-1)*x-(Pn-1)(x)-(n-1)*(Pn-2)(x))/n(n>=1) 
    位置:C程序设计(第四版)2010年6月第四版 219页习题13
*/
#include<stdio.h>
int main()
{   
    int x,n;
    float p(int,int);
    printf("\ninput n & x:");
    scanf("%d,%d",&n,&x);
    printf("n=%d,x=%d\n",n,x);
    printf("P%d(%d)=%6.2f\n",n,x,p(n,x));
    return 0;
}
float p(int n,int x)
{
    if(n==0)
        return(1);
    else if(n==1)
        return(x);
    else
        return(2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x)/n; 
}
/*Dev-c++输出结果: 

    input n & x:0,7
    n=0,x=7
    P0(7)=  1.00
*/
/*Dev-c++输出结果: 

    input n & x:1,2
    n=1,x=2
    P1(2)=  2.00
*/
/*Dev-c++输出结果: 

    input n & x:3,4
    n=3,x=4
    P3(4)=947.33
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:输入10个学生5门的成绩,分别用函数实现下列功能:
          1.计算每个学生的平均分;
          2.计算每门课的平均分;
          3.找出所有50个分数中最高的分数所对应的学生和课程;
          4.计算平均分方差:
          公式:σ=(∑xi^2)/n-(∑xi/n)^2;其中xi为某一学生的平均分 
    位置:C程序设计(第四版)2010年6月第四版 219页习题14
*/
#include<stdio.h>
#define N 10
#define M 5 
float score[N][M];
float a_stu[N],a_cour[M];
int r,c;
int main()
{   
    int i,j;
    float h;
    //函数声明 
    float s_var(void);
    float highest();
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();//输入10个学生成绩 
    aver_stu();//计算10个学生的平均成绩 
    aver_cour();//计算5门课的平均成绩 
    printf("\nNO.\tcour1\t cour2\t cour3\t cour4\t cour5\t aver\n");//输出标题行 
    for(i=0;i<N;i++)
    {
        printf("\nNO %2d ",i+1);//输出标题列 
        for(j=0;j<M;j++)//输出10个学生分成绩和 
            printf("%8.2f",score[i][j]);
        printf("%8.2f\n",a_stu[i]);//输出10个学生的平均成绩 
    }
    printf("\naverage:");
    for(j=0;j<M;j++)//输出5门课的平均成绩 
        printf("%8.2f",a_cour[j]);
    printf("\n");
    h=highest();
    printf("highest:%7.2f NO. %2d course %2d\n",h,r,c);
    printf("variance: %8.2f\n",s_var());
    return 0;
}
void input_stu(void)//输入10个学生成绩的函数 
{
    int i,j;
    for(i=0;i<N;i++)//10个学生 
    {
        printf("\ninput score of student%2d:\n",i+1);
        for(j=0;j<M;j++)//5门课 
            scanf("%f",&score[i][j]);
    }   
} 
void aver_stu(void)//计算10个学生平均成绩的函数 
{
    int i,j;
    float s;
    for(i=0;i<N;i++)
    {
        for(j=0,s=0;j<M;j++)//计算每个学生的成绩和 
            s+=score[i][j];
        a_stu[i]=s/5.0;//计算每个学生的平均成绩 
    }
}
void aver_cour(void)//计算5门课平均成绩的函数 
{
    int i,j;
    float s;
    for(j=0;j<M;j++)
    {
        s=0;
        for(i=0;i<N;i++)//计算每门课的成绩和 
            s+=score[i][j];
        a_cour[j]=s/(float)N;//计算没门课的平均成绩 ,强制转成成浮点型 
    }
}
float highest()//求最高分和它属于哪个学生,哪门课的函数 
{
    float high;
    int i,j;
    high=score[0][0];
    for(i=0;i<N;i++)//选择排序法 
        for(j=0;j<M;j++)
            if(score[i][j]>high)
            {
                high=score[i][j];
                r=i+1;//记录哪个学生 
                c=j+1;//记录哪门课 
            }
    return(high);
}
float s_var(void)//求方差的函数 
{
//公式:σ=(∑xi^2)/n-(∑xi/n)^2; 
    int i;
    float sumx,sumxn;
    sumx=0.0;
    sumxn=0.0;
    for(i=0;i<N;i++)//累加每个学生 
    {
        sumx+=a_stu[i]*a_stu[i];//∑xi^2
        sumxn+=a_stu[i];//∑xi 
    }
    return(sumx/N-(sumxn/N)*(sumxn/N));//返回平方差 
} 
/*Dev-c++输出结果: 

    input score of student 1:
    78 78 88 78 98.2

    input score of student 2:
    56 65 45 78 98.2

    input score of student 3:
    65 45 87 32 56.3

    input score of student 4:
    56 12 78 65 32.2

    input score of student 5:
    12 65 12 32 45.3

    input score of student 6:
    23 65 89 45 12.6

    input score of student 7:
    13 65 98 56 32

    input score of student 8:
    56 32 56 45 98

    input score of student 9:
    32 56 45 98 56.2

    input score of student10:
    100 99 98 97 96.5

    NO.     cour1    cour2   cour3   cour4   cour5   aver

    NO  1    78.00   78.00   88.00   78.00   98.20   84.04

    NO  2    56.00   65.00   45.00   78.00   98.20   68.44

    NO  3    65.00   45.00   87.00   32.00   56.30   57.06

    NO  4    56.00   12.00   78.00   65.00   32.20   48.64

    NO  5    12.00   65.00   12.00   32.00   45.30   33.26

    NO  6    23.00   65.00   89.00   45.00   12.60   46.92

    NO  7    13.00   65.00   98.00   56.00   32.00   52.80

    NO  8    56.00   32.00   56.00   45.00   98.00   57.40

    NO  9    32.00   56.00   45.00   98.00   56.20   57.44

    NO 10   100.00   99.00   98.00   97.00   96.50   98.10

    average:   49.10   58.20   69.60   62.60   62.55
    highest: 100.00 NO. 10 course  1
    variance:   318.80
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写几个函数:
          1.输入10个职工号的姓名和职工号;
          2.按职工号由小到大顺序排序,姓名顺序也随之调整;
          3.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工号姓名 
    位置:C程序设计(第四版)2010年6月第四版 219页习题15
*/
#include<stdio.h>
#include<string.h>
#define N 10 
int main()
{   
    //函数声明 
    void input(int [],char name[][8]);
    void sort(int [],char name[][8]);
    void search(int ,int [],char name[][8]);
    int num[N],number,flag=1,c;
    char name[N][8];
    input(num,name);//输入函数,都是数组,传的是数组首地址,并且回改变原来的值 
    sort(num,name);//排序函数 
    while(flag==1)
    {
        printf("\ninput number to look for:");
        scanf("%d",&number);
        search(number,num,name);//查找函数 
        printf("continue or not(Y/N)?");
        getchar();//吃掉回车符 
        c=getchar();//获取输入的字符 
        if(c=='N' || c=='n')//是否继续查找 
            flag=0; 
    }
    return 0;
}
void input(int num[],char name[][8])//输入数据函数 ,名字不能超过8个字符 
{
    int i;
    for(i=0;i<N;i++)
    {
        printf("input NO.:");
        scanf("%d",&num[i]);
        printf("input name:");
        getchar();//处理输入完NO.后的换行符,不然会直接被gets取得 
        gets(name[i]);//读入10个名字 

    }
}
void sort(int num[],char name[N][8])//排序函数(第六章第2题) 
{
    int i,j,min,temp1;
    char temp2[8];
    for(i=0;i<N-1;i++)//行 
    {
        min=i;
        for(j=i;j<N;j++)//列 
            if(num[min]>num[j])//按工号排序,选择排序法 
                min=j;
        //交换给中间变量 ,工号和名字 
        temp1=num[i]; 
        strcpy(temp2,name[i]); 
        //正式交换 ,工号和名字 
        num[i]=num[min];
        strcpy(name[i],name[min]);
        //中间变量返回给原来值 ,工号和名字 
        num[min]=temp1;
        strcpy(name[min],temp2);
    }
    printf("\n result:\n");
    for(i=0;i<N;i++)//输出工号和名字 
        printf("\n%5d%10s",num[i],name[i]);
}
void search(int n,int num[],char name[N][8])//折半查找函数(第六章第9题) 
{
//先要排序,sort函数已经完成排序,所以这里不用再排序了 
    int top,bott,mid,loca,sign;
    top=0;
    bott=N-1;
    loca=0;
    sign=1;
    if((n<num[0]) || (n>num[N-1]))
        loca=-1;
    while((sign==1) && (top<=bott))
    {
        mid=(bott+top)/2;
        if(n==num[mid])//如果刚好是中间值直接输出 
        {
            loca=mid;
            printf("NO.%d,his name is %s.\n",n,name[loca]);
            sign=-1;//标记找到 
        }
        else if(n<num[mid])
        {
            bott=mid-1//前面到中间 
        }
        else
            top=mid+1;//中间到后面 
    }
    if(sign==1 || loca==-1)
        printf("%d not been found.\n");
} 
/*Dev-c++输出结果: 
    input NO.:10
    input name:f10
    input NO.:9
    input name:f9
    input NO.:8
    input name:f8
    input NO.:7
    input name:f7
    input NO.:6
    input name:f6
    input NO.:5
    input name:f5
    input NO.:4
    input name:f4
    input NO.:3
    input name:f3
    input NO.:2
    input name:f2
    input NO.:1
    input name:f1

     result:

        1        f1
        2        f2
        3        f3
        4        f4
        5        f5
        6        f6
        7        f7
        8        f8
        9        f9
       10       f10
    input number to look for:1
    NO.1,his name is f1.
    continue or not(Y/N)?y

    input number to look for:5
    NO.5,his name is f5.
    continue or not(Y/N)?y

    input number to look for:9
    NO.9,his name is f9.
    continue or not(Y/N)?y

    input number to look for:6
    NO.6,his name is f6.
    continue or not(Y/N)?n
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:写一个函数,输入一个十六进制数,输出相应的十进制数 
    位置:C程序设计(第四版)2010年6月第四版 219页习题16
*/
#include<stdio.h>
#define MAX 1000 
int main()
{   
    int a;
    int htoi(char s[]);
    int c,i,flag,flag1;
    char t[MAX];
    i=0;
    flag=0;
    flag1=1;
    printf("input a HEX number:");
    while((c=getchar())!='\0' && i<MAX && flag1)//当没有换行没有超过最大值没有标记结束的时候一直可以输入 
    {
        if(c>='0' && c<='9' || c>='a' && c<='f' || c>='A' && c<='F')
        {
            flag=1;
            t[i++]=c;//将输入的字符一个个赋值到新的数组t中 
        }
        else if(flag)
        {
            t[i]='\0';//添加一个换行符 
            printf("decimal number: %d\n",htoi(t));
            printf("continue or not?");
            c=getchar();//获得输入的内容 
            if(c=='N' || c=='n')
                flag1=0;//结束标记 
            else
            {
                flag=0;
                i=0;
                printf("\ninput a HEX number:");
            }
        }       
    }
    return 0;
}
int htoi(char s[])
{
    int i,n;
    n=0;
    for(i=0;s[i]!='\0';i++)//当没有遇到换行符的时候一直执行 
    {
        //十六进制转十进制的计算机方法 
        if(s[i]>='0' && s[i]<='9')
            n=n*16+s[i]-'0';
        if(s[i]>='a' && s[i]<='f')
            n=n*16+s[i]-'a'+10;
        if(s[i]>='A' && s[i]<='F')
            n=n*16+s[i]-'A'+10;
    }   
    return(n);
}
/*Dev-c++输出结果: 
    input a HEX number:a11
    decimal number: 2577
    continue or not?y

    input a HEX number:a12
    decimal number: 2578
    continue or not?y

    input a HEX number:f11
    decimal number: 3857
    continue or not?n
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:用递归发将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数 
    位置:C程序设计(第四版)2010年6月第四版 219页习题17
*/
#include<stdio.h>
int main()
{   
    void convert(int n);
    int number;
    printf("input an integer:");
    scanf("%d",&number);
    printf("output:");
    if(number<0)//如果是负数 
    {
        putchar('-');//输出符号 
        putchar(' ');//输出空格 
        number=-number;//转换成正数 
    }
    convert(number);
    printf("\n");
    return 0;
}
void convert(int n)
{
    int i;
    if((i=n/10)!=0)
        convert(i);//递归调用输出是反过来的 
    putchar(n%10+'0');//ASCII的'0'是48,这里意思是输出字符'0'开始的第余数个
    //可以写成 putchar(n%10+48);
    putchar(32);//输出空格 
}
/*Dev-c++输出结果: 
    input an integer:2345678
    output:2 3 4 5 6 7 8
*/
/*Dev-c++输出结果: 
    input an integer:-123456
    output:- 1 2 3 4 5 6
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:给出年、月、日,计算该日是该年的第几天 
    位置:C程序设计(第四版)2010年6月第四版 219页习题18
*/
#include<stdio.h>
int main()
{   
    //函数声明 
    int sum_day(int month,int day);
    int leap(int year);
    int year,month,day,days;
    printf("input date(year,month,day):");
    scanf("%d,%d,%d",&year,&month,&day);
    printf("%d/%d/%d",year,month,day);
    days=sum_day(month,day);//计算是当年的第几天 
    if(leap(year) && month>=3)//如果是闰年并且在3月份后加1天,因为闰年是366天 
        days=days+1;
    printf(" is the %dth day in this year.\n",days);
    return 0;
}
int sum_day(int month,int day)//计算日期函数 
{
    int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//每个月的日数 
    int i;
    for(i=1;i<month;i++)//从一月份开始累加天数到当月的日 
        day+=day_tab[i];
    return(day);
}
int leap(int year)//判断是否为闰年函数 
{
    int leap;
    leap = year%4==0 && year%100!=0 || year%400==0;//可以被4整除不能被100整除或者可以被400整数的是闰年(一真为真) 
    return(leap);
}
/*Dev-c++输出结果: 
    input date(year,month,day):2008,8,8
    2008/8/8 is the 221th day in this year.
*/
/*Dev-c++输出结果: 
    input date(year,month,day):2017,12,29
    2017/12/29 is the 363th day in this year.
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:通过指针变量访问整型变量(指针) 
    位置:C程序设计(第四版)2010年6月第四版 222页例8.1 
*/
#include<stdio.h>
int main()
{   
    int a=100,b=10;
    int * pointer_1,* pointer_2;
    pointer_1=&a;
    pointer_2=&b;
    printf("a=%d,b=%d\n",a,b);
    printf("* pointer_1=%d,* pointer_2=%d\n",* pointer_1,* pointer_2); 
    return 0;
}
/*Dev-c++输出结果: 
    a=100,b=10
    * pointer_1=100,* pointer_2=10
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:输入a和b两个整数,按先大后小的顺序输出a和b(指针) 
    位置:C程序设计(第四版)2010年6月第四版 225页例8.2
*/
#include<stdio.h>
int main()
{   
    int * p1, *p2, * p,a,b;
    printf("please enter two integer numbers:");
    scanf("%d,%d",&a,&b);
    p1=&a;
    p2=&b;
    if(a<b)
    {
//      p=p1;
//      p1=p2;
//      p2=p;
        p1=&b;//直接交换地址 
        p2=&a;
    }
    printf("a=%d,b=%d\n",a,b);
    printf("max=%d,min=%d\n",* p1,* p2); 
    return 0;
}
/*Dev-c++输出结果: 
    please enter two integer numbers:1,2
    a=1,b=2
    max=2,min=1
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:题目要求同例8.2,即对输入的两个整数按大小顺序输出。现用函数出来,而且用指针类型的数据作函数参数(指针)
    位置:C程序设计(第四版)2010年6月第四版 226页例8.3
*/
#include<stdio.h>
int main()
{   
    void swap(int * p1,int * p2);
    int a,b;
    int * pointer_1, * pointer_2;
    printf("please enter a and b:");
    scanf("%d,%d",&a,&b);
    pointer_1=&a;//使pointer_1指向a 
    pointer_2=&b;//使pointer_2指向b 
    if(a<b)
        swap(pointer_1,pointer_2);//传地址 
    printf("max=%d,min=%d\n",a,b); 
    return 0;
}
void swap(int * p1,int *p2)
{
    int temp;//* p1和 * p2互换,值互换 
    temp= * p1;
    * p1= * p2;
    * p2=temp;  
} 
/*Dev-c++输出结果: 
    please enter a and b:2,3
    max=3,min=2
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:对输入的两个整数按大小顺序输出(指针):本题是错误示范! 
    位置:C程序设计(第四版)2010年6月第四版 228页例8.4
*/
#include<stdio.h>
int main()
{   
    void swap(int * p1,int * p2);
    int a,b;
    int * pointer_1, * pointer_2;
    printf("please enter two integer numbers:");
    scanf("%d,%d",&a,&b);
    pointer_1=&a;
    pointer_2=&b;
    if(a<b)
        swap(pointer_1,pointer_2);
    printf("max=%d,min=%d",a,b);
    return 0;
}
void swap(int * p1,int *p2)//不能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向的值(重点) 
{
    int * p;
    p=p1;
    p1=p2;
    p2=p;
} 
/*Dev-c++输出结果: 
    please enter two integer numbers:5,6
    max=5,min=6
*/


/*  创建时间:20171229
    创建人:fangweijun(773714759@qq.com)
    功能:输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现(指针) 
    位置:C程序设计(第四版)2010年6月第四版 230页例8.5
*/
#include<stdio.h>
int main()
{   
    void exchange(int * q1,int * q2,int * q3);//函数声明 
    int a,b,c,* p1,* p2,* p3;
    printf("please enter three numbers:");
    scanf("%d,%d,%d",&a,&b,&c);
    p1=&a;
    p2=&b;
    p3=&c;
    exchange(p1,p2,p3);//传地址 
    printf("The order is:%d,%d,%d\n",a,b,c);
    return 0;
}
void exchange(int * q1,int * q2,int * q3)//定义将3个变量的值交换的函数 
{
    void swap(int * p1,int * p2);
    if(* q1<* q2)
        swap(q1,q2);
    if(* q1<* q3)
        swap(q1,q3);
    if(* q2<* q3)
        swap(q2,q3);
} 
void swap(int * pt1,int * pt2)//定义交换两个变量的值的函数 
{
    int temp;
    temp =* pt1;
    * pt1=* pt2;
    * pt2=temp;
}
/*Dev-c++输出结果: 
    please enter three numbers:4,5,6
    The order is:6,5,4
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值