C-编程练习题

一、打印水花仙数

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

例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,用 % / 分解出个位,十位,百位。

#include <stdio.h>
void main(){
    printf("Hello World!\n");

    for(int i=100;i<1000;i++)
    {
        int abc,a,b,c,bc;
        abc = i;

        a = i/100;
        bc = i % 100;
        b = bc/10;
        c = bc %10;

        if(a*a*a + b*b*b + c*c*c == abc)
            printf("%d\n",i);
    }


}
得到答案:
Hello World!
153
370
371
407

其中有个很有意思的问题,我才发现C是没有幂运算符的。

 采取移位运算:
 if(a<<2 + b<<2 +c<<2 == 8) //但多个的好像不支持,而单个的移位是ok的 if(a<<2== 8)
 故只能手动***
 if(a*a*a + b*b*b + c*c*c == abc)

二、学习成绩录入

[条件运算符的嵌套]

A: score >= 90

B: 60 < score <89

C: score<60

(当然,是没有考虑在0和100以外的非正常值)

#include<stdio.h>

void main(){

    int score;
    char grade;

    printf("Please input a score\n");
    scanf("%d",&score);
    
    //  条件运算符 (a>b)?a:b
    //(score>=90)?'A': 【嵌套】 (score>=60?'B':'C');
    grade = (score>=90)?'A':(score>=60?'B':'C'); 
    printf("%d belongs to %c",score,grade);

}

拓展版

将学生的百分制成绩转换为五分制成绩
A:≥90分
B:80~89分
C:70~79分
D:60~69分
E:0~60分

#include<stdio.h>

void main(){

    int score;
    char grade;

    printf("Please input a score\n");
    scanf("%d",&score);

    //  条件运算符 (a>b)?a:b
    grade = (score>=90)?'A':(score>=80?'B':(score>=70?'C':(score>=60?'D':'E')));
    printf("%d belongs to %c",score,grade);

}

三、求因数

#include<stdio.h>

void main(){
printf("Selete a number!\n");
	int n;
	scanf("%d",&n);
	int m=n/2;

for(int i=1;i<=m;i++){

    if(n%i == 0)
        printf("%d\n",i);
}
}

四、用汉字搭梯形状

用到gbk编码表、查找圹字。输出梯子形的“圹”字,每层n个字,一共5层。

原理:在gbk编码中,汉字都是用两个字节表示的,如下,即表示一个圹字

printf("%c%c",219,219);

两个219的二进制合一起来就表示一个机内码“圹”

#include "stdio.h"
main(){
    int i,j;
    for(i=1;i<6;i++){
        for(j=1;j<=i;j++)
            printf("%c%c",219,219);
            printf("\n");//十次换行
    }
}
圹
圹圹
圹圹圹
圹圹圹圹
圹圹圹圹圹
posted @ 2021-11-05 11:44  Dinesaw  阅读(109)  评论(0编辑  收藏  举报