//字符串插入
#include<stdio.h>
#include<string.h>
#include<conio.h>
const char *insert(const char *s,const char *q,int n);
main()
{
const char *strin,*str;
int i;
str="Hello World!";
strin=" big ";
printf("please input the position you want to insert:");
scanf("%d",&i);
printf("The original string:%s",str);
str=insert(str,strin,i);
// printf("\n%s",str);
getch();
}
const char *insert(const char *s,const char *q,int n)
{
int i=0;
char *str,strcp[50];
str=strcp; //把数组首地址赋给指针变量
for(i=0;*s!='\0';i++)
{
if(i==n-1)
{
for(;*q!='\0';)
{
str[i]=*q;
q++;
i++;
}
}
str[i]=*s;
s++;
}
str[i+1]='\0';
printf("\n%s",str);
return str;
}
/*第一个程序就编译运行有问题,难受,香菇。。
[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
百度得:char* 背后含义 :给我个字符串,我要修改它。
而理论上,我们传给函数的字面常量是没法被修改的。
所以说,比较合理的办法是把参数类型修改为const char *。
这个类型说背后的含义是:给我个字符串,我只要读取它。
*/
//删除数组中的连续元素
//删除数组a中第i个元素开始的共n个元素
#include<stdio.h>
int dele(int b[],int m,int i,int n)
{
int *p,*q;
if(i<1&&i+n>m) //error
return 0;
for(q=b+i,p=b+i+n;q<b+m;p++,q++)//q是第i个元素,p是第i+n个元素
{
*q=*p;
}
return m-n;
}
main()
{
int a[10];
int *p=a;
int i,n,m;
printf("Enter data to a:");
while(p<a+10)
scanf("%d",p++);
printf("Enter the position and length of data:\n");
scanf("%d%d",&i,&n);
m=dele(a,10,i,n);
if(m==0)
{
printf("Error!");
}
else
{
printf("\n");
for(p=a;p<a+m;p++)
{
printf("%3d",*p);
}
printf("\n");
}
}
//输出销售额
//某家公司有A,B,C三个销售地点,知道上一年每个销售地点每个季度的销售额,求用指针实现在输入某个销售地点的序号后,可以输出该销售地的每季度销售额和全年总销售额。
#include<stdio.h>
main()
{
float a[3][4]={{7.2,13.5,16.4,12.3},{6.4,12.8,16.2,14.5},{4.6,11.3,12.4,8.2}};
float *cha(float (*a)[4],int n); //定义指向函数的指针
float *p,sum=0;
int i,n;
printf("Enter the n(1-3):\n");
scanf("%d",&n);
printf("%d data:\n",n);
p=cha(a,n);
for(i=0;i<4;i++)
{
sum=sum+*(p+i);
printf("%.2f ",*(p+i));
}
printf("\nThe total is %.2f\n",sum);
}
float *cha(float (*a)[4],int n)
{
float *q;
q=*(a+n-1); //要的行 的第0列 :实现行列转换控制
return q;
}