文章目录
一、选择结构与判断语句
1、if()…else…
(1)用if语句:
①<(小于)
②<=(小于等于)
③>(大于)
④>=(大于等于)
⑤==(等于)
⑥!=(不等于)
①②③④优先级高,⑤⑥优先级低
例1:
#include<stdio.h>
int main()
{
int money;
printf("请问你有多少钱?\n");
scanf_s("%d", &money);
if (money > 100)
{
printf("有钱人\n");
}
puts("谈话结束\n");
printf("测试结果%d\n", money > 100);
return 0;
}
注意: if (money > 100) //== 才是判断,if()括号的内容终究会转换成0, 1,是1(true)才会执行大括号里的内容*/
运行结果:
例2:
任意输入两个整数,按从小到大排列
#include<stdio.h>
int main()
{
int a;
int b;
int c;
printf("任意输入两个整数,按从小到大排列\n");
scanf_s("%d%d",&a,&b);
if (a > b)
{
c = a;
a = b;
b = c;
printf("从小到大排列为:\n");
printf("%d %d", a, b);
}
else
{
printf("%d %d",a,b);
}
return 0;
}
运行结果:
(2)逻辑运算符:&&(与)、||(或)、!(非)
#include<stdio.h>
int main()
{
int a;
int b;
printf("请输入两个数:\n");
scanf_s("%d%d",&a,&b);
if (a == 1 && b == 0)//&&的左右两边都要满足
{
printf("逻辑与成功\n");
}
if (a == 1 || b == 0)//||的左右两边,满足其一即可
{
printf("逻辑或成功\n");
}
if (!a)
{
printf("逻辑非成功\n");
}
return 0;
}
(3)if…else
练习:输入一个字符,判别它是否为大写字母,如果是,将它转换为小写字母;如果不是,不转换,然后输出最后得到的字符。
#include<stdio.h>
int main()
{
char cdata;
printf("请输入一个字符:\n");
scanf("%c",&cdata);
if (cdata >= 97 && cdata <= 122) {
printf("%c",cdata);
}
else if (cdata >= 65 && cdata <= 90) {
printf("%c",cdata+32);
}
else {
printf("请输入正确的字符\n");
}
return 0;
}
2、switch…case
(switch case 多个分支,每个分支都要加case)
if语句只有两个分支可供选择,而实际问题中常常需要用到分支的选择,例如学生成绩分类(85分以上为’A’,70-84分为‘B’,60-69为‘C’),人口分类(按年龄分为老中青少儿童),工资统计分类等,当然这些也可以用嵌套if语句来处理,但如果分支较多,则嵌套if语句层数多,程序冗长而且可读性降低,C语言提供switch语句直接处理多分支选择
例1:
#include<stdio.h>
int main()
{
int data;
printf("请输入一个数字:\n");
scanf("%d",&data);
switch (data) {
case 1:
printf("满足了第一种情况");
break;
case 2:
printf("满足了第二种情况");
break;
case 3:
printf("满足了第三种情况");
break;
default:
puts("其他列表情况");
}
return 0;
}
例2:
#include<stdio.h>
int main()
{
int data;
char cdata;
printf("请输入一个数字:\n");
scanf("%d",&data);
switch (data) {
case 1:
case 2:
case 3:
printf("满足了1,2,3种情况\n");
break;
case 4:
printf("满足了第4种情况\n");
break;
default:
puts("其他列表情况\n");
}
getchar();//注意:%c,空格、回车也会占一个字符,用getchar()吸收掉
printf("请输入一个字符:\n");
scanf("%c", &cdata);
switch (cdata) {
case 'a':
puts("满足了a的情况");
break;
case 'b':
puts("满足了b的情况");
break;
case 'c':
puts("满足了c的情况");
break;
default:
puts("其他列表情况");
}
return 0;
}
getchar();//注意:%c,空格、回车也会占一个字符,用getchar()吸收掉
练习:switch练习学生成绩等级划分
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int score;
printf("请输入学生成绩:\n");
scanf("%d",&score);
switch (score/10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
puts("D,不及格");
break;
case 6:
case 7:
puts("C,良");
break;
case 8:
puts("B,中");
break;
case 9:
case 10:
puts("A,优秀");
break;
puts("done");
default:
puts("请输入数字");
}
return 0;
}
折扣:if else实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int zhekou;
int lucheng;
puts("请输入路程");
scanf("%d",&lucheng);
if (lucheng<250) {
zhekou = 0;
}
else if (lucheng >= 250&&lucheng < 500) {
zhekou = 2;
}
else if (lucheng >= 500 && lucheng < 1000) {
zhekou = 5;
}
else if (lucheng >= 1000 && lucheng < 2000) {
zhekou = 8;
}
else if (lucheng >= 2000 && lucheng < 3000) {
zhekou = 10;
}
else {
zhekou=15;
}
printf("折扣是:%.2f\n",(float)zhekou/100);
return 0;
}
折扣:switch case实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int lucheng;
int zhekou;
puts("请输入路程:");
scanf("%d",&lucheng);
switch (lucheng/250) {
case 0:
zhekou = 0;
break;
case 1:
zhekou = 2;
break;
case 2:
case 3:
zhekou = 5;
break;
case 4:
case 5:
case 6:
case 7:
zhekou = 8;
break;
case 8:
case 9:
case 10:
case 11:
zhekou = 10;
break;
default:
zhekou = 15;
break;
}
printf("折扣是%.2f\n",(float)zhekou/100);
/*<250 0 折扣0
>=250 <500 1 zhekou2
>=500<1000 2 3 zhekou5
>=1000<2000 4 5 6 7 zhekou8
>=2000<3000 8 9 10 11 zhekou10
其他折扣15*/
return 0;
}
3、作业
作业1:有一个函数
写程序,输入x的值,输出y相应的值。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int x;
int y;
puts("请输入数字:");
scanf("%d",&x);
if (x<1) {
printf("%d\n",y=x);
}
else if(x>=1&&x<10){
printf("%d\n",2*x-1);
}
else if (x>=10) {
printf("%d\n",3*x-11);
}else printf("请重新输入\n");
return 0;
}
运行结果:
作业2:给出一百分制成绩,要求输出成绩等级‘A’、‘B’,‘C’,‘D’,‘E’.90分以上为‘A’,80~89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为‘E’。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int score;
puts("请输入分数:");
scanf("%d",&score);
switch(score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
puts("E");
break;
case 6:
puts("D");
break;
case 7:
puts("C");
break;
case 8:
puts("B");
break;
case 9:
case 10:
puts("A");
break;
default:
puts("请重新输入");
}
return 0;
}
运行结果:
二、while循环控制语句
(1)while
例1:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int times;
times = 10;
while (times) {//只要条件为真,就一直执行,if,只执行一次
//避免死循环,到一定程度能满足退出条件。除c51单片机代码
puts("1+1=2");
times = times -1;
//times--;
}
return 0;
}
例2:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int times=0;
while (times<10) {//只要条件为真,就一直执行,if,只执行一次
//避免死循环,到一定程度能满足退出条件。除c51单片机代码
puts("1+1=2");
times = times +1;
printf("times=%d\n",times);
}
return 0;
}
运行结果:
例3:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int times=0;
while (times<10) {
puts("1+1=2");
printf("times=%d\n",times);
times = times + 1;
//times++;//自加
}
return 0;
}
练习:while循环计算1到100所有数据之和
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int sum = 0;//变量最好初始化为0,编码习惯
int data = 1;//第一个表达式,条件初始值
while (data <= 100) {//第二个表达式,条件临界值
sum = sum + data;
data++;//第三个表达式,条件发生变化
}
printf("1到100的和为:%d\n", sum);
return 0;
}
(2)do while
#include<stdio.h>
int main()
{
int data = 1;
do {
printf("this is a test!\n");
data--;
} while (data != 0);//先执行完再判断,满足条件继续执行循环
return 0;
}
运行结果:
三、 for循环控制语句
形式:
例1:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int data;
//条件赋初值 判断临界值 条件改变
for (data = 0; data < 10;data++) {
printf("1+1=2\n");//循环体
}//while(1)、for(;;); 死循环
return 0;
}
四、用break提前结束循环
例:在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int numOfPerson;
int totalMoney = 0;
int money;
for (numOfPerson = 1; numOfPerson <= 1000;numOfPerson++) {
puts("请输入捐款数:");
scanf("%d",&money);
totalMoney = totalMoney + money;
if (totalMoney >= 100000) {
puts("捐款已达到十万");
break;
}
}
printf("捐款人数为%d\n", numOfPerson);
printf("平均每人捐款%f\n", (float)totalMoney / numOfPerson);//注意这两个的位置
return 0;
}
五、用continue提前结束本次循环
例:要求输出100~200之间的不能被3整除的数(能被3整除就continue结束本次循环,执行新的循环)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int data;
for(data=100;data<=200;data++){
if (data%3==0) {
continue;//符合被3整除,结束本次循环,执行data++,继续新的循环,!=0,执行printf("%d ",data);
}
printf("%d ",data);
}
return 0;
}
六、循环嵌套(输出某个规律的数列)
例:输出以下4*5的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
#define _CRT_SECURE_NOWARNINGS
#include<stdio.h>
int main()
{
int i;//行
int j;//列
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 5; j++) {
printf("%d ",i*j);
}
printf("\n");
}
return 0;
}
运行结果:
七、作业
作业1:输入两个正整数m和n,求其最大公约数和最小公倍数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num1,num2,temp,a,b;
puts("请输入两个数:");
scanf("%d%d",&num1,&num2);
while (num1 < num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
a = num1;
b = num2;
while (b != 0)
{
temp = a % b;
a = b;
b = temp;
}
printf("两个数的最大公约数是:%d\n",a);
printf("两个数的最小公倍数是:%d\n",num1*num2/a);
return 0;
}
运行结果:
作业2:水仙花数
(水仙花数:一个三位数,它的个位、十位、百位数字的立方和,恰好等于该数本身)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a, b, c,d;
for (a = 100; a <= 999; a++) {
b = a / 100;//百分位
c = a / 10 % 10;//十分位
d = a % 10;//个位
if (a == b * b * b + c * c * c + d * d * d) {
printf("%d\n",a);
}
}
return 0;
}