大连理工大学程序设计第四次上机作业

大连理工大学大一C语言程序设计第四次上机作业参考答案

本文档仅用于已做完作业的同学进行参考,或者感觉到写作业有些吃力的同学进行学习和理解,并不是想给同学们提供抄答案的机会,望周知!!!
以下代码均为我自己个人答案,如有问题或者更好的方法欢迎在评论区留言和指正!!!

题目一
编写函数,计算表达式 的值(),形参n的值由主程序输入并传递,函数返回值为s.

题目分析
代码和运行结果

#include <stdio.h>

int main()
{
	int n;
	int s;
	int multi();

	scanf("%d",&n);
	if (n <= 10 && n >= 0)
	{
		s = multi(n);
	}
	else
	{
		printf("输入错误");
		return 0;
	}
	printf("%d",s);
	return 0;
}

int multi(int m) 
{
	int sum = 1;
	int num = 1;
	int i, j;
	
	for (i = 1; i <= m; i++)
	{
		num = 1;
		for (j = 1; j <= i; j++)
		{
			num*= j;
		}
		sum += num;
	}
	return sum;
}

题目二
编写数字加密和解密函数。测试值由主程序输入。

题目分析
代码和运行结果

#include <stdio.h>
int main()
{
	int m,p;
	int rt,rt2;
	printf("请输入需要加密的四位数:");
	scanf("%d",&m);
	int  encrypt();
	int decrypt();
	rt = encrypt(m);
	printf("The encrypted number is %d\n",rt);
	printf("请输入需要解密的四位数:");

	scanf("%d",&p);
	rt2 = decrypt(p);
	printf("The decrypted number is %d", rt2);

	return 0;
}

int encrypt(int n)
{
	int i, j, k, z;
	int result;
	i = n % 10;//个位 4  2
	n = n / 10;
	j = n % 10;//十位 3  1
	n = n / 10;
	k = n % 10;//百位 2  4
	n = n / 10;
	z = n % 10;//千位 1  3
	i =(i+9)%10,j=(j+9)%10,k=(k+9)%10,z=(z+9)%10;
	result = (j * 1000 + i * 100 + z * 10 + k);
	return result;

}

int decrypt(int n)
{
	int i, j, k, z;
	int result;
	i = n % 10;//个位 4  2
	n = n / 10;
	j = n % 10;//十位 3  1
	n = n / 10;
	k = n % 10;//百位 2  4
	n = n / 10;
	z = n % 10;//千位 1  3
	i += 1, j += 1, k += 1, z += 1;

	result = (j * 1000 + i * 100 + z * 10 + k);
	return result;


}

题目三
.数组转置:在主函数中定义一个n(1<=n<=6)维方阵,并从键盘读入数组元素;编写函数transpose(a,n)实现数组a转置;在主函数中输出转置后的方阵。

题目分析
代码和运行结果

#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[4][4];
	int i, j;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	void transpose();
	transpose(a, n);
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("%d\t", a[i][j]);
				if(j==3)
					printf("\n");
		}
	}

}

void transpose(int b[4][4], int m)
{
	int t;
	int i, j;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < i; j++)
		{
			t = b[j][i];
			b[j][i] = b[i][j];
			b[i][j] = t;
		}
	}
	return 0;
}

题目四
分数的四则运算,即对两个分数进行加、减、乘、除等运算,要求用C语言编写4个分数的函数来实现四则运算。

题目分析
代码和运行结果

int main()
{

	
	int a, b, c, d,gy;
	char cz1, cz2, cz3;
	int result1, result2;
	int find_gb();//函数1 求最小公倍数
	int find_gy();//函数2 求最大公约数
	void  plus(),delete(),multiple(),cf() ;
	scanf("%d%c%d", &a, &cz1, &b);//a分子1 b分母1 c 分子2 d 分母2
	getchar();
	scanf("%c",&cz2);
	getchar();
	scanf("%d%c%d",  &c, &cz3, &d);//a分子1 b分母1 c 分子2 d 分母2
	int* q = &result1;
	int* p = &result2;
	if (cz2 == '+')
	{
	
	    plus(q, p, a, b, c, d);
		
	
		
	}
	else if(cz2=='-')
	{
		
		delete(q, p, a, b, c, d);
	}
	else if (cz2 == '*')
	{
		multiple(q,p,a,b,c,d);
	}
	else if (cz2 == '/')
	{
		cf(q, p, a, b, c, d);

	}
	gy = find_gy(abs(result2), abs(result1));
	result1 /= gy;
	result2 /= gy;
	printf("%d/%d", result1, result2);
	
	return 0;


}

int find_gb(int b,int d)
{

	int i;

	for (i = 1; i <= b * d; i++)
	{
		if (i % b == 0 && i % d == 0)
		{
			//i存的是最小公倍数
			break;
		}
	}

	return i;

}
int find_gy(int m,int n)
{


	int t;
	

	while (n != 0)
	{
		t = m % n;
		m = n;
		n = t;
	}
	
	
	/*if (result1 < result2)
		gy = result1;
	else
		gy = result2;*/
		/*for (; gy >= 1; gy--)
		{
			if ((result1 % gy)== 0 && (result2 % gy)== 0)
			{
				break;
			}
		}
		printf("\n%d",gy);*/
	return m;
}
void plus(int *q,int*p,int a,int b,int c,int d)
{
*q = a * d + b * c;//分子
	*p = b * d;//分母

}

void delete(int* q, int* p, int a, int b, int c, int d)
{
	*q = a * d - b * c;//分子
	*p = b * d;//分母

}
void multiple(int* q, int* p, int a, int b, int c, int d)
{
	*q = a *c;//分子
	*p = b * d;//分母

}
void cf(int* q, int* p, int a, int b, int c, int d)
{
	*q = a * d;//分子
	*p = b * c;//分母

}
	

题目五
.学生信息:编写4个函数实现下列功能(通过参数传递实现,函数参数为数组):

题目分析
代码和运行结果

#include <stdio.h>
#include <string.h>
int main()
{
	int i, j;
	extern char name_temp;
	void input();
	void sort();
	void display();
	int search();
	char name[20][80];
	int score[20];
	input(name,score);
	sort(name, score);
	display(name,score);

	return 0;

}

void input(char name1[20][80],int score1[20])
{
	int i,j;

	for (i = 0; i < 20; i++)
	{
		printf("姓名:");
		scanf("%s",&name1[i]);
		printf("成绩:");
		scanf("%d", &score1[i]);
	}

}

void sort(char name2[20][80],int score2[20])
{
	int i,j,m;
	int t;
	char nametemp[80];
	for (i = 0; i < 19; i++)  // 冒泡法排序
	{
		for (j=0;j<19;j++)
		{
			if (score2[j] <score2[j+1])
			{
				t = score2[j];
				score2[j] = score2[j + 1];
				score2[j +1] = t;
				strcpy(nametemp, name2[j]);
				strcpy(name2[j], name2[j +1]);
				strcpy(name2[j + 1], nametemp);
			}
		}

	}
}


void display(char name3[20][80], int score3[20])
{
	int i; 
	for (i = 0; i < 20; i++)
	{
		printf("%s的分数:%d \n", name3[i], score3[i]);
	}

}

题目六
字符串处理
定义两个C源程序文件:fmain.c 和 fstring.c。fmain.c中包含主函数,实现字符串处理功能选项和字符串的输入与结果的输出。fstring.c中包含两个函数delchar(s,c)和strreverse (s),实现删除字符和字符串反转功能。
delchar(s,c):在主函数中输入字符串和要删除的字符,此函数将字符串s中出现的所有c字符删除;再在主函数中输出删除后的字符串。
strreverse (s):在主函数中读入字符串,此函数实现将字符串s反转;再在主函数中输出反转后的字符串。

题目分析
代码和运行结果

//fmain.c
include <string.h>
#include <stdio.h>
int main()
{
	char s[100];
	char c,judge;
	void delchar();
	void strreverse();
	int a;
	int flag = 1;
	printf("1.Reverse a string.\n");
	printf("2.Delete a character in a string.\n");
	printf("Please input your choice:");

	while (flag)
	{
		scanf("%d", &a);
		if (a == 1)
		{
			printf("Enter a string:");
			getchar();
			gets(s);
			strreverse(s);
			printf("Reverse string is:");

			puts(s);


		}
		else if (a == 2)
		{
			printf("Enter a string:");
			getchar();
			gets(s);
			printf("Enter a character you want to delete:");
			scanf("%c", &c);
			delchar(s, c);
			puts(s);
		}
	
		printf("Would you like to continue? (y/n)");
		
		scanf("%c",&judge);
		if (judge == 'y')
		{
			flag = 1;
			printf("1.Reverse a string.\n");
			printf("2.Delete a character in a string.\n");
			printf("Please input your choice:");

		}
		else if(judge=='n')
		{
			flag = 0;

		}
	}
}

//fstring.c
void delchar(char s1[100], char c1)
{
	int i = 0, k = 0;
	static char s2[100];
	strcpy(s2, s1);
	while (s2[i])
	{
		if (s2[i] != c1)
		{
			s1[k] = s2[i];
			i++;
			k++;
		}
		else
		{
			i++;
		}
	}
	s1[k] = s2[i];
}

void strreverse(char s2[100])
{
	int i = 0;
	int m;
	m = strlen(s2);
	char s3[100];
	for (i = 0; i < m; i++)
	{
		s3[i] = s2[i];
	}
	for (i = 0; i < m; i++)
	{
		s2[i] = s3[m - 1 - i];
	}
	return 0;

}
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值