A,B,C,D各个名次,简易计算机,长整形由高到底输出

C语言实验作业
【实验题目1】中国古典算术问题:某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩子两人抬一块。问用45人正好搬45块砖,有多少种搬法?

#include<stdio.h>
void main()
{
	int a, b, c, sum=0;
	for (a = 0; a <= 45;a++)
	{
		for (b = 0; b <= 45;b++)
		{
			for (c = 0; c <= 44;c+=2)
			{
				if ((a + b + c == 45) && ((a * 3 + b * 2 + c / 2) == 45))
				{
					printf("男人需要:%d\n", a);
					printf("女人需要:%d\n", b);
					printf("小孩需要:%d\n", c);
					sum++;
					printf("------------------\n");
				}
			}
		}
	}
	printf("方法共有%d种", sum);
}

【实验题目2】从键盘输入10个正整数进行求和,如果错误地输入了负数,则求和结束。请分别用break和不用break编写相应程序。
上面是用break

#include<stdio.h>
/*
void main()
{
	int a,i;
	int sum = 0;
	printf("请输入十个整数:\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a);
		if (a < 0)
			break;
		sum += a;
	}
	printf("求和为:%d\n", sum);
}
*/

void main()
{
	int a, i;
	int sum=0 ;
	printf("请输入十个整数:\n");
	
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a);
		if (a < 0)
			goto Finnl;
		sum += a;
		
	}
	Finnl:
	printf("求和为:%d\n", sum);
}

【实验题目3】3位老师对某次数学竞赛进行了预测。他们的预测如下。
甲说:学生A得第一名,学生B得第三名;
乙说:学生C得第一名,学生D得第四名;
丙说:学生D得第二名,学生A得第三名;
竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出A,B,C,D各自的名次。

#include<stdio.h>
void main()
{
	int a, b, c, d;
	for (a = 1; a <= 4; a++)
	{
		for (b = 1; b <= 4; b++)
		{
			for (c = 1; c <= 4; c++)
			{
				for (d = 1; d <= 4; d++)
				{
					if ((a == 1 || b == 3) && (c == 1 || d == 4) && (d == 2 || a == 3)&&(a!=b&&a!=c&&a!=d )&&(b!=c&&b!=d)&&(c!=d ))
					{
						printf("A的名次为%d\nB的名次为%d\nC的名次为%d\nD的名次为%d", a, b, c, d);
						
					}
				}
			}
		}
	}
}

【实验题目4】编写程序:模拟简单计算器的工作。假定简单计算器只能进行双目实型运算,运算的次序按输入的运算数和运算符的顺序进行,不区分优先级,在输入时运算数和运算符之间用空格隔开,例如:输入10 + 2 / 3 = 后结果得4.0。输入0结束。

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int n;//用于最后输入0退出程序
	float x, y;//用于输入运算的数
	char c; //用于输入运算符
	while (1)//使计算器能连续运行
	{
		printf("请输入运算式:\n");
		scanf("%f %c %f", &x, &c, &y);//输入表达式
		while (1)
		{
			if (c == '+')x = x + y; //将表达式的值赋值给x
			if (c == '-')x = x - y;
			if (c == '*')x = x * y;
			if (c == '/')x = x / y;
			//if(c=='%')x=x%y;因为是float型,所以无法求余数
			c = getchar();//即获取输入表达式后,输入的第一个字符,并赋值给c
			if (c == '=')//如果表达式输入完成后输入的为"="
			{
				printf("%f\n", x);//输出表达式运算的值
				break;//并跳出循环
			}
			scanf("%f", &y);//如果之后输入的第一个字符不是"=",则继续输入y值,用于和上面的x值进行计算
		 //直到输入表达式后输入的第一个字符为=跳出循环
		}
		printf("输入0退出,输入任意键继续:");
		scanf("%d", &n);
		if (n == 0)
		{
			printf("已退出");
			exit(-1);//或者break;
		}
	}
}

【实验题目5】任意输入一个长整数,从高位开始逐位分割并输出。例如:输入123456,逐位输出:1,2,3,4,5,6

#include<stdio.h>
void main()
{
	long a,b;
	int i,c,num = 0;
	printf("请输入一个长整形:\n");
	scanf("%ld", &a);
	b = a;
	while (1)
	{
		if (a > 0)
			num++;
		a = a /10;
		if (a == 0)
			break;
	}
	for (i = 1; i <= num; i++)
	{
		c = b % 10;
		b = b / 10;
		printf("%d ", c);
	}
}

有什么错误和改进的地方,欢迎大家评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用 C 语言实现的按学生的序号输入学生的成绩,按照分数由到低的顺序输出学生的名次的代码: ```c #include <stdio.h> int main() { int scores[100]; int ranks[100]; int i, j, n, rank; printf("请输入学生人数:"); scanf("%d", &n); printf("请输入每个学生的成绩:\n"); for (i = 0; i < n; i++) { scanf("%d", &scores[i]); ranks[i] = 1; // 初始名次为1 } for (i = 0; i < n; i++) { rank = 1; for (j = 0; j < n; j++) { if (scores[j] > scores[i]) { rank++; } } ranks[i] = rank; } printf("按照分数由到低的顺序输出学生的名次:\n"); for (i = 1; i <= n; i++) { for (j = 0; j < n; j++) { if (ranks[j] == i) { printf("第%d名:成绩为%d\n", i, scores[j]); } } } return 0; } ``` 这段代码使用两个数组 `scores` 和 `ranks` 分别存储每个学生的成绩和名次。首先,让用户输入学生的人数和每个学生的成绩,并将每个学生的初始名次设为1。接着,使用两个嵌套循环计算每个学生的名次,具体地,对于每个学生,我们遍历所有学生的成绩,如果有其他学生的成绩比当前学生,则当前学生的名次加1。最后,按照分数由到低的顺序输出所有学生的名次和成绩。 需要注意的是,这种方法虽然可以处理成绩相同的情况,但是对于成绩相同的学生,名次并不一定是连续的。如果要求成绩相同的学生具有连续的名次,需要进行额外的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值