c程序设计结构
顺序结构
一条一条指针执行。
a = 3;
b = 4;
…
分支结构(选择结构)
if
switch
循环结构
while
for
do ... while
goto ... if ...
-
if 语句
有三种形式:
(1)
if(表达式)
语句(指令)表达式 : 进行选择是否执行“语句”的条件。 任意C语言中合法的表达式都OK。 只要是一个合法的表达式,那么它都有一个确定的值, 只需要去判断这个值是 0 还是 非0。 语句(指令) : 在满足条件下要执行的语句或指令。 单语句 : 一个 ; 号的语句 复合语句: 用{}括起来的,里面可能含有 if/switch/for/while .... 组合而成的语句。 执行顺序: 先判断"表达式"的值是否为真, if(如果)为真,那么就执行“语句”, 否则就不执行“语句”。 例子: int main() { int a, b; if(3 < 2); a = 3; b = 4; printf("%d\n", a); //3 printf("%d\n", b); //4 } 编程建议: 不管if后面有没有语句,先打一对{}, 以示主权,确定其管辖范围。 if() { }
(2)
if(表达式)
语句1
else
语句2else : 否则。 表达式: C语言中任意合法的表达式都OK. 语句1/2 : 可以是 “单语句”,也可以是“复合语句” 执行顺序: 先判断“表达式”的值, if(如果)"表达式"的值是否为真, 那么就执行“语句1”; else(否则)就执行“语句2”. 例子: if(5 > 3) //a = 1; b = 2; else a = 2; b = 3 ERROR : else 前面没有匹配的 if => if(5 > 3) { a = 1; b = 2; } else { a = 2; b = 3; } 编程建议: 不管if, else后面有没有语句,先打一对{}, 以示主权,确定其管辖范围。 if() { } else { }
(3)
if(表达式1)
语句1
else if(表达式2)
语句2
…
…
else if(表达式i)
语句i
else
语句n表达式1 .... n : 任意C语言中合法的表达式都OK。 语句: 可以是“单语句”,也可以是“复合语句” 例子: 先打括号 if(5 > 3) a = 1; b = 2; else if(5 < 3) c = 3; d = 4; else e = 5; 例子: 根据num与cost之间的数学函数关系式, 写出关系代码段。 if(num > 500) { cost = 0.15; } else if(num > 300) { cost = 0.10; } .... .... else { cost = 0; }
练习:
1. 从键盘输入两个整数a,b ,按照从小到大的顺序输出。
#include <stdio.h>
int main()
{
int a;
int b;
scanf("%d %d", &a, &b);
//printf("%d %d\n", a > b ? b : a , a > b ? a : b );
if(a > b)
{
printf("%d %d\n", b , a );
}
else
{
printf("%d %d\n", a, b );
}
}
-
从键盘输入三个整数a,b ,c, 按照从小到大的顺序输出。
int a, b , c; scanf("%d%d%d", &a, &b , &c); 思路: S1 : 想办法确保 a < b < c 1.1 确保 a<b , 如果 a > b ,则交换它们 if(a > b) a <-> b 1.2 确保 a<c 如果 a > c ,则交换它们 if(a > c) a <-> c 1.3 确保 b<c 如果 b > c ,则交换它们 if(b > c) b <-> c printf("%d %d %d\n", a , b ,c); 代码:
int main()
{
int a, b , c;
scanf("%d%d%d", &a, &b , &c);
int temp;
if(a > b)
{
temp = a;
a = b;
b = temp
}
if(a > c)
{
temp = a;
a = c;
c = temp;
}
if(b > c)
{
temp = b;
b = c;
c = temp;
}
printf("%d %d %d\n", a, b ,c);
}
-
从键盘输入三个整数a,b ,c.判断由这三个数为边,
能否组成一个三角形。三角形: 任意两边之和 大于 第三边。 a + b > c a + c > b b + c > a if(a+b>c && a+c>b && b+c>a)//任意两边之和 大于 第三边 { YES } else { NO }
-
从键盘输入一个字符,如果他是小写字母,则转换成大写
如果他是大写字母,则转换成小写
其他字符,保持不变
然后再输出字符形状。
#include <stdio.h>
int main()
{
//定义一个字符变量
char ch;
//从键盘给ch赋值
scanf("%c", &ch);
//判断
if(ch >= 'a' && ch <= 'z') // ch >= 97 && ch <= 122
{
ch -= 32; //ch = ch - 32
printf("%c -> %c\n", ch+32, ch );
}
else if(ch >= 'A' && ch <= 'Z')
{
ch += 32;
printf("%c -> %c\n", ch-32, ch );
}
else
{
printf("%c -> %c\n", ch, ch );
}
}
-
有几个需要注意的地方
(1) 语句 : C语言中的指令
表达式语句 : 表达式 ; 例子: a = 3 -> 表达式 a = 3 ; -> 表达式语句 if语句 : 分支语句 循环语句 : while do ... while for goto 语句 return 语句 switch 语句 .....
(2) 条件
并列条件 : 会一一判断 例子: if(条件1) {} if(条件2) {} .... 互斥条件 : 有你没我,有我没你 例子: if(条件1) {} else if(条件2) {} ...
(3) if语句的嵌套
“条件里面分条件”
在if语句中又包含一个 或 多个if语句 称为if语句的嵌套。if(expression) if() 语句1 else 语句2 else if() 语句3 else 语句4 => if(expression) { if() { 语句1 } else { 语句2 } } else { if() { 语句3 } else { 语句4 } } 关键: else匹配问题 else 总是和上面的、最近的、未匹配的if进行配对。
-
switch 语句
switch(表达式)
{
case 常量表达式1 :
语句1;
case 常量表达式2 :
语句2;
…
…
case 常量表达式n :
语句n;default : 语句m;
}
switch 语句:
拿“表达式”的值,和case后面的“常量表达式”的值进行匹配,
一旦匹配成功,则从那个case后面开始执行,直到遇到 break 或
switch结束。
如果一个case都没有匹配成功,则匹配default.例子: scanf("%d", &a); //3 switch(a) { default : b = 250; case 0: b = 0; case 1 : b = 1; break; case 2 : b = 2; } printf(b) // 1 关于switch : (1) switch后面的"表达式" 必须是一个可以列举的值。 必须为一个整数值: 整型、字符型、枚举。 (2) case后面的“常量表达式”也必须是一个整数值, 并且每个case后面的“常量表达式”的值必须互不相同。 (3) 各个case和default出现次序不影响匹配的结果, 一旦匹配成功,就从此处往下面执行。 (4) “语句”可以省略,意思是说,多个case可以共用一组语句。 例子: switch(a) // 4 { case 0: case 1: case 2: b = 2; break; case 3: case 4: case 5: b = 5; break; } (5) switch 中的 break 用来跳出它(break)所属的switch语句的。 例子: switch(m) { csae 1 : a = 1; break; case 2 : switch(n) { case 5 : a = 5; break; case 6 : a = 6; } case 3 : a = 3; }
练习:
- 从键盘输入一个十六进制的字符[0-9a-fA~F],输出其对应的十进制数值。
#include <stdio.h>
int main()
{
char ch;
scanf("%c", &ch);
int num;
switch(ch)
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
num = ch - 87;
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
num = ch - 55;
break;
default :
num = ch - 48;
}
printf(" %c -> %d\n", ch , num);
}
- 从键盘输入一个成绩值(整型), 把这个成绩值对应的
等级输出。
‘A’ : [90,100]
‘B’ : [80, 90)
‘C’ : [70, 80)
‘D’ : [60, 70)
‘E’ : [0, 60)
#include <stdio.h>
int main()
{
int score;
char dengji;
scanf("%d", &score);
switch(score / 10)
{
case 10 :
case 9 :
dengji = 'A';
break;
case 8 :
dengji = 'B';
break;
case 7 :
dengji = 'C';
break;
case 6 :
dengji = 'D';
break;
default :
dengji = 'E';
}
printf("%d => %c\n", score, dengji);
}
习题:
1. 输入一个日期(年,月,日),求该日期至当年年末有多少天?
#include<stdio.h>
int main()//求某天到年某的函数
{
int year , month, day;
printf("请输入日期:");
scanf("%d%d%d",&year,&month,&day);
int d1 = 0;
switch(month)
{
case 1:
d1 += 31;
case 2:
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
d1 += 29;
}
else
{
d1 += 28;
}
case 3:
d1 += 31;
case 4:
d1 += 30;
case 5:
d1 += 31;
case 6:
d1 += 30;
case 7:
d1 += 31;
case 8:
d1 += 31;
case 9:
d1 += 30;
case 10:
d1 += 31;
case 11:
d1 += 30;
case 12:
d1 += 31;
}
d1 = d1 - day;
printf("%d",d1);
return 0;
}
2.公司决定发放奖金,根据公司的当年利润决定。
当年利润I低于或等于100000元时,奖金可提成10%,
利润大于100000元,小于200000元时(100000 < I <= 200000)时
低于100000的部分按10%提成,高于100000部分可提成7.5%;
利润大于200000元,小于400000元时(200000 < I <= 400000)
低于200000的部分按上述方法提成(同下),高于200000部分可提成5%
(400000 < I <= 600000) 低于400000按上述方案提成,
高于400000部分提成3%。
(600000 < I <= 1000000) 低于600000按上述方案提成,
高与600000部分提成1.5%
(I > 1000000) 低于1000000按上述方案提成,
高于1000000部分提成1%.
(1)用if来编程实现。
#include<stdio.h>
int main()
{
int i,m;
printf("请输入利润:");
scanf("%d",&i);
if(i<=100000)
m=i*0.1;
else if(100000<i&&i<=200000)
m=100000*0.1+(i-100000)*0.075;
else if(200000<i&&i<=400000)
m=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(400000<i&&i<=600000)
m=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(600000<i&&i<=1000000)
m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else
m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("%d",m);
return 0;
}
(2)用switch来编程实现。
#include<stdio.h>
#include<stdlib.h>
int main()
{
double I;
double p = 0;
scanf("%lf",&I);
int c=I/100000;
switch(c)
{
default :
case 10 :
p += (I - 1000000) * 0.01;
I = 1000000;
case 9:
case 8:
case 7:
case 6:
p += (I - 600000) * 0.015;
I = 600000;
case 5 :
case 4 :
p += (I - 400000) * 0.03;
I = 400000;
case 3 :
case 2 :
p += (I - 200000) * 0.05;
I = 200000;
case 1 :
p += (I - 100000) * 0.075;
I = 100000;
case 0 :
p += I * 0.1;
}
printf("%0.2lf",p);
system("pause");
}
- 输入一个形式如 “操作数 运算符 操作数” 的四则运算表达式,
输出运算结果 。(+ - * / %)
例子:
输入 :
5 + 3
输出 :
5 + 3 = 8
#include<stdio.h>
int main()
{
int a,c,x;
char b;
scanf("%d %c %d",&a,&b,&c);
switch(b)
{
case '+' : x=a+c;break;
case '-' : x=a-c;break;
case '*' : x=a*c;break;
case '/' : x=a/c;break;
case '%' : x=a%c;break;
default : printf("error");
}
printf("%d %c %d = %d",a,b,c,x);
return 0;
}