一、输入一个数,计算是否是完美数
(完美数:除本身外的约数和等于本身;如数字6的约数有:1 2 3,1+2+3=6)
#include
int main(int argc, const char *argv[])
{
int num,sum=0,i; //注意记录和的变量sum清零;
printf("please enter num: ");
scanf("%d",&num);
for(i=1;i<=num/2;i++){ //从1开始,循环至num/2即可;
if(num%i==0){ //判断i是否为num的约数;
sum+=i; //条件为真则sum内增加i的值;
}
}
if(sum==num) //循环结束后判断sum是否等于输入值num
printf("是完美数\n");
else
printf("不是完美数\n");
return 0;
}
代码运行结果:
二:输入一个数,判断是非为素数。
(素数:只能被1和它本身整除的数)
代码:
#include
#include // 包含开方函数sqrt的头文件;
int main(int argc, const char *argv[])
{
int num,i,n=0;
printf("please enter num: ");
scanf("%d",&num);
for(i=2;i<=sqrt(num);i++){ //从2循环至num的开平方数(因为大于mum开方数的数字,除上num的值必然小于num的开方数,所以往上的数字不用再判断);
if(num%i==0)
n++; //定义n为了记录循环内是否有能被整除的i;
}
if(n==0) //判断n的值是否改变了。
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
三、 实现图形打印:
思路:已知打印范围(四行四列)利用for循环实现打印。
*
**
***
****
****
***
**
*
*
**
***
****
****
***
**
*
代码:
#include
int main(int argc, const char *argv[])
{
for(int i=1;i<=4;i++){ //for语句第一个初始值可以直接在括号内定义;外部循环控制行i
for(int j=1;j<=i;j++){ //内部循环控制列j,当j>i时,不再打印
printf("*");
}
printf("\n"); //内部列循环一次后换行
}
printf("\n"); //两个图形之间间隔一行
for(int i=1;i<=4;i++){
for(int j=1;j<=4+1-i;j++){ // 相反的打印,当i=1,j=4;i=2,j=3;规律为j=总行数+1-i;
printf("*");
}
printf("\n");
}
printf("\n");
for(int i=1;i<=4;i++){
for(int j=1;j<4+1-i;j++){ //不取等于因为j=i时 打印了*;
printf(" ");
}
for(int j=1;j<=i;j++){ //j<=i,因为每行打印的个数与i相同,只是被上个循环打印的空格顶到了后面;
printf("*");
}
printf("\n");
}
printf("\n");
for(int i=1;i<=4;i++){
for(int j=1;j
运行示意:
四、 练习穷举法:百钱买百鸡:
“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”
思路:
设鸡翁x,鸡母y,鸡雏z; 这有5x+3y+z/3=100,且x+y+z=100,且z%3=0(保证z为3的倍数);
0<=x<=20,0<=y<=33,0<=z<=100。
用for嵌套循环,遍历所有可能并将符合的输出。
代码:
#include
int main(int argc, const char *argv[])
{
int x,y,z;
for(x=0;x<=20;x++){
for(y=0;y<=33;y++){
for(z=0;z<=100;z++){
if(5*x+3*y+z/3==100&&x+y+z==100&&z%3==0)
printf("鸡翁=%d,鸡母=%d,鸡雏=%d\n",x,y,z);
}
}
}
return 0;
}
五、输入一个数判断是否是回文数
(回文数:12321 正序和倒序相等)
思路:输入一个num;设变量S=0 让S通过一次循环=这个数的倒序,用S=S*10+num%10;num/10作为循环中变量,最后num=0结束循环;
循环结束后判断S=num。(不确定循环次数使用while循环)
代码:
#include
int main(int argc, const char *argv[])
{
int num,sum=0,A;
printf("please enter a num: ");
scanf("%d",&num);
A=num;
while(num!=0){
sum=sum*10+num%10;
num/=10;
}
if(A==sum)
printf("是回文数\n");
else
printf("不是\n");
return 0;
}
六、输入一个数,计算各个位之和。
代码:
#include
int main(int argc, const char *argv[])
{
int num,S=0;
printf("please enter num: ");
scanf("%d",&num);
int A=num;
while(num>0){
S+=num%10;
num/=10;
}
printf("%d的所有位之和为:%d \n",A,S);
return 0;
}
思维导图: