写在开头:题源来自于凌云、吴海燕、谢满德老师们编著的《C语言程序设计与实践》第五章C语言结构的课后练习题。
编译器:Dev C++
代码是根据自己的逻辑来实现的,部分题目的算法思想写在了程序代码的注释中。有些解法仅仅是能够实现最终结果,但不一定是最优算法,比如有许多两个for循环甚至三个或更多的for循环暴力实现的算法,这些算法是一定可以优化的。希望我的解法能够给大家有所帮助,如果读者大大们有更好的思路和算法,也希望能在评论区留下更宝贵的智慧。
- 一根长度为133米的材料,需要截成长度为19米和23米的短料,求解两种材料分别截多少根时,剩余的材料最少
/*一根长度为133米的材料,需要截成长度为19米和23米的短料,求解两种材料分别截多少根时,剩余的材料最少*/
#include<stdio.h>
#define shorter 19
#define longer 23
#define amount 133
int main(){
int i,j;
int mod,short_num,long_num;
int min=133;
for(i=1;i<7;i++){
for(j=1;j<13;j++){
mod = amount-shorter*j-longer*i;
if(mod>=0&&mod<min){
short_num = j;
long_num=i;
min=mod;
}
}
}
printf("需要19米长的材料%d根,23米长的材料%d根时,剩余材料最少,为%d米\n",short_num,long_num,min);
}
效果图如下:
- 七个评委,去掉一个最高分,去掉一个最低分,求平均分
/*七个评委,去掉一个最高分,去掉一个最低分,求平均分*/
#include<stdio.h>
int main(){ //设满分10,最低分为0
int i,score;
float avg_score;
int min=100;
int max=0;
int sum=0;
printf("7个评委的评分为:\n");
for(i=0;i<7;i++){
scanf ("%d",&score);
if(score<0||score>10){
printf("输入非法!");
return -1;
}
if(score<min){
min = score; //记录并刷新最小值
}
if(score>max){
max = score; //记录并刷新最大值
}
sum += score; //累加所有的分数
}
avg_score = (sum-min-max)/5.0; //减去最低分和最高分,取平均值
printf("该选手的分数为:%4.2f",avg_score);
return 0;
}
效果图如下:
- 编程求S = a+aa+aaa+…+aaa…a
/*编程求S = a+aa+aaa+...+aaa...a*/
#include<stdio.h>
int main(){
int i;
int sum;
int a,n;
printf("请输入a的值,和最终相加的位数n(0<n<6):\n");
scanf("%d %d",&a,&n);
sum = a;
printf("%d",a);
for(i=1;i<n;i++){
a = a*10+a%10; //每一项的变化
printf("+%d",a);
sum += a; //逐项和相加
}
printf("=%d\n",sum);
return 0;
}
效果图如下:
- 数字灯谜:若ABCD-CDC=ABC,求A,B,C,D各个值
/*若ABCD-CDC=ABC,求A,B,C,D各个值*/
#include<stdio.h>
int main(){
int a,b,c,d;
int f_num,l_num,result;
int sum;
int count=0;
for(a=1;a<10;a++){
for(b=0;b<10;b++){
for(c=0;c<10;c++){
for(d=0;d<10;d++){
f_num = a*1000+b*100+c*10+d; //被减数
l_num = c*100+d*10+c; //减数
sum = f_num - l_num; //减法的结果
result = a*100+b*10+c; //最终结果
if(sum == result){
count++;
printf("ABCD-CDC=ABC 则:A=%d B=%d C=%d D=%d\n",count,a,b,c,d);
}
}
}
}
}
return 0;
}
效果图如下:
- 陌生人与百万富翁换钱计划:陌生人每天给百万富翁10万元。百万富翁每天给陌生人第一天的钱是1分,第二天给2分,第三天给4分
以后每一天给的钱是前一天的两倍。持续三十天后,两个人分别给了对方多少钱?
/*陌生人与百万富翁换钱计划:陌生人每天给百万富翁10万元。百万富翁每天给陌生人第一天的钱是1分,第二天给2分,第三天给4分
以后每一天给的钱是前一天的两倍。持续三十天后,两个人分别给了对方多少钱?*/
#include<stdio.h>
int main(){
float stranger = 100000;
float rich = 0.01;
float stranger_give = 0;
float rich_give = 0;
int i;
for(i=0;i<30;i++){
stranger_give += stranger;
rich *= 2;
rich_give += rich;
}
printf("30天后,穷人给富人%.2f元,富人给穷人%.2f元\n",stranger_give,rich_give);
return 0;
}
效果图如下:
- 输入一个数n,输出n的所有质数因子
算法思想:从最小的质数2开始,将2的n词幂整除后,出现n个为2的质数因子,剩下的商就不再含有2的质数因子,
若商不等于0,继续整除下一个整数因子,直到余数不为零。
/*输入一个数n,输出n的所有质数因子*/
/*算法思想:从最小的质数2开始,将2的n词幂整除后,出现n个为2的质数因子,剩下的商就不再含有2的质数因子,
若商不等于0,继续整除下一个整数因子,直到余数不为零。*/
#include <stdio.h>
int main()
{
int i,n;
scanf("%d",&n);
for(i=2; i<=n; i++)
{ //从2开始判断
while(n%i==0)
{
printf("%d ",i);
n/=i; //若整除,则分离出质数因子
}
}
}
效果图如下:
到此为止,又解决了6道C语言程序题。这样C语言结构方面的入门题就结束了,接下来会进行数组部分的C语言入门级题目。希望自己的解法能对各位看官有所帮助,也期待读者大大们的赞和交流评论。我会继续坚持。