回顾C语言(二)

回顾C语言(四)

C语言流程控制语句20道练习题

1、break continue
使用 break 和 continue 来分别显示一个 4 之后函数就不再打印 i。(i 的变化范围是 0~10)

// problem 1.1

void Homework_Break(void)

{
  for(int i = 0;i <= 10;i++)
  {if(i > 4){printf("Problem1.1_result: %d \n",i);break;}
  }
}

// problem 1.2
void Homework_Continue(void)
{
  for(int i = 0;i <= 10;i++)
  {if(i > 4){continue;}printf("Problem1.2_result: %d \n",i);
  }
}

2、求 100 之内自然数中最大的能被 17 整除的数。

//problem 2
void MaxValue_OneHundred_Divided_Seventeen()
{
	int i = 1;

	while((i++)*17 < 100);
	printf("Problem2_result: %d \n",(i-2)*17);
}
/* 方式二
void MaxValue_OneHundred_Divided_Seventeen()
{

    for(int i = 100;i > 0;i--)
    {
        if(i % 17 == 0)
        {
            printf("Problem2_result: %d",i);

        }
    }
}
*/

3、已知 a,b,c 都是 1 位整数,求当三位数 abc+cba 的值为 1333 时 a,b,c 的值。

/*
条件 0 <= a,b,c <= 9
分析易知:b + b 一定为偶数, 1333 的十位数为奇数 ,所以 a + c = 13,
        又因为  0 <= a,b <= 9,所以 a 最小时为 4 ,b 是 9,同理 b = 4 时,a = 9 .
*/
void Conclusions_Of_A_B_C()
{
	int a,b = 1,c;

	for(a = 4; a < 10;a++)
		for(c = 1; c < 10;c++)
		{
			if((a + c == 13))
			{
				printf("Problem3_result: %d , %d ,%d\n",a,b,c);
				printf("a = %d,b = %d,c = %d,  result: abc:%d + cba:%d = %d\n\n",a,b,c,(a*100+b*10+c),(c*100+b*10+a),(a*100+b*10+c)+(c*100+b*10+a));
			}
		}
}

4、输入年份,判断是否闰年。

//problem 4
/*
闰年的判断条件:第一种情况: year%4 == 0 && year%100 != 0
			第二种情况: year % 400 == 0
*/

void JudgeIntercalaryYear()
{
	int year;
	scanf("璇疯緭鍏ュ勾浠斤細 %d",&year);
	if((year%400 == 0) || ((year%4 == 0) && (year%100 != 0)))
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}
}

5、计算并输出 200—400 之间不能被 3 整除的整数的和

//problem 5
void BetweenTwoHundredAndThreeHundredSumNoDividedThree()
{
	int sum = 0;
	for(int i = 200; i <= 400; i++)
	{
		if(i%3 == 0)
		{
			continue;
		}
		sum += i;	
	}
}

6、编程计算 1! +2! +3! + …… +10!的值。

// problem 6
// 方式一:
int fun(int num)// 递归函数,求一个数的阶乘
{
	if(num == 1)
		return 1;

  	return num*fun(num - 1);
} 
void Sum() // 求和函数,将每个数的的阶乘相加
{
	int sum = 0;
	for(int i = 1;i <= 10;i++)
	{
		sum+=fun(i);
	}
	printf("Problem6_result: %d\n",sum);
}

/* 方式二
void Sum()
{
	int sum = 0;
	int num = 1;
	for(int i = 1;i <= 10;i++)
	{
		num *= i;
		sum += num;
	}
	printf("Problem6_result: %d\n",sum);
}
*/

7、编程计算 1*2*3+3*4*5+…+99*100*101 的值。

//problem 7
void PrefixOddNumSum()
{
	int sum = 0,i;
	for(i = 1; i <= 99;i += 2)
	{
		sum += i*(i+1)*(i+2);
	}
	printf("Problem7_result: %d\n",sum);
}

8、输出所有 200-400 以内能被 3 整除且个位数字为 7 的整数。

//problem 8
void BetweenTwoHundredAndThreeHundredSumDividedThree()
{
	printf("Problem8_result:");
	for(int i = 200; i <= 400; i++)
	{
		if((i%3 == 0) &&(i%10 == 7))
		{
			printf(":         %d\n",i);
		}
	}
}

9、打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。

例如:153=1*1*1+5*5*5+3*3*3=1+125+27

//problem 9
void ThreedigitSumIsSelf()
{
	int a,b,c;
	printf("Problem9_result:\n");
	for(int i = 100;i < 999;i++)
	{
		a = i / 100;
		b = (i % 100) /10;
		c = i % 10;
		if(i == (a*a*a + b*b*b + c*c*c)) 
		{
		   printf(":     %d\n",i);
		}
	}
}

10、输出 100 到 200 以内的所有素数(只能被本身或则 1 整除的数)

//problem 10
void SUshu()
{
	printf("Problem10_result: \n");
	int flag = 1;
	for(int i = 100;i <= 200;i++)
	{
		for(int j = 2;j <= i/2;j++)
		{
			if(i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if(flag == 1)
		{
			printf(":         %d\n",i);
		}
		flag = 1;
	}
}

11、求 1-1/2+1/3-1/4+……+1/99-1/100 的值

// problem 11
// 方式一:直接相加,判断分母奇偶分母是偶数乘以 -1
void Problem11()
{
	double sum = 0;
	for(int i = 1; i <= 100;i++)
	{
		if(i%2 == 1)
		{
			sum += 1/(i*1.0);
		}
		else
		{
			sum += -1/(i*1.0); 
		}
	}
	printf("Problem11_result: %f\n",sum);
}

/* 方式二:奇偶分别相加,再相减
void Problem11()
{

	double sum1 = 0,sum2 = 0;
	for(int i = 1; i <= 100;i++)
	{
		if(i%2 == 1)
		{
			sum1 += 1.0/i;
		}
		else
		{
			sum2 += 1.0/i; 
		}
	}

	printf("Problem11_result: %.8f\n",sum1-sum2);

}
*/

12、用 1 元人民币兑换 5 分(20), 2 分(50), 1 分(100)的硬币共 50 枚, 每种硬币至少 1 枚,

问共有多少种兑换方案, 输出每一种方案三种硬币的数量。

// problem 12
/*
首先解方程组: 设 x枚5分硬币,y枚2分硬币,z枚1分硬币。
        x + y + z = 50;
        5*x + 2*y + z = 100;
在这里不做计算,根据化简后的结果写程序
*/
void Problem12()
{
	int x,y,z;
	for(int i = 1;i <= 20;i++)
	{
		x = i;
		y = 50 - 4*x;
		z = 3*x;
		if((x >= 1) && (y >= 1) && (z >= 1))
		{
			printf("Problem12_result: x= %d,y= %d,z= %d\n",x,y,z);
		}
	}
}

13、已知银行定期存款利率为 r=2.25%,输入存款本金 x, 存款年数 n,输出本利之和 r=x(1+r)
(1+r) …(1+r),共 n 个(1+r).

// problem 13
// 方式一:先求出 n 年的总利率,再乘以本金
void Problem13()
{
	double r = 0.0225;
	double result = 1;
	double x = 0;
	int year;
	scanf("%lf%d",&x,&year);


	for(int i = 1;i <= year;i++)
	{
		result *= (1 + r);
	}
	
	printf("Problem13_result: %f\n",x*result);
}
/* 方式二:直接连乘
void Problem13()
{
	double r = 0.0225;
	double result = 1;
	double x;
	int year;
	scanf("%lf%d",&x,&year);

	for(int i = 1;i <= year;i++)
	{
		x *= (1 + r);
	}
	printf("Problem13_result: %f\n",x*result);
}
*/

14、输入正整数,将正整数分解质因数。质因数要满足两个条件:1)是这个数的因数;2)是质数(素数)
如: 6=2*3 12=2*2*3。

// problem 14
void Problem14()
{
	int num,temp = 2;
	printf("璇疯緭鍏ヤ竴涓鏁存暟锛?);
	scanf("%d",&num);
	printf("Problem14_result锛?);
	for(int i = 2;i <= num;i++)
	{
		while(num % i == 0)
		{
			printf("%d ",i);
			num /= i;
		}
	}
	printf("\n");
}

15、输出 10000 以内的所有完全数, 各个小于它的约数(真约数, 列出某数的约数, 掉该数本身,
剩下的就是它的真约数)的和等于它本身的自然数叫做完全数。
例如:第一个完全数是 6,它有约数 1、 2、 3、 6,除去它本身 6 外,其余 3 个数相加,
1+2+3=6。第二个完全数是 28,它有约数 1、 2、 4、 7、 14、 28,除去它本身 28 外,其余 5
个数相加, 1+2+4+7+14=28。

// problem 15
void Problem15()
{
    int sum;
    printf("Problem15_result:\n");
	for(int i = 2;i < 10000;i++)
	{
		sum = 1;
		for(int j = 2; j < i;j++)
		{
			if(i % j == 0)
			sum += j;
		}
		if(sum == i)
		printf(":      %d\n",i);
	}	
}

16、写一段程序,输入 x,输出 y 值。
x x<1
y= 2x-1 1≤x<10
3x-11 x≥10

// problem 16
void Problem16()
{
	int x,y;
	scanf("%d",&x);

	if(x < 1)
	{
	  y = x;
	}
	else if( x >= 1 && x < 10)
	{
	  y = 2*x - 1;
	}
	else if(x >= 10)
	{
	  y = 3*x - 11;
	}
	else
	printf("输入不合法\n");
	printf("%d\n",y);
}

17、求 Sn=a+aa+aaa+……+aa…aa(n 个 a)之值,其中 a 是一个数字,n 表示 a 的位数。
例如:2+22+222+2222+22222(此时 n=5),n 由键盘输入。

// problem 17
// 方式一:
int Pow(int n,int m) // 求n 的 m次方
{
	if(m == 0)
	{
		return 1;
	}
  	return n*Pow(n,m-1);
}

int Num(int a,int n)  求 n 位数均为 a 的数
{
   	int result = 0;
	for(int i = 0;i < n;i++)
	{
	    result += a*Pow(10,i);
	}
	return result;
}
void Problem17() // 求求 Sn=a+aa+aaa+……+aa..aa(n 个 a)之值
{
	int a,n,sum = 0;
	scanf("%d%d",&a,&n);
	for(int i = 1;i <= n;i++)
	{
		sum += Num(a,i);
	}
	printf("Problem17_result: %d\n",sum);
}

/*方式二:
void Problem17()
{

	int a,n,sum = 0,temp = 0;
	scanf("%d%d",&a,&n);
	for(int i = 0;i < n;i++)
	{
		temp = temp*10 + a;
		
		sum += temp; 
		if (i == n-1)
		break;
		
		printf("+");
	}
	
	printf(" = %d\n",sum);

	
//	printf("sum = %d\n",sum);
}

18、有一个分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…
求出这个数列的前 20 项之和。

// problem 18
/*
前一个数的分子作为后一个数的分母,前一个数的分子与分母之和作为后一个数的分子。

*/
void Problem18()
{
	int i = 20,temp;
	double a = 2,b = 1;
	double sum;
	while(i--)
	{
		sum += a/b;

		temp = a;
		a = a + b;
		b = temp;
	} 
	printf("Problem18_result: %f\n",sum);
}

19、小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉一半再多吃一个,如此下去,到第
真十天吃前恰好还剩一个桃子。问第一天小猴摘了多少桃子?

// problem 19 
/*
倒着分析,即可求出
*/

void Problem19()
{
	int i = 9;
	int n = 0;
	while(i--)
	{
		n = (n+1)*2;
	}
	
	printf("Problem19_result: %d\n",n);
}

20、两个乒乓球队进行比赛,各出 3 人。甲对为 A、B、C 3 人,乙队为 X、Y、Z 3 人。已抽签决定比赛
名单。有人向队员打听比赛的名单,A 说他不和 X 比,C 说他不和 X、Z 比,编程找出 3 对赛手的
名单。

// problem 20
/*
数组下标循环变化,循环三次,A,B,C 均有3个不同的值
*/
void Problem20()
{
	char xyz[] = {'X','Y','Z'};
	char A,B,C;
	for(int i = 0;i < 3;i++)
	{
		A = xyz[i%3];
		B = xyz[(i+1)%3];
		C = xyz[(i+2)%3];
		if((A != 'X') && (C != 'X') && (C != 'Z'))
		{
			printf("Problem20_result: A : %c, B : %c, C : %c\n",A,B,C);
		}
	}
}




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值