C语言程序设计的困惑
1、
#include void fun1(int a[]){int i;for(i=0;ia[i]){min=a[i];k=i;}}t=a[k];a[k]=a[0];a[0]=t;t=a[j];a[j]=a[9];a[9]=t;}void fun3(int a[]){int i;for(i=0;i<10;i++)printf("%d ",a[i]);}void main(){int a[10];fun1(a);fun2(a);fun3(a);}运行示例:
2、
#include void fun(int a[],int n,int m){int i,j,t;for(i=0;i0;j--)a[j]=a[j-1];a[0]=t;}}void main(){int i,n,m,a[100];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);scanf("%d",&m);fun(a,n,m);for(i=0;i<n;i++)printf("%d ",a[i]);}
C语言有个特点,就是在计算时,首先要把变量类型统一之后才能计算,
如果级别相同,则直接计算,例如是整型,那么除法就舍去余数,整型中1/2=0,
如果变量类型不一样,如果是加减法则统一成级别比较高的类型,比如int型和float型相加,则统一转换成float型之后再相加,如果是乘除法,则统一变成double型,级别从高到低是double->float->int,
对于上例中的(float)b是首先按照整型得到b的值,然后变化成float型,这个叫做强制变换
对于上例中的不同结果,原因是1.0/a中1.0是float型,除以整型a结果是浮点型,所以为0.500000,然后将0.500000变成float型,还是0.500000
希望能帮助到你,有问题再call我
一、要读就读好书,否则不如不读
所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。
大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以百度一下:)
Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,二者可能会有些出入,建议按照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。
如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。
切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。
二、Unix/Linux还是Windows,这是个很大的问题
不同的编程环境会造就出不同思维的程序员。Windows的程序员大多依赖集成开发环境,比如Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!了,而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。
对于一个只懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等等等。
所以我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC 2.0编译出32位程序,不过那过于复杂了)。
等你学完一本C语言的教材,你一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的(比如《C专家编程》)。转变的过程是痛苦的,你需要面对的是各种纷繁复杂的命令,完全不同于Windows平台的思考方式,但是这种痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你可以找到无数优秀的源代码供你尽情阅读,你可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格
归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。
三、万事俱备,你就是东风
书已选定,环境配置完成,正所谓万事俱备,只欠你自己的努力了。请从书的前言开始,仔细地阅读手头的教材,很多人看书喜欢直接从第一章开始看,这是错误的做法。前言是作者对整本书的大体介绍,作者一般会告诉你需要什么基础才能够顺利阅读本书,这可以帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下目录,了解一下书的整体结构,顺便给自己安排一下学习计划。
学习C语言,必需注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因。出了书本上有的例子,自己还要“创造”一些例子,比如学习运算符优先级的时候,可以写几个相同的表达式,在不同的位置加上括号,看看有哪些不同的行为,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的例子以及改造之后的例子,还有自己“创造”的例子,都应该仔细地归类保存,并且要在源代码中写上简短的注释,阐述这个例子的意图。
例子之后就是习题了,我建议初学者把所有的习题都独立做一遍,然后对照答案的代码,看看自己的代码有那些不足,再试着修改自己的代码。很多人不重视习题,这是极大的错误,因为作者通常会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。
也许你认为这样学习太慢,其实不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完成数千行乃至上万行的代码,无论是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔财富。以我自己举例,阅读《Windows核心编程》时(我只阅读了3/4的内容),除了抄书上的代码,还自己写了很多例子,一共有5574行(用unix下的wc工具统计),时隔多日,我早已记不清Windows的系统编程了,但只要花几分钟翻出以前的代码看看,便会重新了然于胸。所谓好记性不如烂笔头,就是这个道理。
仔细读书、认真抄写源代码、独立完成习题外加更进一步的实验,最后将所有的代码留下,成为自己的经验和财富,绝对的辛苦,也绝对的事半功倍。当然,这种方式只适合学习需要精通的技术,如果不是学习C语言,你还要具体情况具体分析。
写到最后,还有非常非常重要的一点没有提及——代码风格,从最开始学习就必须强迫自己模仿最优秀的代码风格
晕死,你的这个大括号有和没有的效果是一样的。怎么运行都不可能出现你说的循环一次输出一个值的情况啊!
程序的执行顺序是main=>fun=>for=>求平均值------->返回------>printf.还有现在c的main函数最好是不要用void类型。一般是这样
int main(int argc, char**argv) {
return EXIT_SUCCESS;
}
你这什么啊?for循环用法是如下,如果不加{}只循环第一个省略号,你那样用加与不加都一样,都是只循环aver=aver+a[i];
for()
{ 。。。。。。
。。。。。。
}
因为你的aver是在fun函数结束的时候才返回的,所以只有一个值,而不是循环一次返回一次
看你的RETURN是在循环内还是循环外 这段程序返回最后的EVER的值 所以只有一个值
c语言和c++谁好,他没有什么区别?
算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C 加上好的设计”也能写出非常好的东西。 对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数...
从平面转到学前端,目前遭遇一些困惑,该如何提高自己?
就算转到前端,你不努力的话,也同样会变的很平凡。如果题主是经过深思熟虑,觉得前端比较适合你的话,那么题主在学习的过程中,需要注意一下几个点,可能就会解决你的困惑(因为题主并没有具体的讲出你的困惑)。一、你要完全重头开始学 虽然现在国内的计算机科班学生,在大学的本科课程不学习前端技术...
怎样更好学习C语言
第五步、研究典型的C语言程序,提高程序设计能力C语言初学者遇到最多的困惑是:上课也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手。发生这种现象的原因是:所谓的看懂听明白,只是很肤浅的语法知识,而没有深刻地理解C语言的语句的执行过程(或流程)。计算机是按照人的指令(编写的程序)去...
假期让你秒变Ph高手
提高了普通Python程序的清晰度。大多数人在一段时间后就学 会并喜欢上这个功能。 由于没有开始\/结束括号,因此解析器感知的分组与人类读者之 间不会存在分歧。偶尔C程序员会遇到像这样的代码片段: 如果条件为真,则只执行x++语句,但缩进会使你认为情况并 ...
课程目标的三个维度 [解析“算法与程序设计”的课程目标]
其课程目标(教学目标)是训练和培养学生使用计算机语言进行程序设计的能力。从这一传统中走来的广大教师很容易有意无意地继续把培养编程能力当成新课标中信息技术课程目标的全部。这种课程目标在教学实践中带来许多困惑。有人质疑:“有必要为了1%的程序员,让99%的人陪着学习他们终生不用的课程吗?”还有人困惑:“现在...
计算机专业毕业论文——软件技术
第四,学生的程序设计水平参差不齐。吉林医药学院“软件技术基础”课程开设于学生大二下学期,学生在学习该课程前,已经学习了“C语言程序设计”,但C语言课程对于第一次接触程序设计的学生来说,概念抽象且规则繁多,掌握困难。对于C语言中数据的存储、算法编写、程序设计及调试等尤其畏惧、困惑,加深...
C\/C++发展小问题
最初提出的结构化程序设计方法的目的是解决软件设计危机,但这一目标尚未完全实现。为了解决软件设计的危机,在20世纪80年代,面向对象编程(面向对象编程),在这种情况下,C + +应运而生。C + +完全兼容C C.它也可用于结构化编程的面向对象编程的一个超集,所以它是一个功能强大的混合编程语言。增...
如何学习好单片机编程设计
单片机C语言编程理论知识并不深奥,光看书不动手也能明白。但在实际编程的时候就没那么简单了。一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。一个程序能否按照你的意愿正常...
请前辈指点,开发转需求分析的一些困惑
请前辈指点,开发转需求分析的一些困惑 100 各位前辈,我目前在从事软件开发工作,开发经验一般,但是去年也接触开发了移动的一个项目,也算有点大型项目经验,对ssh框架,页面设计,数据库等也都应用过,现在想转需求分析,但是... 各位前辈,我目前在从事软件开发工作,开发经验一般,但是去年也接触开发了移动的一个项目,也...
浅谈如何找到Java 正确的学习路径
在大型数据库Oracle的应用上,Java可作为二次开发的语言进行开发设计;在分布式大数据分析架构中,Java也可以用来写大数据的算法程序;同时Java还有很多其他的应用,比如智能电视以及其他智能穿戴设备的编程。对于热爱编程的朋友来说,Java是一门值得学习的语言,那么Java的学习线路图是怎样的?首先先要从了解...
曹败钆特: t=a意思是把a的值赋给t,a=b意思是把b的值赋给a,b=t意思是把t的值赋给b,其实就是a、b的值互换
高要市19461137645: C语言程序设计的问题 - ?
曹败钆特: 看了下面的回答,虽然没错,但提问者看起来好像还不是很熟悉C语言,所以我想详细地解释一下. x+=5意思是x=x+5;x-=3的意思是x=x-3. 我把你的代码敲好了,每行代码右边的绿字是注释,黑色窗口里是x和y的最终结果: 整个过程一共循环了四次,下面是每次循环要执行的过程.第一次循环: x=1,y=1 x=x+5=1+5=6 第二次循环: x=x-3=6-3=3 第三次循环: x=x+5=3+5=8 第四次循环: 此时x等于8,结束循环 最终x等于8,y等于4.
高要市19461137645: C语言程序设计的问题?
曹败钆特: 1)单精度就是用float, 双精度就是用double. 2)float定义的变量占4个字节,双精度定义的变量占8个字节. 3)双精度能表示的数更广,单精度相对较窄. 譬如10的负30次方什么的,不过我们一般用不到那么精确的数,所以不是做科研的话,单精度和双精度对我们来说,表示的数的准确度是一样的. 4)还有就是它们在机器中存储时用的转换格式不同.譬如3.1用单精度在机器中存储和用双精度存储时,最终在机器里存放的格式是完全不一样的,这里面有一套很复杂的转换公式.
高要市19461137645: C语言编程的简单疑惑?
曹败钆特: for (k=0; k<10; k++) scanf (”%d”, &x[k]); for (k=0; k<=9; ++k) printf (”%d\n”, x[k]);k++和++k在这几条语句中是作用是相同的,都是使k自增.k++和++k只是在某些特别地方有不同的意义,如:printf(”%d%d\n”,k++); 和printf(”%d\n”,++k); 是有区别的 ,还有printf(”%d%d\n”,k++,++k); 等等是不相同的
高要市19461137645: 来自C语言新手的困惑 - ?
曹败钆特: 你这是重定义 当然就会出错了 把strcat 改成被的名字就好了
高要市19461137645: C语言程序设计基础的一些小问题?
曹败钆特: 1.算法过程可以是无数据输入是说可以不需要进行输入操作. 2.复数解是比较全面的,如果你还没学过复数,你就可以认为无解(其实确切的说是无实数解),如果要了解,这个是数学上的问题,不是编程的问题了. 3.Y表示yes,条件成立,N表示no,表示条件不成立 4.素数又叫质数,是不能被除了1和它本身外别的数整除的数.如7,除了1和7本身,就不能被别的数整除了
高要市19461137645: C语言编程中的小疑问?
曹败钆特: 因为为5时已经不循环for语句里面的东西了.跳出for语句了
高要市19461137645: c语言编程的问题?
曹败钆特: 只需要让m从2到n/2就可以了,因为如果一个数不能被从2到他的一半的任意一个数除尽,那么他也绝对不会被从2到他本身的任意一个数除尽!比如一个数,如果不能被5除尽,那他肯定不能被10除尽了!所以这里只需要检查到n/2就可以了! 多读几次这句话就明白了哦! 并且一个大于2的数绝对不能被比他的n/2大得数整除!
高要市19461137645: c语言程序设计的小问题?
曹败钆特: c!=13&&c!=27表示输入字符不是回车“CR”也不是取消“Esc”,c==27表示输入字符是“Esc”.
高要市19461137645: C语言的烦恼?
曹败钆特: C语言是Combined Language(组合语言)的中英混合简称.是一种计算机程序设计语言.它既具有高级语言的特点,又具有汇编语言的特点.它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序.因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发. 前期不需要,但到后期需要有数学基础与数学建模能力C不只能考级!! UNIX,WINDOWS漏洞,单片机..很多地方都用到了C!!