exe运行问题,选择结构程序设计
分类:面向对象

# include <stdio.h>

1 年龄判断程序

2017.23 周四

4.1 什么是算术运算?什么是关系运算?什么是逻辑运算?

int main(void)
{
float score; //定义成绩变量

1.1 问题

本案例需要使用交互的方式判断年龄的范围:用户从控制台输入一个年龄,由程序判断该年龄是否在18~50岁之间。程序交互过程如图-1所示:

图片 1

图-1

homework:
写一个简单的加,减,乘,除,四则运算的计算器程序。

算术运算就是数的加、减、乘、除以及乘方开方等数学运算

printf("请输入您的成绩:"); //输出上边的语句。
scanf("%f", &score); //将成绩从键盘上输入进电脑。

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义变量

变量age,用于保存用户从控制台输入的年龄。

代码如下:

 

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int age;
    1. return 0;
  4. }

步骤二:从控制台输入年龄

首先,使用printf函数输出一行提示,提示输入一个年龄。

然后,使用scanf函数输入一个整数到变量age。

代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int age;
    1. printf("请输入一个年龄:");
  4. scanf("%d", &age);
    1. return 0;
  5. }

步骤三:判断年龄所在的范围

接收到年龄后,判断年龄是否在18~50岁之间。

代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int age;
    1. printf("请输入一个年龄:");
  4. scanf("%d", &age);
    1. if (age >= 18 && age <= 50)
  5. printf("该年龄在18~50岁之间n");
  6. else
  7. printf("该年龄不在指定的范围之间n");
    1. return 0;
  8. }

在上述代码中,使用了“&&”逻辑运算符来连接两个条件。年龄在18~50岁之间,应该使用age >= 18 && age <= 50的表达式来判断,而不能用18 <= age <= 50表达式判断。对于后一个表达式,它将永远为真,因为对于表达式18 <= age如果为真,其值为1,1 <= 50为真;如果为假,其值为0,0 <= 50也为真,所以表达式18 <= age <= 50的值始终为真。

程序的三大结构:
1.顺序结构:程序从上往下,从左往右,顺序执行

所谓“关系运算”就是“比较运算” 将两个数值进行比较,判断其比较的结果是否符合给定的条件

if(score > 100) //如果成绩大于100
printf("这是在做梦n"); //输出成绩大于100的结果
else if(score >= 90 && score <=100)//否则如果90≤成绩≤100,“此时的表达式不能写成90≤成绩≤100,结果会输出为1.”
printf("优秀!n"); //输出成绩90≤成绩≤100的结果。
else if(score >=80 && score <90) //否则如果80≤成绩<100
printf("良好!n"); //输出成绩80≤成绩<100的结果。
else if(score >=60 && score <80) //否则如果60≤成绩<80
printf("及格!n"); //输出成绩60≤成绩<80的结果。
else if(score >=0 && score <60) //否则如果0≤成绩<60
printf("不及格!n"); //输出成绩0≤成绩<60的结果。
else //否则成绩小于零
printf("请不要自卑!n"); //输出成绩小于零的结果。

1.3 完整代码

本案例的完整代码如下所示:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int age;
    1. printf("请输入一个年龄:");
  4. scanf("%d", &age);
    1. if (age >= 18 && age <= 50)
  5. printf("该年龄在18~50岁之间n");
  6. else
  7. printf("该年龄不在指定的范围之间n");
    1. return 0;
  8. }

2.分支结构:做出判断,选择要执行的分支语句

逻辑运算又称布尔运算, 通常用来测试真假值。最常见到的逻辑运算就是循环的处理,用来判断是否该离开循环或继续执行循环内的指令。

return 0;
}
这是个测试成绩的 代码从VC++6.0编译出来的文件夹Debug里边的.exe程序。为什么输入一个数字之后按回车直接消失了。没有出来要输出的东西。这是为啥啊?请高手指教。。。

2 将输入字母以大写形式输出

3.循环结构:反复执行一段代码

 

2.1 问题

本案例需要使用交互的方式将从键盘上输入的字母统一转换成大写输出:用户从控制台输入一个字母,由程序判断其大小写,如果是小写字母,则将其转换成大写,然后输出该字母。程序交互过程如图-2所示:

图片 2

图-2

分支结构:做判断,执行判断正确的那一路
1.简单if语句
...
if(条件)
{
语句块;
}
...
注:先判断条件,如果条件成立(真的),则执行对应的语句块,否则,则执行{}之后的语句。
例:

 

2.2 方案

在计算机中,所有的数据在存储和运算时都要使用二进制数表示,同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的美国信息交换标准码,统一规定了上述常用符号用哪个二进制数来表示,称为ASCII码字符集。

在ASCII码字符集中,大写字母A的ASCII码为65,小写字母a的ASCII码为97,其差是32;大写字母B的ASCII码为66,小写字母b的ASCII码为98,其差也是32;依此类推,会发现大写字母与小写字母的ASCII码都差32。所以由小写字母转换成大写字母只需要将小写字母的ASCII码减去32,即变成大写字母的ASCII码。

include <stdio.h>

void main()
{
int a=1;
if(a==2)
{
printf("yesn");
}
printf("xxxn");

}
/*
注:一个等号“=”表赋值
两个等号"=="表判断
不要在if后面加";"
*/
2.2路分支结构
if(条件1)
{
语句块1;
}
else
{
语句块2;
}
注:如果条件1成立,则只执行语句块1;否则,只执行语句块2.

4.2 C语言如何表示“真”和“假”?系统如何判断一个值的“真”和“假”?

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义变量

定义变量ch,用于存储从控制台输入的字母,代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. char ch;
    1. return 0;
  4. }

步骤二:从控制台输入一个字母

首先,使用printf函数输出一行提示,提示输入一个字母。

然后,使用scanf函数输入这个字母到变量ch。

代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. char ch;
    1. printf("请输入一个字母:");
  4. scanf("%c", &ch);
    1. return 0;
  5. }

步骤三:判断并输出

首先,判断输入的字符是否为字母。

判断的方法为:比较输入的字符的ASCII码是否在大写字母A的ASCII码到Z的ASCII码之间或者是否在小写字母a的ASCII码到z的ASCII码之间,如果是则说明输入的字符是字母,否则不是。

然后,如果是字母,则将其转换成大写后输出;不是字母,则属出错误提示。

代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. char ch;
    1. printf("请输入一个字母:");
  4. scanf("%c", &ch);
    1. if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'B'))
  5. {
  6. if(ch >= 'a' && ch <= 'z')
  7. ch = ch - ('a' - 'A');
  8. printf("输出结果为:%cn", ch);
  9. }
  10. else
  11. printf("输入的字符不是字母。n");
    1. return 0;
  12. }

include <stdio.h>

void main()
{
int a=1;
if(a==2)
{
printf("条件成立n");
}
else
{
printf("条件不成立n");
}
printf("xxxn");

}
/*
程序书写的格式:
1.同一层次的语句左对齐,不同层次的语句,一个tab键的缩进。程序应该是锯齿状的,即层次分明。
2.书写的普通代码通常都是小写字符,遇到特殊意义的字符要大写,如宏定义的字符。
3.一个合格的程序应该是有适当的注释,便于阅读,但是注释不是文档,不要太多。
*/
3.多重if语句
if(条件1)
{
语句块1;
}
else if(条件2)
{
语句块2;
}
else if(条件3)
{
语句块3;
}
...
else
{
语句块n;
}
例:

C语言用1表示真,用0表示假

2.4 完整代码

本案例的完整代码如下所示:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. char ch;
    1. printf("请输入一个字母:");
  4. scanf("%c", &ch);
    1. if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'B'))
  5. {
  6. if(ch >= 'a' && ch <= 'z')
  7. ch = ch - ('a' - 'A');
  8. printf("输出结果为:%cn", ch);
  9. }
  10. else
  11. printf("输入的字符不是字母。n");
    1. return 0;
  12. }

include <stdio.h>

void main()
{
int a=5;
if(a==2)
{
printf("2n");
}
else if(a==5)
{
printf("3n");
}
else if(a==5)
{
printf("1n");
}
else if(a==4)
{
printf("4n");
}
else
{
printf("hahan");
}
}
注:程序自上往下一次执行,对条件依次做出判断,如果条件不成立,就继续判断下一个条件,直到遇到成立的条件,则执行相应的分支语句,之后的条件将不再判断与执行;如果所有的条件都不成立,则执行else对应的分支语句。
4.嵌套if语句
if(条件)
{
if()
{
if()
{
if()
{}
}
}
else
{

}

}
else
{
if()
{
if()
{}
}
}

注:if...else..中嵌套if...else..结构
例:

C语言判断0为假,非0为真

3 将输入的百分制成绩转换成等级成绩

include <stdio.h>

void main()
{
int a=10;
if(a>5)
{
if(a>7)
{
if(a>10)
{
printf("10n");
}
else
{
printf("a=%dn",a);
}
}
else
{
if(a>6)
{
printf("6n");
}
}
}
else
{
printf("xxxn");
}
}

注:分支结构格式书写自由,各种格式可以自由切换。
if后面可以没有大括号,但是只会顾及到后面的第一条指令.
else后面可以没有大括号,但是只会顾及到后面的第一条指令.
if...else..结构,如果if中有多条指令,则必须加上大括号,因为这个结构要求if后面的语句都必须是if分支的。

练习:输入一个数,判断是奇数还是偶数

 

3.1 问题

学员成绩等级计算程序要求根据学员的分数计算该分数的所属等级并输出。首先,用户输入学员的分数,该分数要求在0~100之间,如果录入错误,则提示错误信息,交互过程如图-3:

图片 3

图-3

如果用户输入的分数正确(在0到100之间),则根据表-1中的规则计算该分数所对应的级别,并输出计算结果,交互过程如图-4所示:

图片 4

图片 5

图-4

include <stdio.h>

void main()
{
int data;
printf("input a data:");
scanf("%d",&data);
if(data%2 == 0 )
printf("是偶数n");
else
printf("是奇数n");
}
练习:从键盘上输入3个数,输出最大值。
a b c
1 2 3

4.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5

3.2 方案

本案例要求使用if-else结构来实现。

include <stdio.h>

void main()
{
int a,b,c,max;
printf("please input 3 data:");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
max=a;
else
max=b;
if(max<c)
max=c;
printf("max:%dn",max);
}

逻辑运算符:与(&&) 或(||) 非(!)
与:条件1 && 条件2
两个条件同时成立,整个表达式才成立
0(假的,不成立)
非0(1,真的,成立)
例:程序的三大结构:
1.顺序结构:程序从上往下,从左往右,顺序执行

2.分支结构:做出判断,选择要执行的分支语句

3.循环结构:反复执行一段代码

分支结构:做判断,执行判断正确的那一路
1.简单if语句
...
if(条件)
{
语句块;
}
...
注:先判断条件,如果条件成立(真的),则执行对应的语句块,否则,则执行{}之后的语句。
例:

(1)a+b>c && b==c

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义变量

定义变量score,用于存储从控制台输入的成绩,代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int score;
    1. return 0;
  4. }

步骤二:从控制台输入一个成绩

首先,使用printf函数输出一行提示,提示输入一个成绩。

然后,使用scanf函数输入成绩到变量score。

代码如下:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int score;
    1. printf("请输入该学员的分数(0~100):");
  4. scanf("%d", &score);
    1. return 0;
  5. }

步骤三:使用if-else结构进行判断

先使用if语句判断所录入的分数是否在0到100之间;如果不在正确的范围,则先输出提示信息,再使用return终止方法的运行。代码如下所示:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int score;
    1. printf("请输入该学员的分数(0~100):");
  4. scanf("%d", &score);
    1. if (score < 0 || score > 100)
  5. {
  6. printf("请输入0到100以内的分数n");
  7. return 1;
  8. }
    1. return 0;
  9. }

如果录入的分数确实在0~100之间,则使用if-else结构判断不同的分数输出不同的级别。代码如下所示:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int score;
    1. printf("请输入该学员的分数(0~100):");
  4. scanf("%d", &score);
    1. if (score < 0 || score > 100)
  5. {
  6. printf("请输入0到100以内的分数n");
  7. return 1;
  8. }
    1. if (score >= 90)
  9. printf("优n");
  10. else if (score < 60)
  11. printf("不及格n");
  12. else
  13. printf("一般n");
    1. return 0;
  14. }

include <stdio.h>

void main()
{
int a=1;
if(a==2)
{
printf("yesn");
}
printf("xxxn");

}
/*
注:一个等号“=”表赋值
两个等号"=="表判断
不要在if后面加";"
*/
2.2路分支结构
if(条件1)
{
语句块1;
}
else
{
语句块2;
}
注:如果条件1成立,则只执行语句块1;否则,只执行语句块2.

a+b>c 为真

3.4 完整代码

本案例的完整代码如下所示:

  1. #include <stdio.h>
    1. int main(int argc, const char * argv[])
  2. {
  3. int score;
    1. printf("请输入该学员的分数(0~100):");
  4. scanf("%d", &score);
    1. if (score < 0 || score > 100)
  5. {
  6. printf("请输入0到100以内的分数n");
  7. return 1;
  8. }
    1. if (score >= 90)
  9. printf("优n");
  10. else if (score < 60)
  11. printf("不及格n");
  12. else
  13. printf("一般n");
    1. return 0;
  14. }

include <stdio.h>

void main()
{
int a=1;
if(a==2)
{
printf("条件成立n");
}
else
{
printf("条件不成立n");
}
printf("xxxn");

}
/*
程序书写的格式:
1.同一层次的语句左对齐,不同层次的语句,一个tab键的缩进。程序应该是锯齿状的,即层次分明。
2.书写的普通代码通常都是小写字符,遇到特殊意义的字符要大写,如宏定义的字符。
3.一个合格的程序应该是有适当的注释,便于阅读,但是注释不是文档,不要太多。
*/
3.多重if语句
if(条件1)
{
语句块1;
}
else if(条件2)
{
语句块2;
}
else if(条件3)
{
语句块3;
}
...
else
{
语句块n;
}
例:

b==c 为假

4 实现闰年判断程序

include <stdio.h>

void main()
{
int a=5;
if(a==2)
{
printf("2n");
}
else if(a==5)
{
printf("3n");
}
else if(a==5)
{
printf("1n");
}
else if(a==4)
{
printf("4n");
}
else
{
printf("hahan");
}
}
注:程序自上往下一次执行,对条件依次做出判断,如果条件不成立,就继续判断下一个条件,直到遇到成立的条件,则执行相应的分支语句,之后的条件将不再判断与执行;如果所有的条件都不成立,则执行else对应的分支语句。
4.嵌套if语句
if(条件)
{
if()
{
if()
{
if()
{}
}
}
else
{

}

}
else
{
if()
{
if()
{}
}
}

注:if...else..中嵌套if...else..结构
例:

真&&假 为假

4.1 问题

闰年(leap year)是为了弥补因人为立法规定造成的年度天数与地球实际公转周期的时间差而设立的。

地球绕太阳运转周期为365天5小时48分46秒(折合365.24219天),即1回归年。公立的平年(非闰年)只有365日,比一回归年短约0.2422日,所余下的时间约为4年累计一天,故每4年则于2月加一天,使当年的历年长度为366日,这一年就是闰年。但是,如果按照每4年一个闰年计算,平均每年就要多算出0.0078天,这样经过400年就会多算出3天来,因此,每400年中要减少3个闰年。所以规定,公立年份是100的倍数的,必须同时也是400的倍数才是闰年,不是400的倍数的,虽然是100的倍数,也是平年。这就是通常所说的:4年一闰,百年不闰,400年再闰。例如,2000年是闰年,1900年则是平年。

本案例需要使用交互的方式判断某年是否为闰年:用户从控制台输入需要判断的年份值,由程序判断该年是否为闰年,并将判断结果输出到控制台。程序交互过程如图-5所示:

图片 6

图-5

include <stdio.h>

void main()
{
int a=10;
if(a>5)
{
if(a>7)
{
if(a>10)
{
printf("10n");
}
else
{
printf("a=%dn",a);
}
}
else
{
if(a>6)
{
printf("6n");
}
}
}
else
{
printf("xxxn");
}
}

注:分支结构格式书写自由,各种格式可以自由切换。
if后面可以没有大括号,但是只会顾及到后面的第一条指令.
else后面可以没有大括号,但是只会顾及到后面的第一条指令.
if...else..结构,如果if中有多条指令,则必须加上大括号,因为这个结构要求if后面的语句都必须是if分支的。

练习:输入一个数,判断是奇数还是偶数

所以表达式的值为0

4.2 方案

首先,此案例需要从控制台接收用户录入的年份值。然后,根据闰年的规则可以总结出,如果年份可以被400整除,则必然是闰年;另外,如果年份可以被4整除,但不能被100整除,则也是闰年;其他年份则是平年(非闰年)。因此,需要使用取余运算符(%)判断整除,并需要使用逻辑运算符来构建判断表达式,以进行判断。

include <stdio.h>

void main()
{
int data;
printf("input a data:");
scanf("%d",&data);
if(data%2 == 0 )
printf("是偶数n");
else
printf("是奇数n");
}
练习:从键盘上输入3个数,输出最大值。
a b c
1 2 3

 

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义变量

变量year,用于保存用户输入的年份。

代码如下:

  1. #include <stdio.h>
    1. int main()
  2. {
  3. int year;
    1. return 0;
  4. }

步骤二:输入年分值

首先,使用printf函数输出一行提示,提示输入一个年份。

然后,使用scanf函数输入成绩到变量year。

代码如下:

  1. #include <stdio.h>
    1. int main()
  2. {
  3. int year;
    1. printf("请输入一个年份:");
  4. scanf("%d", &year);
    1. return 0;
  5. }

步骤三:闰年判断

某年份只需要满足下列两个条件之一,即可认定是闰年:

1) 年份可以被4整除且不能被100整除;

2) 年份可以被400整除。

因此,需要使用%运算符、==运算符、!=运算符、&&和||运算符,来综合判断某年份是否为闰年。代码如下所示:

  1. #include <stdio.h>
    1. int main()
  2. {
  3. int year;
    1. printf("请输入一个年份:");
  4. scanf("%d", &year);
    1. if ((year%4==0/*能被4整除*/
  5. && year%100!=0)/*不能被100整除*/
  6. || year%400==0/*能被400整除*/) {
  7. printf("%d是闰年n", year);
  8. }else{
  9. printf("%d不是闰年n", year);
  10. }
    1. return 0;
  11. }

include <stdio.h>

void main()
{
int a,b,c,max;
printf("please input 3 data:");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
max=a;
else
max=b;
if(max<c)
max=c;
printf("max:%dn",max);
}

逻辑运算符:与(&&) 或(||) 非(!)
与:条件1 && 条件2
两个条件同时成立,整个表达式才成立
0(假的,不成立)
非0(1,真的,成立)
例:
if(0)
{}
if(1)
{}
if(2)
{}
1 && 1 => 1 真的,成立
0 && 1 => 0 假的
1 && 0 => 0 假的
0 && 0 => 0 假的。

或:条件1 || 条件2
两个条件,只要有一个条件成立,整个表达式就成立
1 || 1 => 1
1 || 0 => 1
0 || 0 => 0
0 || 1 => 1

非: !条件
如果条件是假的,整个表达式就是真的
如果条件是真的,整个表达式就是假的

(2) a || b+c && b-c

4.4 完整代码

本案例的完整代码如下所示:

  1. #include <stdio.h>
    1. int main()
  2. {
  3. int year;
    1. printf("请输入一个年份:");
  4. scanf("%d", &year);
    1. if ((year%4==0/*能被4整除*/
  5. && year%100!=0)/*不能被100整除*/
  6. || year%400==0/*能被400整除*/) {
  7. printf("%d是闰年n", year);
  8. }else{
  9. printf("%d不是闰年n", year);
  10. }
    1. return 0;
  11. }

include <stdio.h>

void main()
{
int a;
a=0 || 0;
//a=1 && 1
printf("%dn",a);
}
//逻辑运算符是会有运算结果的,如果整个表达式是真的,那么返回1,如果整个表达式是假的,则会返回0.
//0表示假的,非0表示真的。

a+=b <=> a=a+b
练习:编写一个程序,根据输入的学生成绩给出相应的判定。大于等于90输出“优”,大于等于80小于90输出“良”,大于等于60小于80输出“中”,否则输出“差”。

b+c 为真

include <stdio.h>

void main()
{
float score;
printf("please input score:");
scanf("%f",&score);
if(score>=90)
printf("优!n");
else if(score>=80)
printf("良!n");
else if(score>=60)
printf("中!n");
else
printf("差!n");
}

练习:接受用户输入的三种商品的价格,如果其中有商品价格大于50或者三种商品价格之和大于100,则用户享受15%的优惠,问用户应付多少钱

b-c 为真

include <stdio.h>

void main()
{
float a,b,c;
printf("请输入3种商品的价格:");
scanf("%f %f %f",&a,&b,&c);
if(a>50 || b>50 || c>50 || (a+b+c)>100)
printf("用户应付:%.1fn",(a+b+c)*0.85);
else
printf("用户应付:%.1fn",a+b+c);
}

练习:输入一个年份,判断是否为闰年
闰年:能被4整除但不能被100整除,或者是能够被400整除

真&&真 为真

include <stdio.h>

void main()
{
int year;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%4==0 && year%100!=0 || year%400==0)
printf("是闰年!n");
else
printf("不是闰年!n");
}

练习:输入一个5位数,判断它是不是回文数,
12321 wan=12321/10000=1
qian=12321%10000/1000=2
shi=12321%100/10=2
ge=12321%10

a 为真

include <stdio.h>

void main()
{
int data,wan,qian,shi,ge;
printf("请输入一个5位数:");
scanf("%d",&data);
wan=data/10000;
qian=data%10000/1000;
shi=data%100/10;
ge=data%10;
if(wan==ge && qian==shi)
printf("是回文数!n");
else
printf("不是回文数!n");
}

练习:输入2个整数a,b,输出较大的那个数

真||真 为真

includ <stdio.h>

void main()
{
int a=1,b=2,max;
if(a>b)
{
max=a;
printf("max is: %dn",max);
}
else
{
max=b;
printf("max is: %dn",max);
}
}
=>

所以表达式的值为1

include <stdio.h>

void main()
{
int a=1,b=2,max;
max=a>b ? a : b;
//如果a>b成立,那么整个表达式的结果就是a,否则就是b
//条件运算符(? :),c语言中唯一的一个三目运算符
printf("max is: %dn",max);
}
条件运算符的优先级高于赋值运算符,

运算符的优先级:单算关逻三赋逗

switch...case..:多路分支语句开关语句
格式:
switch(表达式)
{
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
...
default:
语句
}
原理:先计算表达式的值,然后从第一个case语句开始,用case后面的常量和表达式的值进行比较,相等,则执行相应的case分支语句,不行等,就继续用下面的case分支的常量与表达式的值比较。如果没有一路case分支的常量与表达式的值相等,则默认执行default对应的语句。break的作用是负责跳出switch结构,是程序流程转而执行switch结构后面的语句。

1.每一路case 后面接的常量都必须具有唯一性,
2.default语句可以不写,也可以放在任何地方,除了最后,都必须加上break;
3.case分支对应的break,可以不写,但是执行完这一路分支之后并不会跳出switch结构,而是会继续往下执行,直到遇到break才会跳出switch.
4.case分支语句中可以不加{},但是当在分支语句中定义变量的时候,要加上{},限定变量的作用域。
例:

 

include <stdio.h>

void main()
{
int a;
printf("请输入一个整数:");
scanf("%d",&a);
switch(a)
{
default:
printf("xxx!n");
break;
case 1:
{
printf("1!n");
int b=10;
printf("b=%dn",b);
break;
}
case 2:
{
printf("2!n");
int b=5;
printf("b=%dn",b);
break;
}
case 3:
printf("3!n");
break;
case 4:
printf("4!n");
break;
}
printf("out of switch!n");

}

练习:用户输入一个字母,判断它是不是元音字母。(a,e,i,o,u,A,E,I,O,U).

(3) !(a>b) && !c ||1

include <stdio.h>

void main()
{
printf("输入一个字符:");
char ch=getchar();
switch(ch)
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("是元音字母!n");
break;
default:
printf("不是元音字母!n");
}
}

a>b 为假

!(a>b) 为真

c 为真

!c 为假

真&&假 为假

1 为真

假||真 为真

所以表达式的值为1

 

(4) !(x=a) && (y=b) && 0

x=a 为真

!(x=a) 为假

不必继续判断,表达式的值为0

 

(5) !(a+b)+c-1 && b+c/2

a+b 为真

!(a+b) 为假 其值为0

!(a+b)+c-1的值为4 为真

b+c/2 为真

真&&真 为真

所以表达式的值为1

 

4.4 有三个整数a,b,c 由键盘输入,输出其中最大的数

/*
时间:2011年10月17日14:24:37
题目:习题4.4 有三个整数a,b,c 由键盘输入,输出其中最大的数
*/
# include <stdio.h>

int main()
{
    
    int a,b,c;
    int max(int a,int b,int c);
    
    printf("输入三个整数:n");
    scanf("%d%d%d",&a,&b,&c);
    
    printf("其中最大的是:%dn",max(a,b,c));
    
    return 0;
}

int max(int a,int b,int c)
{
    int max;
    
    if(a>=b)
    {
        if(a>c)
        {
            max=a;
        }
        else
        {
            max=c;
        }
    }
    else if(b>=c)
    {
        max=b;
    }
    else
    {
        max=c;
    }
    return(max);
}

 

4.5 从键盘输入一个小于1000的正数,要求输出他的平方根(如果平方根不是整数,输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数,若不是,则要求重新输入

/*
时间:2011年10月17日14:47:11
题目:从键盘输入一个小于1000的正数,要求输出他的平方根(如果平方根不是整数,输出其整数部分)
要求:要求在输入数据后先对其检查是否为小于1000的正数,若不是,则要求重新输入
*/
# include <stdio.h>
# include <math.h>

int main()
{
    double a;
    
    printf("请输入一个小于1000的正数n");
    scanf("%lf",&a);
    
    while(a<=0 || a>=1000)
    {
        printf("请重新输入输入n");
        scanf("%lf",&a);
    }
    
    printf("平方根的整数部分是:%-5.0lfn",sqrt(a));
    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
请输入一个小于1000的正数
1001
请重新输入输入
0
请重新输入输入
5
平方根的整数部分是:2
Press any key to continue
————————————
*/

 

4.6 有一个函数:y=x(x<1)y=2x-1(1<=x<10)y=3x-11 (x>=10).写程序,输入x的值,输出y相应的值

/*
时间:2011年10月17日15:17:52
题目:有一个函数,写程序,输入x的值,输出y相应的值
函数::y=x(x<1)
         =2x-1(1<=x<10)
         =3x-11 (x>=10)
*/
# include <stdio.h>

int main()
{
    double x,y;
    
    printf("输入x的值n");
    scanf("%lf",&x);
    
    if(x<1)
    {
        y=x;
    }
    else if(1<=x && x<10)
    {
        y=2*x-1;
    }
    else
    {
        y=3*x-11;
    }
    printf("y的值是%lfn",y);
    
    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
输入x的值
0
y的值是0.000000
Press any key to continue
输入x的值
1
y的值是1.000000
Press any key to continue
输入x的值
10
y的值是19.000000
Press any key to continue
————————————
*/

 

4.7 有一函数y=-1(x<0)y=0(x=0)y=1(x>0)..有人分别编写了以下两个程序,请分析它们是否能实现题目要求。画出流程图

两端程序的运行结果都应该是x>0时,y=1;x<0时,y=0;x=0时,y=-1,都不能实现题目要求,elae总是与他上面的最近的未配对的if配对,所以题目中的书写格式都不好

第(1)段程序实际上的流程是

图片 7

# include <stdio.h>

int main()
{
    int x,y;
    printf("enter x:");
    scanf("%d",&x);
    y=-1;
    if(x!=0)
        if(x>0)
            y=1;
    else                //这样写格式不好,实际上else是与if(x>0)配对的
        y=0;
    printf("x=%d,y=%dn",x,y);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
enter x:1
x=1,y=1
Press any key to continue
enter x:0
x=0,y=-1
Press any key to continue
enter x:-1
x=-1,y=0
Press any key to continue
————————————
*/

 

第(2)段程序实际上的流程是

图片 8

# include <stdio.h>

int main()
{
    int x,y;
    printf("enter x:");
    scanf("%d",&x);
    y=0;
    if(x>=0)
        if(x>0) y=1;
    else y=-1;        //这样写格式不好,实际上else是与if(x>0)配对的
    printf("x=%d,y=%dn",x,y);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
enter x:1
x=1,y=1
Press any key to continue
enter x:0
x=0,y=-1
Press any key to continue
enter x:-1
x=-1,y=0
Press any key to continue
————————————
*/

 

4.8 给出一百分制成绩,要求输出成绩等级’A’’B’’C’’D’’E’。90分以上为A,80~89为B,70~79为C,60~69为D,60分以下为E

/*
时间:2011年10月18日8:32:38
题目:习题4.8 给出一百分制成绩,要求输出成绩等级'A''B''C''D''E'
备注:90分以上为A,80~89为B,70~79为C,60~69为D,60分以下为E
*/
# include <stdio.h>

int main()
{
    double score;
    
    do
    {
        printf("输入分数:");
        scanf("%lf",&score);
        if(score<0 || score>100)
        {
            printf("请重新");
        }
        else
        {
            break;
        }
    }
    while(1);
    
    switch(int(score)/10)
    {
    case 10:
    case 9:
        printf("等级为An");
        break;
    case 8:
        printf("等级为Bn");
        break;
    case 7:
        printf("等级为Cn");
        break;
    case 6:
        printf("等级为Dn");
        break;
    default:
        printf("等级为En");
    }
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入分数:101
请重新输入分数:-5
请重新输入分数:100
等级为A
Press any key to continue
输入分数:91.5
等级为A
Press any key to continue
输入分数:88
等级为B
Press any key to continue
输入分数:75
等级为C
Press any key to continue
输入分数:60
等级为D
Press any key to continue
输入分数:59.9
等级为E
Press any key to continue
输入分数:0
等级为E
Press any key to continue
————————————
*/

 

4.9 给一个不多于5位的正整数,要求:

(1)求出它是几位数

(2)分别输出每一位数字

(3)按逆序输出每位数字

/*
时间:2011年10月18日9:19:40
题目:习题4.9 给一个不多于5位的正整数
要求:(1)求出它是几位数
      (2)分别输出每一位数字
      (3)按逆序输出每位数字
*/
# include <stdio.h>

int main()
{
    int i,j,k=1;
    int a[5];
    
    do
    {
        printf("输入一个正整数(1~99999):");
        scanf("%d",&i);
        if (i<=99999 && i>0)
        {
            break;
        }
        else
        {
            printf("输入超出范围,请重新");
        }
    }
    while(1);
    
    for(j=0; j<5; ++j)
    {
        a[j]=i%10;
        i/=10;
        if(i!=0)
        {
            ++k;
        }
    }
    
    printf("这个整数一共有%d位n",k);
    
    for(i=k-1; i>=0; --i)
    {
        printf("第%d位的数字是%dn",i+1,a[i]);
    }
    
    printf("这个数的逆序输出是:");
    for(i=0; i<k; ++i)
    {
        printf("%d",a[i]);
    }
    printf("n");
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一个正整数(1~99999):0
输入超出范围,请重新输入一个正整数(1~99999):100000
输入超出范围,请重新输入一个正整数(1~99999):12345
这个整数一共有5位
第5位的数字是1
第4位的数字是2
第3位的数字是3
第2位的数字是4
第1位的数字是5
这个数的逆序输出是:54321
Press any key to continue
输入一个正整数(1~99999):1234
这个整数一共有4位
第4位的数字是1
第3位的数字是2
第2位的数字是3
第1位的数字是4
这个数的逆序输出是:4321
Press any key to continue
————————————
*/

 

4.10 企业发放的奖金根据利润提成,从键盘输入当月利润I,求应发奖金总数。要求

(1)用if语句编程序

/*
时间:2011年10月18日11:20:53
题目:习题4.10 企业发放的奖金根据利润提成,从键盘输入当月利润I,求应发奖金总数。
要求:用if语句编程序
*/
# include <stdio.h>

int main()
{
    double profit,bonus=0;
    
    printf("输入当月利润I:");
    scanf("%lf",&profit);
    
    if(profit>1000000)
    {
        bonus = 1.0/100*(profit-1000000);
        profit = 1000000;
    }
    if(profit<=1000000 && profit>600000)
    {
        bonus += 1.5/100*(profit-600000);
        profit = 600000;
    }
    if(profit<=600000 && profit>400000)
    {
        bonus += 3.0/100*(profit-400000);
        profit = 400000;
    }
    if(profit<=400000 && profit>200000)
    {
        bonus += 5.0/100*(profit-200000);
        profit = 200000;
    }
    if(profit<=200000 && profit>100000)
    {
        bonus += 7.5/100*(profit-100000);
        profit = 100000;
    }
    if(profit<=100000 && profit>=0)
    {
        bonus += 10.0/100*profit;
    }

    printf("可获得奖金总数为%lfn",bonus);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入当月利润I:100000
可获得奖金总数为10000.000000
Press any key to continue
输入当月利润I:200000
可获得奖金总数为17500.000000
Press any key to continue
输入当月利润I:400000
可获得奖金总数为27500.000000
Press any key to continue
输入当月利润I:600000
可获得奖金总数为33500.000000
Press any key to continue
输入当月利润I:1000000
可获得奖金总数为39500.000000
Press any key to continue
输入当月利润I:2000000
可获得奖金总数为49500.000000
Press any key to continue
————————————
*/

 

(2)用switch编程序

/*
时间:2011年10月18日11:20:53
题目:习题4.10 企业发放的奖金根据利润提成,从键盘输入当月利润I,求应发奖金总数。
要求:用switch语句编程序
*/
# include <stdio.h>

int main()
{
    double profit,bonus=0;
    
    printf("输入当月利润I:");
    scanf("%lf",&profit);
    
    switch(int(profit)/100000)
    {
    default:
        bonus += 1.0/100*(profit-1000000);
        profit = 1000000;
    case 10:
    case 9:
    case 8:
    case 7:
    case 6:
        bonus += 1.5/100*(profit-600000);
        profit = 600000;
    case 5:
    case 4:
        bonus += 3.0/100*(profit-400000);
        profit = 400000;
    case 3:
    case 2:
        bonus += 5.0/100*(profit-200000);
        profit = 200000;
    case 1:
    &

本文由10bet手机官网发布于面向对象,转载请注明出处:exe运行问题,选择结构程序设计

上一篇:blocks输出中文乱码的问题,Mysql数据库乱码 下一篇:没有了
猜你喜欢
热门排行
精彩图文