C语言经典编程习题之循环

1、水仙花数

打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

【难度系数】▲

【分析】153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

【代码】

#include <stdio.h>

int main(void)
{
	int i = 0;
	int sum = 0;
	int j = 0;

	for(i = 100; i < 1000; i ++)
	{
		sum = 0;
		int temp = i;
		while(temp)
		{
			j = temp % 10;
			temp /= 10;
			sum += j * j * j;
		}
		if(sum == i)
		{
			printf("%d ", i);
		}
	}
	printf("\n");
	return 0;
}

2、分解质因数

将一个正整数分解质因数。

【难度系数】▲▲▲▲

【分析】例如:输入90,打印出90=2*3*3*5。

【代码】

#include <stdio.h>

int main(void)
{
	int num = 0;
	int i = 0;
	int j = 0;

	scanf("%d", &num);

	printf("%d = ", num);
	for(i = 2; i < num; i ++)
	{
		if(num % i == 0)
		{
			printf("%d*", i);
			num /= i;
			i = 1;
		}
	}
	printf("%d\n", num);
	return 0;
}

3、条件运算符的嵌套

利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

【难度系数】▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int score = 0;

	scanf("%d", &score);
	if(score >= 90)
	{
		printf("A\n");
	}
	else
	{
		if(score >= 60 && score <= 89)
		{
			printf("B\n");
		}
		else
		{
			printf("C\n");
		}
	}
    /*
	char ch = 0;
	int score = 0;

	scanf("%d", &score);
	ch = (score >= 90) ? 'A' : (score >= 60) ? 'B' : 'c';

	printf("%c\n", ch);
     */
	return 0;
}

4、统计字符个数

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

【难度系数】▲▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	char c = 0;
	int arr[4] = {};

	while(1)
	{
		scanf("%c", &c);
		if(c == '\n')
			break;
		if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
			arr[0] ++;
		else if(c == ' ')
			arr[1] ++;
		else if(c >= '0' && c <= '9')
			arr[2] ++;
		else
			arr[3] ++;
	}
	printf("英文个数为:%d\n\
空个数为: %d\n\
数字个数为:%d\n\
其他字符个数为:%d\n",arr[0],arr[1],arr[2],arr[3]);
			
	return 0;
}

5、求s=a+aa+aaa+aa...a的值

【难度系数】▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int n = 0;
	int i = 0;
	int sum = 0;
	int num = 0;

	scanf("%d", &n);
	for(i = 0; i < n; i ++)
	{
		num = num*10 + 2;
		sum += num;
	}
	printf("sum = %d\n", sum);
	return 0;
}


6、猴子吃桃问题

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

【难度系数】▲▲

【分析】

利用循环

循环开始: i = 9 

循环结束: i >= 1

循环增量: i --

给num赋初值为1,即第10天的

桃子个数为1

那么往上每一天的桃子个数为

后一天的个数加1  再乘以2

【代码】

#include <stdio.h>

int main(void)
{
	int i = 0;
	int num = 1;

	for(i = 9; i >= 1; i--)
	{
		num = (num + 1) * 2;
	}
	printf("num = %d\n", num);
	return 0;
}

7、乒乓球比赛

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

【难度系数】▲

【分析】

a 只不和 x比,即a可以和除了x比

c 不和x,z比,即c可以和y比

剩下的没有约束条件

【代码】

#include <stdio.h>

int main(void)
{
	char ch1[] = {'a', 'b', 'c'};
	char ch2[] = {'x', 'y', 'z'};
	int i, j;

	for(i = 0; i < 3; i ++)
	{
		for(j = 0; j < 3; j ++)
		{
			if(ch1[i] == 'a' && ch2[j] != 'x')
			{
				printf("%c --- > %c\n", ch1[i], ch2[j]);
			}
			else if(ch1[i] == 'c' && ch2[j] != 'x' && ch2[j] != 'z')
			{
				printf("%c --- > %c\n", ch1[i], ch2[j]);
			}
			else if(ch1[i] == 'b')
			{
				printf("%c --- > %c\n", ch1[i], ch2[j]);
			}
		}
	}
	return 0;
}

8、求1+2!+3!+...+20!的值

求1+2!+3!+...+20!的和

【难度系数】▲▲▲▲

【分析】

双重循环:

外循环确定所需求阶乘的个数

内循环求每一个数的阶乘

acc保存每一个阶乘

sum保存前i个数的阶乘之和

【代码】

#include <stdio.h>

int main(void)
{
	int i = 0;
	int j = 0;
	int acc = 1;
	int sum = 0;

	for(i = 1; i <= 20; i ++)
	{
		acc = 1;
		for(j = 1; j <= i; j ++)
		{
			acc *= j;
		}
		sum += acc;
	}
	printf("sum = %d\n", sum);
	return 0;
}

9、逆序打印正整数

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

【难度系数】▲▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int num = 0;
	int counter = 0;

	scanf("%d", &num);
	if(num == 0)
		printf("%d 1位\n", num);
	else
	{
		while(num)//1234
		{
			counter ++;
			printf("%d ", num % 10);
			num /= 10;
		}
		printf("\n%d位数\n", counter);
	}
	return 0;
}

10、星期判断

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

【难度系数】▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	char ch = 0;
	
	scanf("%c", &ch);
	getchar();
	if(ch == 'M')
		printf("星期一!\n");
	else if(ch == 'T')
	{
		scanf("%c", &ch);
		if(ch == 'u')
			printf("星期二!\n");
		else if(ch == 'h')
			printf("星期四!\n");
	}
	else if(ch == 'W')
		printf("星期三!\n");
	else if(ch == 'F')
		printf("星期五!\n");
	else if(ch == 'S')
	{
		scanf("%c", &ch);
		if(ch == 'a')
			printf("星期六!\n");
		else if(ch == 'u')
			printf("星期日!\n");
	}
	return 0;
}

11、乘积最大

【难度系数】▲▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int a = 0;
	int b = 0;
	int c = 0;
	/*
	a ~  1 ---> 18
	b ~  1 ---> 18
	c ~  1 ---> 18
	*/
	int i, j, num = 0;
	int max = 0;
	for(i = 1; i <= 18; i ++)
	{
		for(j = 1; j <= 20 - 1 - i; j ++)
		{
			num = i * j * (20 - i - j);
			if(max < num)
			{
				max = num;
				a = i;
				b = j;
			}
		}
	}
	printf("max = %d, a = %d, b = %d, c = %d\n", max, a, b, 20-a-b);
	return 0;
}

12、打印倒三角

打印倒三角形,输入一个底边长n

例如:

 n = 7

  * * * * * * *

     * * * * * 

       * * *

         *

【难度系数】▲▲▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int i = 0;
	int j = 0;
	int n = 0;
	int counter = 0;

	scanf("%d", &n);
	for(i = n; i > 0; i -= 2)
	{
		for(j = 0; j < counter; j ++)
		{
			printf(" ");
		}
		for(j = 0; j < i; j ++)
		{
			printf("*");
		}
		counter ++;
		printf("\n");
	}
	return 0;
}

13、奇偶个数

【难度系数】▲▲▲

【分析】

【代码】

#include <stdio.h>

int main(void)
{
	int num;
	int sumeven = 0,even  = 0;
	int sumodd = 0,odd = 0;
	
	while(1)
	{
		scanf("%d", &num);
		if(num == 0)
			break;
		switch(num % 2)
		{
			case 0:
				even ++;
				sumeven += num;
				break;
			case 1:
				odd ++;
				sumodd += num;
				break;
		}
	}
	printf("偶数的个数为:%d, 平均值为:%.2f\n", even, sumeven / (float)even);
	printf("奇数的个数为:%d, 平均值为:%.2f\n", odd, sumodd / (float)odd);
	return 0;
}

14、工资纳税小程序

编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:

a. 基本工资等级如下面的菜单可供选择

b. 加班(超过40小时)= 1.5倍的时间

c. 税率  前300美元为15%,下一个150美元为20%,余下的为25%


要求,用switch选择工资等级,程序的开头应该如下所示:

*************************************************

Enter the number corresponding to the desired pay rate or action:

(1) $8.75/hr (2) $9.33/hr

(3) $10.00/hr (4) $11.20/hr

*************************************************

#include <stdio.h>

int main(void)
{
	float worktime = 0;
	int grade = 0;
	float basic = 0;
	float all = 0;
	float tax = 0;
	float netwage = 0;

grade:	
printf("**********************************\n\
Enter the number corresponding to\n\
the desired pay rate or action:\n\n\
(1)$8.75/h  (2)$9.33/h\n\
(3)$10.00/h (4)$11.20/h\n\
**********************************\n");
	printf("Please select:\n");
	scanf("%d", &grade);

	printf("Worktimes of this week?\n");
	scanf("%f", &worktime);
	switch(grade)
	{
		case 1:
			basic = 8.75;
			break;
		case 2:
			basic = 9.33;
			break;
		case 3:
			basic = 10.00;
			break;
		case 4:
			basic = 11.20;
			break;
		default:
			printf("Select Error!\n");
			goto grade;
	}
	if(worktime <= 40)
	{
		all = worktime * basic;
	}
	else
	{
		all = (worktime - 40) * 1.5 * basic + 40 * basic;
	}
	/*
	tax = (all > 300) ? 300 * 0.15 + (((all - 300) > 150) ?\
	150 * 0.2 + (all - 300 - 150) * 0.25 : (all - 300) * 0.2)\
	: all * 0.15;*/
	if(all > 300)
	{
		if(all - 300 > 150)
		{
			tax = 300 * 0.15 + 150 * 0.2 + (all - 450) * 0.25;
		}
		else
		{
			tax = 300 * 0.15 + (all - 300) * 0.2;
		}
	}
	else
	{
		tax = all * 0.15;
	}
	netwage = all - tax;
	printf("Detail:\n");
	printf("all = %.2f\ntax = %.2f\nnetwage = %.2f\n", all, tax,\
	netwage);
	return 0;
}

15、输出两个分数的和

输入两个分数,输出两分数之和(要求约分) 

比如:

输入 3/5 7/8 

输出:

59/40


输入:2/8 5/12 

输出:

2/3

【代码】

#include <stdio.h>

int main(void)
{
    int a1, b1, a2, b2;
    char ch1, ch2;
    int s1, s2;
    int m, n, r, temp;
    
    scanf("%d%c%d %d%c%d", &a1, &ch1, &b1, &a2, &ch2, &b2);
    s1 = a1 * b2 + b1 * a2;//分子
    s2 = b1 * b2;//分母
    
    n = s1;
    m = s2;
    
    //求最大公约数
    if(n < m)
    {
        temp = m;
        m = n;
        n = temp;
    }
    while(m != 0)
    {
        r = n % m;
        n = m;
        m = r;
    }
    
    //n即为
    s1 /= n;
    s2 /= n;
    
    printf("%d/%d\n", s1, s2);
    return 0;
    
}

16、循环输出

输入一个大写字母,如F 

比如:

输入:F 

输出:

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

ABCDEFEDCBA


输入:C 

输出:

A

ABA

ABCBA

【代码】

#include <stdio.h>

int main(void)
{
    char ch = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    
    scanf("%c", &ch);
    
    for(i = 1; i <= ch - 64; i++)
    {
        for(j = 65; j <= 64 + i; j++)
        {
            printf("%c", j);
        }
        
        for(k = 64 + i; k > 65 ; k--)
        {
            printf("%c", k - 1);
        }
        printf("\n");
    }
    
    return 0;
}

17、循环输出

输入一个大写字母,如 F,输出 

比如:

输入:F 

输出:

F

EFE

DEFED

CDEFEDC

BCDEFEDCB

ABCDEFEDCBA


输入:D 

输出:

D

CDC

BCDCB

ABCDCBA

【代码】

#include <stdio.h>

int main(void)
{
    char ch = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    
    scanf("%c", &ch);
    
    for(i = 1; i <= ch - 64; i++)
    {
        for(j = ch - i + 1; j <= ch; j++ )
        {
            printf("%c", j);
        }
        for(k = ch - 1; k > ch - i; k --)
        {
            printf("%c", k);
        }
        printf("\n");
    }
    
    return 0;
}

18、循环输出

输入一个大写字符,如F 

比如:

输入:F 

输出:

FEDCBA 

EDCBAB

DCBABC

CBABCD

BABCDE

ABCDEF


输入 B

输出:

BA

AB

【代码】

#include <stdio.h>

int main(void)
{
    char ch = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    
    scanf("%c", &ch);
    
    for(i = 1; i <= ch - 64; i++)
    {
        for(j = ch - i + 1; j >= 65; j--)
        {
            printf("%c", j);
        }
        for(k = 66; k < 65+i; k++)
        {
            printf("%c", k);
        }
        printf("\n");
    }
    
    
    return 0;
}



  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
强化C语言编程能力的练习题可以包括以下几个方面: 1. 数的输入和输出:这个题目要求你编写程序,实现从键盘输入一个整数,然后再输出该整数。[1-第1题] 2. 计算表达式的值:这个题目要求你编写程序,计算一个表达式的值。例如给定a、b、c三个数,计算(a/b)*c的结果。[1-第2题] 3. 字符判断:这个题目要求你编写程序,判断一个字符是否为大写字母。如果是大写字母,则输出"Yes",否则输出"No"。[1-第3题] 4. 求和运算:这个题目要求你编写程序,计算一组特殊数列的和。具体的数列规则可以根据题目给出的要求来实现。[1-第4题] 5. 硬币翻转游戏:这个题目要求你编写程序,模拟一个硬币翻转游戏。根据题目给出的要求和规则,计算翻转硬币的结果。[1-第5题] 以上是一些常见的强化C语言编程能力的练习题,通过解决这些题目,你可以提高自己的编程技能,并加深对C语言的理解。同时,你也可以尝试编写一些更复杂的程序,来挑战自己的编程能力。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [电子学会青少年软件编程C语言一级)等级考试试卷(2021年6月)-含答案和解题思路.pdf](https://download.csdn.net/download/gozhuyinglong/88230811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C语言之条件语句强化练习题](https://blog.csdn.net/m0_70469414/article/details/127388140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言循环语句强化练习题](https://blog.csdn.net/m0_70469414/article/details/127506522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值