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");//十次换行
}
}
圹
圹圹
圹圹圹
圹圹圹圹
圹圹圹圹圹
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”