分支语句和循环语句

举报
@嘿111 发表于 2024/07/27 16:46:27 2024/07/27
【摘要】 ​ 分支语句语句结构: if语句(1).#include<stdio.h>int main(){ if(表达式) 语句1; else(表达式) 语句2; return 0;}(2).多分支语句#include<stdio.h>int main(){ if(表达式) 语句1; else if(表达式) 语句2; else(表达式) 语句3; return 0;} 例题...

 

分支语句

语句结构: if语句

(1).

#include<stdio.h>
int main()
{
  if(表达式)
  语句1;
  else(表达式)
  语句2;
  return 0;
}

(2).多分支语句

#include<stdio.h>
int main()
{
  if(表达式)
  语句1;
  else if(表达式)
  语句2;
  else(表达式)
  语句3;
  return 0;
}

  

例题

【题目名称】

打印闰年

【题目内容】


打印1000年到2000年之间的闰年

闰年的计算方法:公元纪年的年数可被4整除,能被400和100整除的也是闰年

#include<stdio.h>
int main()
{
	int a = 0;
	for (a = 1000; a <= 2000; a++)
	{
		if (a % 4 == 0)
		{
			printf("%d\n", a);
		}
			if (a % 400==0&&a%100==0)
			{
				printf("%d\n", a);
		}
	}
	return 0;
}
//可简化为 if(a%4==0||a%100==0&&a%400==0)
         {
           printf("%d",a);
         }

if的匹配规则:

例如:

#include<stdio.h>
int main()
{
 int a=0;
 int b=2;
 if(a==1)
 if(b==2)
 printf("hehe\n");
 else
 printf("haha");
 return 0;
}

其中有两个if,else应与离其最近的if语句匹配。

语句结构:switch语句

switch循环语句用于多分支语句

switch(整型表达式)
{
  case语句;//case后的语句必须是整型   eg.case1(正确) case1.0(错误)
}

注:1.在switch语句中break用来实现真正分支,switch无法直接实现分支

       2.若出现不同情况实现同一个结果:

           输出格式为:   case1:

                                   case2:

                                   case3:

                             printf(" ");

                             break;

       3.default子句:用来处理switch语句中的错误

          eg:  default;

                printf("输入错误\n”);

                  break;

循环语句

语句结构:while语句

#include<stdio.h>
int main()
{
  int i=1;
  while(i<=10)
 {
   printf("%d\n",i);
   i++;
 }
 return 0;

1.continue的作用是终止本次循环,从而使continue后边的代码不会再执行,直接跳转到while语句的判断部分,进行下一次循环的入口判断。

#include<stdio.h>
int main()
{
   int i=1;
   while(i<=10)
 {
   i++;
   if(i==5)
    continue;
   printf("%d\n",i);
 }
 return 0;
}//输出结果为  1234

2.break的作用是永久的终止循环。

语句结构:for循环语句

for(exp1; exp2; exp3;)

exp1:初始        exp2:判断   exp3:调整

注:1.不可在for循环体内修改循环变量,防止for循环失去控制

例如:

#include<stdio.h>
int main()
{
 int i=0;
  for(i=0;i<10;i++;)
 {
    if(i=5)
    printf("%d\n",i);
 }
  return 0;
}

在if语句中i被赋值为5,即i一直<10,即输出结果为5的死循环2,

2.建议for循环控制变量的取值采用“前闭合后开区间”的写法

例如:int i=0;

          for(i=0;i<10;i++)

3.for循环语句的初始化,调整,判断部分可省略;如果判断部分被省略,判断条件为:恒为正

语句结构:do while循环语句

格式:

do
    循环语句;
while(表达式)

   例如:

输出1到10:
#include<stdio.h>
int main()
{
  int i=0;
  do
  {
   printf("%d\n",i);
   i++;
  }
  while(i<=10)
  return 0;
} 

分支语句和循环语句相关练习题

1.计算n的阶乘:

1!=1

2!=1*2=2

3!=1*2*3=6

.............

其中ret*=i也可表示为ret=ret*i


#include<stdio.h>
int main()
{
	int ret = 1;
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret  *= i;
	}
		printf("ret=%d\n", ret);
	return 0;
}
//ret是创建的一个变量,用来表示每次变化量相乘的结果

2.计算1!+2!+......+10!

#include<stdio.h>
int main()
{
	int sum = 0;
	int i = 0;
	int n = 0;
	int ret = 1;
	for (n = 1; n <= 10; n++)
	{
		for (i = 1; i <= n; i++)
		{
			ret = ret * i;
		}
			sum = sum + ret;
	}
		printf("%d", sum);
	return 0;
}

3.打印100—200之间的素数

法1.辗转相除法

#include<stdio.h>//辗转相除法
int main()
{
	int i = 0;
	int j = 0;
	for (i = 100; i <= 200; i++)
	{
		for (j = 2; j <= i; j++)
		{
			if (i % j == 0)
				break;
		}
		if (i == j)
			printf("%d\n", i);
	}
	return 0;
}

法2.根号法

#include<stdio.h>//辗转相除法
#include<math.h>
int main()
{
	int i = 0;
	int j = 0;
	int count = 0;//count用来表示素数的个数
	for (i = 100; i <= 200; i++)
	{
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				break;
			}
		}
		if (j > sqrt(i))
		{
			count++;
			printf("%d\n", i);
		}
	}
	printf("count = % d\n", count);
	return 0;
}

其中count用来表示素数的总个数,注:用sqrt时要注明头文件#include<math.h>

4.在arr数组中寻找某一个元素

法1.用循环的方法

#include<stdio.h>
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6 };//假设数组
	int i = 0;//用变量表示元素下标
	int j = 5;//假设要寻找的元素为5
	int sz = sizeof(arr) / sizeof(arr[0]);//表示出数组内元素的个数=元素总大小(长度)/第一个元素的大小(长度)
	for (i = 0; i <= sz; i++)
	{
		if (j == sz)
		{
			printf("找到了下标是:%d", i);
			break;
		}
		if (i == sz)
			printf("找不到\n");
	}
	return 0;
}

注:重点为:数组内元素的个数=元素总大小(长度)/第一个元素的大小(长度)

                       sz=sizeof(arr)/sizeof(arr[o])

法2.二分查找算法

#include<stdio.h>
int main()
{
	int left = 0;//变量表示左下标和右下标
	int right = 0;
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int i = 3;//假设要查找的元素为3
	int sz = sizeof(arr) / sizeof(arr[0]);
	int mid = (left + right) / 2;//用来表示中间元素的下标
		if (i > mid)
		{
			left = mid + 1;
			printf("找到了下标是:%d",i);
		}
	if (i < mid)
	{
		right = mid - 1;
		printf("找不到");
	}
	return 0;
}

编辑

注:若数组中有两个相同元素时,运行出来的下标只有一个

5.编写代码,演示多个字符从两端移动,向中间汇聚

 编辑

#include<stdio.h>
#include<windows.h>
int main()
{
	char arr1[] = "hello world!";
		char arr2[] = "############";
		int left = 0;
		int sz = sizeof arr1/ sizeof(arr1[0]);
		int right = sz-2;
		//int right=strlen(arr1[])-1;使用时要加上头文件 #include<string.h>
		int i = 0;
		while(left<=right)
		{
			arr2[left] = arr1[left];
			arr2[right] = arr1[right];
			printf("%s\n", arr2);
			Sleep(1000);
			//使用sleep函数可以让打印函数时休息1秒,以便于直观感受程序的实现,单位为ms,1000ms=1s
			system("cls");//在系统命令的一个函数后清空屏幕
			//在使用system函数时要使用头文件#include<windows.h>
			left++;
			right--;
		}
		printf("%s\n", arr2);//最后再打印一遍呈现最终结果
	return 0;
}

注意Sleep函数和system函数的应用

6.编写代码实现模拟用户登录情景,并且只能登陆三次(只允许输入三次密码,如正确提示登陆成功;若三次均错,则退出程序)

#include<stdio.h>
int main()
{
	int i = 0;
	char password[] = "1234" ;
	for (i = 1; i <= 3; i++)
	{
		//if(password=="1234")这种只能用来表示两个变量是否相等,不能用来比较两个字符串
		if (strcmp(password, "1234") == 0)
			printf("登陆成功");
			break;
	}
	if (i > 3)
		printf("三次密码均错,退出程序");
return 0;
}

strcmp函数用来比较两个字符串大小是否相同,格式为:

strcmp((char arr1[ ],char arr2[ ])==0)

7.打印出1-100所有含9的数

主要分为两种情况:

十位含9(即除以10的商一定为9)

个位含9(即%10==9)

#include<stdio.h>
int main()
{
	int i = 0;
	int count = 0;//用来计算1-100含9的数的个数
	for (i = 1; i <= 100; i++)
	{
		if (i % 10 == 9)
		{
			printf("%d\n", i);
			count++;
			continue;//使第一个if执行成功后就停止,不会执行第二个if(可以防止99被打印两遍)
		}

		if (i / 10 == 9)
			printf("%d\n", i);
		count++;                          
	}
	return 0;
}

8. 分数求和:

计算1/1-1/2+1/3-1/4+...+1/99-1/100

#include<stdio.h>
int main()
{
	int i = 0;
	double sum = 0;//结果为小数,用double型
	int flag = 1;//创建一个临时变量,以达到"+""-”的效果,注意flag不能赋值为0
	for (i = 1; i <= 100; i++)
	{
		sum += flag * 1.0 / i;//用1.0/i的目的是将前后整型一致
		flag = -flag;
	}
	printf("%lf", sum);
	return 0;
}

 注意临时变量flag的用法

9.求10个整数中的最大值

#include<stdio.h>
int main()
{
	int arr[] = { 0 };
	int max = arr[0];
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i <= sz; i++)
	{
		if (arr[i] > max)
		{
			max=arr[i];
			printf("%d", max);
		}
	}
	return 0;
}

注意:将max赋值为arr[0]而不是0的原因是:当所比较的数为负数时,将max=0会改变最终的结果

10.在屏幕中打印出9*9乘法表

编辑

 先打印一行中的所有数,再打印每列

#include<stdio.h>
int main()
	{
		int i = 0;//行数
        int j = 0;//列数
		for (i = 1; i <= 9; i++)
		{
			for (j = 1; j <= i; j++)//有几行就打印几列
			{
				printf("%d*%d=%-3d", i,j,i * j);//“-3d”可以拉开间隔使程序打印出来的更漂亮
			}
			printf("\n");//让每行末尾回车
		}
		return 0;
	}





【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。