提升码力的第一次实验

第一次的实验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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值