梦龙_C语言作业14

一.填空题(共2题,10.0分)

1
5.14 下面的程序会将产生的n个随机3位数(100~999)构成一个动态存储的环,然后将其中第m个数从环中删除。其中n,m均是从键盘输入的整数,并大于等于1,m可以大于n。程序中有三个空缺请补齐。(不要有空格和不必要的圆括号)

源码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main()
{
	int *s,n,m,i;
	scanf("%d",&n);
	s=malloc(n*sizeof(int));
	srand((unsigned)time(NULL));
	for(i=0;i<n;i++)
	{
		s[i]=rand()%900+100;
		printf("%d:%d ",i+1,s[i]);
	}
	printf("\n");
	scan-1)%n;
	for(i=m;i<nf("%d",&m);
	m=(m-1;i++)
		s[i]=s[i+1];
	n=n-1;
	for(i=0;i<n;i++)
		printf("%d:%d ",i+1,s[i]);
	free(s);	
 } 

2
6.1 下面的程序用于求两个分数之和,例如,。程序中有四个空缺请补齐。(不要添加空格和圆括号)

#include<stdio.h>

typedef struct
{
	int num;	//分子 
	int den;	//分母 
} Fraction;

//递归求最大公约数,用于约分 
int gcd(int m,int n)
{
	if(m%n==0)	
	{
		return n;
	}
	else 
	{
		return gcd(n,m%n);
	}
}

//分数相加函数 
Fraction add(Fraction a,Fraction b)
{
	int den,num,g;
	Fraction r;
	
	den=a.den*b.den;				//求分母 
	num=a.num*b.den+a.den*b.num;	//求分子 
	g=gcd(den,num);					//求最大公约数 
	r.den=den/g;	//结果的分母 
	r.num=num/g;	//结果的分子 
	return r; 
}

void main()
{
	Fraction a = {1,10}, b = {3,4},c;
	c=add(a,b);
	printf("1/10+3/4=%d/%d",c.num,c.den);
}

二.简答题(共1题,5.0分)

1
14-1 建立一种新的类型称为Complex,包含real和imag两个域。使用Complex类型定义两个复数变量,从键盘输入两个变量的值,计算这两个复数的和与乘积并一行以一个空格分隔显示结果。(不要任何提示文字,结果后不用回车)
例如,分两行输入:3,3 与1,-2,在一行显示:4+1j 9-3j。

/*
时间:2021-6-10
作者:童话
环境:Win 10 、 DEV C++
*/
#include<stdio.h>

typedef struct
{
	int real;	//实部 
	int imag;	//虚部 
} Complex;


void main()
{
	Complex x,y;
	int a,b,c,d;
	scanf("%d,%d",&x.real,&x.imag);
	scanf("%d,%d",&y.real,&y.imag);
	
	a=x.real+y.real;	//和的实部 
	b=x.imag+y.imag;	//和的虚部 
	
	c=x.real*y.real - x.imag*y.imag;	//积的实部 
	d=x.real*y.imag + x.imag*y.real;	//积的虚部 
	
	printf("%d",a);
	if(b>0)
		printf("+%dj ",b);
	else if(b<0)
		printf("%dj ",b); 
	else
		printf(" ");
		
	printf("%d",c);
	if(d>0)
		printf("+%dj",d);
	else if(d<0)
		printf("%dj",d); 
}

三.程序题(共2题,10.0分)

1
6.2 要编程排序一个班的学生学习成绩,成绩记录类型Record和清单类型List设计如下:

typedef struct {

char no[13];

int score;

} Record;

typedef Record List[10];

请编程,先1行输入班级号和学生人数,以空格分隔,班级号就是学号的前9位,例如201925804 4

然后1行1个输入每个学生的顺序号和成绩,以空格分隔,顺序号就是学号的后3位,例如001 80

再将输入的学生按成绩从大到小排序后,将学生的完整学号和成绩1行1个显示,以1个空格分隔,例如201925804001 80。

/*
时间:2021-6-10
作者:童话
环境:Win 10 、 DEV C++
*/
#include<stdio.h>
#include<string.h>

typedef struct 
{
	char no[13];
	int score;
} Record;

typedef Record List[10]; 

void main()
{
	List stugrade;
	int i,j,t,n;
	char sameno[13],lastno[4],temp[13];
	
	scanf("%s %d",sameno,&n);
	
	//输入
	for(i=0;i<n;i++)
	{
		strcpy(stugrade[i].no,sameno);
		scanf("%s %d",lastno,&stugrade[i].score);
		strcat(stugrade[i].no,lastno);
	}
	
	//冒泡排序
	for(i=0; i<n-1; i++)  //比较n-1轮
    {
        for(j=0; j<n-1-i; j++)  //每轮比较n-1-i次,
        {
            if(stugrade[j].score < stugrade[j+1].score)
            {
                t = stugrade[j].score;
                strcpy(temp,stugrade[j].no);
                stugrade[j].score = stugrade[j+1].score;
                strcpy(stugrade[j].no,stugrade[j+1].no);
                stugrade[j+1].score = t;
                strcpy(stugrade[j+1].no,temp);
            }
        }
    }
	
	//输出
	for(i=0;i<n;i++)
	{
		printf("%s %d",stugrade[i].no,stugrade[i].score);
		if(i<n-1)
		{
			printf("\n");
		}
	}		
}

2
6.4 请编写程序输入n个1~3位十六进制数(n由键盘输入,n<=10),保存到List类型的变量中(List类型定义下面已提供),然后将这些十六进制数转换为十进制数仍然保存到该变量中,求这些数的和并显示结果。(显示结果不用提示文字、不回车)

typedef union {
char strcj[4];

int intcj;

} List[10];

例如:输入4

a

b

c

d

显示结果

10+11+12+13=46

有大问题!
/*
时间:2021-6-10
作者:童话
环境:Win 10 、 DEV C++
*/
#include<stdio.h>
#include<string.h>

typedef union 
{
    char strcj[4];
    int  intcj;
} List[10];

int HextoDec(char hex[])
{
	int i,dec=0;
	int n = 0;
	char ch;
	while(hex[n]!=0)
	{
		n++;
	}
	for(i=0;i<n;i++)
	{
		printf("~~%c~~\n",hex[i]);
		ch = hex[i];
		if(ch>='0'&&ch<='9')
			dec+=((int)((ch-'0')) * (n-i-1) * 16);
		else if(ch>='a'&&ch<='f')
			dec+=((int)((ch-'a')) * (n-i-1) * 16);
		else if(ch>='A'&&ch<='F')
			dec+=((int)((ch-'A')) * (n-i-1) * 16);
		printf("~~%d~~\n",dec);
	}
	return dec;
}

void main()
{
	List hextodec;
	int n,i,sum=0;
	
	scanf("%d",&n);
	

	for(i=0;i<n;i++)
	{
		scanf("%s",hextodec[i].strcj);//输入 
	}
	
	for(i=0;i<n;i++)
	{
		hextodec[i].intcj = HextoDec(hextodec[i].strcj);//转换 
	}	
	
	for(i=0;i<n;i++)
	{
		printf("%d",hextodec[i].strcj);
		if(i<n-1)
		{
			printf("+");
		}
		else
		{
			printf("=");
		}
		sum += hextodec[i].strcj;
	}
	printf("%d",hextodec[i].strcj);
	
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童话与云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值