C语言习题---流程控制语句

一、基础

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

#include 
int main()
{
    int i,tmp;
    printf("所有能被17整除最大的数:");
    for(i = 1; i <= 100; i++)
    {
        if(i % 17 == 0)
        {
            tmp = i;
        } 
    }
    printf("%d \n", tmp);
    return 0;
}

2)输入年份,判断是否闰年。

#include 
int main()
{
    int year;
    printf("请输入年份:");
    scanf("%d", &year);
    if((year % 4 == 0 && year %100 != 0)|| (year % 400 == 0))
    {
        printf("%d是闰年\n", year);
    }
    else
    {
        printf("%d不是闰年\n", year);
    }
    return 0;
}

3)计算并输出 200400 之间不能被 3 整除的整数的和。

#include 
int main()
{
    int i;
    int s;
    printf("200--400之间不能被3整除的整数的和:");
    for(i = 200; i <= 400; i++)
    {
        if(i % 3 != 0)
        {
            s += i;
        } 
    }
    printf("%d\n", s);
    return 0;
}

4)求 1-1/2+1/3-1/4+……+1/99-1/100 的值。

#include 
int main()
{
    int i;
    float sum = 0;
    for(i = 1; i <= 100; i++)
    {
        if(i % 2 == 0)
        {
            sum -= 1.0 / i;
        } 
        else
        {
            sum += 1.0 / i;
        }
    }
    /*float i = 1.0;
    int j = 0;
    int k = 1;
    float s = 1.0;
    for(j = 2; j <= 100; j++)
    {
        k *= -1;
        s += k * (1.0 / j); 
        printf("%f\n", s); 
        
    }*/
    printf("1-1/2+1/4...-1/100的值是: %f\n", sum);
    return 0;
}

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

#include 
int main()
{
    int i, a, b, c;
    for(a = 1; a <= 9; a++)
    {
        for(b = 1; b <= 9; b++)
        {
            for(c = 1; c <= 9; c++)
            {
                i = a*100+b*10+c+c*100+b*10+a;
                if(i == 1333)
                {
                    printf("a = %d,b = %d,c = %d\n", a, b, c);
                }
            }
        }
    }
    return 0;
}

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

#include 
int main()
{
    int i;
    printf("200--400以内能被 3 整除且个位数字为 7 的整数:\n");
    for(i = 200; i <= 400; i++)
    {
        if(i % 3 == 0)
        {
            if(i % 10 == 7)
            {
                printf("%d\n", i);
            }
        } 
    }
    return 0;
}

7)break continue

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

#include 
int main()
{
    int i;
    for(i = 0; i < 10; i++)
    {
        printf("break:%d ", i);
        printf("\n");
        if(i == 4)break;
    }
    for(i = 0; i < 10; i++)
    {
        if(i > 4)
        continue;
        printf("continue:%d ", i);
        printf("\n");
    }
    return 0;
}

8)写一段程序,输入 x,输出 y 值。

                        x,x<1 
                y=    2x-1,1≤x<10 
                        3x-11,x≥10
#include 
int main()
{
    int x;
    printf("请输入x的值");
    scanf("%d", &x);
    if(x < 1)
    {
       printf("x < 1 时,y = %d\n", x);
    }else if(x >= 1 && x < 10)
    {
       printf("1 <= x < 10 时,y = %d\n", 2 * x - 1); 
    }else
    {
       printf("x >= 10 时,y = %d\n", 3 * x - 11); 
    }
    return 0;
}

二、巩固

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

#include 
int main()
{
    int i;
    int s;
    int k = 1;
    for(i = 1; i <= 10; i++)
    {
        k *= i;
        s += k;
    }
    printf("%d\n", s);
    return 0;
}

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

#include 
int main()
{
    int i;
    int s;
    int k;
    for(i = 2; i <= 100; i += 2)
    {
        k = (i - 1) * i * (i + 1);
        s += k;
    }
    printf("%d\n", s);
    return 0;
}

3)打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。 例如:153=1*1*1+5*5*5+3*3*3=1+125+27

#include 
int main()
{
    int i,g,s,b;
    printf("水仙花数:\n");
    for(i = 100; i <= 999; i++)
    {
        g = i % 10;
        s = i / 10 % 10;
        b = i / 100; 
        if(b*b*b+s*s*s+g*g*g == i)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

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

#include 
int main()
{
    int i;
    int j;
    for(i = 100; i < 200; i++)
    {
        for(j = 2; j <= i; j++)
        {
            if(i % j == 0)//判读是否只能被1和自身整除
            {
                //printf("%d不是素数\n", i);
                break;
            }
        } 
        if(i == j)
        {
            printf("%d是素数\n", i);
        }
    }
    return 0;
}

5)用 1元人民币兑换 5 分(20), 2 分(50), 1 分(100)的硬币共 50 枚, 每种 硬币至少 1 枚,问共有多少种兑换方案, 输出每一种方案三种硬币的数量。

#include 
int main()
{
    int i, j, k;
    int count = 0;
    for(i = 1; i < 20; i++)
    {
        for(j = 1; j < 50; j++)
        {
            for(k = 1; k < 100; k++)
            {
                if((i*5+j*2+k == 100) && (i+j+k == 50))
                {
                    printf("5分:%d, 2分:%d, 1分:%d\n", i,j,k);
                    count ++;
                }
            }
        }
    }
    printf("总共:%d种\n", count);
    return 0;
}

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

#include 
int main()
{
    float r = 0.0225;
    int x;
    int n;
    int i;
    float s = 1.0;
    printf("请输入本金x和年份n:");
    scanf("%d%d", &x, &n);
    for(i = 0; i < n; i++)
    {
        s *= (1 + r);
    }
    r = x + s;
    printf("本利和:%.3f\n", r);
    return 0;
}

7)输出 10000 以内的所有完全数, 各个小于它的约数(真约数, 列出某数的约数, 掉该数 本身, 剩下的就是它的真约数)的和等于它本身的自然数叫做完全数。 

例如:第一个完全数是 6,它有约数 1236,除去它本身 6 外,其余 3 个数相加, 1+2+3=6。第二个完全数是 28,它有约数 12471428,除去它本身 28 外, 其余 5 个数相加,1+2+4+7+14=28

#include 
int main()
{
    int i,j,s;
    for(i = 1; i <= 10000; i++)
    {
        s = 0;//每次近来s都重新赋值
        for(j = 1; j < i; j++)
        {
            if(i % j == 0)//判断完数
            {
                s += j;//完数相加
            }
        }  
        if(s == i)//完数相加后是否等于i
        {
            printf("%d\n", s);
        }
    }
}

8)有一个分数序列:2/13/25/38/513/821/13... 求出这个数列的前 20 项之和。

#include 
int main()
{
    float i = 2.0;
    float j = 1.0;
    int k;
    int n;
    float s = 0;
    for(n = 0; n < 20; n++)
    {
        s += i / j;
        k = i;
        i = i + j;
        j = k;
    }
    printf("前20项和为:%.3f\n", s);
    return 0;
}

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

#include 
int main()
{
    int n;
    int i;
    int a = 0;
    int tmp = 0;
    int sum = 0;
    printf("请输入n的值,和要计算的a的值:");
    scanf("%d%d", &n, &a);
    for(i = 0; i < n; i++)
    {
        tmp = tmp * 10 + a;//重点
        sum += tmp;
        printf("a = %d:\n", tmp);
        
             
          
    }
    printf("Sn = %d:\n", sum);
    return 0;
}

10)输入一个字符,如果是大写字母则,将其以小写形式输出,如果是小写字母,则将其以大写形式输出。如果不是英文字母,则原样输出。

#include 
int main()
{
    char c;
    printf("请输入一个字符:");
    scanf("%c", &c);
    if(c >= 'a' && c <= 'z')
    {
        printf("小写变大写:%c\n", c - 32);
    }
    else if(c >= 'A' && c <= 'Z')
    {
        printf("大写变小写:%c\n", c + 32);
    }
    else
    {
        printf("原样输出:%c\n", c);
    }
    
    return 0;
}

三、提高

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

#include 
int main()
{
    int i,n;
    printf("请输入一个数:");
    scanf("%d", &n);
    printf("%d = ", n);
    for(i = 2; i < n; i++)
    {
        if(n % i == 0)
        {
            printf("%d * ", i);
            n /= i;
        }
    }
    printf("%d\n", n);
    return 0;
}

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

#include 
int main()
{
	int sum = 1;
	for(int i=0;i<10;i++)
	{
		sum = 2*(sum+1);
	}
	printf("sum = %d\n",sum);
	return 0;
}

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

#include 
int main()
{
	char A,B,C;
	for(A='X';A<='Z';A++){
		for(B='X';B<='Z';B++){
			for(C='X';C<='Z';C++)
			{
				if(A!='X'&&C!='X'&&C!='Z'&&A!=B&&B!=C&&A!=C)
				printf("A--%c B--%c C--%c\n",A,B,C);
			}
		}
	}
}

你可能感兴趣的:(C语言学习,算法,数据结构,c语言,linux,嵌入式硬件,单片机)