




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言程序设计实训指导书(内部使用)主讲教师编写前言C 语言是一种编程灵活、特色鲜明的程序设计语言,是计算机专业学生的基础课程,学好这种语言可以为后续的面向对象的语言打好坚实的基础,C 语言除了学习必须的基本知识:如概念、方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这才是学习语言的最终目的,结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步, 特编写了该 C 语言程序设计实训指导书,以在实训过程中给学生提供帮助。本书分为三个部分:实训总要求、实训模块和项目拓展实例。第一部分为实训总要求,目的是为了让学生编写规范的代
2、码,从开始程序设计就进行规范练习,为以后工作打下良好的基础。第二部分为实训模块,有三个:( 1)基础部分,为随堂实训,在分析案例的基础上,使学生掌握该部分内容的知识要点,并能灵活运行在实训中,为使学生目标明确,在实训开始给学生提出实训目的及要求;( 2)深化部分,为综合实训,为提高学生的学习积极性,同时为培养软件开发的合作精神,在随堂实训完成的基础上,给学生设计相对该内容综合运用的实例,组织学生进行分组讨论,把每组的讨论结果同大家分享,由学生和老师共同给出评价,该方法可以丰富学生解决问题的方法,拓宽思路;( 3)课程设计,为期末的课程设计,是对整个内容的一个综合设计,可以使学生从软件开发的角度
3、开始思考问题、解决问题,形式仍然为分组设计,各小组设定项目经理、技术经理和成员,一般为5 人一组,由项目经理组织人员、进行分工和协调工作,技术经理负责开发过程中遇到的疑难问题的解决,并进行开发的全程控制。第三部分为案例拓展实例:学生成绩管理系统。通过该实例从一个简单的顺序结构实例,根据内容逐步进行扩充,由小到大,由浅入深,使设计的功能越来越完善,完成了分支结构、循环结构、数组、函数、指针、结构体和文件内容的应用,最后成为一个完整的设计。本书具有基础性、实用性和系统性,可以指导学生按照从浅入深,从低到高的训练过程,逐步提高他们的编程和动手能力。编者2007 年 10 月实训要求及说明C 语言程序
4、设计的实训是学生重要的实习环节。上机实训不仅要求学生掌握C 语言程序设计的基本知识,更重要的是培养学生掌握程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下坚实基础。实训的形式为教师制定出难易适中的设计题目,学生通过分组讨论进行设计,实训重点放在程序设计开发的全过程上。、总要求根据所选题目首先进行年算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计 =算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代码。二、代码书写要求为保证开发团队的协作和后期修改能有效进行,使学生遵照统一的排版风格、注释标准、命名规则及编码诸原则进行C
5、 语言编程,特提出以下规范要求。缩进:1)程序块要采用缩进风格编写,缩进以 4个空格(Spaced为单位,不使用"TAB键"。2)函数体、结构体、循环体以及分支结构中的语句行都须采用缩进风格。3)所有的if、 while、 for、 do 结构中的语句即使只有一行也须用括号括起来。3) if、while、for、do语句单独占一行,左、右花括号也各占一行且不缩进。例:if (superHero = theTick)printl("Spoon!");间隔:所有的标识符都必须被空白字符包围。例如:int theTick = 5;if (theTick = 5
6、)空行:代码段之间须以一个空行进行间隔;空格的位置:1 )在一个关键字和左括号“(”之间。注意:不要在函数名和左括号之间加空格;2)在参数列表的每个逗号“, ”之后;3)二元操作符前后。注意:一元操作符前后都不加空格。例如:int a = 10; a = a + 1; a+ ;4) for语句的每个表达式之间。例如: for (int i = 0; i < 20; i+)。代码行:1 )不允许把多个短语句写在一行中,即一行只写一条语句;2)长语句、参数、表达式(超过80 个 ASCII 字符)应分行书写,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例:# 0
7、01 perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN# 002+ STAT_SIZE_PER_FRAM ;# 003 act_task_tableSTAT_TASK_CHECK_NUMBER + index.occupied# 004= stat_poiindex.occupied;命名规则:所有的标识符只能用字母(A-Z或a-z)和数字(0-9)。不得包含货币符号或其它非 AS-CII字符。1 )变量的命名应尽可能采用有意义的名词,力求可顾名思义。2)可以采用一个单词或多个单词的缩写作为名字,缩写单词的每个字母都要大写。3)对于难以使
8、用英文的情况,可以参考相关行业标准,比如使用国标。4)采用约定俗成的习惯用法。常见的习惯用法:循环变量:i、 j、 k、 m、 n长度:length数量:count位置:pos 或position下标或索引:i 或 index设置/获取:set/get大小: size注释:1) 为确保程序易读性,注释语句不得小于全部代码行的30%。2) 说明性文件(如头文件.h 文件、 .inc 文件、 .def 文件、编译说明文件.cfg 等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。3) 源文件头部应进行
9、注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。4) 函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。5) 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。6) 注释的内容要清楚、明了,含义准确,防止注释二义性。7) 避免在注释中使用缩写,特别是非常用缩写。8) 注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。9) 对于所有有物理含义的变量、常量, 如果其命名不是充分自
10、注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。10) 数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对结构中的每个域的注释放在此域的右方。11) 全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意 事项等的说明。12) 注释与所描述内容进行同样的缩排。13) 将注释与其上面的代码用空行隔开。14) 对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。15)对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该
11、case语句处理完、下一个 case语句前加上明确的注释。三、编码原则15) )注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。16) 避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。17) 去掉没必要的公共变量。18) 仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。19) 明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。20) 当向公共变量传递数据时,要十分小心,防止赋予不合理的值或越界等现象发生。21) 防止局部变量与公共变量同名。22) 严禁使用
12、未经初始化的变量。23) 对所调用函数的错误返回码要仔细、全面地处理。24) 明确函数功能,精确(而不是近似)地实现函数设计。模块一:基础部分第一部分c语百的基本认识 实训目的及要求 通过本次实训内容,使学生对C 语言程序有一个简单的认识,熟悉 VC+6.0的运行环境,掌握C 程序的执行方法,了解程序的结构和输出函数等。程序 1:#include “stdio.h”main( )printf(各位同学好!很高兴和大家一起学习C语言! n");运行结果:各位同学好!很高兴和大家一起学习C 语言!其中,#include stdio.h”为一编译预处理命令,含义是文件包含,stdio.h”
13、是一头文件,标准输入和输出头文件,用来控制数据的输入或输出。main 是主函数的函数名,表示这是一个主函数。每一个 C 源程序都必须有,且只能有一个主函数(main 函数)。 printf 的功能是把要输出的内容送到显示器去显示,本质上也是一个函数,是一个由系统定义的标准函数。程序2:#include “stdio.h”main( )printf(“$”n);printf( *This is a C program*n");printf( $r);)运行结果:$*This is a C program*$程序3:任给一半径,输出圆的周长.#include<math.h>
14、/* include 称为文件包含命令 */#include<stdio.h> /*扩展名为.h的文件称为头文件*/main()(int r,l;/*定义两个整数变量r和l*/printf("input r:n");/* 输出提示信息*/scanf( "d ,&r);/*接收数据给变量r*/l=2*3.14*r;/*进行数学运算把面积赋值给变量s*/printf( "circle of %d is%i,l);/*输出变量 r,l 的值*/)实训题目1、编一个小程序实现在屏幕上输出以下内容:*学生成绩管理系统*2、根据刚才的例题编写程序
15、,通过键盘输入一个三角形的三边长,求三角形的面积(求一个 非负数算术平方根的函数为sqrt(x)。第二部分c程序分析实训I目的及要求通过本次实训内容,使学生对 C语言程序有一个系统的认识,并在此基础 上掌握三种基本数据类型、部分运算符号和常用函数的应用,体现在自己动手编写的小程序 中。程序1:求三个整数的和。#include stdio.h"/* 文件包含命令 */main( )/* 主函数*/ float f1,f2,f3,s;/*定义四个实型变量*/printf( input three floats:")/* 显示提示信息*/scanf( %f%f%f ”,&
16、f1,&f2,&f3);/*接收三个整型变量 */s=f1+f2+f3;/*求三个变量之和,存入变量 s*/printf( sum of f1,f2,f3 is %.2f",s);/*输出求出的和*/)运行结果:input three floats:3 4 5sum of f1,f2,f3 is 6.00程序2:把输入的大写字母转换为小写字母。#include “stdio.h”/*文件包含命令*/main( )/* 主函数 */ char ch1,ch2;/*定义两个字符型变量*/printf( “input an upper letter:”)/*显示提示信息*/
17、scanf(“%c”,&ch1);/*接收一个大写字母*/ch2=ch1+32;/*把大写字母转换为小写字母*/printf( “ lower of letter %c is %c”,ch1,ch2); /*输出 */运行结果:input an upper letter:S lower of letter S is s#include “stdio.h”main( ) int num,bit1,bit2,bit3,bit4;printf( “input a number:”) scanf(“%d”,&num);bit1=num%10;bit2=num/10%10;bit3=nu
18、m/100%10;bit4=num/1000 ;程序3:求一个四位整数的各个数据位。/*文件包含命令*/*主函数 */* 定义四个实型变量*/*显示提示信息*/*接收一个整型数据*/* 求个位数字*/*求十位数字*/*求百位数字*/*求千位数字*/printf( %d 个位:d,十位:d,百位:d,千位:d”,num,bit1,bit2,bit3,bit4); /* 输出整数和各数 据位 */ 运行结果:input a number:23452345 个位:5,十位:4,百位:3,千位 :2程序4:交换两个变量的值。#include “stdio.h”main( ) int a,b,t;pri
19、ntf( “input two numbers:”)scanf(“ %d%d” ,&a,&b);printf( “a=%d,b=%d”,a,b);/*输出交换之前变量的值*/t=a;a=b;b=t;/*交换处理*/printf( “a=%d,b=%d”,a,b);/*输出交换之后变量的值*/运行结果:input two numbers:34 56a=34,b=56a=56,c=34程序5:求一元二次方程的根。#include “ stdio.h ”# include “ math.h ”/*数学函数的头文件*/main( )float a,b,c,disc,x1,x2,p,q;
20、scanf( “ a=%f,b=%f,c=%f ” ,&a,&b,&c);disc=b*b-4*a*c;p= -b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf( “ x1=%5.2f; x2=%5n.”2f,x1,x2);运行结果:a=1,b=5,c=3x1=-0.70; x2=-4.30实训题目1、编程求两个实数之差, 保留两位小数。2、编程把小写字母转换为大写字母。3、编程把一个三位数倒序输出,如输入是123,输出为321。第三部分结构化程序设计与算法认识(分支结构程序设计) 实训目的及要求 通过本次实训,掌握if 语
21、句的使用和switch 多分支选择结构的实现,并能熟练的进行应用。程序 1、任意输入一个年份,判断是否是闰年。闰年的条件是符合下面条件之一:( 1)能被 4 整除,但不能被100 整除;( 2)能被4 整除,又能被400 整除。算法思路:(1)输入年份(如:2007) ;(2)判断是否为闰年;判断闰年的表达式:条件一:能被 4 整除: year%4= =0不能被 100整除: year%100!=0组合: ( year%4= =0 && year%100!=0)条件二:能被 4 整除: year%4= =0能被 400整除: year%400=0组合: ( year%4= =0
22、 && year%400=0)总条件式:( year%4= =0 && year%100!=0)|( year%4= =0 && year%400=0)可改写为:(year%4= =0) && (year%100!=0) | (year%400=0)(3)若是,输出“ 2007是闰年”信息;若不是,则输出“ 2007不是闰年”。#include “stdio.h”main()int year;printf(请输入年份:”);scanf(“%d”,&year);if(year%4= =0) && (year%
23、100!=0) | (year%400=0)printf(“%d 是闰年n”,year);else printf(“%d 不是闰年n”,year);程序2、输入三角形的三边长,求三角形的面积。算法思路:( 1)通过键盘输入三边长的值a, b, c;( 2)判断是否构成三角形;条件式 : ( a+b>c)&&(b+c>a)&&(a+c>b)( 3)若能构成,计算三角形的面积并输出;若不能构成则输出错误提示信息。#include “stdio.h”#include “math.h”main()float a,b,c,l,s;printf(请输入三角
24、形的三个边长:");scanf(“%f%f%f”,&a,&b,&c);if( a+b>c)&&(b+c>a)&&(a+c>b)l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c)printf(面积 S=%.2f”,s);else printf(构不成三角形! n");程序3、任意输入一个成绩,给出评语:90-100:优秀; 80-89:良好; 60-79:及格; 0-59:不及格。算法思路:( 1)输入一个成绩数,存入变量score;(2)判断score在哪个分数段中;( 3)
25、根据所在分数段输出对应的评语。#include “ stdio.h ”main()int score;printf( “ inpuytour score: ” );scanf( “ %d” ,&score);if(score>100|score<0) printf( “ input ernro” r.);else if(score>=90) printf( 优秀n”“ );else if(score>=80) printf( 良好 “ n” );else if(score>=60) printf( 及格n”“ );else printf( 不及格 “n”
26、);实训题目1、用 if 语句实现菜单功能。*1-成绩输入2 成绩插入3-成绩查询4-成绩排序 5-成绩删除 6-成绩输出0-退出*请输入你的选择(0-6) :2、任意输入三个数据按从大到小的顺序输出。3、编程实现:读入两个整型数据及一个运算符(+ - * /) ,计算表达式的值。4、用switch 语句实现菜单功能。5、用switch 语句编程实现:读入两个整型数据及一个运算符(+ - * /),计算表达式的值。6、用switch 开关语句实现猜词游戏。第三部分结构化程序设计与算法认识( C 循环结构程序设计)实训目的及要求通过本次实训,掌握循环语句for、while和do-while的使用
27、和break和continue 的功能,并能熟练的进行应用。程序1、编程求1+2+3+100的和。算法思路:1、用变量sum作为累加器,存放和;2、用变量i表示累加变量,分别存放1,2,3,。;3、当 i0100 时,执行 sum=sum+i;(等价于 sum+=i;);4、当i 的值超过100 的时候,不再执行sum=sum+i; 输出 sum 的值。方法一( while 结构)#include “ stdio.h ”main( )int sum=0, i=1;/* 变量初始化*/while (i<=100)sum=sum+i;i+;printf("sum is %dn&qu
28、ot;,sum);方法二(do-while 结构)#include “ stdio.h ”main( )int sum=0, i=0;dosum=sum+i;i+; while (i<=100)printf("sum is %dn",sum);方法三( for 结构)#include “ stdio.h ”int i,sum=0;for(i=0;i<=100;i+)sum=sum+i;printf( “ sum=n%” d,sum);程序2、求1 到 100 之间的奇数之和,偶数之积。思路:1、用变量sum存放奇数之和,用变量 mul存放和;2、用变量i表示累加
29、变量,分别存放1,2,3,。3、当i0100时,若i是奇数执行sum=sum+i;是偶数执行mul=mul*i;输出sum和mul的值。4、当i 的值超过100 的时候,不再执行求和和求积操作方法一( while 结构)#include “ stdio.h ”main( ) double mul=1; /* 双精度类型*/int i=1,sum=0;while (i<=100)if (i%2!=0) sum=sum+i;else mul=mul*i;i+;printf("sum=%dn",sum);printf( “ mul=n%” e ,mul); /*科学计数法输
30、出*/方法二( for 结构)#include “ stdio.h ”main( )int i,sum=0;double mul=1;for(i=1;i<=100;i+)if(i%2= =1) sum=sum+i;else mul=mul*i;printf( “ sum=%d,mul=n%” e,sum,mul);程序3、把输入的一行字符原样输出,若是大写字母需要转换成小写的。思路:1、通过键盘接收一个字符;2、判断该字符是否为回车符;是转第4 步,不是转到第3 步;3、判断接收的字符是否为大写字母,是转换为小写字母并输出,不是则直接输出,程序转回到第 1 步;4、程序结束。#inclu
31、de “ stdio.h ”main()char ch;while(ch=getchar( )!= n) if(ch>= A &&ch<= Z)ch=ch+32;putchar(ch);程序4、编写程序求20+21+22+2 3+ , , +263 的和。算法思路:变量设定:s:存放累加和;t:存放每项的值;i :为循环次数;算法分析:1、循环累加,用s=s+t; 或 s+=t;2、每项可递推计算,t=t*2; 或 t*=2;3、初值s=1,t=1,循环63次。#include “ stdio.h ”main( )int i;float s=1,t=1;for (i
32、=1;i<=63;i+)t*=2;s+=t;printf( “ s=n%” e,s);程序5、从键盘上任意输入一个正整数,判断其是否为素数。素数:除了1 和它本身之外没有其他因子的数。换句话说只要有因子(除了1 和它本身之外) 则该数一定不是素数算法思路:1、从键盘输入一正整数,存入变量m 中;2、测定m 是否有约数,利用变量i=2-m-1 ,逐个验证m%i 是否等于0;3、如果m%i=0,说明m有约数,不符合素数的条件,后续的i不必验证,退出验证过程;4、根据退出的条件判定 m是否有约数,若非正常退出说明 m有约数i,否则没有约 数,即为素数。#include “ stdio.h ”m
33、ain( )int m,i;scanf("%d",&m);for(i=2;i<=m-1;i+)if(m%i=0) break;if(i>m-1) printf("%d is a prime",m);else printf("%d is not a prime",m);实训题目1、任意输入两个整数,求它们的最大公约数。2、打印形状为直角三角形的乘法口诀。3、输入一个包含有三个数字字符的字符串,把该字符串转换为整形数据输出。(如:输入字符串123,则输出整形数据123)第三部分结构化程序设计与算法认识(结构化程序设计与
34、算法基本知识) 实训目的及要求 简单掌握算法的概念,并在编程中进行具体算法的应用。穷举法:程序 1:找出 100之内的所有素数并输出。算法分析:这是一个穷举问题,通过对2-100 之内的数据逐一进行验证是否是素数,从而解决该问题。1、设定变量n:2-100;2、判断n是否为素数,是则输出当前的n,否则不输出;3、更新n 值,返回第1 步;4、以上3 步重复执行,直到n 的值超过100。#include “ stdio.h ”main( )int m,i;for(m=2;m<=100;m+) for(i=2;i<=m-1;i+)if(m%i=0) break;if(i>m-1)
35、 printf("%5d",m);程序2:搬砖问题:36 块砖, 36 人搬,男搬4,女搬3,两个小孩抬1 砖,要求一次搬完,问男、女和小孩各若干?算法分析:这是一个多重穷举问题,根据题意,可知:1、男人(men)的可能取值范围为:0-9;2、女人(women)的可能取值范围为:0-12;3、孩子(children)的可能取值范围为:0-36;要求这三个数的组合符合以下条件:men*4+women*3+children/2=36要求 children 为偶数。采用穷举法,首先考虑men分别取0-8中的各值时,找符合题意的 women和children,得至U: for(me
36、n=0;men<=9;men+)找符合条件的women 和children;进一步细化:for(women=0;women<=12;women+)找符合条件的children;#include “ stdio.h ” main()int men,women,children;men=0;while(men<=8)women=0;while(women<=11)children=36-men-women;if(men*4+women*3+children/2= =36)&&children%2= =0)printf( “ men=%d,women=%d,c
37、hildren=n%” ,men,women,children); women+;men+; 程序3:要登上n 阶楼梯,每一步允许跨1 阶或 2 阶,问共有多少种登楼梯的方法?算法分析:设每步 1 阶走了 m1 步,每步2 阶走了 m2 步,则有方程:m1+2*m2=n能够满足上述方程式的m1 和 m2 的一对组合就为一种方法,所有满足该方程式的组合数就是方法总数。#include “ stdio.h ” main()int m1,m2,count=0,n;for(m1=0;m<=n;m1+)for(m2=0;m2<=n/2;m2+)if (m1+2*m2= =n) count+;
38、printf(count=n%” d,count);程序4:计算和统计旅客运费程序。由键盘输入旅客行李重量(w) ,按公式:若 ( w<=50kg )f=1.5*w , 若( w>50kg) f=1.5*50 + 2.8*(w-50) ( w>50kg )计算运费,要求:( 1)打印每位旅客的顺序号,行李重量,应付运费;下班时打印出全(2)假定每天最多办理100人的行李托运手续或当 w00时循环结束, 天的运费总收入和办理的总人数。思路分析:(1) 输入行李重量(w);若w<=0,转(5)(2) 计算运费(f);(3) 确定顺序号(num);(4) 打印 num , w
39、 , f; 若 num<=100 转( 1) ;(5) 累加运费收入total=total + f;方法一( while 结构)#include “ stdio.h ”main( )int num=0;float w,f,total=0;scanf("%f ",&w);while (w>0&&num<100 ) if (w<=50) f=1.5*w;else f=1.5*50+2.8*(w-50);num+;printf ( "%d,%6.0f,%8.2fn",num,w,f);total+=f; scan
40、f ("%f",&w);printf ("Customers=%d TotalIncome=%10.2fn",num,total);方法二(do-while 结构)#include “ stdio.h ”main( )int num=0;float w,f,total=0;do scanf("%f ",&w);if (w<=0) break;if (w<=50) f=1.5*w;else f=1.5*50+2.8*(w-50);num+;printf ( "%d %6.0f %8.2fn"
41、;,num,w,f);total+=f; while (num<100);printf ("Customers=%d TotalIncome=%10.2fn",num,total);方法三( for 结构)#include “ stdio.h main( )int num;float w,f,total=0;scanf("%f",&w);for (num=1;w>0&&num<=100;num+)if (w<=50) f=1.5*w;else f=1.5*50+2.8*(w-50);printf ( &qu
42、ot;%d %6.0f %8.2fn",num,w,f);total+=f; scanf("%f",&w);printf ("Customers=%d TotalIncome=%10.2fn",num,total); 实训题目1、任意输入一行字符,分别统计字母、数字、空格和其它字符的个数。2、打印1000之内的所有完数。一个数如果正好等于它的因子之和,这个数就称之为完数。3、实现菜单功能,当输入为“退出 ”的控制时结束。*1-input2-search 3-sort4-delete 0-exit*please input your ch
43、oice(0-4): );4、编程实现10 道 +、 -、 *、 /的运算。第四部分数据类型构造与模块化程序设计(数组的构造与应用) 实训目的及要求 数组是一种构造类型,在解决问题中使用非常普遍,通过本次实训内容,使学生对数组类型有一个系统的认识,并能灵活的在具体问题中进行应用。程序 1:一个班有30 个同学,通过键盘输入成绩,并打印输出,每行输出10个同学的成绩。算法分析:(1)定义一个数组用来存放30 个成绩数据,int score30;(2)用循环结构实现成绩输入;for(i=0;i<30;i+)scanf( “ %d” ,&scorei);(3)用循环结构实现成绩输出,并
44、控制换行;for(i=0;i<30;i+)printf( “ %5d” ,scorei);if(i+1)%10=0) prin tf( “n” );#include “ stdio.h ”main()int i;int score30;/* 成绩数组的定义*/for(i=0;i<30;i+)/*输入成绩*/scanf( “ %d” ,&scorei);for(i=0;i<30;i+)/*输出成绩*/printf( “ %5d” ,scorei);if(i+1)%10=0) printf(n” )“;/*输出10个数据换行*/程序2:一个班有n 个同学,通过键盘输入成绩
45、,并进行以下处理:(1)求平均成绩;(数组求和)算法分析:1 .输入n 的值及 n 个成绩;2 .对成绩进行汇总求和,存入变量s中;3 .求平均数:average=s/n;4 .输出平均分average。#include “ stdio.h ”main()int n,i,s=0;int score30;float average;printf(请输入学生的人数:”);scanf(“%d”,&n);printf(请输入d学生的成绩:n”,n);for(i=0;i<n;i+) scanf( “ %d” ,&scorei);s=s+scorei;average=(float)s
46、/n;printf(“%.1f”, average);(2)添加 m 个同学的成绩;(数组添加)算法分析:1 .当前成绩个数设为n 个;2 .输入m 的值;3 .从第n 个元素开始输入m 个成绩;4 .更新数组元素的个数: n=m+n;5 .输出添加完后的成绩。(3)把不及格同学的成绩更新为60 分; (数组更新)算法分析:1 .当前成绩个数设为n 个;2 .从第0个元素开始逐个元素进行测试:if(scorei<60) scorei=60;直到最后一个元素;3 .输出修改完后的成绩元素。(4)求成绩的最高分和最低分,并记住对应元素的下标;(数组求极值)算法分析:1 .当前成绩个数设为n个
47、,定义变量max和min分别用来存放最大数和最小数;2 .为 max 和 min 赋初始值:max=min=score0;3 .从第 1 个元素开始逐个元素进行测试:if(scorei>max) max=scorei;if(scorei<min) min=scorei;直到最后一个元素;4 .输出 max 和 min。(5)对成绩进行排序。(数组排序)两种基本算法:1 .起泡法:将相邻两个数比较,小的调到前面。2 .选择法:将前面的数和后面的所有数依次进行比较,记住小数的下标,当比较完一遍,用前面的数和该小数进行交换。起泡法排序:#include “ stdio.h ”main()
48、int score10, i,j,k,n=10;printf( 输入成绩: “n” );for(i=0;i<n;i+)scanf( “ %d” ,&scorei);for(i=0;i<n-1;i+)for(j=0;j<n-i-1;j+)if(scorej > scorej+1 )k= scorej;scorej = scorej+1;scorej+1 =k;for(i=0;i<n;i+)printf("%5d", scorei );printf("n");选择法排序:#include “ stdio.h ”main(
49、)int i,j,k,m,score10,n=10;for(i=0;i<n;i+)scanf( “ %d” ,&scorei);for(i=0;i<n-1;i+) k=i;for(j=i+1;j<n;j+)if (scorek> scorej) k=j;m=scorei; scorei=scorek; scorek=m;for(i=0;i<n;i+)printf("%5d", scorei);printf("n");程序3:对已经排好序的成绩数组进行以下操作:把一个新成绩按照顺序插入到数组的合适位置。(提高)。算法分
50、析:1. 从键盘接收一个数据,存入变量m;2. 根据变量m 的大小进行定位,其对应下标为k;3. 把score9到scorek的元素依次后移,为新数据腾出空间;4. 把 m 存入下标为k 的空间中:scorek=m;5. 输出处理完后的新数组。程序4:编程实现求一个3 行 4 列整型数组的平均数。算法分析:1 .定义一个二维数组a34;2 .为数组赋值;3 .累加元素的和,存入变量s中;4 .求平均数ave=s/12;5 .输出平均数ave。#include “ stdio.h ”main()int a34,i,j,s=0;for(i=0;i<3;i+)for(j=0;j<4;j+
51、)scanf( “ %d” ,&aij);for(i=0;i<3;i+)for(j=0;j<4;j+)s+=aij;ave=s/12;printf( “ average=%n” 5d,ave);程序4:编程实现把一个三行三列的二维数组转置输出。算法分析:1 .定义一个二维数组a33;2 .为数组赋值;3 .交换aij 与 aji 的值;4 .输出交换后的数组a。#include “ stdio.h ”main()int a33,i,j,s=0;for(i=0;i<3;i+)for(j=0;j<3;j+)scanf( “ %d” ,&aij);for(i=
52、0;i<3;i+)for(j=0;j<i;j+)t=aij;aij=aji;aji=t;for(i=0;i<3;i+) for(j=0;j<3;j+)printf( “ %n5” d,aij);printf( n“” );程序5:某学习小组有4 名同学,学习了5 门课程,求每个同学的平均分和每门课程的平均分。算法分析:1 .定义一个二维数组score56( 最后一行和最后一列存放平均数);2 .为数组赋值;3 .求行平均数,把平均数存入 scorei5中(i=0-3);4 .求列平均数,把平均数存入 score4用中(j=0-4);5 .输出整个数组。程序6:从键盘输入
53、一行字符,要求删除第一次出现的某个字符(要删除的字符也由键盘输入) 。算法分析:1 .定义存放字符串的字符数组str和存放单个字符的字符变量ch;2 .输入字符串str和要删除的字符ch;3 .对要删除的ch 定位;4 .从该位置开始,开始把后续字符依次前移;5 .检查字符串的结束标记。程序7:编一程序,将两个字符串连接起来。算法分析:1 .定位:第一个字符串的 0的位置;2 .从 0开始把第二个字符串的字符依次放入第一个字符串的后端,直至第二个字符串的 0;3 .检验第一个字符串的末端是否有结束符 0,若没有,修正所得的字符串,在它的末端加上 0。#include “ stdio.h ”main( )char s180,s280;int i=0,j=0;gets(s1); gets(s2);while(s1i!='0')i+;while(s2j!='
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省温州市瑞安市2024-2025学年九年级下学期开学考试语文试题
- 粮油采购技巧培训课件
- 八年级上册《用坐标表示轴对称》课件与练习
- 金融衍生品的风险管理试题及答案
- 工程项目管理软件介绍
- 2024年特许金融分析师考试技巧总结试题及答案
- 手机亮点工作总结
- 哥特风格化妆课件
- 2024年特许金融分析师考试重难点解析与试题及答案
- 骨科中医护理业务
- DB62-T 4537-2022耐紫外光改性沥青路面技术规范
- visual-foxpro-6.0完整版课件全套ppt教学教程最全整套电子讲义幻灯片(最新)
- 实验室变风量排风柜
- PCSA联盟2020合作共赢分享会知识共享试题及答案
- 金矿设计正文
- 初中语文--修辞手法练习题(含答案)
- 心灵游戏之一“生命中最重要的五样”
- 钢结构进场验收记录
- 丧堂孝歌------三国孝歌上集
- 《想法不同-心情不同》刘秋菊
- NO.5机械原理矢量方程图解法汇总
评论
0/150
提交评论