C
2017 7 22
1、函数封装与调用,输入一组数字,并计算和打印
#include"stdio.h"
/*------------------------------------------------
@函数原型声明
------------------------------------------------*/
void input_array(int *p,int *len); //输入函数
void output_array(int *p,int len); //输出函数
float calculate_array(int *p,int len); //数据处理
/*-----------------------------------------------
@主函数
------------------------------------------------*/
int main()
{
int array[30]={0}; //定义数组,预留30个元素空间
int len=0; //定义长度,用来记录 输入的数字的个数
float ave=0; //浮点型 数据,存储 平均值结果
input_array(array,&len); //调用输入函数
printf("输入的数组:");
output_array(array,len); //输出存入的数组
printf("%d\n",len);
ave=calculate_array(array,len); //进行数据计算
printf("平均值是%f\n",ave); //输出计算结果
return 0;
}
/*------------------------------------------------
@子函数:输入函数,传入数组首地址,长度变量的空间地址
------------------------------------------------*/
void input_array(int *p,int *len)
{
//传入数组 和数字
printf("请输入一批正数,以-1为结束标志!\n");
int i=1;
while(1)
{
printf("第%d个:",i++);
scanf("%d",p); //p是数组指针
if(*p==-1)
{
break;
}
++(*len); //用于计数
p++;
}
}
/*------------------------------------------------
@子函数:输出函数,一次输出全部数据
------------------------------------------------*/
void output_array(int *p,int len)
{
int i=0;
for(i=0;i<len;i++)
{
printf("%d ",*p);
p++;
}
printf("\n");
}
/*------------------------------------------------
@子函数:数据计算
------------------------------------------------*/
float calculate_array(int *p,int len)
{
float sum=0;
int i=0;
for(i=0;i<len;i++)
{
sum+=*p++; //算出数据和
}
return sum/(len); //返回平均值
}
运行结果:
[root@localhost Kshine]# gcc test22.c -o test -Wall
[root@localhost Kshine]# ./test
请输入一批正数,以-1为结束标志!
第1个:1
第2个:2
第3个:3
第4个:4
第5个:5
第6个:-1
输入的数组:1 2 3 4 5
5
平均值是3.000000
2、找出10个整型数中最大和最小值,并分别换到数组的头和尾
#include"stdio.h"
/*
@函数原型声明
*/
void input_array(int *); //输入
void output_array(int *); //输出
void deal_array(int *); //数据处理
int main()
{
int array[10]={0}; //定义数组
input_array(array); //调用输入函数
printf("交换前:");
output_array(array); //输出数组(还未交换)
deal_array(array); //数据处理,开始交换数据
printf("交换后:");
output_array(array); //输出交换之后的数组
return 0;
}
/*----------------------------------------------------
@子函数:输入函数,接受10个整数
----------------------------------------------------*/
void input_array(int *p)
{
int i=0;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
{
// printf("第%d个数:",i+1);
scanf("%d",p);
p++;
}
}
/*------------------------------------------------------
@子函数:数据处理,将最大最小放置到两端。
----------------------------------------------------*/
void deal_array(int *p)
{
int flag_min=0,flag_max=0; //用于记录 最大值和最小值的下标
int i=0; //用于循环计数
int *p1=p; //被操作的指针
int max_num=*p,min_num=*p; //记录最大值和最小值,用于循环比较。
for(i=0;i<10;i++)
{
if(*p1>=max_num)
{
flag_max=i; //存储 序号
max_num=*p1; //存储 最大值
}
if(*p1<=min_num)
{
flag_min=i;
min_num=*p1;
}
p1++;
}
printf("最小值在数组的%d位置,最大在 %d位置\n",flag_min+1,flag_max+1); //用于调试显示
//开始交换,最小的放到最前面,最大的放在后面
p1=p;
for(i=0;i<10;i++,p1++)
{
if(i==flag_min&&flag_min!=0) //指针走到了最小值的位置,对应的下标i等于flag_min
{
*p=*p^*p1;
*p1=*p^*p1;
*p=*p^*p1; //完成数据交换 ,把最小放到 0位置
if(flag_max==0) //如果最大的数字恰巧在第一个,为了防止第一个数值先被交换(这样会改变最大的位置)
{
flag_max=i; //最大值的位置就会转移到当前指针所在的位置
continue; //跳过本次循环防止进入 下方的最大值的交换过程。
}
}
if(i==flag_max&&flag_max!=9) //指针走到最大值的位置,对应的下表i等于flag_max
{
*(p+9)=*(p+9)^*p1;
*p1=*(p+9)^*p1;
*(p+9)=*(p+9)^*p1; //这里已经把 最大放到 9位置
if(flag_min==9) //如果最小恰巧在最后一个位置,这样可能会被提前交换到别的位置,需要改变最小的记录位置
{
flag_min=i;
continue; //跳过本次循环,留作对称之用,可以不加。
}
}
}
}
/*------------------------------------------------------
@子函数:输出函数,将数组中的数据一次输出。
-----------------------------------------------------*/
void output_array(int *p)
{
int i=0;
for(i=0;i<10;i++)
{
printf("%d ",*p);
p++;
}
printf("\n");
}
运行结果:
[root@localhost Kshine]# gcc test21.c -o test -Wall
[root@localhost Kshine]# ./test
请输入10个整数:
23 13 2 3 1 32 12 31 33 22
交换前:23 13 2 3 1 32 12 31 33 22
最小值在数组的5位置,最大在 9位置
交换后:1 13 2 3 23 32 12 31 22 33
3、字符串的倒置
#include"stdio.h"
void upturn_string(char *);
int main()
{
char str[30]="";
printf("请输入一个字符串:\n");
scanf("%s",str);
printf("倒置前:");
puts(str);
upturn_string(str);
printf("倒置后:");
puts(str);
return 0;
}
void upturn_string(char *str)
{
char *p=str,*q=str;
while(*q)q++;
q--;
while(p<q)
{
*p=*p^*q;
*q=*p^*q;
*p=*p^*q;
p++;
q--;
}
}
运行结果:
[root@localhost Kshine]# gcc test23.c -o test -Wall
[root@localhost Kshine]# ./test
请输入一个字符串:
Kshine2017
倒置前:Kshine2017
倒置后:7102enihsK