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");
}
}
- C语言--指针和函数(2)
- C语言入门(十九)指针函数和函数指针
- C语言--指针函数和函数指针
- c 语言 函数指针和指针函数
- C语言-函数指针和指针函数
- C语言---指针和函数(1)
- c语言二级指针和函数指针
- 【C语言】[指针]:指针函数 和 函数指针
- C语言中的函数和函数指针
- C语言(函数指针)
- C语言入门教程 (十七) 指针函数和函数指针
- C语言:分清函数指针和指针函数
- c语言中指针函数和函数指针
- C语言指针函数和函数指针详细介绍
- C语言指针函数和函数指针详细介绍
- c语言学习笔记之函数指针和指针函数
- 详细介绍C语言指针函数和函数指针
- C语言指针函数和函数指针详细介绍
- Notification发出指定的提示音
- hdu 4390 Number Sequence 【容斥原理】
- [jQuery]使用jQuery.Validate进行客户端验证(高级篇-下)——不使用微软验证控件的理由
- 由于Nginx配置文件问题导致打不开网站
- Oracle 数据泵详解
- C语言--指针和函数(2)
- HDU 4274 spy work (树形DP)
- 外语学习的真实方法及误区分析
- linux登录键盘无响应问题的解决方法
- DedeCMS V5.7 SP1文档关键词频率研究与测试
- Lwip入门(2)--ARP
- Ubuntu12.04编译ANDROID ICS出错解决方法
- JAVA中常用英文简写全拼及中文含义
- 禁止后退键(Backspace)终极方案