4、C语言基础/流程控制/条件和循环控制结构练习20240102

一、输入一个数,计算是否是完美数

(完美数:除本身外的约数和等于本身;如数字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;
}

代码运行结果:

4、C语言基础/流程控制/条件和循环控制结构练习20240102_第1张图片

二:输入一个数,判断是非为素数。

(素数:只能被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;
}

4、C语言基础/流程控制/条件和循环控制结构练习20240102_第2张图片注意编译时需要加上 -lm

三、 实现图形打印:

思路:已知打印范围(四行四列)利用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

运行示意:

4、C语言基础/流程控制/条件和循环控制结构练习20240102_第3张图片

四、 练习穷举法:百钱买百鸡:

“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”

思路:

设鸡翁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;
}

代码运行:4、C语言基础/流程控制/条件和循环控制结构练习20240102_第4张图片

五、输入一个数判断是否是回文数

(回文数: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;
}

运行图4、C语言基础/流程控制/条件和循环控制结构练习20240102_第5张图片

六、输入一个数,计算各个位之和。

代码:

#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;
}

运行:4、C语言基础/流程控制/条件和循环控制结构练习20240102_第6张图片

 

思维导图:

4、C语言基础/流程控制/条件和循环控制结构练习20240102_第7张图片4、C语言基础/流程控制/条件和循环控制结构练习20240102_第8张图片4、C语言基础/流程控制/条件和循环控制结构练习20240102_第9张图片4、C语言基础/流程控制/条件和循环控制结构练习20240102_第10张图片

你可能感兴趣的:(c语言,算法,数据结构)