第05章 选择结构程序设计C语言程序设计教程 王敬华 清华大学出版社
第 五 章 选 择 结 构 程 序 设 计
a = 4; b = 5; 逻辑运算符的优先级 !a //值为 值为0 //值为0 !、~、++、--、sizeof 高 ++、--、 a && b //值为 值为1 //值为1 算术运算符 移位运算符 a ||例如: b //值为 值为1 //值为1 例如: 关系运算符 (a a 等价于: 值为1 !a || b <= x && x <= b 等价于: 值为1 && (x <= b) //值为 // <= x) &、|、^ (a a > b && x > y 等价于: 等价于: > b) && (x > y) 4 && ==||b2|| x == y 等价于:(a 值为1 || (x == y) 0 //值为 // == b) &&、|| &&、 a 等价于: 值为1 赋值运算符 5 > 3!a || a低 b 8 < 4 - !0 (!a) 等价于: 值为1 等价于: 值为1> b) && > || 2 //值为 // || (a 等价于: 等价于:(!a) > b 已知: =!a b 5; 已知:a = 4; b&&>‘d’ //值为 值为1 //值为1 ‘c’ c = 2 || b < b - !a;等价于:c = (a || b) a || 8 等价于: !a;的值? 的值? 问:c = b > 3 && 的值 7 && b & 等价于: 的值为1 a 等价于: 8 等价于:(a | 7) (8 < (b – 8) 答:c 的值为1。 |等价于:c = (((b > 3) && 2) || && (b &(!a))));
C
语 言 程 序 设 计 教 程
控制语句 用来实现一定的控制功能的语句称为控制语句 用来实现一定的控制功能的语句称为控制语句 。C语 言用控制语句来实现选择结构和循环结构。C 。C语言有九种 言用控制语句来实现选择结构和循环结构。C语言有九种 控制语句。可分成以下三类: 控制语句。可分成以下三类: 分支 循环
第5章 选择结构程序设计
制作人:王敬华 制作人:
C
语 言 程 序 设 计 教 程
第5章:选择结构程序设计
学习的意义
在编制程序时,有时并不能保证程序一定执行某些指令, 在编制程序时,有时并不能保证程序一定执行某些指令, 而是要根据一定的外部条件来判断哪些指令要执行。 而是要根据一定的外部条件来判断哪些指令要执行。如菜谱 中要加工西红柿,可能有这样的步骤:如果是用鲜西红柿, 中要加工西红柿,可能有这样的步骤:如果是用鲜西红柿, 则去皮、切碎,开始放入,如果是用西红柿酱, 则去皮、切碎,开始放入,如果是用西红柿酱,就在最后放 顺序结构 这里,我们并不知道具体操作时执行哪段指令, 入。这里,我们并不知道具体操作时执行哪段指令,但菜谱 第4章已讨论 选择结构 给出了不同条件下的处理方式,计算机程序也是如此, 给出了不同条件下的处理方式,计算机程序也是如此,可以 程序结构 本章讨论 根据不同的条件执行不同的代码,这就是选择结构 选择结构。 根据不同的条件执行不同的代码,这就是选择结构。程序总 循环结构 是为解决某个实际问题而设计的,而问题往往包含多个方面, 是为解决某个实际问题而设计的,而问题往往包含多个方面, 第6章讨论 不同的情况需要有不同的处理, 不同的情况需要有不同的处理,所以选择结构在我们的实际 应用程序中可以说是无处不在, 应用程序中可以说是无处不在,离开了选择结构很多情况将 无法处理,因此, 无法处理,因此,正确掌握选择结构程序设计方法对于我们 编写实际应用程序尤为重要。 编写实际应用程序尤为重要。
C
语 言 程 序 设 计 教 程
2. 逻辑运算符和逻辑表达式 逻辑运算符
逻辑运算符 ! && (两个&之间没 两个& 有空格) 有空格) || (两个|之间没有空 两个| 格) 含 义 结合性 优先级关系 高 单目运算符,逻辑非, 单目运算符,逻辑非, 右结合性 表示相反 双目运算符,逻辑与, 双目运算符,逻辑与, 表示并且 双目运算符,逻辑或, 双目运算符,逻辑或, 表示或者
1. 关系运算符和关系表达式 关系运算符
关系运算符 > >= (>和=之间没有空格) 之间没有空格) < 含 义 大于 大于或等于 这些关系运算符等优 先级, 先级,但比下面的优 小于 先级高 先级高 左结合性 小于或等于 优先级 结合性
第 五 章 选 择 结 构 程 序 设 计
<= (<和 注意: =之间没有空格) 注意: 之间没有空格) == (两个=之间没有空格) 等于 两个=之间没有空格) 这些关系运算符等优 语言用0表示假, 表示真。 C语言用0表示假,非0表示真。,但比上面的优 先级, 先级 之间没有空格) != (!和=之间没有空格) 不等于 一个关系表达式的值不是0就是1 表示假, 表示真。 一个关系表达式的值不是0就是低,0表示假,1表示真。 先级低 先级 1
关系运算符的优先级
算术运算符 移位运算符 关系运算符 &、|、^ 赋值运算符 高
低
第 五 章 选 择 结 构 程 序 设 计
例如: 例如: c>a+b 等价于: 等价于: c > (a + b) a >例!= c a = 3, b = : c =>1, d, f; b :int 等价于: (a b) != c 等价于 2, a == b < c 等价于: 等价于: a == (b < c) a > b 等价于: 表达式值1 //表达式值 // a = (b > c) a=b>c 等价于: 表达式值1 a >> 2 <(a + db) == c : 表达式值1(c + d) c > 等价于: (a >> 2) < //表达式值 等价于 //表达式值1 a&4>b|c 等价于: 等价于: (a & (4 > b)) | c b+c<a //表达式值 表达式值0 //表达式值0 //d = 1 d=a>b 已知: 已知:a = 1; b = 2; c = 3; f = a > b > c //f = 0 c;的值 的值? 问:d = a != c == a < b < c;的值? 的值为1 等价于: 答:d 的值为1。 等价于:d = ((a != c) == ((a < b) &程 序 设 计
逻辑运算真值表
A 假 假 真 真 B 假 真 假 真 !A 1 1 0 0 !B 1 0 1 0 A && B 0 0 0 1 A || B 0 1 1 1
C
语 言 程 序 设 计 教 程
2. 逻辑运算符和逻辑表达式 逻辑表达式
用逻辑运算符连接起来的式子称为逻辑表达式 用逻辑运算符连接起来的式子称为逻辑表达式。 逻辑表达式。 逻辑表达式的一般形式为: 逻辑表达式的一般形式为:表达式 逻辑运算符 表达式 例:a < 例&& b < c、x > 10 || x < -10、!x && !y b:
第 五 章 选 择 结 构 程 序 设 计
学习内容
C程序中语句的分类 关系运算符、逻辑运算符、 关系运算符、逻辑运算符、条件运算符 选择结构的程序设计(if语句、switch语句 (if语句 语句) 选择结构的程序设计(if语句、switch语句) 选择结构程序设计举例 本章小结
C
语 言 程 序 设 计 教 程
5.1 C程序中语句的分类
C语言程序的执行部分是由语句组成的。程序的功能也 语言程序的执行部分是由语句组成的。 是由执行语句实现的。 语言中的语句可以分为以下5 是由执行语句实现的。C语言中的语句可以分为以下5类: 表达式语句 由表达式加上分号“ 组成。其一般形式为:表达式; 由表达式加上分号“;”组成。其一般形式为:表达式; 函数调用语句 a = 10 赋值表达式 由函数名、实际参数加上分号“ 组成。 由函数名、实际参数加上分号“;”组成。其一般形 a = 10; 赋值语句 式为:函数名(实际参数表) 式为:函数名(实际参数表); k++ 表达式 表达式语句 空语句 k++; printf ("C Program") 函数调用; 函数调用; 只有分号“ 组成的语句称为空语句。 只有分号“;”组成的语句称为空语句。空语句是什么 printf (“C Program”); 函数调用语句 也不执行的语句。在程序中空语句可用来作空循环体。 也不执行的语句。在程序中空语句可用来作空循环体。 。 其功能是输出字符串"C Program"。 其功能是输出字符串"C Program" while (getchar( ) != '\n' ) '\ ; 本语句的功能是, 本语句的功能是,只要从键盘输入的字符不是回车则 重新输入。这里的循环体为空语句 空语句。 重新输入。这里的循环体为空语句。
第 五 章 选 择 结 构 程 序 设 计
辅助控制
if( )~else~ switch for( )~ while( )~ do~while( ) continue break goto return
本章讨论
C
语 言 程 序 设 计 教 程
5.2 关系运算符、逻辑运算符、条件运算符 关系运算符、逻辑运算符、
第 五 章 选 择 结 构 程 序 设 计
C语言程序设计基础教程 课后习题答案 (清华大学出版社 于延编) 自己做的 欢迎校正
int i; for(i=2;x%i;i++); if(x==i) return x; else return 0; } main() { int i,j=1,m=1,n=3; //n=3 n 永远为 m 前一个素数 for(i=5;i<10000;i++) //因为最小的孪生素数对从为 3,5 { if(f(i)==0) //如果 i 非素数跳出这次循环进入下一次 continue; m=f(i); if(m-n==2) //输出孪生素数 { printf(" 第%d 组孪生素数: %d , %d\n",j,n,m); j++; } n=m; //n 为 m 前一个素数 } system("pause"); } 5.设计算法输出 10000 以内所有亲和数对。 //如果两个数 a 和 b,a 的所有真因数之和等 //于 b,b 的所有真因数之和等于 a,则称 a,b 是一对亲和数。 真因数:除了他本身 #include <stdio.h> int qhs(int a) { int i; int s = 0; for (i = 1; i * i < a; i++) //求一个数的真约数和 if (a % i == 0) s += i + a / i; if (i * i == a) s += i; s -= a; return s; } int main(void) //返回值为空 { int i, j; for (i = 0; i < 100000; i++)
********* *** ***
** ** * * #include<stdio.h> #include<stdlib.h> int main() { printf("*********\n"); printf("*** ***\n"); printf("** **\n"); printf("* *\n"); system("pause");} 3.编程输出由字符图案构成的你的中文名字。 #include<stdio.h> #include<stdlib.h> int main() { printf(" ========== \n"); printf(" ============== \n"); printf(" * * \n"); printf(" * * \n"); printf(" * * * \n"); printf(" **** * \n"); printf(" ========== \n"); printf(" ============== \n"); printf(" * * \n"); printf(" * * \n"); printf(" * * * \n"); printf(" **** * \n"); system("pause");}
北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版习题答案
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>=5)y=x+1;
else if(x>=0)y=x-1;
else if(x>-5)y=x;
main()
{int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
printf("cock hen chick\n");
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=33;k++)
{int a[]={-10,0,15,34},i;
for(i=0;i<=3;i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);}
执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)
C语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版]
第1章习题参考答案1.单项选择题(1)A (2)C (3)D (4)C (5)B 2.填空题(1)函数(2)主函数(main)(3)printf() , scanf()第2章习题参考答案1.单项选择题1-5 CBCCC 6-10 CDCDC 11-13 DBB2.填空题(10)11(11)((m/10)%10)*100+(m/100)*10+m%10(12)0(13)10 ,9 ,11(15)(x<0&&y<0)||(x<0&&z<0)||(y<0||z<0)(16)double (17)x==0(18)sqrt(fabs(a-b))/(3*(a+b))(19)sqrt((x*x+y*y)/(a+b))第3章习题参考答案1.单项选择题1-5 CCCDD 6-10 BCDBC 11-15 BCBBB 16 A 2.填空题(1)用;暗示停止(2){ }(3)y=x<0?1:x==0?0:-1(4)y%4==0&&y%100!=0||y%400==0(5)上面未配对(6)default标号(7)while , do while , for(8)do while(9)本次(10)本层3.浏览程序,指出成果(1)yes(2)*&(3)ABother(4)28 70(5)2,0(6)8(7)36(8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12(11)i=6,k=4(12)1,-24.程序填空(1)x:y, u:z(2)m=n , m!=0 ,m=m/10(3)t<eps , t*n/(2*n+1) , printf(“%lf\n”,2*s)(4)m%5==0 , printf(“%d\n”,k)(5)cx=getchar() , cx!=front , cx(6)double s=0 , 1.0/k , %lf(7)s>=0 , s<gmin ,5.编程题(1).#include <stdio.h>int main(){double x,y;scanf("%lf",&x);if(x<1)y=x;else if(x>=1.0&&x<10)y=2*x-11;elsey=3*x-11;printf("%lf\n",y);return 0;}(2).#include <stdio.h>int main(){double x,y,z,min;scanf("%lf%lf%lf",&x,&y,&z); if(x>y)min=y;elsemin=x;if(min>z)min=z;printf("min=%lf\n",min);return 0;} (3).#include <stdio.h>int main(){int y,m,d,flag,s=0,w,i;scanf("%d%d%d",&y,&m,&d);flag=(y%4==0&&y%100!=0||y%400 ==0);w=((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7;for(i=1;i<=m;i++){switch(i){case 1:s=d;break;case 2:s=31+d;break;case 3:s=59+d;break;case 4:s=90+d;break;case 5:s=120+d;break;case 6:s=151+d;break;case 7:s=181+d;break;case 8:s=212+d;break;case 9:s=243+d;break;case 10:s=273+d;break;case 11:s=304+d;break;case 12:s=334+d;break;}}if(flag==1&&m>2)s=s+1;s=(w+s)%7;if(s==0)printf("礼拜日\n");elseprintf("礼拜%d\n",s);return 0;}(4).#include <stdio.h>int main(){float p,r;scanf("%f",&p);if(p<=10)r=p*0.1;else if(p>10&&p<=20)r=10*0.1+(p-10)*0.075;else if(p>20&&p<=40)r=10*0.1+10*0.075+(p-20)*0.05; else if(p>40&&p<=60)r=10*0.1+10*0.075+20*0.05+(p-40)*0.03;else if(p>60&&p<=100)r=10*0.1+10*0.075+20*0.05+20*0. 03+(p-60)*0.015;else if(p>100)r=10*0.1+10*0.075+20*0.05+20*0. 03+40*0.015+(p-100)*0.01;printf("%f\n",r);return 0;}(5).#include <stdio.h>int main(){ char c;while((c=getchar())!='\n'){if(c>='a'&&c<='z')c=c-32;putchar(c);}return 0;}(6).#include<stdio.h>int main(){int m,k=2;printf("输入一个正整数:\n"); scanf("%d",&m);while(k<m)if(m%k==0){printf("%4d",k);m=m/k;}elsek++;printf("%4d\n",m);return 0;}(7).#include<stdio.h>int main(){int a,n,s=0,p=0,i;scanf("%d %d",&n,&a);for(i=1;i<=n;i++){p=p*10+a;s=s+p;}printf("%d\n",s);return 0;}(8).#include<stdio.h>int main(){int i,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)printf("%5d",100*i+10*j+k); return 0;}(9).#include<stdio.h>#include<math.h>int main(){float a=-10,b=10,x,f1,f2,f; f1=(((2*a-4)*a+3)*a)-6;f2=(((2*b-4)*b+3)*b)-6;do{x=(a+b)/2;f=(((2*x-4)*x+3)*x)-6;if(f*f1<0){b=x;f2=f;}else{a=x;f1=f;}}while(fabs(f)>=1e-6);printf("%6.2f\n",x); return 0;}(10).#include<stdio.h>#include<math.h>int main(){int n=2;double eps,t,s=0,x;scanf("%lf %lf",&x,&eps); t=x;s=t;while(fabs(t)>=eps){t=-t*(2*n-3)*x*x/(2*n-2); s=s+t/(2*n);n++;}printf("%d,%lf\n",n,s);return 0;}(11).#include<stdio.h>int main(){unsigned long s,t=0,p=1; scanf("%u",&s);while(s!=0){if((s%10)%2!=0){t=t+(s%10)*p;p=p*10;}s=s/10;}printf("%u\n",t);return 0;}第4章习题参考答案1.单项选择题1-5 DDDBD 6-10 BADCD 11-14 BDAB2.填空题(1)2(2)嵌套 , 递归(3)全局变量 , 局部变量 , 静态变量 , 动态变量(4)auto , static , register , extern(5)外部变量(6)编译 ,运行3.浏览程序,指出成果(1)15(2)5(3)5,4,3(4)i=5i=2i=2i=4i=2(5)求水仙花数(6)-5*5*5(7)30(8)0 101 112 124.程序填空(1)float fun(float , float) , x+y,x-y , z+y,z-y(2)x , x*x+1(3)s=0 , a=a+b5.编程题(1).#include<stdio.h>unsigned int fun(unsigned int); int main(){unsigned int s;scanf("%u",&s);printf("%u\n",fun(s));return 0;}unsigned int fun(unsigned int s) { unsigned int p=0; while(s!=0){p=p+s%10;s=s/10;}return p;}(2).#include<stdio.h> #include<stdlib.h> #include<math.h>void f1(float,float,float,float);void f2(float,float,float,float);void f3(float,float,float,float);int main(){float a,b,c,d;scanf("%f %f %f",&a,&b,&c);if(a==0){printf("不是一元二次方程\n"); exit(0);}d=b*b-4*a*c;if(d>0)f1(a,b,c,d);else if(d==0)f2(a,b,c,d);elsef3(a,b,c,d);return 0;}void f1(float a,float b,float c,float d){float x1,x2;{x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("%.2f ,%.2f\n",x1,x2);}}void f2(float a,float b,float c,float d){float x1,x2;{x1=-b/(2*a);x2=-b/(2*a);printf("%.2f ,%.2f\n",x1,x2);} }void f3(float a,float b,float c,float d){float x1,x2;{x1=-b/(2*a);x2=sqrt(-d)/(2*a);printf("%.2f+i*%.2f\n",x1,x2); printf("%.2f-i*%.2f\n",x1,x2);}}(3).#include<stdio.h>double p(int,double);int main(){int n;double x;do{scanf("%d",&n);}while(n<0);scanf("%lf",&x);printf("%lf\n",p(n,x));return 0;}double p(int n,double x){double pn;if(n==0)pn=1;else if(n==1)pn=x;elsepn=((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;return pn;}(4).#include<stdio.h>double fun(float);void display(float,int);int main(){float dep;int season;scanf("%f %d",&dep,&season);display(dep,season);return 0;}double fun(float d){return d*RATE;}void display(float d,int s){int i;printf("季度利余额\n"); printf("-------------------------------\n");for(i=1;i<=s;i++){printf("%-4d %-.2f %-.2f\n",i,fun(d),fun(d)*i+d);printf("-------------------------------\n");}}(5).#include<stdio.h>double fun(void); int main(){printf("%lf\n",fun()); return 0;}double fun(void){double s=0;int n=1;while((double)(2*n-1)/((2*n)*(2*n))>1e-4) {s=s+(double)(2*n-1)/((2*n)*(2*n));n++;}return s;}(6).#include<stdio.h>int fun(int);int main(){int w;scanf("%d",&w);printf("%d\n",fun(w)); return 0;}int fun(int w){int n=1,p=1,m;m=w;while(m>10){m=m/10; p=p*10; n++;}return w%p; }第5章习题参考答案1.选择题:1-5 C (B C) BBA 6-8 DDB2.填空题(1) 0,9(2) float realArray[100],char strArray[16],int intArray[1000] (3)运算符 sizeof(4) 6字节3.浏览程序,写出下面程序的运行成果(1) aabbcc dd(2) abcd(3)ahAMa(4)0010(5) 1 3 4 5(6)This is the title.Name 1 is RosalindaName 2 is ZekeThe biggest name alpabetically is ZekeBoth names are Rosalinda Zeke(7)0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 5 6 8 10 748 140 3 6 9 12 15 18 210 4 8 12 16 20 24 280 5 10 15 20 177 30 350 6 12 18 24 30 36 420 7 14 21 28 35 42 494.程序填空(1) a[i][j] != a[j][i] , 1(2) 0, a[i] < a[mini] , maxi = i , a[maxi] = a[mini](3) int a[], int b[], b[i] = a[i], -999, arraycopy(a,b), b[i++](4) a<sizeof(ch), if5.编程题(1)#include<stdio.h>int main ( ){1 int a[3][4] = {0, 2,9,7,5,13,6,8,27,11,1,3};int i,j,temp;for(i=0,j=0;j<4;j++){temp = a[2-i][j];a[2-i][j] = a[i][j];a[i][j] = temp;}for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",a[i][j]);printf("\n");}return 0;}(2)#include<stdio.h>int main ( ){static int a[6][6];int i,j,t=1;for(i=0;i<6;i++){t = i+1;for(j=0;j<i+1;j++)a[i][j] = t--;}for(i=0;i<6;i++){for(j=0;j<6;j++)printf("%3d",a[i][j]);printf("\n");}return 0;}(3)#include <stdio.h>#define M 3#define N 4#define R 5int main( ){static int a[M][N],b[N][R],c[M][R]; int i,j,k;2 printf("Matrix a:\n");for( i = 0; i < M; i++ )for( j = 0; j < N; j++ )scanf( "%d",&a[i][j] );printf("Matrix b:\n");for( i = 0; i < N; i++ )for( j = 0; j < R; j++ )scanf( "%d",&b[i][j] );for( i = 0; i < M; i ++ )for( j = 0; j < N; j++ )for( k = 0; k < R; k++)c[i][k] += a[i][j]*b[j][k];for( i = 0; i < M; i++ ){for( j = 0; j < R; j++ )printf( "%3d",c[i][j] );printf("\n");}return 0;}(4)#include <stdio.h>#define M 5int main( ){static int a[M];int i,max = -1,min = 100,maxi,mini,temp;for( i = 0; i < M; i++ )scanf( "%d",&a[i] ); //0~99间的值for( i = 0; i < M; i++ ){if( max < a[i] ){max = a[i];maxi = i;}if( min > a[i] ){min = a[i];mini = i;}}temp = a[maxi];a[maxi] = a[mini];a[mini] = temp;for( i = 0; i < M; i++ )printf( "%3d",a[i] );return 0;}3(5)#include <stdio.h>#define M 3#define N 4int main( ){static int a[M][N];int max = -1,sumcol=0,sumrow=0;int i,j,maxi,col;for( i = 0; i < M; i++ ){sumrow = 0;for( j = 0; j < N; j++ ){scanf( "%d",&a[i][j] );sumrow += a[i][j];}if ( max < sumrow ){max = sumrow;maxi = i;}}printf("which col sum will be caculated?(>0)");scanf("%d",&col);for( i = 0; i < M; i ++ )sumcol += a[i][col-1];printf("The %dth row's sum is max, max=%d\n",maxi+1,max);printf("The %dth column's sum=%d\n",col,sumcol);return 0;}(6)#include <stdio.h>#define M 81int main( ){static char str[M];int i,count = 0;char ch;gets(str);fflush(stdin); //清空输入缓冲区,以便读入字符数据printf("Which character will be found?");ch = getchar();for( i = 0; i < strlen(str); i++ )if( ch == str[i] )count++;printf( "The number of character '%c' is %d\n",ch,count );4 return 0;}(7)#include <stdio.h>#include <stdlib.h>#define N 10 //同窗人数#define M 5 //课程数void enter_scores(void);void sort_scores(int score[][M], int average[N][3]);void disp_scores(int score[][M]);void histogram(int n, int score[][M]);void printchar(int n);static int score[N][M];static int aver[N][3]; //第1列为均值,第2列原始次序,第3列为均值逆序int main(){int course;enter_scores();printf("\n===========Oringenal Score Start=========\n");disp_scores(score);printf("\n===========Oringenal Score End===========\n");printf("\n===========Sorted Score Start============\n");sort_scores(score,aver);printf("\n===========Sorted Score End==============\n");printf("\nWhich class will be statisticed?\n");scanf("%d",&course);histogram(course, score);system("Pause");return 0;}/* 输入成绩 */void enter_scores(){int i, j;for(i=0; i<N; i++) {for(j=0; j<M; j++){scanf("%d",&score[i][j]);aver[i][0] += score[i][j];}}for( i = 0; i < N; i++ )for ( j = 1; j < 3; j++ )5 aver[i][j] = i;}/* 成绩排序. */void sort_scores(int score[][M], int average[N][3]){int i,j,t;int temp,tempindex;for( i = 0; i < N - 1; i++ )for( j = 0; j < N - 1 - i; j++ )if ( average[j][0] < average[j+1][0] ){temp = average[j][0];average[j][0] = average[j+1][0];average[j+1][0] = temp;tempindex = average[j][2];average[j][2] = average[j+1][2];average[j+1][2] = tempindex;}printf("\n Score1 Score2 Score3 Score4 Score5\n"); for( i = 0; i < N; i++ ){t = average[i][2];for( j = 0;j < M; j++ ){printf("%8d", score[t][j]);}printf("\n");}}/* 输出成绩 */void disp_scores(int score[][M]){int i, j;printf("\n Score1 Score2 Score3 Score4 Score5\n"); for( i = 0; i < N; i++ ){for( j = 0;j < M; j++ )printf("%8d", score[i][j]);printf("\n");}}void printchar(int n){6 int i;for (i = 0; i < n; ++i) putchar('*');}void histogram(int course, int score[][M]){int i,temp;int segs[5] = {0};int sc[N];for( i = 0; i < N; i++ )sc[i] = score[i][course];for (i = 0; i < N; i++)/* 统计各分段人数 */{temp = (int)sc[i]/10;segs[ temp<6?0:temp-5]++; /* 成绩/10,将成绩分段 */ }printf("\nSegment Number\n");for (i = 0; i < 5; i++) /* 输出直方图,每段的人数 */{printf("<%3d: %5d| ", (i+1)*10+50, segs[i]);printchar(segs[i]);putchar('\n');}putchar('\n');}(8)#include <stdio.h>#define M 81int main( ){static char str[M];int i,count = 0;char ch = 0;gets(str);for( i = 0; i < strlen(str); i++ )if( ch < str[i] )ch = str[i];for( i = 0; i < strlen(str); i++ )if( ch == str[i] )count++;printf( " max = '%c' ,count = %d\n",ch,count );return 0;}7第6章习题参考答案1.选择题:1-5 BBDDA 6-10 CCABD 11-15 CBCDA 16A2.填空题(1)常量,变量(2)指针(3)2(4)12,12(5) a[0],a[3] 3.浏览程序,写出下面程序的运行成果(1)5(2)6(3) abcdefglkjih(4) 976531(5)5,9(6)2,4,5,7,6,0,11,9,7,3,(7)string_a=I am a teacher.string_b=You are a student.string_a=I am a teacher.string_b=I am a teacher.4.程序填空(1) *p != '\0', *p-'0', j—(2) i <strlen(str), j=i, k+1(3)a+i, (char)(n%10) + '0'(4)*pk = i, a,n,i+1,pk(5) s1++, *s2, s1=p5.编程题(1)#include <stdio.h>int main(){int a=3,b=7,c=2;int *ptra = &a,*ptrb = &b,*ptrc = &c;int temp;printf("a=%d,b=%d,c=%d\n",a,b,c);printf("*ptra=%d,*ptrb=%d,*ptrc=%d\n",*ptra,*ptrb,*ptrc); if ( *ptra > *ptrb ){temp = *ptra;*ptra = *ptrb;1 *ptrb = temp;}if ( *ptra > *ptrc ){temp = *ptra;*ptra = *ptrc;*ptrc = temp;}if ( *ptrb > *ptrc ){temp = *ptrb;*ptrb = *ptrc;*ptrc = temp;}printf("a=%d,b=%d,c=%d\n",a,b,c);printf("*ptra=%d,*ptrb=%d,*ptrc=%d\n",*ptra,*ptrb,*ptrc);return 0;}(2)#include <stdio.h>#include <stdlib.h>void inputdata(int a[],int n);void process(int a[],int n);void outputdata(int a[],int n);int main(){int a[10],n=10;inputdata(a,n);outputdata(a,n);process(a,n);outputdata(a,n);system("Pause");return 0;}void inputdata(int a[],int n) //0~99之间的数{int i;for( i = 0; i < n; i++ )scanf("%d",a+i);}void outputdata(int *ptr,int n){int i;2 printf("\n==========OutPut Data Start=============\n"); for( i = 0; i < n; i++ )printf("%4d",*ptr++);printf("\n==========OutPut Data End================\n");} void process(int *ptr,int n){int i,maxi,mini;int max=-1,min=101;for( i = 0; i < n; i++ ){if ( max < *(ptr+i) ){max = *(ptr+i);maxi= i;}if ( min > *(ptr+i) ){min = ptr[i];mini= i;}}if ( mini != 0){i = ptr[0];ptr[0] = ptr[mini];ptr[mini] = i;}if (maxi != n-1){i = ptr[n-1];ptr[n-1] = ptr[maxi];ptr[maxi] = i;}if (maxi == 0 && mini == n-1){i = ptr[maxi];ptr[maxi] = ptr[mini];ptr[mini] = i;}}(3)#include<stdio.h>3int strLength (char *);int main(){static char str[81];gets(str);printf("string "%s" length:%3d\n",str,strLength(str)) ; system("Pause");return 0;}int strLength (char *s){char *p=s;while (*p) p++ ;return (p-s) ;}(4)#include <stdio.h>#define M 3#define N 4void Transpose (int (*a)[N],int (*T)[M]);int main( ){static int a[M][N],T[N][M];int i,j;for( i = 0; i < M; i++ )for( j = 0; j < N; j++ )scanf( "%d",&a[i][j] );printf("\n======Oringinal Matrix Start=========\n");for( i = 0; i < M; i ++ ){for( j = 0; j < N; j++ )printf( "%4d",a[i][j] );printf("\n");}printf("\n======Oringinal Matrix End===========\n");Transpose(a, T);printf("\n======Transpose Matrix Start=========\n");for( i = 0; i < N; i ++ ){for( j = 0; j < M; j++ )printf( "%4d",T[i][j] );printf("\n");}4 printf("\n======Transpose Matrix End===========\n"); return 0;}void Transpose (int (*a)[N],int (*T)[M]){int i,j;for( i = 0; i < N; i++ )for( j =0; j < M; j++ )T[i][j] = a[j][i];}(5)#include <stdio.h>int main(){static char source[81],target[81];int result;gets(source);gets(target);result = Strcmp(source,target);if (result){if( result < 0 )printf("%s < %s\n",source,target); elseprintf("%s > %s\n",source,target); }elseprintf("%s = %s\n",source,target); return 0;}int Strcmp(char *s,char *t){while (*s && *t && (*s == *t)) {s++;t++;}return *s - *t;}(6)#include <stdio.h>5#define M 5#define N 3int sum (int *a)int main()。
C语言第五章讲义
5.1 C程序中语句的分类
C语言程序的执行部分是由语句组成的。程序的功能也 语言程序的执行部分是由语句组成的。 是由执行语句实现的。 语言中的语句可以分为以下5 是由执行语句实现的。C语言中的语句可以分为以下5类: 表达式语句 由表达式加上分号“ 组成。其一般形式为:表达式; 由表达式加上分号“;”组成。其一般形式为:表达式; 函数调用语句 a = 10 赋值表达式 由函数名、实际参数加上分号“ 组成。 由函数名、实际参数加上分号“;”组成。其一般形 a = 10; 赋值语句 式为:函数名(实际参数表) 式为:函数名(实际参数表); k++ 表达式 表达式语句 空语句 k++; printf ("C Program") 函数调用; 函数调用; 只有分号“ 组成的语句称为空语句。 只有分号“;”组成的语句称为空语句。空语句是什么 printf (“C Program”); 函数调用语句 也不执行的语句。在程序中空语句可用来作空循环体。 也不执行的语句。在程序中空语句可用来作空循环体。 。 其功能是输出字符串"C Program"。 其功能是输出字符串"C Program" while (getchar( ) != '\n' ) '\ ; 本语句的功能是, 本语句的功能是,只要从键盘输入的字符不是回车则 重新输入。这里的循环体为空语句 空语句。 重新输入。这里的循环体为空语句。
1 结果为 结果为0
例 5 > 2 > 7 > 8在C中是 8在 允许的, 允许的,值为 0
第 五 章 选 择 结 构 程 序 设 计
例 应避免对实数作相等或不等的判断 应避免对实数 实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 0
c语言选择结构程序设计教案设计
a=-a;
printf("%d\n",a);
}_
(2)上述是双分支
例2输入两个整型数,将平方值较大者输出。
main()
{ int a,b,max;
scanf("%d%d",&a,&b);
if(a*a>b*b)
max=a;
else
x=b;
printf("%5d\n",max);
}_
> >= < <= = = !=
关系运算符的优先级低于算术运算符。如:
a+b>c+d等价于(a+b)>(c+d)
关系运算符的结合方向都为左结合。如:
a>b>c等价于(a>b)>c
2、逻辑运算符和逻辑表达式
(1).逻辑运算符
&&逻辑与
||逻辑或
!逻辑非
(2).逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。运算对象一般为关系表达式或逻辑量(常量或变量)。如;
a>b&&c>d&&e>f等价于((a>b)&&(c>d))&&(e>f)
!!!(a>b)等价于!(!(!(a>b)))
3、条件运算符及条件表达式
(1).条件运算符
?:
C语言中唯一的一个三目运算符。
(2).条件表达式
条件表达式的一般形式为:
表达式1?表达式2:表达式3
其中,表达式i (1≤i≤3)的类型任意,表达式1一般为关系表达式或逻辑表达式,表达式2和表达式3一般为同类型表达式。
《C程序设计》清华大学出版社 PPT教程 第5章_选择2011
5.3 if语句
21
22
5.3 if语句
if语句的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套。 形式: if() if() 语句1 else 语句2 else 内嵌if,A,B又可以是if-else语句 if() 语句3 else 语句4
23
5.3 if语句
-1 (x<0) 例 5.3 有一个函数 y= 0 (x=0),编一程序,输入一个x 值,输出y值。 1 (x>0) 算法: 输入x 若x<0,则y=-1 若x=0,则y=0 若x>0,则y=1 输出y 或 算法: 输入x 若x<0,则y=-1 否则: 若x=0,则y=0 若x>0,则y=1 输出y
1.关系运算:两个量进行“比较的运算” 关系运算符: < <= > >= == !=
高
级别相同 级别相同 低
优先级别: 赋值运算符、关系运算符、算术运算符
低
高
例:a=1,b=-5,c=„a‟时下面表达式的值 c>a+b 结果: 1 c>(a+b) 1 a==b<c a==(b<c) 1 a=(b<c) a=b<c
例5-12:读程序,写出程序完成功能及结果 #include <stdio.h> int main() { float x,y; printf("enter x:"); scanf("%f",&x); if(x==0.)y=1; else y=(x*5+1)/x; printf("\nx=%4.1f\ty=%4.1f\n",x,y); } 改写: 标红部分等价于: y=1; if(x!=0.) y=(x*5+1)/x;
C语言程序设计任务驱动式教程 第3版 第五单元 选择结构程序设计
任务2 翻牌游戏—do-while语句的运用
工作任务
有这样的一个纸牌小游戏,3个人一起玩,不分花色,一人选择奇数牌, 一人选择偶数牌,一人负责唱分,A为1分……K为13分,直到两人中某人抽到 大王或小王(按0分对待)游戏结束,最终两人积分高者胜出。试用C语言编写 程序模拟此游戏。
任务2 翻牌游戏—do-while语句的运用
3.do-while语句的进一步说明
(1)do-while语句是 先执行一次语句序列, 后判断表达式的值。
(2)如果do-while语 句的循环体部分是由多 个语句组成的,则必须 用左右大括号括起来,
使其形成复合语句。
(3)书写时不要 忘记while圆括号后 面有一个分号“;”。
任务2 翻牌游戏—do-while语句的运用
思路指导
循环输入:由唱分人负责输入分值。 循环条件:不是大小王(0分)。 输出:两人总得分。 判断输赢:比较奇数和与偶数和的大小。
任务2 翻牌游戏—do-while语句的运用
相关知识
1.“直到型”循环do-while语句
do-while语句的语法格式如下。 do
{循环语句组} While(表达式);
工作任务
学院举办了一次小型歌唱比赛,邀请各系组织选手并推选评委。比赛时,一支参 赛队伍演唱完毕,由评委打分,最终成绩是所有评委的平均分。
设评委人数不固定,由输入的评委人数决定,每个评委打分后进行求和,如果打 分次数和评委人数不相等,则继续打分和求和,打分结束后计算平均分,最后输出最 终成绩。
任务1 歌唱比赛计算平均分—while语句的运用
任务2 翻牌游戏—do-while语句的运用
sum1+=i;
}while(i!=0);
C语言选择结构程序设计
}
else
{realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a);
运行程序
printf("has complex roots:\n");
printf("%8.4f+%8.4fi\n",realpart,imagpart);
printf("%8.4f-%8.4fi\n",realpart,imagpart);
输出: A↙ a
运行程序
C程序设计
第五章 选择结构程序设计
5.4 switch语句
一般形式
switch(表达式) { case常量表达式1: 语句1;
case常量表达式2: 语句2;
… case常量表达式n: 语句n; default : 语句n+1;
}
若符合常量表达式 2,会执行其后所
有的语句
改进
C程序设计
第五章 选择结构程序设计
例5.2 输入3个数a,b,c,要求按由小到大的顺序输出
main() {float a,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c); if(a>b) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf(“%5.2f,%5.2f,%5.2f\n”,a,b,c); }
main() {
int a,b; printf("please input A,B: "); scanf(“%d,%d",&a,&b); if(a!=b) if(a>b) printf("A>B\n"); else printf("A<B\n"); else printf("A=B\n"); }
第01章 C语言程序设计预备知识C语言程序设计教程 王敬华 清华大学出版社
C 语 言 程 序 设 计 教 程 王 敬 华
软件与硬件的关系
硬件与软件是相互依存的,软件依赖于硬件的物 硬件与软件是相互依存的, 质条件,而硬件则需在软件支配下才能有效地工作。 质条件,而硬件则需在软件支配下才能有效地工作。 在现代,软件技术变得越来越重要,有了软件, 在现代,软件技术变得越来越重要,有了软件,用 户面对的将不再是物理计算机, 户面对的将不再是物理计算机,而是一台抽象的逻 辑计算机,人们可以不必了解计算机本身。可以采 辑计算机,人们可以不必了解计算机本身。 用更加方便、更加有效地手段使用计算机。 用更加方便、更加有效地手段使用计算机。从这个 意义上说,软件是用户与机器的接口。 意义上说,软件是用户与机器的接口。
(5) 输出设备 (Output Device Device)
输出设备正好与输入设备相反,是用来输出结果 输出设备正好与输入设备相反, 的部件。 的部件。要求输出设备能以人们所能接受的形式输 出信息,如以文字、图形的形式在显示器上输出。 出信息,如以文字、图形的形式在显示器上输出。 除显示器外,常用的输出设备还有音箱、打印机、 除显示器外,常用的输出设备还有音箱、打印机、 绘图仪等。 绘图仪等。
学好C 学好C语言必须掌 握的基础知识!!! 握的基础知识!!!
第 一 章 预 备 知 识
了解计算机硬件系统的组成(因为硬件是软件的物质基 了解计算机硬件系统的组成( 础)。 了解计算机软件系统的组成(因为软件是硬件的灵魂)。 了解计算机软件系统的组成(因为软件是硬件的灵魂)。 更重要的是:了解二进制数在计算机中的表示形式、 更重要的是:了解二进制数在计算机中的表示形式、表 示范围以及二进制数的算术运算和逻辑运算, 示范围以及二进制数的算术运算和逻辑运算,另外就是数据 在计算机中是如何存储的
C语言程序设计(上)清华大学出版社PPT课件
字符串常量的长度 : – 所包含的字符个数
字符串常量的存储方式:
所占存储单元数:串长度+1
例如:
a \0
字符串 结束标记
\n l u c k \0
3. 变量
26
1) 变量的有关概念
在程序运行过程中,其值改变的数据,称
为变量,变量用标识符表示,称为变量名。
变量必须“先定义后使用”
占内存(位) 占内存(字节)
数值范围
有效位数
32
4
3.4E-38~3.4E+38
7
64
8
1.7E-308~1.7E+308
16
80
10
1.2E-493~1.2E+4932
19
35
(2)表示方式。实型常数的表示方式如下。 十进制数:例如6.2,.96,-387.29。 指数形式:例如-2.3E3,-7.5E-3。
007 008 012 010 013 009 011 092 063 039 034 000
40
③字符串常量。字符串常量是由一对双引号 括起来的字符序列。例如:"BOOK",
“$20.5”等都是合法的字符串常量。 ④字符变量。字符变量的取值是字符常量,
即单个字符。字符变量的类型说明符是char。 ⑤符号常量。在C语言中可以用一个标识符
表2.3 字符型数据所占位数
数据类型 类 型 符
有符号字 符型
无符号字 符型
char unsigne
d char
占内 存 ( 位)
8 8
占内存 (字 节)
1 1
数值范围 (ASCII码值)
-128~127(有 符号字符型)
