------- android培训、java培训、IOS培训、期待与您交流! ----------
循环控制
1. if-else
//有些题为了迷惑读者,或出现悬空else,
//我们所要遵循的时:else与向上最近的一个if匹配
//应用程序加载器
//注意事项:
//1.空语句
//2.if语句与复合语句
//3.if语句与return语句
//4.if语句的作用域问题
//5.作用域紊乱
//int nn=1;
//if(nn==1) int num;
这样写代码是会报错的,因为作用域紊乱
//6.if语句与else子句的配对问题
//int main()
首先要有一个数字,生成一个0-9的随机数
在表示范围的时候,一般左边取得到,右边取不到[),所以要取0-9的数字的时候,我们取0-10的随机数
//{
// int data;
// //long l = random();
// //随机数是一个伪随机数
// //printf("%ld\n",l);
// //时间种子来生成随机数
// //在Mac上创建随机数,使用函数arc4random_unform
// int i =arc4random_uniform(10);//取不到10
// printf("%d\n",i);
//
// printf("请输入数据:\n");
// scanf("%d",&data);
//
// if (data == i) {
// printf("恭喜你猜对啦!\n");
// }
// else{
// printf("sorry~下次再来吧~\n");
// }
// return 0;
//}
//if-else-if语法:
#include <stdio.h>
int main(){
int score;
printf("请输入成绩:\n");
scanf("%d",&score);
if (score<=100&&score>=90) {
printf("A\n");
}
else if (score>=80){
printf("B\n");
}
else if (score>=70){
printf("C\n");
}
else if (score>=60){
printf("D\n");
}
else{
printf("E\n");
}
return 0;
}
2. while do-while
两种基本一样的循环控制语句,不同的是do-while会必定执行一次,通常用在一些相匹配的客户需求环境
基本语法:
int main()
{
int i = 1;
int sum =0;
while (i<=100)
{
sum += i;
i++;
}
printf("%d\n",sum);
return 0;
}
代表性具体题
//5.猜数字
//#include <stdio.h>
//#include<stdlib.h>
//
//int main()
//{
// // 1.计算机分配一个随机数:
// int computerNum = arc4random_uniform(10);
// int input =0;
// int i =0;
//
// //2.提示用户开始猜
// printf("请输入您猜的数字:\n");
// scanf("%d",&input);
// if (input == computerNum) {
// printf("胜利\n");
// return 0;
// }else if (input >computerNum){
// printf("大了\n");
// }else{
// printf("小了\n");
// }
//
// //3,循环判断
// //4.如果正确了,直接提示胜利,如果不对,提示重新输入
// while (i<2) {
// printf("请重新输入您猜的数字:\n");
// scanf("%d",&input);
// if (input == computerNum) {
// printf("胜利\n");
// return 0;
// }else if (input >computerNum){
// printf("大了\n");
// }else{
// printf("小了\n");
// }
// i++;
// }
// //5.如果次数到了,循环正常结束,提示错误
// printf("次数已到,失败\n");
//
// return 0;
//}
3. switch
语法很简单,分支选择输出,看实例:
int main()
{
int year,month;
printf("请输入年:\n");
scanf("%d",&year);
printf("请输入月:\n");
scanf("%d",&month);
if(month ==2)
{
if ((year %4 ==0 &&year %100 != 0) || year %400 ==0)
{
printf("29天\n");
}
else
{
printf("28天\n");
}
}
else
{
switch (month) {
case 4:
case 6:
case 9:
case 11:printf("30天\n");
break;
default:
printf("31天\n");
break;
}
}
return 0;
}
4. for
//for循环的诞生主要是针对需要严格显示循环次数的循环
//for语句的几种写法:
//1>将定义声明放在前面,只在for中初始化:
//int i; for(i =0;i<=10;i++) 好处:在循环以后,可以访问变量i(学完数组后这种写法有用)
//2.为了实现统一,将变量的定义放在for的初始语句中:
//for(int i =0;i <=10;i++){} 好处:第二种方便直观,不需要在for循环外调用i值的一般用
int main()
{
for (int i =0; i <3; i++)
{
printf("\n");
}
for (int i =1; i <=3; i++)
{
printf("\n");
}
for (int i =10; i >3; i--)
{
printf("\n");
}
return 0;
}
//3.在早期计算机,用++i(存1,1,只需要一个内存空间),相比于i++(0,1,需要两个内存空间)可以节约内存
for循环嵌套实例(打印空心菱形)
#include <stdio.h>
#define N 4
int main()
{
for (int i =0; i <N; ++i) {
//1.打印空格N-1-i个
//for (int k =N -1- i; k>0; --k)
for (int k = 0; k <N-1-i; ++k)
{
printf(" ");
}
//2.打印*2*i+1个
for (int j =0; j < 2*i+1; ++j) {
//打印空金字塔
//1.第一行与最后一个打印"*"
//2.最后一行和第一行不考虑
// if (i ==0||i ==N -1)
// {
// printf("*");
// }else if (j ==0 ||j ==2*i)
// {
// printf("*");
// }else
// {
// printf(" ");
// }
printf(i ==0|| j ==0 ||j ==2*i ? "*" : " " );
}
//打印换行
printf("\n");
}
for (int i =N-1; i >=0; --i) {
//1.打印空格N-1-i个//i
//for (int k =N -1- i; k>0; --k)
for (int k = 0; k <N -1-i; ++k)
{
printf(" ");
}
//2.打印*2*i+1个 //2*(N-i-1)+1
for (int j =0; j <2*i+1; ++j) {
//打印空金字塔
//1.第一行与最后一个打印"*"
//2.最后一行和第一行不考虑
// if (i ==0||i ==N -1)
// {
// printf("*");
// }else if (j ==0 ||j ==2*i)
// {
// printf("*");
// }else
// {
// printf(" ");
// }
printf(i ==0|| j ==0 ||j ==2*i ? "*" : " " );
}
//打印换行
printf("\n");
}
return 0;
}
5. break&&continue
//break在switch语句中,表示跳出switch结构,不执行后面的case
//在循环中break有一样的涵义,表示跳出循环(就是结束当前所有的循环,不再执行了)
//break在使用时候常常和if连用,表示在满足某个条件时跳出循环
//比较一下各个循环实现的效果:
//统计字符个数
//1>while
//int main()
//{
// while (1) {
//
// printf("5\n");
//
// break;
// }
// return 0;
//}
//2>do-while
//int main()
//{
// int i =0;
// char ch;
// do {
// scanf("%c",&ch);
// i++;
// } while (ch!='\n');
// printf("%d\n",i -1);
// return 0;
//}
//while和do-while写的是题目的反条件
//当条件多了后有时候容易混淆
//可以这样写:!(e1||e2&&e3||e4)
//也可以这样写:
//while (1){
// if(符合要求) break;
//}
//int main()
//{
// int i =0;
// while (1) {
// if (getchar() =='\n') break;
// i++;
// }
// printf("%d\n",i);
//
// return 0;
//}
//continue语句
//continue表达的意思是结束本次循环,直接进入下一次循环(break是跳出全部)
//案例:打印出1-100中不能被3整除的整数(遇到能被3整除的跳过,不能被3整除的打印)这里适合用continue
int main()
{
int i,j =0;
for (i =1; i <=100; i++) {
if (i%3==0) {
continue;
}
//j
j++;
printf("%d\t",i);
if (j%6 ==0) {
printf("\n");
}
//这里j的引入专门处理行打印问题
}
return 0;
}
int main2()
{
for (int i =0; i <3; ++i) {
for (int j =0; j <2; ++j) {
printf("%d,%d",1,2);
}
}
return 0;
}
//循环套循环查找某个数据是否存在的时候,在最内层里怎么一次性跳出
//1>设置intflag =1; 查找结束时设置
//if (需要条件满足){
//flag = 0;break;
//}
//2>goto语句,直接从当前位置跳出:
//if(需要条件满足){
//goto num;
//}
//...
//num: return 0;
//3>在当前位置改变循环变量位超出循环范围的值,使循环自动跳出
//if (需要条件满足){
//int i=32423423231;(0<i<100)
//}