C语言程序设计(第四版)—习题9程序设计题

目录

        1.时间换算:

        2.计算两个复数之积:

        3.平面向量加法:

         4.查找书籍:

        5.通讯录排序:

        6.按等级统计学生成绩:


           1.时间换算:

用结构类型表示时间内容(时间以时、分、秒表示),输入一个时间数值,再输入一个秒数n(n<60),以 h : m : s 的格式输出该时间再过n秒后的时间值(超过24点就从0点开始计时)。试编写相应程序。

输入格式:

输入在第一行中以h:m:s的格式给出起始时间,第二行给出整秒数n(<60)。

输出格式:

输出在一行中给出hh:m:s格式的结果时间。

输入样例:

11:59:40
30

输出样例:

12:00:10
#include<stdio.h>

struct time{
	int hour;
	int minutes;
	int s;
}stu;

int main()
{
	int n;
	scanf("%d:%d:%d",&stu.hour,&stu.minutes,&stu.s);
	scanf("%d",&n);
	int d_m=0,d_h=0;
	stu.s+=n;
    while(stu.s>=60){
    	stu.s-=60;
    	d_m++;
	}
	stu.minutes+=d_m;
	while(stu.minutes>=60){
		stu.minutes-=60;
		d_h++;
	}
	stu.hour=stu.hour+d_h;
	if(stu.hour>=24){
		stu.hour-=24;
	}
	
	printf("%0.2d:%0.2d:%0.2d",stu.hour,stu.minutes,stu.s);
	return 0;
 } 

        2.计算两个复数之积:

 编写程序,利用结构变量求解两个复数之积。

提示:求解(a1+a2i)×(b1+b2i),乘积的实部为:a1×b1-a2×b2,虚部为:a1×b2+a2×b1。

函数接口定义:

struct complex multiply(struct complex x, struct complex y);

其中struct complex是复数结构体,其定义如下:

struct complex{
    int real;
    int imag;
};

裁判测试程序样例:

#include <stdio.h>

struct complex{
    int real;
    int imag;
};

struct complex multiply(struct complex x, struct complex y);

int main()
{
    struct complex product, x, y;

    scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
    product = multiply(x, y);
    printf("(%d+%di) * (%d+%di) = %d + %di\n", 
            x.real, x.imag, y.real, y.imag, product.real, product.imag);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

3 4 5 6

输出样例:

(3+4i) * (5+6i) = -9 + 38i
struct complex multiply(struct complex x, struct complex y)
{
    struct complex resulst;
    resulst.real = x.real*y.real - x.imag*y.imag;
    resulst.imag = x.real*y.imag + x.imag*y.real;

    return resulst;
};

        3.平面向量加法:

输入两个二维平面向量V1=(x1,y1)和V2=(x2,y2)的分量,计算并输出两个向量的和向量。试编写相应程序。

输入格式:

输入在一行中按照“x1​ y1​ x2​ y2​”的格式给出两个二维平面向量v1​=(x1​,y1​)和v2​=(x2​,y2​)的分量。

输出格式:

在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。

输入样例:

3.5 -2.7 -13.9 8.7

输出样例:

(-10.4, 6.0)
#include<stdio.h>
struct plane{
	double x;
    double y;
};
int main()
{
    struct plane a;
    struct plane b;
	scanf("%lf %lf %lf %lf",&a.x,&a.y,&b.x,&b.y);
	
	double m,n;
	m=a.x+b.x;
	n=a.y+b.y;
	
	if(m>=-0.05&&m<=0.0){
		m=0.0;
	}
	if(n>=-0.05&&n<=0.0){
		n=0.0;
	}
	
	printf("(%.1f, %.1f)",m,n);
	return 0;
 } 

         4.查找书籍:

从键盘输入10本书的名称和定价并存入结构数组中,从中查找定价最高和最低的书的名称和定价,并输出。试编写相应程序。

输入格式:

输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

输出样例:

25.00, Programming in Delphi
18.50, Programming in VB
#include<stdio.h>
struct book {
	char name[31];
	double money;
} b[10];

int main() {
	int n;
	scanf("%d",&n);

	int i,mini=0,maxi=0;
	double min=1000000,max=-1;

	for(i=0; i<n; i++) {
		scanf("\n");
		gets(b[i].name);
		scanf("%lf",&b[i].money);
		if(b[i].money>max) {
			max=b[i].money;
			maxi=i;
		}
		if(b[i].money<min) {
			min=b[i].money;
			mini=i;
		}
	}

	printf("%.2lf, %s\n",b[maxi].money,b[maxi].name);
	printf("%.2lf, %s\n",b[mini].money,b[mini].name);
	return 0;
}

        5.通讯录排序:

建立一个通讯录,通讯录的结构记录包括:姓名、生日、电话号码;其中生日又包括三项:年、月、日。编写程序,定义一个嵌套的结构类型,输入n(n<10)个联系人的信息,再按他们的年龄从大到小的顺序依次输出其信息。试编写相应程序。

输入格式:

输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:

wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
#include<stdio.h>
struct Addressbook {
	char name[10];
	long old;
	char num[17];
} stu[10];
int main() {
	struct Addressbook temp;
	int index;
	int n;
	scanf("%d",&n);
	int i;
	for(i=0; i<n; i++) {
		scanf("%s %ld %s",stu[i].name,&stu[i].old,stu[i].num);
	}

	for(i=0; i<n-1; i++) {
		index=i;
		int j;
		for(j=i+1; j<n; j++) {
			if(stu[index].old>stu[j].old) {
				index=j;
			}
		}
		temp=stu[index];
		stu[index]=stu[i];
		stu[i]=temp;
	}

	for(i=0; i<n; i++) {
		printf("%s %ld %s\n",stu[i].name,stu[i].old,stu[i].num);
	}
	return 0;
}

        6.按等级统计学生成绩:

输入10个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级,要求定义和调用函数set_grade(),根据学生成绩设置其等级,并统计不及格人数,等级设置:85~100为A,70~84为B,60~69为C,0~59为D。试编写相应程序。

函数接口定义:

int set_grade( struct student *p, int n );

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

int set_grade( struct student *p, int n );

int main()
{   struct student stu[MAXN], *ptr;
    int n, i, count;
    
    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
   count = set_grade(ptr, n);
   printf("The count for failed (<60): %d\n", count);
   printf("The grades:\n"); 
   for(i = 0; i < n; i++)
       printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78

输出样例:

The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B
int set_grade( struct student *p, int n ) {
	int num=0;
	int i;
	for(i=0; i<n; i++,p++) {
		int x=p->score;
		if(x<=100&&x>=85) {
			p->grade='A';
		} else if(x<=84&&x>=70) {
			p->grade='B';
		} else if(x<=69&&x>=60) {
			p->grade='C';
		} else {
			p->grade='D';
			num++;
		}
	}
	return num;
}
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值