C语言自己认为理解有难度的或者容易犯错的知识
1.getchar 来自CPP 尼玛这个想了好几天才想通![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/sleep.gif)
#include<stdio.h>
#include<limits.h>
#include<float.h>
int main(void)
{
char ch;
ch=getchar();//事实上getchar putchar不是函数,他们只是宏。
while(ch!='\n')//getchar()参数来自【输入设备的下一个字符】。他们被暂时放在缓冲区中
{
if(ch==' ')
putchar(ch);
else
putchar(++ch);
ch=getchar();
}
putchar(ch);
char bh;//上面程序的简化形式
while((bh=getchar())!='\n')
putchar(++bh);
putchar(bh);//打印换行符
return 0;
}
2.数据表示 来自CPP
#include<stdio.h>
#include<limits.h>
#include<float.h>
int main(void)
{
int x=100;
printf("x=%d=%o=%x\n",x,x,x);
printf("x=%d=%#o=%#x\n",x,x,x);
printf("x=%20d=%-20d\n",x,x);
printf("x=%020d=%-20d\n",x,x);
float y=0.00000145486548;
printf("sizeof float=%u\n",sizeof(float));
printf("y=%g=%Lf=%e=%.9f=%.f=%0.f=%6.2f\n",y,y,y,y,y,y);//%g %G 说明符根据数值自动选择%e 或者 %f
printf("%%\n");//打印一个百分号
char ch,dh;
scanf("%c",&ch);
printf("%c\n",ch);
scanf(" %c",&dh);
printf("%c\n",dh);
unsigned width,pre;
int num=2568415;
scanf("%u",&width);
printf("the num is %*d\n",width,num);//printf中%*d用程序指定字段宽度
int m;
scanf("%*d %*d %d",&m);//跳过2个整数注意最后为%d,其余为%*d,把第三个结果赋给m.
printf("the last integer is %d\n",m);
int v;
scanf("%*s %d",&v);//跳过字符串注意最后为%d,其余为%*s,把第2个结果赋给v
printf("the number is %d\n",v);
return 0;
}
/*
x=100=144=64
x=100=0144=0x64
x= 100=100
x=00000000000000000100=100
sizeof float=4
y=1.45487e-006=0.000001=1.454865e-006=0.000001455=0=0= 0.00
%
258
2
5
the num is 2568415
3
9
23
the last integer is 23
qwertyuiop 25
the number is 25
Press any key to continue
*/
3.循环基本控制。。自己苦想出来的 来自cPP习题
#include<stdio.h>
int main(void)
{
char ch;
puts("enter a character");
while(scanf("%c",&ch)==1)
{
for(char tc='A';tc<=ch;tc++)
{
for(char i=tc;i<ch;i++)
{
printf(" ");
}
for(char j='A';j<=tc;j++)
{
printf("%c",j);
}
for(char k=tc-1;k>='A';k--)
printf("%c",k);
printf("\n");
}
}
return 0;
}
/*
enter a character
Z
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
//居然乱了
*/
4.注意变量类型的一致性。容易忽略 来自C与指针
#include<stdio.h>
#include<string.h>
int main(void)
{
unsigned num1=9,num2=10;
unsigned cha;
cha=num1-num2;
printf("无符号整数运算%d-%d=%d\n",num1,num2,cha);
char str1[]="dfdfgdd";
char str2[]="fdfdjfsijfdi";
if(strlen(str1)-strlen(str2)>=0)//此表达式永远为真
printf("%s\n",str1); //strlen函数返回值为无符号整数型,永远不会小于03
return 0;
}
5.信息表示与处理 来自CASPP
#include<stdio.h>
typedef char * byte_pointer;
void show_bytes(byte_pointer start,int len)
{
for(int i=0;i<len;i++)
printf("%.2x\n",start[i]);
printf("\n");
}
void show_int(int x)
{
show_bytes( (byte_pointer)&x,sizeof(int) );
}
void show_float(float x)
{
show_bytes( (byte_pointer)&x,sizeof(float) );
}
int main(void)
{
int value=12345;
show_int(value);
show_float(12345.0);
int valu=0x87654321;
show_bytes((byte_pointer)&valu,1);
show_bytes((byte_pointer)&valu,2);
show_bytes((byte_pointer)&valu,3);
int x=-7;// -1;
unsigned int u=5;//2147483648;
printf("%u \t %d\n",x,x);
printf("%u\t%d\n",u,u);
printf("%u",x+u);
return 0;
}
6.strcat的用法 来自CPP。。看书不认真导致之前理解错误
#include<stdio.h>
#include<string.h>
#define SIZE 100
int main(void)
{
char des[SIZE];
char add[]="hello boys and girls";
char *ptr;
puts("what are you going to say");
gets(des);
ptr=strcat(des,add);//strcat只负责把第二个字符串加到第一个字符串【结尾】并返回第一个参数的值,即第一个参数添加第二个参数后的字符串的第一个字符的地址
printf("%p %c\n",ptr,*ptr);
puts(des);
puts(add);
char name[SIZE];
puts("what is your name");
gets(name);
printf("nice name %s\n",name);
return 0;
}
/*
what are you going to say
baby
0018FEE4 b
babyhello boys and girls
hello boys and girls
what is your name
wang qing song\n
nice name wang qing song\n
Press any key to continue
*/
7.再一次理解函数调用本质 来自C与指针
#include<stdio.h>
#define N_VALUES 5
void jiaohuan(int *a,int *b);
int main(void)
{
int value[N_VALUES];
int *ptr_value;
for(ptr_value=value;ptr_value<&value[N_VALUES];)//这样可读性强***
*ptr_value++=0;/*
**C保证最后一个数组元素之后的内存位置有效,但是不能对他进行间接访问即不能得出:value[N_VALUES]
**C不保证对第一个元素之前那个内存位置有效
即下面这个程序循环次数未知
for(ptr_value=&value[N_VALUES-1];ptr_value>=&value[0];)//这样可读性
*ptr_value--=0;
//ptr_value>=&value[0]这个值是未定义的,前面那个指针已经越界,并且为无效值
*/
int num1=1;
int num2=2;
printf("%p\t%p\n",&num1,&num2);
jiaohuan(&num1,&num2);
/*
**函数都是按值传递的,传递什么,什么就不改变。但是对其进行的间接访问则会生效
*/
printf("%d\t%d\n",num1,num2);//因此函数调用过后num1,num2值改变,但是其地址不改变
printf("%p\t%p\n",&num1,&num2);
return 0;
}
void jiaohuan(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
8.少见输出。。。来自C与指针
#include<stdio.h>
int main(void)
{
puts("??(");//显示[
puts("\???");//可以解决三个问号不显示
printf("%c",'abc');//多字节字符常量,不同环境结果不一样,不具有移植性
return 0;
}
9.字符串相关。。来自CPP
#include<stdio.h>
#define MAX 81
int main(void)
{
char name[MAX];
char full[MAX*2];
puts("what is your name");
gets(name);//gets()函数读取换行符之前的(除了换行符)所有字符,并在其后加空字符\0.读取换行符并将其丢弃
fputs(name,stdout);//第二个参数说明要写的文件,不添加换行符
puts(name);//自动添加换行符
puts("what is your name again");
fgets(name,MAX,stdin);//最大读入字符数,为n,最多读取n-1个字符或者读完一个换行符。不丢弃换行符。第三个参数说明读取哪一个文件
puts(name);
sprintf(full,"%swelcome to here",name);
puts(full);
char sign='asdg';//只低的一字节,字符常量被存储在一个int中
printf("%c\n",sign);
return 0;
}
/*
what is your name
王青松】
王青松】王青松】
what is your name again
未来路
未来路
未来路
welcome to here
g
Press any key to continue
*/
C语言自己认为理解有难度的或者容易犯错的知识相关推荐
- Go:go语言的认识理解、安装应用、语法使用之详细攻略
Go:go语言的认识理解.安装应用.语法使用之详细攻略 目录 go语言的认识理解 go语言的安装应用 硬件架构 操作系统 开发工具 go语言的语法使用 go语言的认识理解 Go语言是谷歌2009发布的 ...
- Scratch3.0——助力新进程序员理解程序(难度案例一、节奏大师)
Scratch3.0--助力新进程序员理解程序(难度案例一.节奏大师) 目录 Scratch3.0--助力新进程序员理解程序(难度案例一.节奏大师) 前言 环境 下载地址 安装说明 1.菜单栏 2.功 ...
- Scratch3.0——助力新进程序员理解程序(难度案例三、五子棋双人对战-电脑需要AI写不出来)
Scratch3.0--助力新进程序员理解程序(难度案例三.五子棋双人对战-电脑需要AI写不出来) 前言 一般来说,针对6-18岁的少年儿童开展的编程教育,现在,最常见的形式是线上和线下模式相结合的课 ...
- c语言求偶数的积,《动物的多*语言》阅读理解及*
第1篇:<动物的多*语言>阅读理解及* [原文] 动物的多*语言 壬艳坤 1动物也有自已的语言.鸡鸣*吠,虎a猿b,莺c燕d,蝉e虫f--都是动物的语言.这种语言类繁多.千差万别.据说鸟类 ...
- c语言基础深入理解二
指针基础 变量回顾 既然程序中的变量只是一段存储空间的别名 , 那么是不 是必须通过这个别名才能使用这段存储空间 ? 指针本质 ? 指针在本质上也是一个变量 ? 指针需要占用一定的内存空间 ? ...
- 和丨c语言运算符号理解(单片机学习)
&和丨c语言运算符号理解(单片机学习) a&0x80 a丨0x80 丨是按位或运算 & 是按位与运算 ox表示十六进制数 关于按位与运算,先要将其他的进制数转化为二进制数, 然 ...
- 【C语言】深度理解-取整
深度理解 取整的概念 关于取整的介绍 向零取整 trunc()函数----向0取整 向负无穷大取整 floor()函数 向正无穷大取整 ceil()函数 四舍五入取整 round()函数 总结 关于取 ...
- 西北工业大学JAVA语言试题_2020年西北工业大学英语语言文学考研真题试卷及试题答案,英语综合知识测试考研试题下载...
更多考研真题样张如下, 说明:本站提供的西北工业大学英语语言文学考研真题来源于西北工业大学研究生院,除标注有"回忆版"字样的试题外,其余均为原版扫描,权威可靠:回忆版试题由当年参加 ...
- vb语言程序设计_如果编程语言难度决定头发浓度,学这语言的可能要光头了
对于程序员来说,头发真的比什么都重要,甚至很多程序员,大量的人民币都花在了后续植发上.甚至网上还流行这么一句话,你发际线越高,编程能力越高,那对于程序员来说,那么多语言,到底哪种最难学? 下面小童就盘 ...
最新文章
- ubuntu sublime字体设置
- KISSY 库 demo
- weblogic.rjvm.PeerGoneException
- php url地址 怎么写,php url地址重写
- idea install 失败_idea maven install 卡住,无报错排查。
- 视觉定位VBL 视觉里程计VO 视觉SLAM 区别与联系
- 【Android】怎样烧写qcn文件
- PFQ: a Linux kernel module for packet capturing on multi-core architectures
- GD32Pack包下载地址
- 2022 阿里 java 面经
- 一维优化 方法c语言,第三章一维优化方法
- 仅1cm厚!华硕发布全球最薄13.3英寸笔记本
- 吴晓波:拼多多的新与旧
- 智能音箱大战全面开火,那么问题来了:如何成为一名全栈语音识别工程师?
- Pathview包:整合表达谱数据可视化KEGG通路
- 水浸变送器水浸传感器的原理是什么?
- 015污点修复画笔工具,修复画笔工具,修补工具,内容感知移动工具和红眼工具...
- Vue、elmentUI国际化 vue-i18n项目实行简繁体切换
- [关注大学生]大学毕业生择业:是当鸡头还是凤尾?
- 【AI科幻】地球陨落·准备
热门文章
- 用python画星空图教程水粉_怎样用水粉颜料画星空
- 每节课都是一个项目 手把手用STM32打造联网气象站-4-STM32基础三件套-TIM定时器和SYSTICK初始化
- 人口普查也是一个超大的“用户画像”。
- 公关人员活用Koomail给客户群发邮件
- level升级打怪是什么意思_蛮荒神途——资深玩家谈论为什么不喜欢组队原因
- python系统命令切换目录_windows cmd 指令 怎么切换目录
- MVC 音乐商店 第 7 部分: 会员资格和授权
- css ime-mode控制输入全角和半角
- 机器学习学习笔记 --- 标称型数据和数值型数据
- 数仓经典案例-各个视频平均完播率、平均播放进度