C语言--指针和函数(2)

来源:互联网 发布:qq飞车暗夜尊影数据 编辑:程序博客网 时间:2024/05/17 23:35

1、输入3个数,按从小到大的顺序输出;

#include<stdio.h>
int min(int *p1,int *p2)
{
    if(*p1>*p2)
        return *p2;
    else
        return *p1;
}
int max(int *p1,int *p2)
{
    if(*p1<*p2)
        return *p2;
    else
        return *p1;
}

void sort(int *p1,int *p2,int *p3)
{
    int *t,x,y,z;
    t=min;
    *t=min(p1,p2);
    x=min(t,p3);
    *t=max(p1,p2);
    z=max(t,p3);
    if((*p1==x&&*p2==z)||(*p2==x&&*p1==z))
        y=*p3;
    else if((*p2==x&&*p3==z)||(*p3==x&&*p2==z))
        y=*p1;
    else
        y=*p2;
    *p1=x;*p2=y;*p3=z;
}
void main(){
   int a,b,c;
   int *p1,*p2,*p3;
   p1=&a;
   p2=&b;
   p3=&c;
   a=1;b=2;c=3;
   sort(p1,p2,p3);
     printf("排序好后为:\n");
   printf("%d,%d,%d\n",*p1,*p2,*p3);
}

存在问题:运行错误,出错原因还未查出。

2、输入3个字符串,按从小到大的顺序输出;

#include<stdio.h>
#include<string.h>
void sort(char *name[],int n)
{
    char *pt;
    int i,j,k;
    for(i=0;i<n-1;i++){                       排序的方法,同样用在了字符串上。。。先把最小的放在第一个位置,然后再把次小的放在第二个位置。。  循环套循环
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(name[k],name[j])>0)
                k=j;
            if(k!=i){
                pt=name[i];
                name[i]=name[k];
                name[k]=pt;

            }
    }
}

void print(char *name[],int n){
    int i;
    for(i=0;i<n;i++)
        printf("%s\n",name[i]);
}

void main(){
 void sort(char *name[],int n);
 void print(char *name[],int n);
 static char *name[]={"CHINA","AMERICA","AUSTRALIA"};
 int n=3;
 sort(name,n);
 print(name,n);
}

 

3、用函数指针实现:                         好题:将学习函数指针的使用。 x(x<0)f(x)=2x-5(0=<x<5) 3x+4(x>=5)

#include<stdio.h>
#include<string.h>

double f1(double x){
    return x;
}
double f2(double x){
    return 2*x-5;
}
double f3(double x){
    return 3*x+4;
}
double f(double x){
    if(x<0)
        return f1(x);
    else if(x>=0&&x<5)                                             函数的嵌套(函数内部调用其他函数)
        return f2(x);
    else if(x>=5)
        return f3(x);
}
void main(){
    double x,z;
    double (*p)(double x);                           函数指针定义
    x=-2;
    p=f;                                                            函数指针赋值
    z=p(x);                                                          函数指针调用
    printf("%f\n",z);

}

 

4、编制函数,在字符串中查找与另一个字符串相等的字符串,函数的返回值为字符串的地址或NULL值。

#include<stdio.h>
#include<string.h>
char *find(char *ps1,char *ps2){                  返回值为指针的函数:函数被调用后,返回值为指针的函数,此类函数成为指针函数。
    int i=0,n=0,j;
    char *pp1,*pp2;
    pp2=ps2;
    while(*pp2){
        n++;
        pp2++;
    }
    for(pp2=ps2;*pp1;pp1++)
        for(j=0;*(pp1+j)==*(pp2+j);j++)
         if(j+1==n){
            return pp1;
         }
}

void main(){
    char st1[100] = "compare to me",st2[14],*ps1,*ps2,*p;
    ps1=st1;
    ps2=st2;
    printf("input a string\n");
    scanf("%s",ps2);
    p=find(ps1,ps2);
    printf("%x",p);
}

5、编写一个程序,输入星期的序号0~6,输出中文的星期名。

#include<stdio.h>
#include<string.h>
char *week_name(int n){                         指针函数定义
                     
    static char *name[8]={      

        "星期七",
        "星期一",
        "星期二",
        "星期三",
        "星期四",
        "星期五",
        "星期六",
        "ILLEGAL"
    };
    return((n<7)?name[n]:name[7]);
}

void main(){
    char *week_name(int);             说明这是一个指针函数,因为函数定义在先,此语句可省略
    int n;
    scanf("%d",&n);
    printf("%s\n",week_name(n));
}

 

6、编写一个带命令行参数的程序prog.c(再思考)

当运行prog filename时,将文本文件filename按原样在标准输出(终端)上输出;

当运行prog -n filename时,将文本文件按原样在标准输出(终端)上输出,并在各行开头显示当前行行号(从1:开始,如1:xxxxxxxxx);其他运行方式均显示出错信息。

#include<stdio.h>
#include<string.h>
void open(char *p){
    FILE *fp;
    char ch;
    fp=fopen(p,"r+");
    ch=fgetc(fp);
    while(!feof(fp))
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    fclose(fp);

}
void nopen(char *p){
    FILE *fp;
    char ch;
    int i=1;
    fp=fopen(p,"rt+");
    printf("%d",i);
    ch=fgetc(fp);
    while(!feof(fp))
    {
        if(ch=='\n')
        {
            putchar(ch);
            ch=fgetc(fp);
            i++;
            printf("%d ",i);
        }else {
            putchar(ch);
            ch=fgetc(fp);
        }
    }
    fclose(fp);

}

void main(int argc,char *argv[]){
    FILE *fp;
    char ch;
    char *st="-n";
    if(argc==2)
    {
        open(argv[1]);
    }else if(argc==3)
    {
        if(strcmp(st,argv[1])==0)
            nopen(argv[2]);
        else printf("第二个命令不对,请输入“-n”或不输入\n");
    }
    else
    {
        printf("命令个数不对,请输入“prog”或“prog -n”加文件名\n");
    }
}

 

原创粉丝点击