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);
}
}
有什么错误和改进的地方,欢迎大家评论。