结构体,指针实验总结

 结构体

R7-1 计算平均成绩 (20 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

#include<stdio.h>
struct score
{
	char num[100];
	char name[100];//学号和名字分开输入
	double score;
};
int main()
{
	struct score s[10000];
	int i, n;
	double average = 0;
	scanf("%d", &n);
	for (i = 0; i<n; i++)
	{
		scanf("%s %s %lf", &s[i].num, &s[i].name, &s[i].score);
		average += s[i].score;
	}
	average = average / n;
	printf("%.2f\n", average);
	for (i = 0; i < n; i++)
	{
		if (s[i].score <average)//把低于平均分的同学给选出来
		{
			printf("%s %s\n", s[i].name, s[i].num);
		}
	}
	return 0;
}

R7-2 平面向量加法 (20 分)

本题要求编写程序,计算两个二维平面向量的和向量。

#include <stdio.h>
#include <math.h>

int main(){
	
	double x1, y1, x2, y2;
	scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
	double x = x1 + x2;
	double y = y1 + y2;
	if( x > -0.05 )
		x = fabs(x);
	if( y > -0.05 )
		y = fabs(y);
	printf("(%.1f, %.1f)\n", x, y);
	return 0;
}

R7-3 查找书籍 (20 分)

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

#include <stdio.h>
struct shu//定义书的结构体
{
    char a[31];//书名
    double  b;//价格
};
int main()
{
  int n,i,max=0,min=0;
    double temp;
    struct shu m[10];//定义数组,元素为10个书的结构体 
    scanf("%d",&n);//书的数量
	getchar();//吸收scanf函数留下的回车
    for(i=0;i<n;i++)//给数组赋值,就是填写书的信息
    {
        gets(m[i].a);//name
        scanf("%lf",&m[i].b);//price
		getchar();//同理吸收回车符
    }
    for(i=1,temp=m[0].b;i<n;i++)//找最贵的
    {
        if(m[i].b>temp)
        { max=i;
        temp=m[i].b;}
    }
    
    for(i=1,temp=m[0].b;i<n;i++)//找最便宜的
    {
        if(m[i].b<temp)
        { min=i;
        temp=m[i].b;}
    }
    printf("%.2lf, %s\n",m[max].b,m[max].a);
     printf("%.2lf, %s",m[min].b,m[min].a);
    return 0;
}

R7-4 通讯录排序 (20 分)

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

#include <stdio.h>
#include<string.h>
struct dian{
    char a[1000],b[1000];
    double n;
};
int main()
{
    int i,j,t;
    double n;
    char g[1000];
    struct dian c[1000];
    scanf("%lf",&n);
    for(i=0;i<n;i++)
    {
        getchar();
        scanf("%s%lf%s",c[i].a,&c[i].n,c[i].b);
    }
    for(i=1;i<n;i++)
   {
 	    for(j=0;j<n-i;j++)
 	    {
 		    if(c[j].n>c[j+1].n)
 		    {
 			t=c[j].n;
 			c[j].n=c[j+1].n;
 			c[j+1].n=t;
 			strcpy(g,c[j+1].a);
 			strcpy(c[j+1].a,c[j].a);
 			strcpy(c[j].a,g);
 			strcpy(g,c[j+1].b);
 			strcpy(c[j+1].b,c[j].b);
 			strcpy(c[j].b,g);
		    }
	    }
    }
    for(i=0;i<n;i++)
    printf("%s %.0f %s\n",c[i].a,c[i].n,c[i].b);
    return 0;
}

R7-5 计算职工工资 (20 分)

给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。

#include<stdio.h>
#define N 1000
struct yuan
{
  char name[11];
  double z1;//如果这里用int型,则显示错误
  double z2;
  double z3;
  double sum;
}ren[N];
int main()
{
  int n,i;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%s %lf %lf %lf",ren[i].name,&ren[i].z1,&ren[i].z2,&ren[i].z3);
    ren[i].sum=ren[i].z1+ren[i].z2-ren[i].z3;
  }
  for(i=0;i<n;i++)
  {
       printf("%s %.2lf\n",ren[i].name,ren[i].sum);
  }
  return 0;
}

函数

R7-1 输出学生成绩 (20 分)

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int n;
 scanf("%d",&n);
 double *s=malloc(n*sizeof(double));
 double avg=0,max,min;
 int i;
 for(i=0;i<n;i++)
 scanf("%lf",s+i);
 max=s[0];
 min=s[0];
 for(i=0;i<n;i++)
 {
  if(s[i]>max)
  {
   max=s[i];
  }
  if(s[i]<min)
  {
   min=s[i];
  }
  avg+=s[i];
 }
 printf("average = %.2f\n",avg/n);
 printf("max = %.2f\n",max);
 printf("min = %.2f\n",min);
 
 
 return 0;
}

R7-2 删除字符串中指定字母 (20 分)

请使用指针的方法编写程序,程序的功能是从键盘输入一个字符串(字符串长度小于100),删除其中的字母a后输出。例如,输入字符串abcaca,输出bcc。

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[100];
    int i,k,j=0;
    char ah[100];
    gets(ch);
    k=strlen(ch);
    for(i=0;i<k;i++)
    {
        if(ch[i]!='a')
            ah[j++]=ch[i];
    }
    puts(ah);
    return 0;
}

R7-3 用指针方法求10个数最大和最小值之差 (20 分)

请使用指针的方法编写程序,程序的功能是从键盘输入10个数,求其最大值和最小值的差。

#include<stdio.h>
int sub(int *a, int n)
{
    int t,i;
    int max = a[0], min = a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>max)
            max = a[i];
        if(a[i]<min)
            min = a[i];
    }
    printf("difference value = %d", (max-min));
}
int main()
{
    int a[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%d", &a[i]);
    sub(a,10);
    return 0;
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值