第一次的实验26个小题,做起来非常头疼,但是再回顾的时候,好像也没有那么痛苦,发现其中比较集中的几个问题还是绊了我很久,因此,这篇没怎么分析题,将其中的一点小坑,总结分析一下。
double or float
float(单精度浮点数)
double(双精度浮点数)
主要讲一下两者的区别:
(1)在内存中占有的字节数不同
float在机内占有的内存是4个字节
double在机内占用的内存是8个字节
(2)有效数字位数不同
float 有效数字8位
double 有效数字16位
(3)数值的取值范围
float :-3.40E+38~3.40E+38
double:-1.79E+308~1.79E+308
(4) 在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快
如果不声明,默认小数为double型,所以如果要用float 的话,必须进行强制
int a=1.3;
printf(“%d\n”,a);
result: 1
输入输出常见的几种坑:
几种输入方式:
(1)明确表示接下来将会有几组数据
for or while
(2)输入数据以某个标识符结尾
while
(3)无结尾
边输入边处理
while(scanf(“%d”,&a)!=EOF)
没有到文件结尾
几种输出方式:
每个输出占一行
每种输出后有一行
(空格类似 之后的空格或者是之间的空格)
字符串的输入输出
(1)字符串数组 + 初始化
char s1=“array”;//字符数组
char s2[6]=“array”//数组长度=字符长度+1
printf(“%s%c”,s1,s2[1])//分别输出字符串和字符
(2)字符串指针+初始化
char *sp=“pointer”;
printf(“%s,%c,%c\n”,sp,sp,(sp+2)); //pointer p i
(3)数组+scanf
char s1[6]; //确定长度的
scanf(“%s\n”,s1);
printf(“%s,%c”,s1,s1[2])
(4) 指针+scanf
#include <stdio.h>
#include<stdlib.h> //该头文件别忘加,否则使用malloc会报错
int main(){
char *sp;
sp=(char *)malloc(sizeof(char));
scanf(“%s\n”,sp);
printf(“%s,%c\n”,sp,*sp);//pointer,p
return 0;
(5) 指针+数组+scanf
char str[60], *sp=str;//将数组的首地址str赋给指针变量sp
scanf(“%s\n”,sp);
printf(“%s,%c,%c\n”,sp,sp,(sp+3));//pointer,p,n
printf(“%s,%c,%c\n”,str,str[0],str[3]);//pointer,p,n
(6)用scanf 和gets(字符数组名或者指针) 进行输入的区别
char str1[60],str2[60];
gets(str1); //gets()函数将接收输入的整个字符串直到遇到换行为止
printf(“%s\n”,str1);
scanf(“%s\n”,str2);//scanf如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理
printf(“%s\n”,str2);
用scanf,printf字符串的几个小点:
(1)使用%s 遇到‘\0’自动输出
“h\0ello”
(2)若输入的字符串含有空格 ,scanf 默认遇到空格结束输入
“hello world”
可以用正则表达式改变scanf 的默认结束标志
比如:遇到换行结束
scanf(“[^\n]”,&a);
第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)。
方法2:自己取出缓冲区里的残留数据。
动态数组的释放
总之动态数组一定要释放,有new 就要有delete