类型转换,输入输出,运算符与控制结构

自动类型转换:低字节数据类型转换高字节

char--->int/short/long/long long

short--->int/long/long long

float--->double

强制类型转换

强制类型转换:高字节数据转换低字节

long long--->char/int/short/long

inn--->short/char

double--->float/int/char/short

隐式转换:

float a=3.14;

int b=a;------>b=3

显式转换:

格式:(数据类型)表达式

float a=3.14;

int b=(int)a;------>b=3

类型转换的本质就是大小端存储

思考2:假设int a=0x12345678, char b=(char)a,问如何判断大小端存储

如果b=0x78,则小端存储

如果b=0x12,则大端存储

有无符号数之间的转换

int/long有无符号数的转换(>=4字节)

规则:把有符号数转换为无符号数进行运算

short/char有无符号数的转换(<4字节)

规则:把有无符号数统一转换为有符号数int(将小于4字节的转换为4字节int)

*int 字节补全:首位是1向前补1,首位是0向前补0

思考题

格式:表达式1 运算符 表达式2

算数运算

+

如果运算符两侧都是整数则最终结果一定是整数

如果运算符两侧有一个小数则最终结果一定是小数

-

如果运算符两侧都是整数则最终结果一定是整数

如果运算符两侧有一个小数则最终结果一定是小数

*

如果运算符两侧都是整数则最终结果一定是整数

如果运算符两侧有一个小数则最终结果一定是小数

/

如果运算符两侧都是整数则最终结果一定是整数(5/2=2)

如果运算符两侧有一个小数则最终结果一定是小数(5.0/2=2.5)

%(取余)

运算符两侧只能是整数,否则报错

++(只能是对变量用)

a++

先运算再自加

++a

先自加再运算

--(只能是对变量用)

a--

先运算再自减

--a

先自减再运算

关系运算

>

条件成立(真)为1,假为0

>=

条件成立(真)为1,假为0

<

条件成立(真)为1,假为0

<=

条件成立(真)为1,假为0

==

条件成立(真)为1,假为0

=为赋值==为等于

!=

条件成立(真)为1,假为0

逻辑运算

!>&&>||

真:非0 假:0

&&逻辑与(且)

全真为真,遇假则假

1&&1=1

1&&0=0

0&&1=0

0&&0=0

表达式1&&表达式2

若表达式1为假则表达式2不执行(短路效应)

||逻辑或(或者)

遇真则真,全假为假

1||1=1

1||0=1 0||1=1

0||0=0

表达式1||表达式2

若表达式1为真则表达式2不执行(短路效应)

!逻辑非

非假即真,非真即假

!1=0

!0=1

判断变量char a是否为大写:a>='A'&&a<='Z'

判断变量char a是否为小写:a>='a'&&a<='z'

判断变量char a是否为数字:a>='0'&&a<='9'

判断变量是否为特殊字符:!(a>='A'&&a<='Z'||a>='a'&&a<='z'||a>='0'&&a<='9')

条件运算/三目运算

格式:表达式1?表达式2:表达式3

表达式1:条件

表达式2:如果表达式1条件成立,则执行表达式2

表达式3:如果表达式1条件不成立,则执行表达式3

练习:

输入一个整数,判断是否为偶数

输入一个年份判断是否为闰年

输入一个字符,判断受否为大写,如果是输出小写,如果不是原样输出

赋值运算

int a=10

a+1 a的值不变

a+=1 a的值改变

a++ a的值改变

=

基本赋值

a=10

把10赋值给a

=号左边只能是变量,右边可以是变量,常量表达式

+=

复合赋值

a+=2+3--->a=a+(2+3)

-=

复合赋值

a-=2+3--->a=a-(2+3)

*=

复合赋值

a*=2+3--->a=a*(2+3)

逗号运算

逗号运算:所有运算符中优先级最低的运算

格式:(表达式1,表达式2,........,表达式n)

*最后一个表达式是最终结果

每个表达式均运行

位运算

位运算是对整数的二进制操作

&(按位与)

1&1=1 1&0=0

0&1=0 0&0=0

有一个0则结果为0

|(按位或)

1|1=1 1|0=1

0|1=1 0|0=0

有一个1则结果为1

^(异或)

1^1=0 1^0=1

0^1=1 0^0=0

相同为0,不同为1

~(取反)

~0=1

~1=0

0取反为1,1取反为0

>>(右移)

右移一位--除以2

8>>2=2

右边多余位舍去,左边最高位是0补0,左边最高位是1补1

<<(左移)

左移一位--乘以2

8<<2=32

左边多余位舍去,右边补0

运算符的优先级

括号>单目运算>算数运算>左/右移>关系运算>按位与>异或>逻辑>条件>赋值>逗号

单分支选择结构

单分支选择结构:只有一个选择条件

格式:

if(表达式)

{

c语句;

}

*if :后面要加{}

*表达式:可以是任意表达式,但是一般是算数,关系,逻辑组成

*{}:可有可无,当c语句只有一句话时可以省略不写

*执行流程:如果表达式为真则执行c语句,否则跳过即可

双分支选择结构

双分支选择结构:只有两个选择条件

格式:

if (表达式)

{

c语句1;

}

else

{

c语句2;

}

*if :后面要加{}

*表达式:可以是任意表达式,但是一般是算数,关系,逻辑组成

*{}:可有可无,当c语句只有一句话时可以省略不写

*执行流程:如果表达式为真则执行c语句1,否则执行c语句2

练习:输入一个字符,如果是数字则输出立方,否则输出对应的ASCII码值

输入一个数字,判断其是否为水仙花数

水仙花数:

  1. 是三位数
  2. 各个位数字的立方和等于其本身

pow函数

功能:求x的y次方

格式:pow(x,y)

*需要添加头文件:#include <math.h>

*编译时需要链接到动态库:

gcc ***.c -lm

*pow默认是double类型

多分支选择结构

多分支选择结构:超过两个选择条件

格式:

if (表达式1)

{

c语句1;

}

else if(表达式2)

{

c语句2;

}

........

else if(表达式n)

{

c语句n;

}

*if :后面要加{}

*表达式:可以是任意表达式,但是一般是算数,关系,逻辑组成

*{}:可有可无,当c语句只有一句话时可以省略不写

*执行流程:如果表达式1为真则执行c语句1,结束;若表达式1为假,则判断表达式2,如果表达式2为真,则执行c语句2结束;若表达式2为假,重复以上步骤。所表达式n全为假则执行else

练习:输入一个浮点数的成绩,实现等级判断

练习:输入一个表达式,实现计算器+,-,*,/,%

1+2则输出3

5/2则输出2.5

练习:

假设int a=0x12345678,char b=(char)a,请写代码判断大端或小端存储?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{   
    int a=0x12345678;
    char b=(char)a;
    if (b==0x78)
    {
        printf("是小端输出\n");
    }
    else
    {
        printf("是大端输出\n");
    }
    return 0;
}

输入用户名和密码,如果用户名和密码正确则登录成功,否则失败,默认用户名为A,密码是1234

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    int password;
    char user;
    printf("输入用户名\n");
    scanf("%c",&user);
    printf("输入密码\n");
    scanf("%d",&password);
    if (password==1234&&user=='A')
    {
        printf("登陆成功\n");
    }
    else
    {
        printf("用户名或密码错误,登录失败\n");
    }
    return 0;
} 

输入三角形的三条边,

如果不满足任意两边之和大于第三边,任意两边只差小于第三边,则输出不是三角形

如果满足条件,则判断是什么三角形

如果三条边相等,则等边三角形

如果任意两条相等,则等腰三角形

如果满足勾股定理,则直角三角形

#include <stdio.h>                                                                                        
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    int l,w,h;
    printf("输入长,宽,高\n");
    scanf("%d%d%d",&l,&w,&h);
    if (l+w<h||l+h<w||w+h<l)
    {
        printf("不是三角形\n");
    }
    else if (l==w==h)
    {
        printf("是等边三角形\n");
    }
    else if (l==w||l==h||w==h)
    {
        printf("是等腰三角形\n");
    }
    else if (pow(l,2)+pow(w,2)==pow(h,2)||pow(l,2)+pow(h,2)==pow(w,2)||pow(h,2)+pow(w,2)==pow(l,2))
    {
        printf("是直角三角形\n");
    }

    return 0;
} 

下面代码执行后,a\b\c的结果是?

int a=5,b=7,c

c=a+++b

nclude <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{   
    int a=5,b=7,c;
    c=a+++b;
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    return 0;
}  

代码如下

void main()

{

int c=9,d=0;

c=c++%5;

d=c;

printf("d=%d\n",d);

}

d=4

给定一个整数,判断它是否被3、5、7整除,并输出一下信息 (笔试)

1.能同时被3,5,7整除(直接输出3 5 7,每个数字之间一个空格)

2.只能内其中两个整数整除(输出两个数,小的在前,大的在后,例如3 5 或者 3 7 或者5 7,中间使用空格隔开)

3. 只能被其中一个整数整除(输出这个除数)

4.不能被任何数整除,输出小写字母n

案例如下:

输入:105

输出:3 5 7

#include <stdio.h>                                
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    int a;
    printf("输入一个整数\n");
    scanf("%d",&a);
    if (a%3==0&&a%5==0&&a%7==0)
    {
        printf("3 5 7\n");
    }
    else if(a%3==0&&a%5==0&&a%7!=0)
    {
        printf("3 5\n");
    }
    else if(a%3==0&&a%7==0&&a%5!=0)
    {
        printf("3 7\n");
    }
    else if(a%7==0&&a%5==0&&a%3!=0)
    {
        printf("5 7\n");
    }
    else if(a%3==0&&a%5!=0&&a%7!=0)
    {
        printf("3\n");
    }
    else if(a%3!=0&&a%5==0&&a%7!=0)
    {
        printf("5\n");
    }
    else if(a%3!=0&&a%5!=0&&a%7==0)
    {
        printf("7\n");
    }
    else
    {
        printf("n\n");
    }
    return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{ 
    int n,k=0;
    printf("输入一个整数\n");
    scanf("%d",&n);
 
    if(n%3==0){
       printf("3 ");
       k++;
    }
    if(n%5==0){
       printf("5 ");
       k++;
    }
    if(n%7==0){
       printf("7 ");
       k++;
    }
    if(k==0)
     printf("n");   
    return 0;
} 

b=10   c=12 d=120

c=-75    a=181   d= 6   e= 5

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值