C语言基础条件和循环

C语言基础–条件和循环

条件结构

if-else结构:

if(条件语句){执行体};

if(条件语句1){执行体1};
else if(条件语句2){执行体2};
else if(条件语句3){执行体3};
else {执行体4}

switch-case结构:

  • swicth中表达式一定是整型
  • case中语句结束前要加Break,否则后面的case语句仍会执行。
  • 多case可以执行同一组语句
  • case后面不能加声明,不然会报错。
  • default语句可以在任意位置
switch()
{
	case():case():case():{;break;}
	default:break;
}

区别:

  • if是区间(范围值)的判断,switch是点(精确值)的判断
  • if表达式可以判断不同的内容或复合逻辑,switch只能判断单个选项

循环结构

while语句

  1. while语句
while(条件表达式)
{
	循环体
}

题1 阶乘

/*阶乘*/
int main()
{
	int n,sum=1;
	scanf("%d",&n);
	n++;
	while(--n)  
		sum*=n;
	printf("%d\n",sum);
}

区别:
while(n–){循环体}//执行while条件语句后执行n-1,然后再进入执行体
while(–n){循环体}//执行while条件语句前执行n-1,然后再进入执行体

题2 输出键盘输入字符个数

/*输出键盘输入字符个数 方法一*/
int main()
{
 int n=0;
//连续输入一串字符一直到回车为止
 while(getchar()!='\n'){
 	n++;  //每输入一个字符,n加1
 }
 printf("%d\n",n);
}


/*输出键盘输入字符个数 方法二*/
int main()
{
	char array_num[100] ;
	int i = 0, length;
	do
	{
		scanf("%c", &array_num[i]);
		i++;
	} while (array_num[i - 1] != '\n');
	length = i-1;

	for (i = 0; i < length; i++)
		printf("%c", array_num[i]);

	getchar();//VS2017中特殊设置,解决CMD窗口闪退问题
	
	return 0;
}

char s[50];
gets(s);//将输入放进数组

先判断条件,再执行循环体

  1. do-while语句
do{
	循环体
}
while(条件表达式);

先执行循环体,再判断条件。

for语句

for( : : ){} 条件为空时默认恒成立

for(表达式1;表达式2;表达式3)
{
	循环体4
}
//执行顺序1-2-4-3-2-4-3...2-4-3-2

break,continue是针对一个循环体来说的

题:最大公约数,最小公倍数

/*
公约数:取余法
32%20-->12
20%12-->8
12%8-->4
8%4-->0,4为最大公约数
*/
int num1,num2,m,n,mid; //求num1,mun2的最大公约数
scanf("%d%d",&num1,&num2);
m=num1,n=num2; //m为较大的数
for(i=m;i>=1;--i){
	mid=n;
	n=m%n;
	m=mid;
	if(n==0)break;
	}
printf("%d和%d的最大公约数为:%d",num1,num2,m)

/*方法二:直接从小的数向下逐个寻找最大公约数*/
for(i=n;i>0;--i){
	if(m%i==0 && n%i==0)break;
	}
printf("%d和%d的最大公约数为:%d",num1,num2,i)



/*寻找最大公倍数*/
for(i=1;i<=m;i++){
	if(m%i==0 && n%i==0){m/=i,n/=i,sum*=i;}
	}
printf("%d和%d的最小公倍数为:%d",num1,num2,m*n*sum)


题:一秒打印一次时间

/*
sleep函数,在头文件<unistd.h>
time获取时间函数,在头文件<time.h>
*/
#include<stdio.h>
#include<unistd.h>
#include<time.h>

time_t t=0
while(1){
	t=time(NULL);
	printf("%s",ctime(&t));
	sleep(1);
	}
	

题:金字塔pyramid

int main()
{
	int x,y,i,tall;
	printf("输入金字塔层数:");
	scanf("%d",&tall);

	for(x=0;x<=tall;x++){ //x层
		for(y=0;y<tall-x;y++)printf(" ");  //星号前面空格数tall-x
		for(i=0;i<2*x-1;i++){              //打印星号数量
			if(i%2==0)printf("*");         //利用判断语句,一个隔一个打印星号
			else printf(" ");
		}
		printf("\n");   //回车完成一层输出
	}
}

或者
int main()
{
	int x,y,i,tall;
	printf("输入金字塔层数:");
	scanf("%d",&tall);

	for(x=0;x<=tall;x++){ //x层
		for(y=0;y<tall-x;y++)printf(" ");  //星号前面空格数tall-x
		for(i=1;i<=x;i++){              //打印星号数量
			printf("* ");         //将"* "作为一个整体,个数和层数相同
		}
		printf("\n");   //回车完成一层输出
	}
}


/*
输入金字塔层数:8
        
       *
      * *
     * * *
    * * * *
   * * * * *
  * * * * * *
 * * * * * * *
* * * * * * * *
*/

题:字母金字塔

int main(void)
{
	char ch,ch1='\0';
	int x,y;
	printf("输入字母:");
	ch=getchar();
	
	if(ch>='a'&&ch<='z')ch-=32;
	if(ch>='A'&&ch<='Z')
	{
		for(ch1='A';ch1<=ch;ch1++)
		{
			for(x=0;x<ch-ch1;x++)printf(" ");
			for(y=1;y<=(ch1-'A')*2+1;y++)printf("%c",ch1);
			printf("\n");
		}
	}
	else printf("error");
	printf("\n");
}
/*
输入字母:g
      A
     BBB
    CCCCC
   DDDDDDD
  EEEEEEEEE
 FFFFFFFFFFF
GGGGGGGGGGGGG

题:99乘法表

int main()
{
	int x,y;

	for(x=1;x<10;x++)
	{
		for(y=1;y<=x;y++)
			printf("%d×%d=%-3d\t",y,x,x*y);
		printf("\n");
	}
}

/*
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	
*/

题:calendar
计算日期为星期几–基姆拉尔森计算公式
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值