c语言数组输入与输出(精选7篇)
**********一维数组**********
#include
#define n 10
int main()
{
}
int a[n]={1,1},i,j;printf(“%5dn%5d%5dn”,1,a[0],a[1]);for(i=1;i **********二维数组********** #include int main() { int a[30][30]={0},i,j,n=10; for(i=0;i<=n-1;i++) a[i][0]=1; for(i=1;i<=n-1;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<=n-1;i++) { for(j=0;j<=i;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0; 情境描述:定义一个二维数组int a[3][4]={1, 3, 5, 7, 2, 6, 9, 8, 0, 4, 6, 2}, 该数组为3“行”4“列”, 共12个元素, 分别为: 为什么可以输出为4行3列的样式? 1 二维数组的基本知识 1.1二维数组的定义 二维数组定义的一般形式是: 类型说明符数组名[常量表达式1][常量表达式2] 其中“常量表达式1”表示第一维下标的长度, “常量表达式2”表示第二维下标的长度。 例如: int a[3][4]; 即定义了一个二维的数组, 数组名为a;其元素的数据类型为整型;第一维下标的长度是3, 第二维下标的长度是4;该数组共有12个元素, 通常写成容易接受的形式: a[0][0], a[0][1], a[0][2], a[0][3] a[1][0], a[1][1], a[1][2], a[1][3] a[2][0], a[2][1], a[2][2], a[2][3] 1.2二维数组的存储 二维数组在概念上是二维的, 其下标在两个方向上变化。但是, 存储器却是一维连续编址的, 也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组?在C语言中, 将二维数组作为按行存放, 即放完一行之后放入第二行, 以此类推。例如:二维数组a[3][4], 先存放a[0]行的四个元素:a[0][0], a[0][1], a[0][2], a[0][3], 再存放a[1]行的四个元素:a[1][0], a[1][1], a[1][2], a[1][3], 最后存放a[2]行的四个元素:a[2][0], a[2][1], a[2][2], a[2][3]。即这12个元素在内存中的存储为: 通常情况下, 我们习惯书写成: 这里的按行存储的“行”实际上是“第一维”的意思, 不是几何意义上的“行”。 2 二维数组的输出样式 2.1 main () 说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时换行。 2.2 main () 说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时无换行。 2.3 main () 说明:以数组的第二维下标为主、第一维下标为辅输出, 第二维下标变化时换行。 2.4 void main () 说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时无换行。 3 日常生活中的行和列 在日常生活中, 横向 (水平方向) 为行, 纵向 (垂直方向) 为列, 是几何意义上的行和列。 在前面的“二、二维数组的输出样式”中: 第一种输出样式为3行4列 第二种输出样式为1行12列 第三种输出样式为4行3列 第四种输出形式为1行12列 4 总结 通常情况下, 我们定义了一个二维数组int a[3][4], 该数组的第一维下标为3, 第二维下标为4。习惯上称数组a是一个3“行”4“列”的数组, 这是基于该数组在内存中是按行存储的原理而表述的 (它在内存中存放的顺序为a[0][0]、a[0][1]、a[0][2]、a[0][3]、a[1][0]、a[1][1]、a[1][2]、a[1][3]、a[2][0]、a[2][1]、a[2][2]、a[2][3]) 。这里的“行”, 准确地说是“第一维下标”, 不是几何意义上的“行”。 二维数组的输出样式多种多样, 可以说千变万化。程序的输出结果是几行几列, 由实际代码决定。, 这里的“行”, 准确地说是几何意义上的“行”。前面“二、二维数组的输出样式”, 就是例证。 综上所述:定义一个二维数组int a[3][4], 该数组的第一维下标为3, 第二维下标为4。习惯上称数组a是一个3“行”4“列”的数组, 这里的“行”和“列”是“第一维下标”和“第二维下标”的意思, 不是几何意义上的行和列。该数组实际的输出样式是几行几列是由实际的代码处理得到的, 这里的行和列是几何意义上的行和列, 也就是通过屏幕输出得到的。这是两个不同情境下的“行”, 不是一个意义, 更不能混为一谈。 摘要:二维数组的定义与输出样式, 是广大编程爱好者学习C语言过程中常常遇到的一个易混淆的知识点。本文通过将相近概念置于不同情境, 进行意义辨析, 帮助读者厘清二者的关系。 观察记录及分析 语言的输入与输出并重,才能达到课堂教学高效的目的。《义务教育英语课程标准》(2011)指出:义务教育阶段英语课程的总目标是“通过英语学习使学生形成初步的综合运用能力”,即表现了语言输入与输出的相得益彰。 (一)精心导入,达成语言的初步输入与输出 观察点1:复习导入过程的语言输入与输出观察 【观察记录】 1. 热身:老师介绍学习内容和学习目标。 2. 复习检查(抽查学生导学案完成情况,老师说汉语,学生翻译出导学案上的短语、频率副词和连接词) 3. 导入(师生问答) 【观察分析】 在复习检查阶段,廖老师只是单纯让学生翻译了1.开拓眼界 open one's eyes 2.好习惯good habit 3.使某人… make sb.... 4.获取知识get knowledge 5.对…有好处be good for 6.关于历史 about history 7.在上学日on school days 8.在图书馆in the library 9. 在早上/下午/晚上in the morning/in the afternoon/in the evening 10.放学后 after school频度副词 (11.总是always 12.有时sometimes 13.从不never 14.经常often)、连接词(15.so…that…16.if 17.because 18.not only…but also… 19. In order to 20. too…to…)、句型(It is+adj+to do)。她没告诉学生这些知识在这堂课中要起什么作用,为后边的教学打下了伏笔。 然后,她开始在黑板上画图,并向学生提问"1.What am I drawing? ", 学生齐声答" A book". 她又有条不紊地引导学生回答后边的问题。2. When do I read? In the morning/afternoon/evening… 3. Where do I read? In the library/At home/At school. 4. Why do I like reading? Interesting/ can open my eyes… 5. How do I read? By reading textbooks/magazines/newspapers...就在这样的不经意之间,廖老师把在复习时输入的短语通过自己下意识的引导,让学生通过可理解性的问题回答,进行了初步的语言输出。在这个环节的语言输入和输出处理上,廖老师做得非常完美。 (二)有机的讲练结合,对语言进行再植输入与输出 观察点2:讲解操练环节的语言输入与输出观察 【观察记录】 1. 教师讲解并例举英语扩句的常用方法 (1)在名词前添加形容词。例:I like reading interesting books. (2)在名词后添加介词短语等。例: I like reading interesting books about history. (3)在名词后加定语从句。例:I like reading interesting books that are about history (4)给句子添加时间状语。例:I like reading interesting books in the morning . (5)给句子添加地点状语。例:I like reading interesting books that are about history in the morning at school. (6)给句子添加原因状语从句。例:I like reading interesting books that are about history in the morning at school, because reading can make us grow up and make me clever. (7)还可以运用 so that, not only, but also, it is+adj+to do等句型来扩句。 2. 学生按老师要求进行扩句训练 (1)请用名词扩词法,扩写下面的句子。 Lu Han is a singer.( lovely/ dance well) (2)添加时间、地点、原因等状语扩写下边的句子 I play sports. (because/be good for/with) (3)运用适当的连接词或句型扩写下边的句子。 I walk to school. ( in order to/ it is adj. for sb. to do sth.) 3. 抽個别学生展示 Lu Han is a lovely singer. Lu Han is a lovely singer who can dance well. I like playing sports with my friends at 8:00 at school, because it is good for my health. I walk to school in order to exercise. It is healthy for us to walk to school. 【观察分析】 这一环节是本堂课的重点部分,所以老师花了大量的时间在这一环节的教学上。 首先,她告诉学生英语写作中的扩句有哪些常用方法,并通过自己的举例,把复习部分中出现的部分短语对学生进行语言的可理解性再植输入。同时,也把在复习环节中提到的频率副词、连接词和部分简单常用的英语句型,在这环节的举例中对学生进行可理解性语言输入。 之后,她通过有要求的目标训练方法,让学生进行合作学习,完成扩句任务,并抽个别学生上台展示,让我们看到了不同层次的学生大多能按她的要求完成扩句的目标任务。 通过对学生练习和实践的观察,我发现学生在进行扩句的练习中,对添加时间状语和添加地点状语是掌握得最好的,几乎课堂参与回答的26名学生全部都会用这两类状语来扩句。 但对短语about history, after school, get knowledge,廖老师只进行了一次例举性的简单输出,所以学生在练习和回答过程中基本没学会使用它们进行语言输出。对于输入的频率副词,可能因为时间关系,廖老师没有给学生进行可理解性的语言输出示范,所以在参与展示的学生中,没有人运用频率副词来扩句。 我觉得她可以把频率副词often, usually, sometimes在句型运用的I walk to school句中和后面的例文My school day中的某些语句中进行输出。这样的话,这堂英语写作课的语言有效输入和输出效果肯定会更好。 总而言之,我们在英语写作教学中不能重语言输入而忽视语言输出,也不能重语言输出而轻视语言输入。只有做到语言输入与输出并重,才能真正达到提高英语写作教学效果的目的。 用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以作为串的结束。字符数组现金网96y.org是由于若干个数组元素组成的,它可用来存放整个字符串。 2)对字符串指针方式 char *ps=C Language; 可以写为: char *ps; ps=C Language; 而对数组方式: static char st[]={C Language}; 不能写为: char st[20]; st={C Language}; 而只能对字符数组的各元素逐个赋值。 从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。 前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是博彩娱乐棋牌q07i5.org对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。 因此,char *ps=C Langage; 或者 char *ps; ps=C Language; 很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。 指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。 指针可以用间接访问操作符(_)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。 数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&p是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。 当然数组在初始化时也有例外,如int p[]=“12345”是合法的。 数组可以以指针的形式访问如_(p+i);也可以以下标的形式访问p[i],但其本质都是p所代表的数组首元素的地址加上i_sizeof(类型)个字节作为数据的真正地址来进行访问的。 数组通常用于存储固定数目且数据类型相同的元素。 刚开始的时候我 有点分不清指针数组和数组指针,现在也总结一下,指针数组,首先它是一个数组,数组的每个元素都是指针,可以理解为“存储指针的数组”的简称,数组指针,首先它是一个指针,它指向一个数组,在32位系统下永远只占4个字节,至于它指向的数组有多少个字节,并不知道,可以理解为“指向数组的指针”。 举个例子,int _p1[10]与int (_p2) [10], 要理解这个问题,首先要清楚操作符的优先级,“[]” 的优先级比“_”的优先级高,所以首先p1与“[10]”结合构成一个数组p1[10],int _为修饰数组的内容,所以数组元素是指向int类型的指针,所以这个是指针数组,“”的优先级比“[]”的优先级高,“_”与p2结合构成一个指针变量,int修饰数组的内容,即数组的每个元素,数组这里并没有名字,是个匿名数组,现在清楚了p2是一个指针,它指向一个包含10个int类型数据的数组,即为数组指针。 下面再说说内存管理,内存分为三个部分:静态区、堆、栈。 其实堆栈就是栈,而不是堆。 静态区是保存自动全局变量和static变量。 静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。 堆是由malloc系统函数分配内存的。 其生命周期由free和delete决定。 栈保存局部变量。 栈上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。 再说说有关内存需要注意的地方,定义了指针变量,在使用之前一定要初始化使它指向一块合法的内存,不管什么时候,我们在使用指针之前一定要确保指针是有效的。 使用malloc系列函数分配内存,使用完之后应及时释放内存,以防止内存泄露。 一般的做法是定义一个char*类型的指针,然后指定其长度,代码如下: typedef struct{ unsigned len; char* pData;}Msg; 使用的时候是这样的: char str[] = “hello world!”; unsigned len = sizeof(str); Msg* m = (Msg*)malloc(sizeof(Msg)+len*sizeof(char)); m->len = len; m->pData = (char*)(m+1); memcpy(m+1, str, len); printf(“%d, %s ”, m->len, m->pData); 有没有觉得时机上char* pData很多余呢? 因为数据时机的存储位置在m+1,我们可以直接得到这个指针,而不需要重新定义一个char* pData来报错这个位置。 这样带来了另一个问题就是,访问不方便,我们不能用结构体成员的方式来访问了,可以使用柔性数组,且看: typedef struct{ unsigned len; char data[];}Message; 使用起来就是这样的: Message* msg = (Message*)malloc(sizeof(Message) + len*sizeof(char)); msg->len = len; memcpy(msg->data, str, len); printf(“%d, %s ”, msg->len, msg->data); free(msg); 来分完整代码对比下: // array0.h typedef struct{ unsigned len; char* pData;}Msg;typedef struct{ unsigned len; char data[];}Message; // main.c 关键词:大学英语教学 语言输出输入理论 应用途径 2013年8月,在长沙举行的全国高等学校大学英语教学研修班探讨了“输入为基础,输出为驱动:教学策略与实践”这一理论。中国外语教育研究中心主任文秋芳教授提出的“运用输出驱动理念,促进课程教学创新”,阐释了“输出驱动假设”这一理论的内涵和依据,并探讨了在输出驱动理念的指导下,大学英语课程体系与教学方法如何实现改进与突破,帮助与会者从理论到实践深入了解了语言输出教学的重要性。 一、语言输出输入理论在大学英语教学中应用的意义 20世纪80年代,美国语言学家Steven Krashen提出了“语言输入假说”,他认为单纯主张语料输入是不够的,学习者需要“可理解输入”,这是语言习得的必要条件。加拿大第二语言教育专家Merrill Swain提出了“语言输出假说”,他认为输出语言的活动(听、写)是二语学习过程的一个重要组成部分,并具有提高语言的流利程度、假设检测、反省三个功能。 大学英语教学是我国高等教育的一个重要组成部分,但长久以来,传统的大学英语课堂过度强调语言的输入,而忽略了语言的输出,以教师授课为主,以应试为目的,即便是通过大学英语四六级等级考试的学生,在英语口语和书面表达方面仍存在较大的语言障碍。如此普遍的“哑巴英语”状况成为大学英语教学改革中亟待解决的问题之一。 二、语言输出输入理论在大学英语教学中应用的途径 受传统的大学英语教学理念、模式和方法的影响,英语作为语言交际工具的功能被忽略,单调的语言输出使学生很难从学习中获得动力,也很难把所学知识运用到实际生活中。因此,有效解决这一问题,可从三个方面着手: 1.利用多媒体教学手段,给学生创设良好的语言学习情境 如在教学“How to Make a Good Impression”时,教师可以给学生播放电影《The Pursuit of Happiness》中克里斯·加纳匆忙从监狱赶到证券公司参加面试,想得到一个实习机会的片段,并要求学生观赏之后总结出一些能给他人留下好印象的建议,比如着装、语音语调、真诚的态度、幽默感等;又如在教学“Love Without Limitations”时,教师可以选择学生耳熟能详的电影《阿甘正传》,或者对比“A Good Heart to Learn on”这篇课文,讲述身与心、内在与外在的重要性。 2.运用任务型教学法,调动学生的积极性和参与度 20世纪80年代,任务型教学法作为一种新的具有重要影响的语言学习与教学理论,把语言应用的基本理念转化成为具体的有实践意义的课堂教学方式。 在每个任务阶段,教师都要做好充分的准备。比如:任务前阶段,教师必须明确任务,并确保这些任务能够激发学生的兴趣,调动学生参与的积极性;任务进行阶段,教师要给予学生一定的鼓励并做好记录;任务后阶段,教师要提出建议和意见,指出他们出现的问题,给予每个参与者合理的评价,增强学生的自信心。 如在教学“How to Prepare for Earthquake”前,教师可以让学生查询历史上大地震的相关记录或报道,以及地震中那些感人的故事,整理资料之后,再要求学生以故事描述或者新闻播报的形式在课堂上把它们呈现出来。 3.开展丰富的课外活动,检测学生的学习效果 丰富的课外活动是课堂活动的有效补充,也是检测学生学习效果的方式之一,持久而定期地开展课外活动,还可以让学生在反省中纠正自己并不断进步。如:举行以“smog and restriction on auto purchase”“Skipping Classes on College Campus”“Skipping Classes on College Campus”为 主题的辩论;表演“Rich meeting His Future Mother-in-law”“The meeting of Two Old Friends” “Deep concern”等英语短剧。 三、结论 在英语语言学习中,语言输入和语言输出长期的不和谐在很大程度上影响了英语课堂教学的效果。因此,在大学英语教学过程中,教师应打破传统的以输入为主体的教学模式,平衡输入和输出的比例,从而提高大学英语教学的质量。 参考文献: [1]季明旸.浅析大学英语教学中的信息输入与输出[J].科教导刊,2010,(6). [2]付艳.语言输入与输出理论研究与英语教学[J].浙江万里学院学报,2005,(10). [3]邹晓华.大学英语教学中语言输入的有效途径[J].教育教学论坛, 2013,(13). 【c语言数组输入与输出】推荐阅读: c语言之指针数组函数09-21 C语言《二维数组》说课稿10-30 背诵式语言输入在成人英语教学中的应用09-07 c语言总结07-15 c语言课程12-13 黑马程序员C语言教程:C语言基础之#define详解01-13 c语言概念题09-22 C语言教学建议10-25 c语言递归程序11-06c语言数组输入与输出 篇2
c语言数组输入与输出 篇3
c语言数组输入与输出 篇4
大一c语言数组实验心得 篇5
C语言变长消息定义:柔性数组 篇6
c语言数组输入与输出 篇7