您好,登录后才能下订单哦!
本篇内容介绍了“C++分支和循环语句怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
生活中存在三种语言结构
(1)顺序结构
(2)选择结构<——>分支语句:if switch
(3)循环结构<——>循环语句:while for do while goto
C语言中0表示假,非0表示为真。(比如说-1表示为真)
if 语句
语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
if (表达式1)
语句1;
else if(表达式2)
语句2;
else // 最后一个else语句借以省略,根据需要写
语句3;
如果if 或者else想要控制多条语句,必须要用大括号括起来,整体形成一个代码块。
以上程序的输出结果不是“hahahah”也不是“hehhehe”,结果是什么也不输出。else是和最近的 if匹配,所以都是属于第一个if的代码块内容。
else是和它离得最近的那个没有匹配的if 是一对。
如果常量和变量做比较的时候,我们可以把常量写在前面,这样能够避免出现错误如:5==num;
练习
1.判断一个数是否为奇数?
#include <stdio.h>
int main()
{
int num=0;
printf("请输入一个数:\n");
scanf("num=%d\n",&num);
if (num%2==1)
{
printf("该数字为奇数");
}
else
{
printf("该数字为偶数");
}
return 0;
}
2.且输出1-100之间的奇数。
#include <stdio.h>
int main()
{
int a=1;
while (a<=100)
{
if(a%2==1)
{
printf("%d\n",a);
a++;
}
else
a++;
}
return 0;
}
Switch语句
Switch语句的一般形式:
Switch(语句1)
{
case(语句2):
内容;
break;
case (语句3):
内容;
break;
case(语句4):
内容;
break;
……
default;// 可有可无
内容;
break;
}
Switch语句是从case进入,从break出来,只有当case后面的语句与Switch后面的语句匹配上的时候才会执行。
注意:Switch语句里面必须是整型表达式,case后面必须是整型常量表达式。
while循环
while 语法结构:
while (表达式)
循环语句;
只有在表达式为真的时候,才会执行循环语句,知道发现表达式为假的时候,表达式便不再执行,结束循环。
continue的作用是终止本次循环中,也就是说continue后面的代码不再执行,直接跳转到while的判断部分,判断是否需要进入下一次循环。
只要循环中遇到break,就停止后期的所有的循环,直接终止循环,所以:while中的break是用于永久终止循环的。
getchar 是输入字符,putchar() 是输出字符。putchar(变量名)的含义类似于printf(“%c”,变量名);
EOF——表示的end of file 是文件的结束标志。
int main()
{
int ch=0;
while((ch=getchar()!=EOF)
{
putchar(ch);
}
return 0;
}
当你输入EOF的时候,循环并不会终止,只有当你输入Ctrl+z时,才会终止。
getchar与scanf的区别:
scanf是把你所输入的内容放到一个缓冲区中,最后的回车键作为结束标志,在最终显示的时候不会显示出\n。但是getchar首先是去输入缓冲区中看是否有内容,不管里面的内容是否是自己所需要的,都会被读走。所以,一般我们在使用getchar()输入的时候,前面一般加上一句getchar();不用给他赋予返回值,因为我们此时的目的就是清空数据缓冲区中的内容,让getchar获取我们想要的内容。
getchar函数是一位一位的读取字符的。
#include <stdio.h>
int main()
{
while ((ch=getchar())!=EOF)
{
if(ch<'0'||ch>'9')
continue;
putchar(ch);
}
return 0;
}
以上代码的意思是只有在输入字符0-9之间的字符,包含0和9,才会有输出,否则就不输出。
for循环
语法:for (表达式1;表达式2;表达式3)
{
循环语句;
}
表达式 1为初始化部分,用于初始化循环变量的。表达式2 为条件判断部分,用于判断循环时候终止。表达式3位调整部分,用于循环条件的调整。
break和continue的用法和在while语句中的用法一致。
有一个小区别:
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if (i==5)
continue;
printf("%d",i);
}
return 0;
}
此结果的输出是1 2 3 4 6 7 8 9 10 因为在i=5的时候遇到了continue之后直接跳转到了变量调整部分i++那里,所以,这个时候变量的值变为了6,继续输出。
#include <stdio.h>
int main()
{
int i=1;
while (i<=10)
{
if(i==5)
continue;
printf("%d",i);
i++;
}
}
此代码的结果是1 2 3 4 最后是一个死循环,因为当i=5的时候,遇到了continue,后面的部分不再执行,直接跳过了变量调整部分,一直在判断i=5。
for语句循环控制变量的一些建议:
不可在for循环体内修改循环变量,防止for循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
当for循环的表达式2,即判断语句不写的时候,就意味着这个判断条件恒为真,那么就进入了死循环。
请问一下代码循环了多少次?
#include <stdio.h>
int main()
{
int i=0;
int k=0;
for (i=0,k=0;k=0;i++,k++)
k++;
return 0;
}
答案是循环了0次,就是根本就没有进入循环,因为判断语句处是一个赋值语句,赋值表达式的结果是0,为假,那么就不进入循环。
do while 循环
语法:do
{
循环;
}
while()
练习题
1. 从键盘输入一个数n,并且求n!
#include <stdio.h>
int main()
{
int n=0;
int i=1;
int sum=1;
printf("请输入n:\n");
scanf("%d",&n);
while (i<=n)
{
sum=sum*i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}
2.求1!+2!+3!+4!+……n!
[x]
#include <stdio.h>
int main()
{
int n=0;
int i=1;
int sum=1;
int get=0;
printf("请输入n:\n");
scanf("%d",&n);
for (n=1;n<=10;n++)
{
sum=1;
while (i<=n)
{
sum=sum*i;
i++;
}
get=get+sum;
}
printf("get=%d\n",get);
return 0;
}
[x]
#include <stdio.h>
int main()
{
int n=0;
int i=1;
int sum=1;
int get=0;
printf("请输入n:\n");
scanf("%d",&n);
for (n=1;n<=10;n++)
{
sum=sum*n;
get=get+sum;
}
printf("get=%d\n",get);
return 0;
}
3.在一个有序数组中查找具体的某个数字n,编写int binsearch(intx, int v[],int n);功能:在v[0]<=v[1]<=v[2]<=……v[n-1]的数组中查找x。
[x]
#include <stdio.h>
int main()
{
int i=1;
int k=7;
int arr[]={1,2,3,4,5,6,7,8,9,10};
int lgth=sizeof(arr)/sizeof(arr[0]) ;
for(i=0;i<lgth;i++)
{
if(k==arr[i])
{
printf("找到了,下标为%d\n",i);
break;
}
}
if (i==lgth)
printf("没有找到");
return 0;
}
[x]二分查找法
#include <stdio.h>
int main()
{
int k=7;
int arr[]={1,2,3,4,5,6,7,8,9,10};
int i=0;
int legth=sizeof(arr)/sizeof(arr[0]);
int right=legth-1;
int left=0;
while(left<=right)
{
int mide=(right+left)/2;
if(k>arr[mide])
{
left=mide+1;
}
else if(k<arr[mide])
{
right=mide-1;
}
else
{
printf("找到了,下标为%d\n",mide);
break;
}
}
if(left>right)
{
printf("找不到");
}
return 0;
}
4.编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>//这个是printf所在的库函数
#include <string.h>//这个是 strlen所在的库函数
#include<windows.h>//这个是sleep所在的库函数
#include<stdlib.h> //这个是system所在的库函数
int main()
{
char arr1[]="Welcome to DongHua!!!!";
char arr2[]="######################";
int left =0;
int right=strlen(arr1)-1;
while (left<right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
printf("%s\n",arr2);
Sleep(1000);//表示在输出的时候停留1000毫秒
system("cls");//表示在输出一次结果后清屏
left++;
right--;
}
return 0;
}
5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确就提示登录成功,如果三次均输入错误,则退出程序)
strcmp(A,B)是比较字符串A和字符串B,如果字符串A>B,那么会返回一个大于0的数字,如果A<B,那么会返回一个个小于0的数字
#include <stdio.h>//这个是printf所在的库函数
#include <string.h>//这个是 strlen所在的库函数
int main()
{
int i=0;
char password[20]={0};//不能写成password[]={0},这样定义的话,就不知道数组的长度是多少结果就会出错
for (i=0;i<3;i++)
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,"123456")==0)//在比较两个字符串是否相等的时候,不能直接用==来判断,要用strcmp函数,它在string.h函数库中
{
printf("密码正确,登陆成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i==3)
{
printf("三次密码错误,退出程序\n");
}
return 0;
}
goto 语句
在一般编写程序的时候很少使用goto语句,因为它会破坏程序的逻辑性,它所使用的场景是跳出多层循环嵌套。
分支和循环的作业和练习
1.输入三个数,按照从大到小的顺序输出。
#include <stdio.h>//这个是printf所在的库函数
int main()
{
int a=0;
int b=0;
int c=0;
printf("请输入三个数:\n");
scanf("%d%d%d",&a,&b,&c);
if (a<b)
{
int temp=a;//在此注意,不能直接将b赋值给a,因为这样a的值容易丢失
a=b;
b=temp;
}
if(a<c)
{
int temp=a;
a=c;
c=temp;
}
if(b<c)
{
int temp=b;
b=c;
c=temp;
}
printf("由大到小的顺序为:%d %d %d\n",a,b,c);
return 0;
}
2.写一个代码打印1-100之间的所有的3的倍数的数字
#include <stdio.h>
int main()
{
int i=0;
for (i=0;i<100;i++)
{
if (i%3==0)
{
printf("%d",i);
}
}
return 0;
}
3.给定两个数,求这两个数的最大公倍数.
辗转相除法比如说24和18,首先看24%18余数是否为0,如果不为0的话,再用除数与余数相除,直到余数为0为止,此时最后的除数就是公倍数。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int temp = 0;
printf("请输入两个数字:\n");
scanf_s("%d %d", &a, &b);
while(temp = a % b)//只要结果为非0,就进入循环。
{
a = b;
b = temp;
}
printf("公倍数为:%d", b);
return 0;
}
4.打印1000年到2000年之间的闰年
#include <stdio.h>
int main()
{
int year = 0;
for (year = 0; year <= 2000; year++)
{
//判断year是否为闰年
//1.能被4整除并且不能被100整除
//2.能被400整除是闰年
if (year % 4 == 0 && year % 100 != 0)
{
printf("闰年为:%d\n", year);
}
else if(year%400==0)
{
printf("闰年为:%d\n", year);
}
}
return 0;
}
5.打印100-200之间的素数
#include <stdio.h>
int main()
{
int count = 0;
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i ; j++)
{
if (i%j == 0)
VPsx9aha"> {
break;
}
}
if (j == i)
{
count++;
printf("%d\n", i);
}
}
printf("count=%d\n", count);
return 0;
}
优化程序:首先偶数肯定不是素数,所以先产生100-200之间的奇数。根据c=a*b,那么a或者b中必有一个小于c开平方
#include <stdio.h>
# include<math.h>//sqrt函数在此函数库中
int main()
{
int count = 0;
int i = 0;
for (i = 101; i <= 200; i+2)
{
int j = 0;
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;
}
6.编写程序数一下1-100之间所有的整数中出现了多少个数字9
#include<stdio.h>
int main()
{
int count = 0;
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
{
count++;
}
if (i / 10 == 9)
{
count++;
}
}
printf("%d\n", count);
return 0;
}
7.计算1/1-1/2+1/3+1/4+1/5+……+1/99+1/100的值,打印出结果
#include<stdio.h>
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum += flag*(1.0 / i);//此处必须是1.0,否则结果都是不对的
flag = (-flag);
}
printf("%lf\n", sum);
return 0;
}
8.求10个整数中的最大值
#include<stdio.h>
int main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int max = arr[0];
for (i = 0; i <= 10; i++)
{
if(max<arr[i])
max = arr[i];
}
printf("%d\n", max);
return 0;
}
输入10个数字,并且找出其中的最大值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = { 0 };
printf("请输入数字:");
for (i = 0; i < ; i++)
{
scanf("%d", &arr[i]);//切勿忘记加上取地址运算符
}
int max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i]>max)
{
max = arr[i];
}
}
printf("max=%d\n", max);
return 0;
}
9.输出乘法口诀表
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i < 10; i++)
{
for (j = 1; j < i+1; j++)
{
printf("%d*%d=%2d ", i, j, i*j);//输出为%2d表示的是输出为两个字符,不够两个字符的,自动补一个空格。%-2d是输出左对齐
}
printf("\n");
}
return 0;
}
10.设计一个猜数字游戏
#define _CRT_SECURE_NO_WARNINGS//scanf所在的头文件
#include<stdio.h>//srand函数所在的头文件
#include<time.h>//time函数所在的头文件
#include<stdlib.h>//rand函数所在的头文件
void menu()
{
printf("********************************************\n");
printf("*** 1.play 0.exit ***\n");
printf("********************************************\n");
}
void game()
{
//时间戳:当前时间-1970年1.1 0:0:0 时间差换算成秒后的数字。
int ret = 0;
int guess = 0;
printf("猜数字\n");
ret = rand()%100+1;//生成随机数,生成随机数的范围是0-0x7fff,即转换为十进制是32767,对100取余,使其输出1-100以内的随机数
while (1)
{
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else if (guess == ret)
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
//猜数字游戏
//1.电脑会生成一个随机数
//2.猜数字
int input = 0;
srand((unsigned int)time(NULL));//设置时间起点
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("您输错了,请重新输入\n");
break;
}
} while (input);
return 0;
}
11.一个关机程序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>//system 函数所在的头文件
#include <string.h>//strcmp函数所在的头文件
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//此处一定要注意,命令的格式,空格键不能敲错
again:
printf("提示!!!您的电脑将在1分钟后关机,如果您输入“我是猪”可以取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
“C++分支和循环语句怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。