建筑网站起名/宁波关键词优化品牌
文章目录
- 运算符
- 判断
- if...else...语句
- switch...case...语句
- 条件语句举例
- 循环
- while循环
- do...while 循环
- for循环
- 循环举例
- break 与 continue语句
- goto语句
- 娱乐阶段:条件判断与循环示例----猜数字。
- 参考文献
运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。具体可分为以下几类:
- 算术运算符:加+, 减-, 乘*, 除/, 取余%, 加加++, 减减–;
- 关系运算符:等于==, 不等于!=, 大于>, 小于<, 大于等于>=, 小于等于<=;
- 逻辑运算符:逻辑非!, 逻辑与&&, 逻辑或||;
- 位运算(二进制的运算符):位与&, 位或|, 异或 ^, 取反~,左移运算<<(箭头指向左边,即在二进制表示中表示向高位移动,在数学运算中表示乘), 右移运算>>(箭头指向右边,即在二进制表示中表示向低位移动,在数学运算中表示除);
运算符 | 操作描述 |
位与 & | 0&0=0 0&1=0 1&0=0 1&1=1 |
位或 | | 0 | 0=0 0 | 1=1 1 | 0=1 1 | 1=1 |
异或 ^ | 0^0=0 0^1=1 1^0=1 1^1=0 |
取反 ~ | ~1 = -2 ~0 = -1 |
左移 << | 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0 |
右移 >> | 将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 |
- 赋值运算符: =
- 杂项运算符:
sizeof()返回变量所占内存的大小;
&用于指针取地址;
* 用于指针变量的定义;
条件表达式?:,条件?是的结果:不是的结果
判断
if…else…语句
- 单级if…else…语句
if(判断条件){表达式1;
}else{表达式2;
}
- 多级if…else…语句
if(判断条件1){表达式1;
}else if(判断条件2){表达式2;...
}else if(判断条件n)表达式n;
else{表达式n+1;
}
switch…case…语句
该语句主要用于离散整数变量类型的条件判断。语句运行至第一个break语句出现为止。若语句中无break,则在满足条件处一直执行至所有语句结束。语法可写为:
switch(控制表达式type){//(1)case 1://(2)表达式1;//(3)case 2:表达式2;...case n:表达式n;default:表达式n+1;
}
//该处控制表达式只能是整数型的结果
//case 1等价于if(type==1)
//此处表达式可无,如无的情况则表示该种情况同下一种情况执行同一个表达式。
【代码示例】划分小时输出早上好,中午好,晚上好,睡眠中。
#include <stdio.h>
/*6-11点为上午好
12点为中午好
11-18点为下午好
19-23点为晚上好
24点-5点为睡眠中*/
int main(){int type;printf("请输入一个小时数:");while(scanf("%d", &type)!=EOF){switch(type){case 6:case 7:case 8:case 9:case 10:case 11:printf("上午好!\n");break;case 12:printf("中午好!\n");break;case 13:case 14:case 15:case 16:case 17:case 18:printf("下午好!\n");break;case 19:case 20:case 21:case 22:case 23:printf("晚上好!\n");break;case 24:case 1:case 2:case 3:case 4:case 5:printf("睡眠中~~~!\n");break; }printf("请输入一个小时数:");}return 0;
}
结果演示为:
请输入一个小时数:3
睡眠中~~~!
请输入一个小时数:7
上午好!
请输入一个小时数:12
中午好!
请输入一个小时数:13
下午好!
请输入一个小时数:23
晚上好!
条件语句举例
【例】分别使用if…else语句与switch…case语句判断学生成绩。其中判断规则为:
90-100: A+
80-89: A
70-79: B
60-69: C
59及以下为D
方法一:if…else语句
#include <stdio.h>
int main(){
printf("请输入一个学生成绩:");
int score;
scanf("%d",&score);
if(score>90 && score<=100){printf("该生成绩等级为A+!");
}else if(score>80){printf("该生成绩等级为A!");
}else if(score>70){printf("该生成绩等级为B!");
}else if(score>60){printf("该生成绩等级为C!");
}else{printf("该生成绩等级为D!");
}
return 0;
}
方法二:switch…case语句
#include <stdio.h>
int main(){
printf("请输入一个学生成绩:");
int score, type;
scanf("%d",&score);
type = score/10;
switch(type){case 10:case 9:printf("该生成绩等级为A+!");break;case 8:printf("该生成绩等级为A!");break;case 7:printf("该生成绩等级为B!");break;case 6:printf("该生成绩等级为C!");break;default:printf("该生成绩等级为D!");
}
return 0;
}
循环
用于多次执行同一段代码。C语言循环类型有三种:
- while 循环
- do … while 循环
- for 循环
while循环
代码语句可写为:
while(判断条件){循环体;
}
【注】:该循环首先判断条件,条件满足再执行循环体,条件不满足时跳出循环体。如果条件不满足,循环体一次都不执行。
do…while 循环
代码语句可写为:
do{循环体;
}while(判断条件);
【注】:1. 该循环先执行循环体,再判断条件,若条件满足继续执行循环体,条件不满足时跳出循环体。即使条件不满足,循环体也会执行一次。2. 循环结构末尾的分号不可忘。
for循环
代码语句可写为:
for(循环体变量;变量范围;变量叠加表达式){循环体;
}
【注】:该种类型的循环通常用于已明确循环次数的情况。
令:for循环中(循环体变量;变量范围;变量叠加表达式)循环体变量、变量范围、变量叠加表达式都是可以省略的,此种情况下程序不会报错,但会陷入无限循环的状态,Ctrl+C可终止一个无限循环。
【代码示例】使用for循环计算1到nnn的连加和。自行设定nnn的大小。
#include <stdio.h>
int main(){int n;printf("请输入一个整数n:");scanf("%d",&n);int i, sum = 0;for(i = 1; i <= n; i++){sum += i;printf("1到%d的叠加和为%d\n",i,sum);}printf("1到n的加和sum = %d\n",sum);
}
输出结果为
请输入一个整数n:6
1到1的叠加和为1
1到2的叠加和为3
1到3的叠加和为6
1到4的叠加和为10
1到5的叠加和为15
1到6的叠加和为21
1到n的加和sum = 21
循环举例
【例 1】分别使用三种类型循环方式完成下列题目。
数字特征值
题目描述 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
这里的计算可以用下面的表格来表示:
数字 | 3 | 4 | 2 | 3 | 1 | 5 |
---|---|---|---|---|---|---|
数位 | 6 | 5 | 4 | 3 | 2 | 1 |
数字奇偶 | 奇 | 偶 | 偶 | 奇 | 奇 | 奇 |
数位奇偶 | 偶 | 奇 | 偶 | 奇 | 偶 | 奇 |
奇偶一致 | 0 | 0 | 1 | 1 | 0 | 1 |
二进制位值 | 32 | 16 | 8 | 4 | 2 | 1 |
要求:输入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
输入格式:
一个非负整数,整数的范围是[0,1000000]。
输出格式:
一个整数,表示计算结果。
输入样例:
342315
输出样例:
13
【代码解答】
- while循环
#include <stdio.h>
#include <math.h>
int main(){int number;scanf("%d",&number);//首先输入一个整数int count = 0;//记录所输入数字的位数int digit;//记录每位上的数字int binary;//记录位数与该位上的数字奇偶性判断后的二进制数字int ret = 0;//需要输出的十进制数字while(number > 0){digit = number%10;count ++;if((digit+count)%2==0){//奇偶性相同时该位上的数字与位数和一定为偶数binary = 1; }else{binary = 0;}ret = ret + binary*pow(2,count-1);/*pow()幂函数包含于math.h的头文件中*/number /= 10;}printf("%d\n", ret);
}
- do…while循环
将while(number > 0){digit = number%10;count ++;if((digit+count)%2==0){binary = 1; }else{binary = 0;}ret = ret + binary*pow(2,count-1);number /= 10;}更改为:do{digit = number%10;count ++;if((digit+count)%2==0){binary = 1; }else{binary = 0;}ret = ret + binary*pow(2,count-1);number /= 10;}while(number > 0);
- for循环
#include <stdio.h>
#include <math.h>
int main(){int number;scanf("%d",&number);//首先输入一个整数int count = 0;//记录所输入数字的位数int digit;//记录每位上的数字int binary;//记录位数与该位上的数字奇偶性判断后的二进制数字int ret = 0;//需要输出的十进制数字for(;;){digit = number%10;count ++;if((digit+count)%2==0){//奇偶性相同时该位上的数字与位数和一定为偶数binary = 1; }else{binary = 0;}ret = ret + binary*pow(2,count-1);number /= 10;/*此循环不包含判断变量,若不包含if判断,循环将一直进行下去,无法输出*/if(number<=0){break;}/*----------------------------------------------------*/}printf("%d\n", ret);
}
【例2】输出100以内的素数。
#include <stdio.h>
int main(){int x;for(x=2;x<100;x++){int i;int isPrime = 1;for(i=2; i < x; i++){if(x%i==0){isPrime = 0;break;}}if(isPrime==1){printf("%d ",x);}}return 0;
}
【例3】输出前从小到大的前50个素数。
#include <stdio.h>
int main(){int x = 2;int cnt = 0;for(x = 2; cnt < 50; x++){int i;int isPrime = 1;for(i = 2; i < x; i++){if(x%i==0){isPrime = 0;break;}}if(isPrime == 1){printf("%d ",x);cnt ++;}}return 0;
}
【例4】设计程序计算1−12+13−14....1n1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}....\frac{1}{n}1−21+31−41....n1 的结果。
#include <stdio.h>
int main(){int n;scanf("%d",&n);int i;double sum = 0.0;double sign = 1.0;for(i = 1; i <= n; i++){sum += sign/i; sign = -sign;} printf("前%d项的和为:%lf\n", n, sum);return 0;
}
break 与 continue语句
- 通常在条件判断语句特别是switch…case语句中与循环语句中需要使用break语句,用以停止程序或跳出循环。
- 在循环结构中,另一常用语句为continue,用以告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
goto语句
goto语句多用于多层循环的情况。用于直接退出多层循环。
【例5】找出一种方案使用1角,2角,5角组合成一个输入的小于10元的金额。
#include <stdio.h>
int main(){int x;int one, two, five;scanf("%d", &x);for(one = 1; one < x*10; one++){for(two = 1; two < x*10/2; two++){for(five = 1; five < x*10/5; five++){if(one+two*2+five*5==x*10){printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one, two, five, x);goto out;}}}}
out:return 0;
}
娱乐阶段:条件判断与循环示例----猜数字。
题目描述: 系统根据时间随机产生一个100以内的整数,请你猜出该数字是几?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main(){srand(time(0));int number = rand()%100+1;/*产生100以内的随机数*/int count = 0;int a = 0;printf("我已经想好了一个1到100之间的数啦,请准备猜吧!");do{printf("请猜这个1到100之间的数是多少:");scanf("%d",&a);count ++;if(a > number){printf("你猜的数大了。");}else if(a < number){printf("你猜的数小了。");} }while(a != number);printf("哇塞,你用了%d次猜对了答案。\n", count);return 0;
}
参考文献
[1] 中国大学MOOC之翁凯版《程序设计入门——C语言》。链接
[2] C|菜鸟教程。链接