C语言基础之流程控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语⾔基础之流程控制
⼀.流程结构
包括:
* 顺序结构 : 默认的流程结构.按照代码编写顺序执⾏语句
* 分⽀结构 : 对给定的条件进⾏判断,再根据判断结果执⾏相应的代码
* 循环结构 : 在给定条件成⽴的条件下,反复执⾏某段代码
1) 顺序结构:
代码默认的执⾏顺序,按照代码由上到下的顺序执⾏;
2) 分⽀结构:
if语句:
1.if语句的三种形式
*1
if (conditon) {
statements;
}
*2
if (condition) {
statements;
} else {
statements;
}
*3
if (condition) {
statements;
} else if (conditon) {
statements;
} else {
statements;
}
注意: 这⾥的conditon是相当于⼀个bool类型的变量;
2.switch..case 语句
switch (expression){
case 1:
statements;
case 2:
statements;
...
default:
break;
}
这⾥分享⼀个if 和 switch相结合解决实际问题的⼩例⼦:
1#define adultAge 18 // 18周岁
2#define entranceFee 100 // ⽹吧最低消费⾦额,即⼊场费
3int isVip = 0; //vip ⾄尊码是999
4int isCafeOwner = 0; // boss 验证码是888
5
6 printf("Please choose the number of your ID information \n");
7 printf("0:Nomal 1:Vip 2:Super \n");
8
9int c = 0;
10 scanf("%d" , &c);
11
12int i = 0;
13// 输⼊合理性判断
14while(c < 0 || c >2)
15 {
16 printf("Error,please enter again \n");
17 printf("%d \n" , i);
18 scanf("%d" , &c);
19 i++;
20 }
21//printf("%d %d" , c , i);
22
23int age = 0; // 年龄
24int money = 0; // ⾦额
25
26switch (c){
27case0:
28
29 printf("Please enter your age and money, and divided with a blank \n");
30 scanf("%d %d" , &age, &money);
31break;
32
33case1:
34
35 printf("Please enter your vip card number \n");
36 scanf("%d" , &isVip); // 是vip
37break;
38
39case2:
40
41 printf("Please enter your super number \n");
42 scanf("%d" , &isCafeOwner); // 是⽹吧的所有者
43break;
44
45default:
46break;
47 }
48
49
50// 判断是否有资格进⼊⽹吧消费
51if (age >= adultAge && money >= entranceFee){
52 printf("Welcome to our Internet cafe \n");
53 }else if (isVip == 999) { // Vip⾄尊码是999
54 printf("Welcome back, our Vip \n");
55 }else if (isCafeOwner == 888) {// Super boss码是888
56 printf("Welcome back, our boss \n");
57 }else {
58 printf("Sorry,we can not provide the service \n");
59 }
60
61
62
63 }
64
65return0;
这段代码,对⽹吧消费的问题进⾏了⼀定的定义解释。

3)循环结构
// 循环:在满⾜某种特定的条件下,重复的做某件事情。

1while (条件表达式) {
2循环体
3 }
当条件表达式为真时,就执⾏循环体,⼀旦条件表达式为假,循环停⽌。

这⾥提下两个常⽤的⼩知识:
1.关于计算取位的问题
解决c简单函数算法问题时,我们常会遇到关于取出⼀个数⼗位、个位、百位,甚⾄是千位等这样的问题,那么⼩伙伴们不禁会好奇了,这该怎么办呢?
so here ,we could get it!
for axample :
对于 m = 12345,怎么取出它的各位数呢?
// 先看⽐较容易理解的2个
// single
single = m % 10; // mol 10得到个位数
// 最⾼位max
max = m / 10000; // 最⾼位
decade = m / 10 % 10;
hundred = m / 100 % 10 ;
thound = m / 1000 % 10;
怎么样?有没有发现什么共性?
除了最⾼位和个位数的提取,其他位的提取都可以写作
x位数 = m / pow(10,x) % 10;
其实,个位数和最⾼位数只是如上表达式的特殊情况罢了。

2.arc4random问题
for example :how to get a random from [30,50]
ok,let us get it fllowingly:
int temp = arc4random() % (50 - 30 + 1) + 30;
arc4random 函数的实质是取余的函数转换,[30,50]可以看做 [0,20] +30 的函数区间变动;⽽对于[0,20]这个区间我们通过对21做mol运算得到。

那么,它有什么⽤呢?
⾸先,我们⼀起来看下这个,
”⽤户从控制台输⼊⼀个n ,⽤while打印n个随机数,范围是[30,70],并找出n的最⼤值“
printf("please input a random number \n");
int n = 0;
scanf("%d" , &n);
int max = 0;
while (n--) {
int temp = arc4random() % (70 - 30 + 1) + 30;
printf("%d " , temp);
max = max > temp ? max : temp;
}
printf("\nthe max random number is %d \n" , max);
那么这个功能有什么⽤呢?做彩票?dream on,彩票站的算法,hehe,中国的故事你懂的,嘎啦,我只是随便说,千万不要当真的说,那么我们看点贴近⽣活的,如这个:
// 关于上⾯随机程序的⼀点联想 ,结合指针数组
char *name[5] = {"Jack" ,"Bob" ,"Lucy" ,"lol" ,"Tom"};
int random = arc4random() % 5;
printf("%s \n" , *(name +random));
做个名字的随机抽取功能总还是可以的吧,哈哈~
————————————————
书归正传,继续来看循环结构:
// do{
// // 语句
// } while (条件表达式);
// do while ,先执⾏⼀次循环语句,再判断条件是否成⽴,⾄少会⾛⼀次循环体
// int i = 0;
// do {
// i++;
// printf("%d " , i);
// } while (i < 10);
这个和while语句⽐较像,也没有什么特别需要强调的,只要注意转换是condition的判断区间就好~
重点还是for循环的使⽤,
for (initialization; conditon; increment){
statements;
}
执⾏顺序,
first -> initialization;
second -> conditon judgement;
third -> run statements;
fourth -> increment;
⼀个例⼦:
//打印菱形
//思路 : 分析了下,感觉还是要加强点⽤户的互动性,但是具体开放哪个接⼝给⽤户,也没有太好的想法,感觉还是通过菱形对⾓线的星星数来定义⼀个菱形的形状会好⼀点吧 // 所以接⼝数据选择了星星的个数,如果星星的个数是n,两个*的间距是d,对象线长度是 (n - 1)*d ,则菱形的边长是 (n - 1) * d / sqr(2); ------- 说明
printf("Please input an odd number of the stars on the diagonal \n"); // diagonal 星星
int n = 0;
scanf("%d" ,&n); // 对⾓线⾏的星星个数是n ,那么对⾓线所在⾏数是i = (n + 1) / 2;
// 输⼊上半部分
for (int i = 1; i <= ((n + 1) / 2); i++ ) { // ⾏数i
for (int j = 1; j <= (( (n + 1) /2) - i ); j++) { // 空格 j
printf("");
}
for (int k = 1; k <= (2 * i - 1); k++) { // 星星 k
printf("*");
}
printf("\n");
}
//输⼊下半部分
for (int i = 1; i < ((n + 1) / 2); i++) {
for (int j = 1; j <= i; j++) {
printf("");
}
for (int k = 1; k <= (n - 2 * i); k++) {
printf("*");
}
printf("\n");
}
当然,这⾥还有另⼀种写法也可以作为推荐:
int i,j,k; // i来控制⾏数, j控制空格数,k控制星数
scanf("%d", &k);
for (i=0; i<k/2+1; i++) {
for (j=0; j<k-i; j++) {
printf("");
}
for (j=0; j<2*i+1; j++) {
printf("*");
}
printf("\n");
}
// 下半部分
for (i=k/2; i>0; i--) {
for (j=k-i+1; j>0; j--) {
printf("");
}
for (j=2*i-1; j>0; j--) {
printf("*");
}
printf("\n");
ok,fighting ,today is today.。

相关文档
最新文档