练习2:
(p+i)->(*(p+i)).
在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)
1>调用函数在堆区申请空间
2>调用函数实现输入
3>调用函数对价格排序
4>调用函数输出
5>释放堆区空间
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
struct cat
{
char name[10];
char colour[10];
int price;
};
struct cat *SPACE();
void Input(struct cat *p,int n);
void PRICE(struct cat *p,int n);
void PRINTF(struct cat *p,int n);
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
int n=5;
struct cat *p = SPACE(n);
Input(p,n);
PRICE(p,n);
PRINTF(p, n);
free(p);
return 0;
}
test.c
#include "head.h"
struct cat *SPACE(int n)
{
struct cat *p=(struct cat*)malloc(sizeof(struct cat)*n);
if(p==NULL)
return NULL;
else
return p;
}
void Input(struct cat *p,int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("请输入品牌名:\n");
scanf("%s",(p+i)->name);
printf("请输入车辆颜色:\n");
scanf("%s",(p+i)->colour);
printf("请输入价格:\n");
scanf("%d",&(p+i)->price);
}
}
void PRICE(struct cat *p,int n)
{
int i,j;
struct cat t;
int count=0;
for(i=0;i<n;i++)
{
count=0;
for(j<0;j<n-i-1;j++)
{
if((p+j)->price>(p+j+1)->price)
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
count++;
}
}
if(count==0)
break;
}
}
void PRINTF(struct cat *p,int n)
{
for(int i=0;i<n;i++)
{
printf("品牌名:%s\t",(p+i)->name);
printf("颜色:%s\t",(p+i)->colour);
printf("价格:%d\n",(p+i)->price);
}
}
练习1:定义5学生结构体(姓名name,年龄age,分数score) ,多文件编译
1>定义函数实现输入2>定义函数计算平均分数
3>定义函数计算最大年龄的信息
4>定义函数实现按照分数升序排序
5>定义函数输出
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
char name[20];
int age;
float score;
};
void StructInput (struct student s[],int n);
void StructOutput (struct student s[],int n);
void maopaoscore(struct student s[],int n);
int maxage(struct student s[],int n);
float adverg(struct student s[],int n);
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
struct student s[3];
StructInput(s,3);
printf("平均值:%.2f\n",adverg(s,3));
maxage(s,3);
maopaoscore(s,3);
StructOutput(s,3);
return 0;
}
test.c
#include "head.h"
void StructInput (struct student s[],int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("输入名字");
scanf("%s",s[i].name);
printf("输入年龄");
scanf("%d",&s[i].age);
printf("输入分数");
scanf("%f",&s[i].score);
}
}
void StructOutput (struct student s[],int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("姓名:%s\t",s[i].name);
printf("年龄:%d\t",s[i].age);
printf("分数:%.2f\n",s[i].score);
}
}
float adverg(struct student s[],int n)
{
float a=0;
for(int i=0;i<n;i++)
{
a+= s[i].score;
}
return a/n;
}
int maxage(struct student s[],int n)
{ int max=0;
for(int i=0;i<n;i++)
{
if(i==0)
{
max=s[i].age;
}
if(max<s[i].age)
{
max=s[i].age;
}
}
return max;
}
void maopaoscore(struct student s[],int n)
{
int i=0;
int j=0;
int count =0;
struct student t;
for(i=0;i<n;i++)
{
count =0;
for(j=0;j<n-i-1;j++)
{
if(s[j].score>s[j+1].score)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
count++;
}
}
if(count==0)
break;
}
}
多文件编译
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
void MyStrrev(char *p,int j);
char *MyStrcpy(char *s1,const char *s2,int i,int j);
int MyStrcmp(const char *s1,const char *s2);
void PRINTF(char *p);
long MyStrlen(const char *dest);
#endif
main.c
#include "head.h"
#include <stdio.h>
int main(int argc, const char *argv[])
{
char arr[20]="ABCHC";
char brr[]="HELLO";
MyStrrev(arr,MyStrlen(arr));
printf("%s\n",arr);
char *a = MyStrcpy(arr,brr,MyStrlen(arr),MyStrlen(brr));
printf("%s\n",a);
MyStrrev(arr,MyStrlen(arr));
int sub=MyStrcmp(arr,brr);
printf("%d\n",sub);
return 0;
}
test.c
ude "head.h"
void MyStrrev(char *p,int j)
{
int i;
char t=0;
for(i=0;i<j;i++)
{
t=*(p+i);
*(p+i)=*(p+j-1);
*(p+j-1)=t;
j--;
}
}
char *MyStrcpy(char *s1,const char *s2,int i,int j)
{
while(*s2!='\0')
{
*s1=*s2;
s1++;s2++;
}
*s1='\0';
return s1-5 ;
}
int MyStrcmp(const char *s1,const char *s2)
{
int k=0;int sub=0;
while(*(s1+k)==*(s2+k)&&*(s1+k)!='\0')
{
k++;
}
if(*(s1+k)!=*(s2+k))
{
sub=*(s1+k)-*(s2+k);
return sub;
}
else
return 0;
}
void PRINTF(char *p)
{
int i=MyStrlen(p);
for(int j=0;j<i;j++)
{
printf("%c",p[j]);
}
printf("\n");
}
long MyStrlen(const char *dest)
{ int i=0;
while(*(dest))
{
dest++;
i++;
}
return i;
}