学习第二天,昨天作业
1.编程题:输入三个数,求最大值,最小值和三个值的和。
#include <stdio.h>
int main(){
int a = 0;
int b = 0;
int c = 0;
int max = 0;
int min = 0;
int sum = 0;
int nums = scanf("%d%d%d",&a,&b,&c);
//调用时,我们传递的实际参数,就叫实参。而声明时的参数,叫形参。
//调用时,我们是按数目一样,类型一样,顺序一样的的原则,实际参数向形参赋值,是单向的(实参传递给形参,形参的改变不会影响到实参。
//函数包括两部分,函数头和函数体,函数头包括三部分:函数返回值类型,函数名,形参列表
//(1)函数返回值类型就是函数运算完成后返回的数值的类型,调用者就可以根据函数返回值类型定义相应类型的变量来接收函数返回值,进而进行下一步的处理。
//(2)函数名就是为了调用
//(3)形参就是调用时分配空间,接收实参的值的。
if(nums != 3){
printf("输入错误");
return 1;
}
max = a;
if(b > max){
max = b;
}
//到这一步,max一定是a和b中的最大值。
if(max < c){
max = c;
}
//如果max(a,b中的最大值)大于等于c,不管了,截止到这一样代码,max已经是三个数的最大值。
min = a;
if(b < min){
min = b;
}
//到这一步,min一定是a和b中的最小值。
if(c < min){
min = c;
}
sum = a + b + c; //a,b,c前面没有被重新赋值,读取后的值不会被改变,放心大胆的用。
printf("max=%d,min=%d,sum=%d\n",max,min,sum);
return 0;
}
2.2的次方常见运算:
2^5=32
2^6=64
2^7=128
2^8=256
2^10=1024
2^15=32768
2^16=65536
2^11=2048
3.进制之间的转换
- 二进制转八进制:三位合并一位
- 二进制转到16进制:四位合并一位
- 十进制转二进制:短除法
- 十进制转8进制:短除法
- 十进制转16进制:短除法
from To |
二进制 |
八进制 |
十进制 |
16进制 |
二进制 |
--------- |
三位合并一位 |
各位求和 |
四位合并一位 |
八进制 |
1变三 |
------------ |
各位求和 |
8-2-16 |
十进制 |
短除法 |
短除法 |
--------------- |
短除法 |
16进制 |
1变4 |
16-2-8 |
各位求和 |
------------- |
4.进制转换练习
%o 8进制
%d 10进制
%x 16进制
#include <stdio.h>
int main(){
int age = 50;
int age1 = 0x32;
int age2 = 062;
printf("%d %d %d\n",age,age1,age2);//decima;按有符号十进制输出的意思。
printf("%o %o %o\n",age,age1,age2);//octal;按无符号八进制输出的意思。
printf("%x %x %X\n",age,age1,age2);//hexadecimal;按无符号十六进制输出的意思。
printf("%#o %#o %#o\n",age,age1,age2);//octal;按无符号八进制输出的意思。加个#号,表示输出前缀,八进制前缀为0
printf("%#x %#x %#X\n",age,age1,age2);//hexadecimal;按无符号十六进制输出的意思。加个#号,表示输出前缀,16进制前缀为0x,大写的X格式符,输出的十六进制数也是大写的。
return 0;
}
5.整型的字节,范围
Int 基本整型 4【-21亿,21亿】
Short int 短 2 范围【 -32768,32767】
Long int 长 4【-21亿,21亿】
Unshigned Int 无符号基本类型4【0,42亿】
Unshigned Short int 无符号短类型2【0,65535】
Unshigned Long int无符号长类型4[0,42亿]
Char 1【-128,127】
Unshigned Char 1【0,255】
6.如何理解有无符号?
- 数据类型角度:无符号类型所有二进制合全部为数值位,整形有符号第一位为符号型,其余为数值位,0正数1负数
- 按有无符号输出
7.原码、反码、补码
负数在内存中,按补码存放
补码=原码-取反+1
反码=首位不变,其余取反
#include <stdio.h>
int main(){
short int a = -10;
printf("%#hx",a);
return 0;
}
#include <stdio.h>
int main(){
short int a = 32767;
a = a+1;
printf("%hd",a);//%d,如果二进制第一位为1,则读出负值。
return 0;
}
#include <stdio.h>
int main(){
unsigned short int a = 0xffff;
printf("%hd\n",a);//-1
printf("%hu\n",a);//65535
printf("%ho\n",a);//177777
printf("%hx\n",a);//ffff
return 0;
}
%hd 以十进制 短整型
%d 以十进制 基本整型
%u 以十进制 无符号整型
%ld 以十进制 长整型
%lo 以八进制 长整型
%lh 以十六进制 长整型
实型常量又称实数, 指带有小数部分的数。C语言中的实数是以十进制表示的, 有两种表示形式:
十进制小数形式: 由数字、数符和小数点组成。
例: 0.123, .123, 123. ,0.0 , -2.5,…
指数形式: 又称科学记数法。用E(或e)表示以10为底的指数。
0.91×10-3 → 0.91E-03
字母E/e前必须有数字, 而E后面的阶码必须为整数。
写一个正确的科学计数法表示的浮点数,满足两条。
1,E/e 前必须有数字。
2,E/e后必须有整形数。
int main(){
float a = 123.456f;//用小数形式来表示。
float a1 = 1.23456E+02f;
printf("%f %f\n",a,a1);//%f,默认输出六位小数。
printf("%.2f %.2f\n",a,a1);//%f,默认输出六位小数。.2f,表示小数点后保留两位,四舍五入。
printf("%e %e\n",a,a1);//%e,默认输出六位小数。
printf("%.2e %.2e\n",a,a1);//%f,默认输出六位小数。.2f,表示小数点后保留两位,四舍五入。
printf("%.2E %.2E\n",a,a1);//%f,默认输出六位小数。.2f,表示小数点后保留两位,四舍五入。
return 0;
}
‘\o’=o:字符串末尾
‘\n’=10:换行
‘\a’=7
‘\b’=8
‘\*’=9
#include <stdio.h>
int main(){
printf("techear ge said:\"more work hard,more money\"");
}
#include <stdio.h>
int main(){
char ch = '\'';
printf("%c",ch); //%c输出字符。c:char
}
以“\”开头的字符序列, 有特定的含义。 转为字符本身,失去系统赋予它的特殊含义
在单引号或者双引号一起来的字符串列中,\000(最多3个8进制数)
关于转义字符 ,需要理解两点:
1,将\后面的字符,转义成字符本身,让他失去系统赋予它的特殊含义。
2, 在单引号或者双引号引起来的字符序列中,\OOO(最多三个八进制数),表示八进制数作为ASCII
码值,对应的字符。\xhh(最多两个16进制数)表示16进制数作为ascii码值,对应的字符。
ASCLL表
数字0~9对应的ASCII码(十进制)为“48”~“57”
大写字母A~Z对应的ASCII码(十进制)为“65”~“90”
小写字母a~z对应的百ASCII码(十进制)为"97"~“122”
#include <stdio.h>
#include <string.h>
int main(){
printf("%d\n",sizeof("china"));//测试空间大小,单位字节。
printf("%d\n",strlen("china"));//strlen是函数,测试的是字符个数。
}
#include <stdio.h>
#include <string.h>
int main(){
char * p = "china";//字符串赋值给char * 型的变量,实际上是字符串第一个字符的地址
//赋值给指针变量了。
//printf("%d\n",sizeof("china"));//测试空间大小,单位字节。
//printf("%d\n",strlen("china"));//strlen是函数,测试的是字符个数。
printf("china\n");
printf(p);
}
#include <stdio.h>
#include <string.h>
int main(){
char * p = "china";//字符串赋值给char * 型的变量,实际上是字符串第一个字符的地址
//赋值给指针变量了。
//printf("%d\n",sizeof("china"));//测试空间大小,单位字节。
//printf("%d\n",strlen("china"));//strlen是函数,测试的是字符个数。
printf("china\n");
printf(p);
printf("\n");
printf("%d\n",sizeof(p));//8,所有的指针变量,在64位系统下,都是8个字节,在32位系统下,都是四个字节。
printf("%d\n",strlen(p));//5,
/*strlen的函数原型:’
int strlen(char * str);
函数作用:从str代表的地址,截止到第一个\0,中间字符的个数。
str:函数调用时,分配空间,接收实际参数的值。保存的是字符串某个字符的地址。
返回值啥意义呢?从str代表的地址,截止到第一个\0中间字符的个数将要被返回。(不含\0)。
*/
}
#include <stdio.h>
#include <string.h>
int main(){
printf("%d\n",sizeof("w\x53\\\np\103q"));//8
printf("%d\n",strlen("w\x53\\\np\103q"));//7
}