您现在的位置: 主页 > 嵌入式软件 > C/C++ > C语言经典编程习题之循环
本文所属标签:
为本文创立个标签吧:

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

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-09-04 


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("%dn", 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("An");

}

else

{

if(score >= 60 && score <= 89)

{

printf("Bn");

}

else

{

printf("Cn");

}

}

    /*

char ch = 0;

int score = 0;

scanf("%d", &score);

ch = (score >= 90) ? 'A' : (score >= 60) ? 'B' : 'c';

printf("%cn", 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("英文个数为:%dn

空个数为: %dn

数字个数为:%dn

其他字符个数为:%dn",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 = %dn", 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 = %dn", 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 --- > %cn", ch1[i], ch2[j]);

}

else if(ch1[i] == 'c' && ch2[j] != 'x' && ch2[j] != 'z')

{

printf("%c --- > %cn", ch1[i], ch2[j]);

}

else if(ch1[i] == 'b')

{

printf("%c --- > %cn", 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 = %dn", 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 = %dn", 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, 平均值为:%.2fn", even, sumeven / (float)even);

printf("奇数的个数为:%d, 平均值为:%.2fn", 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 ton

the desired pay rate or action:nn

(1)$8.75/h  (2)$9.33/hn

(3)$10.00/h (4)$11.20/hn

**********************************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 = %.2fntax = %.2fnnetwage = %.2fn", 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/%dn", 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;

}




              查看评论 回复



嵌入式交流网主页 > 嵌入式软件 > C/C++ > C语言经典编程习题之循环
 代码 输入 个数

"C语言经典编程习题之循环"的相关文章

网站地图

围观()