结构体
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;
}