苏小红C语言程序设计第四、五章知识总结

编程入门 行业动态 更新时间:2024-10-09 10:21:29

苏小红C<a href=https://www.elefans.com/category/jswz/34/1769768.html style=语言程序设计第四、五章知识总结"/>

苏小红C语言程序设计第四、五章知识总结

第四章、键盘的输入和屏幕的输出

4.1单个字符的输入输出

4.1.1字符常量

  • 'A'=65,'a'=97;
  • 转义字符:'\''表示一个单引号,'\\'表示一个反斜杠,'\ddd'1到3位八进制,'\xhh'1到2位16进制。

4.1.2字符的输入/输出

#include<stdio.h>
int main()
{char ch;//黑窗口输入字符,函数返回值就是该字符,回车符结束输入ch=getchar();ch=ch+32;putchar(ch);putchar('\n');
}

输出:

B

b

4.2数据的格式化屏幕输出

#include<stdio.h>
int mian()
{const double pi=3.14159;double r,circle,area;scanf("%lf",&r);circle=2*pi*r;area=pi*r*r;printf("%f,%f\n",circle,area);printf("%7.2f,%7.2f\n",circle,area);/*域宽为7位,正数向右对齐,小数位为2位,小数点也占一个字符位.*/
}

输出:

33.300854,88.247263

    33.30,    88.25

4.3数据的格式化键盘输入

在用函数scanf()输入数值型数据时,以下几种情况认为输入结束:

  • 遇到空格符、回车符、制表符
  • 达到输入域宽
  • 遇到非法字符输入

scanf("%d %d",&a,&b); 12 34

scanf("%d,%d",&a,&b); 12,34

scanf("a=%d,b=%d",&a,&b); a=12,b=34

scanf("%2d%2d",&a,&b); 1234

scanf("%d*c%d",&a,&b);//以任意字符作为分隔符:12 34,12-34,12 34

scanf("%2d%*2d%2d",&a,&b)

输入:123456

输出: a=12,b=56

4.4扩充内容

从键盘输入一个整数加法算式:

#include<stdio.h>
int main()
{int a,b;char c;scanf("%d%c%d",&a,&c,&b);printf("%d%c%d=%d\n",a,c,b,a+b);
}

输出:
12 + 3                //数字与加号之间有空格,所以空格赋值给了c
12 3129        //在使用%c读入字符时,空格、转义字符都会当作有效字符读入

解决办法就是输入时不需要空格。

scanf()函数的%c格式符存在问题的解决方法:

#include<stdio.h>
int main()
{int a;char b;float c;scanf("%d",&a);printf("%d\n",a);getchar();//将存入缓冲区的回车符(转义字符)读入,避免在后面作为有效字符读入scanf("%c",&b);//scanf(" &c",&b);在%c前面加一个空格,将存入缓冲区的回车符读入printf("%c\n",b);scanf("%f",&c);printf("%f\n",c);
}

第五章、选择控制结构

5.1用于分支控制的条件语句

//单分支,求两个整数的最大值
if(a>b)max=a;
if(a<=b)max=b;
//双分支
if(a>b)max=a;
elsemax=b;

条件运算符和条件表达式
max=a>b?a:b;

多分支求二元一次方程的根:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define ESP 1e-6
/*
浮点数并非真正意义上的实数,只是某种范围的近似,因此也只能用某种近似的方法将实数与0进行比较。
*/
int main()
{float a,b,c,disc,p,q;scanf("%f,%f,%f",&a,&b,&c);if(fabs(a)<=1e-6){exit(0);//终止程序的执行,返回操作系统。}disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(fabs(disc))/(2*a);//实数和0比较,只能用接近0的实数来比较,不能用整数0if(fabs(disc)<=ESP){printf("x1=x2=%.2f\n",p);}else{if(disc>ESP){printf("x1=%.2f,x2=%.2f",p+q,p-q);}else{printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi\n".p,q,p,q);}}
}

switch分支结构进行加减乘除:

#include<stdio.h>
int main()
{int date1,date2;char op;scanf("%d%c%d",&date1,&date2,&op);switch(op){case '+':printf("%d\n",date1+date2);break;case '*':printf("%d\n",date1*date2);break;case '-':printf("%d\n".date1-date2);break;case '/:if(date2==0){printf("error!\n");}else{printf("%d\n",date1/date2);}break;default:printf("error!\n");}
}

&&和||短路特性
a>1&&b++>2,如果a>1为假,就不执行后面的部分了。

5.2扩充内容

白盒测试:对每条语句,每个分支进行测试,用于测试的早期。
黑盒测试:对每个功能进行测试,不一定覆盖每条语句,用于测试的晚期。

三角形的判断:

#include<stdio.h>
#include<math.h>
#define ESP 1e-1
int main()
{float a,b,c;int flag=1;scanf("%f%f%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){if(a-b<=ESP&&a-c<=ESP&&b-c<=ESP){printf("等边");//一定先判断等边,然后再判读等腰。flag=0;}else{if(a-b<=ESP||b-c<=ESP||a-c<=ESP){printf("等腰");flag=0;}}if(fabs((a*a-b*b-c*c)<=ESP)||fabs((a*a-b*b-c*c)<=ESP)||fabs((a*a-b*b-c*c)<=ESP)){printf("直角");flag=0;}if(flag==1){printf("一般");}printf("三角形!\n");}else{printf("不是三角形!\n");}
}

将百分制成绩改成5分制成绩:

#include<stdio.h>
int main()
{int score,mark;scanf("%d",&score);mark=score>100||score<0?-1:score/10;//注意临界值的判断switch(mark){case 10:case 9:printf("%d->A\n",score);break;case 8:printf("%d->B\n",score);break;case 7:printf("%d->C\n",score);break;case 6:printf("%d->D\n",score);break;case 5:case 4:case 3:case 2:case 1:case 0:printf("%d->E\n",score);break;default:printf("error!");}
}

计算输出两个整数的最大值:

#include<stdio.h>
int main()
{int a,b,max,ret;# 返回的是输入参数赋值成功的个数ret=scanf("%d%d",&a,&b);if(ret!=2){printf("error!");# 清空输入缓冲区fflush(stdin);}else{max=a>b?a:b;printf("max=%d\n",&max);}
}

5.3位运算符

  • 按位与:&,只有11才为1 。
  • 按位或:|,只有00才为0 。
  • 按位异或:^,只有01才为1 。
  • 按位取反:~,0变为1 。
  • 左移位:x<<n,左移n位。00001111左移3位->01111000 。
  • 右移位:x>>n,右移n位。 有符号位,左边补上符号位的数,无符号位左边补0,00001111右移3位->0000001,11110001右移三位->11111110。

5.4习题

任意输入三条边,看是否构成三角形,并计算它的面积:

#include<stdio.h>
#include<math.h>
int main()
{float a,b,c,s,area;s=(a+b+c)/2;if(a+b>c&&a+c>b&&b+c>a){area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%f\n",area);}else{printf("不能构成三角形\n");}
}

输入某年某月,确定该月的天数:

#include<stdio.h>
#include<stdlib>
int main()
{int year,month,flag=0;int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d%d",&year,&month);if(month<1&&month>12){printf("输入错误\n");exit(0);}else{if(year%400==0||year%4==0&&year%100!=0){flag=1;//为闰年}if(flag&&month==2){printf("days=29\n");}else{printf("days=%d\n",days[month-1]);}}
}

更多推荐

苏小红C语言程序设计第四、五章知识总结

本文发布于:2024-02-07 01:58:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752103.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言程序设计   知识   苏小红

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!