c语言比较大小问题QAQ比较三个数的大小!!按照书上写的为什么会这样QAQ

C语言入门(初级)_无知的小七何时你能长大_新浪博客
C语言入门(初级)
C语言是什么
顾名思义,C语言就是一种语言,是人与计算机交流用的,当然其他编程语言都是这个功能。
虽然计算机能做很多事情,看起来很厉害,其实都是按照程序所表达的意思在运行,也只能按照程序的意思运行。(人工智能啥的人类还在努力~)所以,为了让计算机能理解人类所要表达的意思,就必须制定一些规则,在规则下,你所说的话计算机才会理解。不同的规则形成了不同的语言,比如C语言,JAVA语言。就跟人类语言有汉语,英语是一样的。
学习C语言就是学习C语言的规则。
2. Hello World!
这个梗全世界接触过编程的人都知道。全世界的编程书不管是任何语言第一个程序都是输出Hello
我用的编译器为code::blocks。
创建新项目后,选择Console
Application(控制台应用程序)。​
然后选择C语言。​
填写“项目标题”和“新项目所在的父文件夹”。​
后面的直接点完成。​
把左边的“项目”目录下的我们建的新项目“hello”展开,再展开“main.c”。
右边的程序为系统默认的代码。
选择主菜单“构建”下的“构建并运行”,工具栏里带齿轮的绿色三角形也是“构建并运行的意思”。
执行后的结果如图。​
Hello World!
人与人最遥远的距离不是生与死的距离,而是我说的梗你听不懂。
你想想,多尴尬啊,别人说了个梗,知道的都在笑,你却不知道,只能跟着傻笑。
C语言也一样,你写了一段代码,里面用了个别的文件定义的东西,但当前的这个文件不知道啊,它听不懂你说的,然后就编译错误了。这个时候你要告诉他梗的来源,就是加上头文件。
例如你要求一个变量x的绝对值,你用abs(x)这个函数,就要在代码最前面加上
这个头文件,因为在这个头文件里定义了abs()这个函数。
关于函数后面会说,先要理解头文件的作用,初学者有好多错误就是忘记添加头文件。
当然,很多初学者还停留在只在main()函数里写代码的状态,很少用到头文件,SO,只要注意就好。
主函数就是main()函数,C语言的入口函数。代码要执行总得从一个地方开始吧,就是从main函数的第一行开始执行的。
因为主函数肩负着程序入口出口的重任,所以不要把程序的细节都放在主函数里,具体处理代码最好封装成函数,主函数只来调用这些函数,这样程序的逻辑很清晰。
就像皇帝没必要会知钱知民知兵,他只要管理这些知钱知民知兵的官员就好。
5.&C语言中的数据
&&&&世界上有10种人,一种懂二进制,另一种不懂二进制⊙﹏⊙。
这里的“10”不读十啦,是“一零”,是二进制表示,等于十进制的2。
【可以打开计算机上自带的计算器,选到“程序员”模式,就能进行各种进制之间的转换了。】
计算机中的数据都是二进制存储的,也就全是0跟1。具体怎么表示,每一本C语言书都会讲,你可以查下,这里就不浪费笔墨了(好吧我承认我懒)。
5.1&变量与常量
常量:其值不能被改变。变量:其值可以被改变。
定义变量时,除了要符合变量定义的规则外,还要尽量把名字定义的可以自注释,就是“见名知意”。例如定义一个表示兔子的变量,写rabbit就比写a好看。
数据类型顺便提一下,整形(short
int、int、long
int)、浮点型(float、double)、数组、结构体、枚举、指针等都是数据类型。每种数据类型的大小是不确定的,是跟编译环境相关的,比如绝大多数电脑int都是4个字节,也不能肯定就没有比较古老的电脑int只有2个字节&(~__~;)
【以前看过二级C的题,问int占几个字节,单选,答案为2。这种说法是错误的,C标准并没有严格确定数据类型的大小,要知道某种类型的大小,要用sizeof计算。】
说到变量,先普及一下内存。C语言的内存分配(了解即可):
1、代码区:存放函数体的二进制代码。&
2、全局区数据区:全局变量和静态变量存放在这里。这些数据在程序结束后由系统释放。
例如:不在任何函数内声明的变量 int RabbitNum =
&&&&&&函数内声明的静态变量
static int RabbitNum = 100;
3、栈区:由编译器自动分配和释放,存放函数的参数值,局部变量的值等。
例如:在函数内声明的变量
int main()
int RabbitNum 0;
RabbitNum = 100;
4、堆区:一般由程序员分配并释放。
例如:用malloc函数申请的内存空间
int *p = NULL;
p = (int *)malloc(sizeof(int) * 4);
5、常量区:存放字面常量。
&&&&例如:int
RabbitNum =
100;&&//100就存放在常量区。
说这么多,我想说的是,变量名只代表内存空间的一个名字。变量也是数据,数据就要存在一个地方,这个地方就是内存,你放进去的变量肯定是要用的,为了能找到这个变量,就给这块内存起了个名字。所以啊,变量名与变量值是不一样的,叫a的变量,可以是22,也可以是33。
常量呢,一般的常量指的就是8,5.3,a(字母a,字符常量,不是变量a,注意区分)这类字面常量(存放在常量区)。还有一种叫宏定义:
#define RABBIT_NUM
100&&//注意,这里没有逗号
这货只是将程序里出现的RABBIT_NUM替换为100,编译器并没有给它分配内存。
还有一种叫const常量:
const int RabbitNum = 100;
这严格来说,叫“只读变量”,编译器为它分配内存,但是编译器却不允许该内存里的值被修改。
具体关于这两种的区别,可以自行百度。(懒……)
5.2& ASCII码
ASCII码是最通用的单字节编码系统。
例如字母‘a’的ASCII码值为97,‘A’的ASCII码值为65.
一定要分清。
6.&运算符与求值顺序
6.1&运算符
1.&任何一个逻辑运算符的优先级低于任何一个关系运算符。
2.&移位运算符的优先级比算术运算符要低,但是比关系运算符要高。
3.&6个关系运算符中,==&和&!=&&的优先级要低于其他关系运算符。
4.&赋值运算符低于任何一个比较运算符。
6.2&求值顺序:
C语言中只有四个运算符存在规定的求值顺序:
&&&&&&||&&&&&?:&&&,【与运算符,或运算符,条件运算符,逗号运算符】
运算符&&和||首先对左侧操作符求值,只在需要时才对右侧操作符求值。
运算符?:有三个操作数,比如在a?b:c&中,操作数a先被求值,再求操作数b或c的值。
逗号运算符,首先对左侧操作数求值,然后把该值丢弃,再对右侧操作数求值。
C语言中其他运算符对其操作数求值的顺序是未定义的。特别的,赋值运算符并不保证任何求值顺序。
写这么多,就是要让你明白,记住运算符的顺序很麻烦,也不一定记得对,所以,打括号才是杜绝错误的神技!
就是“如果怎么样,就怎么样”,计算机也喜欢这么说。
(我是土豪)
&&&我买肾6;
我不买肾6;
看来只能进esle了QAQ……
if&语句很简单,学的时候只要注意好条件就好。比如上面的“&&”和“||”,与运算和或运算的求值顺序。还有就是if,else
if,else一定要把所有情况算完。如果只写if没有else,就是满足情况,进入if,不满足,就跳过if语句,顺序执行下面的代码。
switch…case语句,也很简单,switch后面的表达式要代表一个值,case后面一定为常量表达式。
for循环是最常用(最起码是我最常用)的循环控制语句,因为它可以直观的表明从哪里开始转圈,转几圈,到哪里结束这三个要素。
for (i = 0; i & 10; i++)
&&&//执行语句
从i==0开始转圈,转到i&10即i==9为止,共10圈。
说到这里,提一下,C里,等于是“==”,赋值是“=”,二级C的一些考题里会有if里要写相等却写成赋值的错误让你改之类的。
想起一个故事:
一男生追一女生,女生给他回了一行代码:
for ( i = 0; ; i++);& printf(“I Love
啥意思呢,就是我永远都不会喜欢你…………
前面for循环表示死循环,即永远不会结束的循环,但是,for循环后面有了个分号,表示for循环语句已经结束,所以,for循环一直转一直转一直转一直转,就是走不到I
Love You……
悲伤的故事。
数组,就是用一段相邻的内存来存储数据的形式。
如果我们定义一个整型变量
&int a = 1;
又定义一个整型变量
int b = 2;
但是我们还想定义一个整型变量……
你看,这多麻烦,要是需要定义10个100个呢,光变量名字就想的人头大。
所以有了数组,我们在分配空间时就连续分配一整段内存.
int a[10] = {0};
表示连续分配10个int型内存,每个int型数据初始化为0.
数组的使用学起来不难,说几点要注意的地方。
下标从0开始啊从0开始,学编程一定要切记。所以10个元素的数组,下标只到9,再往后就越界了,数组越界不但是考试的考点,也是写代码要非常注意的地方,越界就要踩内存,踩内存就玩大了。
二维数组甚至多维数组,比较复杂,就不细说了(懒死算了(* ̄& ̄*)&)
哎呀呀,C语言的精华来了,可是,写了几遍都无法用很简单的语句描述清楚╮(╯_╰)╭凑合看吧。
指针就是用来只是内存的工具,可以用指针操作内存空间,对内存里的值进行修改。
首先为什么要有指针呢,上面不是说了可以用变量名来获取内存里的值,为什么还要再来一种方法呢?
这个啊,在初学阶段,指针只会增加学习难度而没有体现出指针的优势,所以才会困惑。但当你学习了链表、树等数据结构,就明白指针是多么的强大!
C is powerful becasuse and only because ithas
没有指针,C语言也就不是C语言了。
没有指针,所有的C程序员都会茫然的不知道怎么写代码了。
链表、树等数据结构,不会向数组那样分配一整段内存来处理,因为大多数情况我们不知道要分配多少内存,如果分配足够大——这样不但会造成内存浪费——而且怎样才算足够大?这么大,这么大,还是这么大?所以最好的办法就是用多少分多少,用的时候再分配。
那么,问题来了,之前分配的内存去哪了?
是啊,我们得记下来啊,但是记不住啊,好多啊,而且这种数据结构不是简单的变量,是有一定顺序和结构的,使用的时候还会对顺序和结构有影响,变量名远远不能满足需要。
指针这时候就可以大显身手了。
指针就是内存单元的地址。内存是一个字节一个字节的排着的。所以两个字节间的地址差为1。
虽然链表等数据结构很复杂,但是它的节点还是一种数据类型,叫结构体,既然是数据类型,在内存里就是存数存放的,所以我们只要找到节点的首地址,就能完整的得到节点值。
节点间有特别的顺序,好,只要每个节点记住前一个节点的首地址和后一个节点的首地址,它在整个数据结构“链”里面的位置就唯一确定了。
而且我们可以将这个指针变量就放入节点里,这样就不用费大力气来记住这些值了,只要给个头指针,整个链子就“chua”的一下提起来了。
我们一般是在学数组的时候来学指针,因为数组是连续的内存,对学指针比较好。
具体就不说了,有问题先百度。
就是封装起来实现一定功能的代码单元。
这里要注意传值,值传递和址传递。最经典的例子。
void swap1 (int a, int b)
int temp = 0;
void swap2 (int *a , int *b)
int temp = 0;
temp = *a;
int main()
int a = 2;
int b = 3;
int *p1 = &a;
int *p2 = &b;
b);&&//交换失败,交换的为形参a,b的值而不是实参a,b的值。
Swap2(p1, p2);
//交换成功,直接交换了实参的值。
这里有指针的用法,可以学一学。
PS:形参和实参的概念也很重要。
12.&结构体,联合体,位运算,文件处理
无知的小七何时你能长大
博客等级:
博客积分:0
博客访问:23,054
关注人气:0
荣誉徽章:为什么我的bilibili注册会员答题时提交不了问题,简直虐cry!我答了好久QAQ_百度知道准高二 求各位戳进来QAQ_noip吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:16,700贴子:
准高二 求各位戳进来QAQ收藏
如题 开学高二 坐标江苏 高一时候因为信息课摸底全班最高老师推荐我试试NOIP比赛就报名了...然后当时0基础初赛全部懵逼什么都不会...蒙了个市奖...没用。和我同届有学了一年的人家好几个都得了省二啊现在学了三个多月...一直学Pascal 还没接触过初赛的那些基础题 还有一个月比赛了 老师说这周开始就要做题了 想知道刷一个月有没有可能过初赛...。还有就是因为文化成绩在学校实验班 每天没有多少时间看NOIP...怎么办啊求各位指点啊QAQ
全国首家青少儿编程机构,专注于教授8岁~18岁孩子专业编程技能.C/C++,noip竞赛,游戏开发等独创课程,培养兴趣,全面提升能力,超越同龄小伙伴.
我现在这一个月怎么做才能先保证过了提高组初赛啊QAQ
现在是每周两节信息课 江苏12月信息会考 然后每周还有一节附加的Pascal课程...。
信息课内容讲完别人玩 老师也是教我Pascal的 但是就一个月了怎么赶啊真的很想得省奖
安心搞初赛吧,把历届题目什么的都做一遍,复赛第一道题过了,别的再骗骗分什么的三等奖应该是肯定有的了
同高二我也是才学c++没多久,才把基础知识学完。我们班算是全年级最好的班了吧,一个星期休息的时间就小半天。我们年级犹豫开得比较晚,所以打算整大学先修。但是学校蛮重视的,一周一节信息课,然后我们两个最好的班星期二下午和星期六全天都是竞赛和大学先修。反正就是有时间就学呗,文化成绩高三再补。
C++好一些吧,还有stl让你用,当然Pascal我也没说不好
你们是在老师那里报名吗?我是武汉的,自己学了一些c语言,找不到哪里可以报名。。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或离你最近的微信公众平台想你所想做你所做同青春共奋斗代码的艺术人生 对于写一个汉诺塔程序都有困难的你,,,,来给大神跪舔好了!Kyle McCormick 在 StackExchange 上发起了一个叫做&Tweetable Mathematical Art的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0 到 255 之间的整数,表示位于 (i, j) 的像素点的颜色值。举个例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么图像的最左上角那个像素就是蓝色。参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为
的图片。#include &iostream&#include &cmath&#include &cstdlib&#define DIM 1024#define DM1 (DIM-1)#define _sq(x) ((x)*(x)) & & & & & & & & & & & & & // square#define _cb(x) abs((x)*(x)*(x)) & & & & & & & & & &// absolute value of cube#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) & // cube root&unsigned char GR(int,int);unsigned char BL(int,int);&unsigned char RD(int i,int j){&&&// YOUR CODE HERE}unsigned char GR(int i,int j){&&&// YOUR CODE HERE}unsigned char BL(int i,int j){&&&// YOUR CODE HERE}&void pixel_write(int,int);FILE *int main(){&&&&fp = fopen(&MathPic.ppm&,&wb&);&&&&fprintf(fp, &P6\n%d %d\n255\n&, DIM, DIM);&&&&for(int j=0;j&DIM;j++)&&&&&&&&for(int i=0;i&DIM;i++)&&&&&&&&&&&&pixel_write(i,j);&&&&fclose(fp);&&&&return 0;}void pixel_write(int i, int j){&&&&static unsigned char color[3];&&&&color[0] = RD(i,j)&255;&&&&color[1] = GR(i,j)&255;&&&&color[2] = BL(i,j)&255;&&&&fwrite(color, 1, 3, fp);} 首先是一个来自Martin Büttner 的作品: 这个是人家的代码unsigned char RD(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2))*255);}&unsigned char GR(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);}&unsigned char BL(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);} 其次还是一个来自Martin Büttner 的作品: 这个看着就有点意思咯哦!unsigned char RD(int i,int j){#define r(n)(rand()%n)static char c[];return!c[i][j]?c[i][j]=!r(999)?r(256):RD((i+r(2))%1024,(j+r(2))%1024):c[i][j];}&unsigned char GR(int i,int j){static char c[];return!c[i][j]?c[i][j]=!r(999)?r(256):GR((i+r(2))%1024,(j+r(2))%1024):c[i][j];}&unsigned char BL(int i,int j){static char c[];return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];}而且这个·是排名第一的作品哦!“小编觉得吧!这个会不会是他代码编错了偶然出现的!”QAQ 然后呢任然是一个来自Martin Büttner 的作品: 下面这个了 unsigned char RD(int i,int j){float x=0,y=0;for(k=0;k++&256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&4)}return log(k)*47;}&unsigned char GR(int i,int j){float x=0,y=0;for(k=0;k++&256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&4)}return log(k)*47;}&unsigned char BL(int i,int j){float x=0,y=0;for(k=0;k++&256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&4)}return 128-log(k)*23;}我知道你已经看不下去了哦!看个图休息一下你猜这是什么 当然是一个来自Martin Büttner 的作品:
它的代码如下:unsigned char RD(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)&4&&n++&880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,3.);}&unsigned char GR(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)&4&&n++&880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,.7);}&unsigned char BL(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)&4&&n++&880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,.5);}Manuel Kasten 制作了一个 Mandelbrot 集的图片,与刚才不同的是,该图描绘的是 Mandelbrot 集在某处局部放大后的结果:休息结束,接着看一下下 没错这还是一个来自Martin Büttner 的作品: 你以为我还会让你看代码?呵呵生成这张图片的代码很有意思:函数依靠 static 变量来控制绘画的进程,完全没有用到 i 和 j 这两个参数!unsigned char RD(int i,int j){k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&255?511-l:l;}&unsigned char GR(int i,int j){k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&255?511-l:l;}&unsigned char BL(int i,int j){k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&255?511-l:l;}那么好吧到此结束吧都说结束了!还看?满足你上图是来自 githubphagocyte 的作品:这是它amzing的代码:unsigned char RD(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;}&unsigned char GR(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;}&unsigned char BL(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;} 最后这张图来自 Eric Tressler : 这是由 logistic 映射得到的 Feigenbaum 分岔图。和刚才一样,对应的代码也巧妙地利用了宏定义来节省字符:unsigned char RD(int i,int j){#define A float a=0,b,k,r,x#define B int e,o#define C(x) x&255?255:x#define R return#define D DIMR BL(i,j)*(D-i)/D;}&unsigned char GR(int i,int j){#define E DM1#define F static float#define G for(#define H r=a*1.6/D+2.4;x=1.0001*b/DR BL(i,j)*(D-j/2)/D;}&unsigned char BL(int i,int j){F c[D][D];if(i+j&1){A;B;G;a&D;a+=0.1){G b=0;b&D;b++){H;G k=0;k&D;k++){x=r*x*(1-x);if(k&D/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}R C(c[j][i])*i/D;是的结束了看到这些图,小编都不敢相信自己的眼睛!更不敢相信,这居然是代码办出来的!小编的心情如上图!所以,你也转发给小伙伴看一下!共同承受这份虐人的代码吧!<section style="display: inline- box-sizing: borde电气唯show(njtechdqxy) 
 文章为作者独立观点,不代表微头条立场
的最新文章
点击查看全文放纵如山倒,自律如抽丝。电气唯show | 离你最近的学生服务平台微信号:njtechdqxy即刻关注!电气唯show | 离你最近的学生服务平台微信号:njtechdqxy即刻关注!点击查看全文假期即将结束,你过得还好吗?点击查看全文只要你来,这就是你的show time~我们说了再见,认认真真说了再见,因为我们相信,我们是会再见的!一年一度的电气工程与控制科学学院院学生会全体见面会于9月23日下午六点半在仁智201展开。这是一个关于中秋晚会的故事~点击查看全文电气唯show | 离你最近的学生服务平台微信号:njtechdqxy即刻关注!电气唯show | 离你最近的学生服务平台微信号:njtechdqxy即刻关注!?作者 | 闫涵
来源:闫涵妈妈,ID:yanhanmama2016 1. 一个朋友和我微信聊,在这个“能力为王”的时代,你需要用实力说话。铛铛铛~铛铛铛~ 这就是我们大电控院的报道现场啦!沉毅广场辛勤举牌的志愿者们象山辛勤站岗的志愿者吃着饭被叫去点击查看原文点击查看原文点击查看原文点击查看原文为吸纳更多优秀人才,使更多有能力的同学加入到学生组织工作当中,日晚,电气工程与控制科学学院三点击查看全文点击查看全文这里有绚丽风景,这是一场盛大的蓄谋已久的重逢。在你们的身边有太多的人
他们过着同龄人向往的潇洒生活
你们要耐得住孤独与寂寞
这好像是与大学生活格格不入的......去年九月,我们相遇。时光流去,我们不说再见。宫崎骏出品的动漫电影以精湛的技术、动人的故事和温暖的风格在世界动漫界独树一帜。点击查看全文梦想与未来五四青年节看完这一篇,我赌一块你要炸!小编来科普了!哈撒gi!还不知道跨年干什么?点我点我!!!njtechdqxy欢迎关注南京工业大学电气工程与控制科学学院! 我们将为您提供最新的院内动态与互动协助!热门文章最新文章njtechdqxy欢迎关注南京工业大学电气工程与控制科学学院! 我们将为您提供最新的院内动态与互动协助!&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 c语言大小写转换函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信