IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 苏小红C语言程序设计第四、五章知识总结 -> 正文阅读

[C++知识库]苏小红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;
else
    max=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的实数来比较,不能用整数0
    if(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++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:21:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:39:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码