熟悉判断并改正通告下载

您现在的位置: >> c语言实验 >> c语言的实验报告
c语言的实验报告
来源: 时间:
【c语言的实验报告】实验名称实验名称:熟悉 C 程序的运行环境 一、 实验目的和要求了解 Turbo C++ 3.0 的基本操作方法,学会独立使用该系统 编辑、编译、连接和运行一个 C 程序 通过运行简单的 C 程序,初步了解 C 源程序的特点二、 实验内容和原理1. 输入并运行一个简单、正确的程序 # include &stdio.h& void main( ) { printf (&This is a c program\n&); } 2. 输入一个有错误的程序,修改错误,直到程序能正确运行,分析程序运行结果。# include &stdio.h& void main ( ) { int a, b, sum a=123; b=456; sum=a+b printf(&sum is %d\n&, sum); } 3. 输入并运行一个需要在运行时输入数据的程序,输入数据,观察运行结果。# include &stdio.h& void main( ) { int max (int x, int y); int a, b, scanf(&%d, %d&, &a, &b); c=max(a, b); printf(&max=%d&,c) ; } int max (int x, int y) { z=y; if (x&y) z=x; return (z); }三、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。四、 算法描述及实验步骤1. 内容 1 (1)启动 TC++3.0,新建一个 C 文件; (2)输入程序 1; (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功,再 次保存文件; (5)连接程序、运行程序,观察运行结果。2. 内容 2 (1)启动 TC++3.0,新建一个 C 文件; (2)输入程序 2; (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序,观察运行结果。3. 内容 3 (1)启动 TC++3.0,新建一个 C 文件; (2)输入程序 2; (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序; (6)输入数据,观察运行结果。五、 调试过程1.输入后,按 Alt+F9 编译,出现如下信息:成功编译。2.输入后,按 Alt+F9 编译,出现如下信息:经分析是由于 int a, b, sum 与 sum=a+b 俩未加;导致。3. 输入后,按 Alt+F9 编译,出现如下信息:经分析是由于 int a, b, c 句未加;导致。修改后编译结果如下:六、 实验结果1. 2.3.输入 123,654 运行结果如下: 输入
运行结果如下:七、 经过本次上机实验,我基本了解 Turbo C++ 3.0 的操作方法,学会在该系统上编辑、编 译、连接和运行一个 C 程序。同时也明白在编译过程中应留心一些细节问题(如一个语句结 束要加“;) ”,也学会通过编译错误信息找出错误,并修正错误。 实验名称:数据类型、 实验名称:数据类型、函数和表达式 八、 实验目的和要求掌握 C 语言数据类型,熟悉如何定义整型、字符型和实型变量并赋值 掌握不同类型数据之间赋值的规律 学会使用 C 的有关算法运算符及表达式,特别是自加(++)和自减(--)运算符的使用 进一步熟悉 C 程序的编辑、编译、连接和运行的过程九、 实验内容和原理2. 输入并运行下面程序,分析运行结果。# include &stdio.h& void main( ) { char c1, c2; c1='a'; c2='b'; printf (&%c%c&, c1, c2) } 3. 输入并运行下面程序,分析运行结果。# include &stdio.h& void main ( ) { char c1='a',c2='b',c3='c',c4='\101',c5='\116'; printf(&a%c b%c\tc%c\tabc\n&,c1,c2,c3); printf(&\t\b%c %c&,c4,c5); } 4. 输入并运行下面程序,分析运行结果。# include &stdio.h& void main( ) { int a, unsigned c,d; long e,f; a=100; b= -100; e=50000; f=32767; c=a; d=b; printf(&%d, %d\n&, a, b); printf(&%u, %u\n&, a, b); printf(&%u, %u\n&, c, d); c=a=e; d=b=f; printf(&%d, %d\n&, a, b); printf(&%u, %u\n&, c, d); } 5. 输入并运行下面程序,分析运行结果。# include &stdio.h& void main( ) { int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(&%d,%d,%d,%d&,i,j,m,n); }十、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。十一、算法描述及实验步骤(1)启动 TC++3.0,新建一个 C 文件; (2)输入程序; (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序,观察分析运行结果。十二、1.调试过程经分析错误是由于 printf (&%c%c&, c1, c2)后未加;导致。修改后运行如下2.成功运行 3. printf(&%u, %u\n& a, b);改成 printf(&%u, %u\n&, a, b); 成功运行 4.成功运行。十三、1. 2.实验结果3.4.十四、总结 通过这次上机实验我掌握 C 语言数据类型,熟悉如何定义一个整型、字符型和 实型变量并对它们赋值的方法,学会使用 C 的有关算法运算符及表达式,特别是自 加(++) 和自减(--)运算符。并进一步熟悉 C 程序的编辑, 编译, 连接和运行的过程。 实验名称实验名称:顺序结构程序设计 十五、 实验目的和要求掌握赋值语句的使用方法 掌握各种类型数据的输入输出方法,能正确使用各种格式控制符十六、实验内容和原理6. 输入并运行下面程序,分析运行结果。# include &stdio.h& void main( ) { int a, float d,e; char c1,c2; double f,g; long m,n; unsigned int p,q; a=61; b=62; c1=’a’; c2=’b’; d=3.56; e= -6.87; f=; g=0.; m=50000; n=-60000; p=32768; q=40000; printf(&a=%d, b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n&, a, b,c1,c2,d,e); printf(&f=%15.6f, g=%15.12f\nm=%ld,n=%ld\np=%u,q=%u\n&, f,g,m,n,p,q); } 7. 编程序求一个圆的周长、面积,圆球表面积和圆柱体积。用 scanf 输入数据, 输出计算结果。输出时要有文字说明,取小数点后两位数字。8. 编程序,用 getchar 函数读入两个字符给 c1、c2,然后分别用 putchar 函数和 printf 函数输出这两个字符。9. (选作)有自学或有兴趣同学可以编写程序判断一个年份是否为闰年。十七、 十八、实验环境 算法描述及实验步骤计算机及 Turbo C++ 3.0。1.(1)启动 TC++3.0,新建一个 C 文件; (2)输入程序 1; (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序,观察分析运行结果。2. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。 3. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。十九、1.调试过程long m,n 后加; printf(&a=%d, b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n, a, b,c1,c2,d,e); 少了” 无错误,成功运行。2.经分析为定义常量时使用=错误导致,修改后成功运行。3. 无错误,成功运行。二十、1.实验结果2. 输入 123,456,结果如下:输入 2,6,结果如下:3. 输入 ac 结果如下: 二十一、 总结经过本次上机实验, 我已基本掌握赋值语句的使用方法, 也掌握各种类型数据的 输入输出方法,能正确使用各种格式转换符,同时更进一步了解 C 程序的运行环境。 附录:2. #define pi 3. #include &stdio.h& void main() { float r,h; printf(&Please input r,h:\n&); scanf(&%f,%f&,&r,&h); result=2*pi*r; printf(&circle zhouchang =%6.2f\n&,result); result=pi*r*r; printf(&circle mianji=%6.2f\n&,result); result= 4*pi*r*r; printf(&ball biaomianji=%6.2f\n&,result); result=4*pi*r*r*r/3; printf(&ball tiji=%6.2f\n&,result); result=pi*r*r*h; printf(&zhuti tiji=%6.2f\n&,result); }3. #include &stdio.h& void main() { char c1,c2; printf(&Please input two char:\n&); c1=getchar(); c2=getchar(); printf(&Putchar result :\n&); putchar(c1); putchar(c2); printf(&\nPrintf result:\n&); printf(&%c\n&,c1); printf(&%c\n&,c2);} 实验四 实验四:逻辑结构程序设计 二十二、 实验目的和要求了解 C 语言表示逻辑量的方法 正确使用逻辑运算符和逻辑表达式,掌握 if 语句和 switch 语句 结合程序掌握一些简单算法,并学习调试程序二十三、 实验内容和原理1. 有一函数x y = 2x-1 3x-11 (x<1) (1≤x<10) (x≥10)写一程序,用 scanf 函数输入 x,输出 y 值。2. 编程实现:给出一个百分制成绩,要求输出成绩等级 A、B、C、D、E。90 分以上 为 A,81~89 分为 B,70~79 分为 C,60~69 分为 D,60 分以下为 E。3. 给一个不多于 5 位的正整数,要求:①求出它是几位数;②分别打印出每一位数 字;③按逆序打印出各位数字,例如原数为 321,应输出 123。二十四、 实验环境1. 硬件:PC 机; 2. 软件:Windows 2000、TurboC++ 3.0 。二十五、 算法描述及实验步骤1. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4) 编译源程序, 观察屏幕上显示的编译信息, 修改出现的错误, 直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。2. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4) 编译源程序, 观察屏幕上显示的编译信息, 修改出现的错误, 直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。3. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4) 编译源程序, 观察屏幕上显示的编译信息, 修改出现的错误, 直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。4. (1)启动 TC++3.0,新建一个 C 文件; (2)输入事先设计好的程序(见附录); (3)保存文件; (4) 编译源程序, 观察屏幕上显示的编译信息, 修改出现的错误, 直到编译成功; (5)连接程序、运行程序; (6)输入测试数据,检查程序执行结果是否正确。二十六、 调试过程1.无错误,出现如下信息:2.3.没有给 indiv 先定义,修改后成功运行。二十七、 实验结果1. 输入 0,运行结果如下:输入 5,运行结果如下:输入 13,运行结果如下:2. 输入 94,运行结果如下:输入 86,运行结果如下:输入 74,运行结果如下:输入 61,运行结果如下:输入 52,运行结果如下:输入-70 时结果:3. 输入 18795 运行结果如下 二十八、 总结通过本次上机实验我了解 C 语言表示逻辑量的方法, 能正确使用逻辑运算符和逻 辑表达式, 基本掌握了 if 语句和 switch 语句和一些简单的算法, 并大体上学会了调 试程序。 附录:1. #include &stdio.h& void main () { int a,b; printf(&Please input a:\n&); scanf(&%d&,&a); if (a&1) printf(&b= %d&,a); else if(1&=a&10) {b=2*a-1; printf(&b= %d&,b); } else if(a&=10) {b=3*a-11; printf(&b= %d&,b); } } 2. #include &stdio.h& void main() { printf(&please input scores:&); scanf(&%f&,&score); while(score&100||score&0) {printf(&\nWrong!&); scanf(&%f&,&score); } switch((int)(score/10)) {case 10case 9grade='A'; case 8grade='B'; case 7grade='C'; case 6grade='D'; case 5case 4case 3case 2: case 1case 0grade='E'; } printf(&score:%5.1f,grade:%c \n&,score,grade); } 3. #include &stdio.h& #include &math.h& void main() { int indiv,ten,hundred,thousand,ten_thousand, printf(&please input a number:&); scanf(&%ld&,&num); if(num&9999) place=5; else if(num&999) else if(num&99) else if(num&9) else place=1; printf(&place=%d\n&,place); printf(&Each number:&); ten_thousand=num/10000; thousand=(int)(num-ten_thousand*1; hundred=(int)(num-ten_thousand*10000-thousand*; ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; switch(place) {case 5printf(&%d,%d,%d,%d,%d&,ten_thousand,thousand,hundred,ten,indiv); printf(&\nChanged number:&); printf(&%d,%d,%d,%d,%d\n&,indiv,ten,hundred,thousand,ten_thousand); case 4printf(&%d,%d,%d,%d&,thousand,hundred,ten,indiv); printf(&\nChanged number:&); printf(&%d,%d,%d,%d\n&,indiv,ten,hundred,thousand); case 3printf(&%d,%d,%d&,hundred,ten,indiv); printf(&\nChanged number:&); printf(&%d,%d,%d\n&,indiv,ten,hundred); case 2printf(&%d,%d&,ten,indiv); printf(&\nChanged number:&); printf(&%d,%d\n&,indiv,ten); place=4; place=3; place=2; case 1:printf(&%d&,indiv); printf(&\nChanged number:&); printf(&%d\n&,indiv); } } 实验名称:循环结构程序设计 实验名称:循环结构程序设计 二十九、 实验目的和要求熟悉掌握用 while 语句、do-while 语句和 for 语句实现循环的方法 掌握在程序设计中用循环方法实现一些常用算法(如穷举、迭代、递推等) 进一步学习调试程序三十、实验内容和原理1. 输入两个正整数 m 和 n,求其最大公约数和最小公倍数。2. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。3. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了 一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了 前一天剩下的一半零一个。到第 10 天早上想再吃时,就只剩一个桃子了。求第一天 共摘多少桃子。三十一、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。三十二、 算法描述及实验步骤见附录三十三、 调试过程1.没有给“P”定义改为 2.没有加“” ”和“; ”改为 3.无错误,见附录。三十四、 实验结果1.2. 3.三十五、 总结通过本次上机实验,我基本熟悉掌握 while 语句,do-while 语句 和 for 语句实循环的方法,掌握在程序设计中用循环的方法实现一些常用算法,并进一步 学习调试程序。但是总是忘记对变量进行定义和添加符号(如“;) ”。 附录实验 1:#include &stdio.h& void main() {int p,r,n,m, printf(&please input two numbers:&); scanf(&%d,%d,&,&n,&m); if(n&m) {temp=n; n=m; m= } p=n*m; while(m!=0) {r=n%m; n=m; m=r; } printf(&The big:%d\n&,n); printf(&the small:%d\n&,p/n); } 实验 2#include &stdio.h& void main() { int letters=0,space=0,digit=0,other=0; printf(&please input a line:\n&); while((c=getchar())!='\n') {if (c&='a'&&c&='z'||c&='A'&&c&='Z') letters++; else if(c==' ') space++; else if(c&='0'&&c&='9') digit++; else other++; } printf(&letter:%d\n space:%d\n digit:%d\n other:%d\n&,letters,space,digit,other); } 实验 3#include&stdio.h& void main() { int day,x1,x2; x1=1; for(day=9;day&0;day--){ x2=(x1+1)*2; x1=x2; printf(&total=%d&,x2); } 实验名称实验名称:数组 三十六、 实验目的和要求掌握一维数组、二维数组的定义、赋值和输入输出 掌握字符数组和字符串函数的使用 结合程序掌握一些简单算法三十七、 实验内容和原理1. 用选择法对 10 个整数排序。10 个整数用 scanf 函数输入。2. 有 15 个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的 第几个元素的值。如果该数不在数组中,则输出“无此数”。3. (选做)找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上 最小。也可能没有鞍点。4. 将两个字符串连接起来,不要用 strcat 函数。三十八、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。三十九、 算法描述及实验步骤见附录四十、调试过程1.数组符号为“[ ]”,错写成“{ }”改为 2.经过查找发现是 void main( )误输入为 voinmain( )4.忘记添加一对单引号改为四十一、 实验结果1. 2.4.四十二、 总结通过本次上机实验我大体上掌握了数组的定义,赋值和输入方 法, 也掌握了字符数组和字符串函数的使用, 并能结合一些简单程序了解与数组有关的算法。但是刚接触数组对其符号用得不是很应手, 还有输入时总出现一些简单错误, 所以自己应该 多进行上机实验。 附录:实验 1#include &stdio.h& void main() {int i,j,min,temp,a[11]; printf(&enter date:\n&); for(i=1;i&=10;i++) {printf(&a[%d]=&,i); scanf(&%d&,&a[i]); } printf(&\n&); printf(&The orginal numbers:\n&); for(i=1;i&=10;i++) printf(&%5d&,a[i]); printf(&\n&); for(i=1;i&=9;i++) {min=i; for(j=i+1;j&=10;j++) if(a[min]&a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]= } printf(&\nThe sorted numbers:\n&); for(i=1;i&=10;i++) printf(&%5d&,a[i]); printf(&\n&); } 实验 2# include&stdio.h& # define N 15 voin main( ) { int i,number,top,bott,mid,loca,a[N],flag=1, printf(&enter data:\n&); scanf(&%d&,&a[0]); i=1; while(i&N) {scanf(&%d&,&a[i]); if(a[i]&=a[i-1]) i++; else printf(&enter this data again:\n&); } printf(&\n&); for(i=0;i&N;i++) printf(&%d &,a[i]); printf(&\n&); while(flag) {printf(&input number to look for:&); scanf(&%d&,&number); sign=0; top=0; bott=N-1; if((number&a[0])||(number&a[N-1])) loca=-1; while((!sign)&&(top&=bott)) {mid=(bott+top)/2; if(number==a[mid]) {loca= printf(&Has found %d,its position is%d\n&,number,loca+1); sign=1; } else if(number&a[mid]) bott=mid-1; else top=mid+1; } } } 实验 3#include &stdio.h& void main() {char s1[80],s2[40]; int i=0,j=0; printf(&\nplease input string1:&); scanf(&%s&,s1); printf(&\nplease input string2:&); scanf(&%s&,s2); while(s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i]='\0'; } 实验名称实验名称:函数 四十三、 实验目的和要求掌握定义函数的方法 掌握函数的嵌套调用和递归调用的方法 掌握全局变量和局部变量的概念和使用方法四十四、 实验内容和原理1. 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。2. 用全局变量的方法,分别用两个函数求两个整数的最大公约数和最小公倍数,但其 值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数调中输出 它们的值,两个整数由键盘输入。3. 输入 10 个学生 5 门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均 分;③找出最高的分数所对应的学生和课程。4. 写一函数,用“起泡法”对输入的 10 个字符按由小到大顺序排列。2 2 5. 求方程 ax +bx+c=0 的根,用 3 个函数分别求当 b -4ac 大于 0、等于 0 和小于 0 时的 根并输出结果。从主函数输入 a、b、c 的值。6. 用递归调用的方法求写一个求 n! 的函数,在主函数中输入一个整数,输出该数的阶 乘。四十五、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。四十六、 算法描述及实验步骤见附录四十七、 调试过程1.编译时无出现错误、警告信息:2.定义变量时,变量输入有误 调试为 .3.编译程序较复杂时“{ }”范围搞乱,在第 46 行后再加一个“}”4.编译时出现错误、警告信息void main( ) 5.第 18 行的“else if”之间少了空格而错写成“elseif”,原因是没加主函数 6.函数 y=fac(n)后忘记加“; ”改为四十八、 实验结果1.2.(ma:最大公约数 mi:最小公倍数) 3.4.5. 6.四十九、 总结通过这次上机实验我已基本掌握定义函数的方法,了解函数实 参与形参的对应关系以及“值传递”的方式,并掌握函数的嵌套调用的方法,也掌握了全局 变量和局部变量的概念和使用方法以及学会对多文件的程序的编译和运行。但是一些可避免 的细微错误仍存在,所以在编程序时应细心。 附录:实验 1 #include &stdio.h& void main() {int prime(int); printf(&\ninput an integer:&); scanf(&%d&,&n); if (prime(n)) printf(&\n %d is a prime.\n&,n); else printf(&\n %d is not a prime.\n&,n); } int prime(int n) {int flag=1,i; for(i=2;i&n/2&&flag==1;i++) if(n%i==0) flag=0; return(flag); } 实验 2 #include &stdio.h& void main() {int a(int,int); int i(int,int,int); int u,v,ma, scanf(&%d,%d,&,&u,&v); ma=a(u,v); printf(&ma=%d\n&,ma); mi=i(u,v,ma); printf(&mi=%d\n&,mi); } int a(int u,int v) {int t,r; if(v&u) {t=u;u=v;v=t;} while((r=u%v)!=0) {u=v; v=r;} return(v); } int i(int u,int v,int h) {return(u*v/h); } 实验 3 #include &stdio.h& #define N 10 #define M 5 float score[N][M]; float a_stu[N],a_cour[M]; int r,c; void input_stu(void) {int i,j; for (i=0;i&N;i++) {printf(&\ninput score of student %2d:\n&,i+1); for(j=0;j&M;j++) scanf(&%f&,&score[i][j]); } } void aver_stu(void) {int i,j; for (i=0;i&N;i++) {for(j=0,s=0;j&M;j++) s+=score[i][j]; a_stu[i]=s/5.0; } } void aver_cour(void) {int i,j; for(j=0;j&M;j++) {s=0; for(i=0;i&N;i++) s+=score[i][j]; a_cour[j]=s/(float)N; } } float highest() { int i,j; high=score[0][0]; for(i=0;i&N;i++) for(j=0;j&M;j++) if(score[i][j]&high) {high=score[i][j]; r=i+1; c=j+1; } return(high); } void main() {int i,j; input_stu(); aver_stu(); aver_cour(); printf(&\n No. cour1 cour2 cour3 cour4 cour5 for(i=0;i&N;i++) {printf(&No.%2d&,i+1); for(j=0;j&M;j++) printf(&%8.2f&,score[i][j]); printf(&%8.2f\n&,a_stu[i]); } printf(&\n average:&); for(j=0;j&M;j++) printf(&%8.2f&,a_cour[j]); printf(&\n&); h=highest(); printf(&higest:%7.2f No.%2d course%2d\n&,h,r,c); } 实验 4 #include &stdio.h& #include &string.h& #define N 10 #include&conio.h& char str[N]; void main() {void sort(char[]); printf(&input string:\n&); scanf(&%s&,&str); sort(str); printf(&string sorted:\n&); for(i=0;i&N;i++) printf(&%c&,str[i]); printf(&\n&); } void sort(char str[]) {int i,j; for(j=1;j&N;j++) for(i=0;(i&N-j)&&(str[i]!='\0');i++) if(str[i]&str[i+1]) {t=str[i]; str[i]=str[i+1]; str[i+1]=t; } }aver\n&); 实验 5 #include &stdio.h& #include &math.h& float x1,x2,disc,p,q; void main() {void big_than_zero(float,float); void equal_to_zero(float,float); void small_than_zero(float,float); float a,b,c; printf(&\ninput a,b,c:&); scanf(&%f,%f,%f&,&a,&b,&c); printf(&equation%5.2f*x*x+%5.2f*x+%5.2f=0\n&,a,b,c); disc=b*b-4*a*c; printf(&root:\n&); if(disc&0) {big_than_zero(a,b); printf(&x1=%f\t\tx2=%f\n&,x1,x2); } else if(disc==0) {equal_to_zero(a,b); printf(&x1=%f\t\tx2=%f\n&,x1,x2); } else {small_than_zero(a,b); printf(&x1=%f+%fi\tx2=%f-%fi\n&,p,q,p,q); } } void big_than_zero(float a,float b) {x1=(-b+sqrt(disc)/(2*a)); x2=(-b-sqrt(disc)/(2*a)); } void equal_to_zero(float a,float b) {x1=x2=(-b)/(2*a); } void small_than_zero(float a,float b) {p=-b/(2*a); q=sqrt(-disc)/(2*a); } 实验 6 #include &stdio.h& void main() {float fac(int n); printf(&intput a number:&); scanf(&%d&,&n); y=fac(n); printf(&%d!=%10.0f\n&,n,y); } float fac(int n) { if(n&0) {printf(&n&0,Wrong!&); } else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); } 实验名称实验名称:指针 五十、 实验目的和要求学会定义和使用指针变量 能正确使用数组的指针和指向数组的指针 能正确使用字符串的指针和指向字符串的指针变量五十一、 实验内容和原理1. 输入 3 个整数,按由小到大的顺序输出。2. 输入 3 个字符串,按由小到大的顺序输出。3. 输入 10 个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写 3 个函数:①输入 10 个数;②进行处理;③输出 10 个数。4. 有 n 个整数,使前面各数顺序向后移 m 个位置,最后 m 个数变成最前面 m 个数,写 一函数实现以上功能,在主函数中输入 n 个整数和输出调整后的 n 个数。5. 在主函数中输入 10 个等长的字符串。用另一函数对它们排序。然后在主函数输出这 10 个已排好序的字符串。五十二、 实验环境1. 硬件:PC 机; 2. 软件:Windows 操作系统、TurboC++ 3.0 。五十三、 算法描述及实验步骤见附录五十四、 调试过程1.没给*p2 定义为整型 改为 2.在使用字符串函数时没有包含头文件“string.h”,尽管能运行但是实验不会成功。所以调试时在程序开头添加“#include &string.h&”。3.输入时误把输出函数“printf”写成“print”4. 数后面要加“;”,所以调试时应 把 5. 义方法不对导致这错误。改为原因是定义一个函数不用像声明一个函语句后面“;”去掉。因二维数组定五十五、 实验结果1. 2.3.4.5.五十六、 总结在了解了指针概念的基础上通过本次上机实验,我更进一步学会定义和使用指针变量,也 基本能使用数组的指针和指向数组的指针变量, 以及使用字符串的指针和指向字符串的指 针变量。从这次实验中我也知道自己对函数的定义和声明的区别还不是很熟悉,还有实验 的一些错误细节没有避免掉,今后还应加强程序的书写和上机实验。 附录:实验 1#include &stdio.h& void main() {void swap(int * p1,int * p2); int a,b,c; int *p1,*p2,*p3; printf(&please input three numbers:&); scanf(&%d,%d,%d&,&a,&b,&c); p1=&a;p2=&b;p3=&c; if(a&b) swap(p1,p2); if(a&c) swap(p1,p3); if(b&c) swap(p2,p3); printf(&The order numbers is:%d,%d,%d\n&,a,b,c); } void swap(int *p1,int*p2) { p=*p1;*p1=*p2;*p2=p; } 实验 2 #include &stdio.h& #include &string.h& void main() {void swap(char *,char *); char str1[20],str2[20],str3[20]; printf(&please input three line:\n&); gets(str1);gets(str2);gets(str3); if(strcmp(str1,str2)&0) swap(str1,str2); if(strcmp(str1,str3)&0) swap(str1,str3); if(strcmp(str2,str3)&0) swap(str2,str3); printf(&The order line is:\n&); printf(&%s\n%s\n%s\n&,str1,str2,str3); } void swap(char * p1,char * p2) {char p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } 实验 3#include &stdio.h& void main() {void input(int *); void max_min_value(int *); void output(int *); int number[10]; input(number); max_min_value(number); output(number); } void input(int number[]) { printf(&please input 10 numbers:&); for(i=0;i&10;i++) scanf(&%d&,&number[i]); } void max_min_value(int number[]) {int *max,*min,*p, max=min= for(p=number+1;p&number+10;p++) if(*p&*max) max=p; else if(*p&*min) min=p; temp=number[0];number[0]=**min= if(max==number) max= temp=number[9];number[9]=**max= } void output(int number[]) {int*p; printf(&Now,they are&); for(p=p&number+10;p++) printf(&%d&,* p); printf(&\n&); } 实验 4#include&stdio.h&; void main() {void move(int *,int,int); int number[20],n,m,i; printf(&how mang numbers:&); scanf(&%d&,&n); printf(&\n&); printf(&please input numbers:&); for(i=0;i&n;i++) scanf(&%d&,&number[i]); printf(&how many position you want move:&); scanf(&%d&,&m); move(number,n,m); printf(&\nthe new arrange is:\n&); for(i=0;i&n;i++) printf(&%d &,number[i]); printf(&\n&); } void move(int array[20],int n,int m) {int *p,array_ array_end=*(array+n-1); for(p=array+n-1;p&p--) *p=*(p-1); *array=array_ m--; if(m&0) move(array,n,m); } 实验 5#include&stdio.h& #include&string.h& void main() {void sort(char(*p)[6]); char str[10][6]; char (*p)[6]; printf(&input 10 strings:\n&); for(i=0;i&10;i++) scanf(&%s&,str[i]); p= sort(p); printf(&The new arrange is:\n&); for(i=0;i&10;i++) printf(&%s\n&,str[i]); } void sort(char(*s)[6]) {int i,j; char temp[6],*t= for(i=0;i&9;i++) for(j=0;j&9-i;j++) if(strcmp(s[j],s[j+1])&0) {strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t); } }
【c语言的实验报告】四川师范大学计算机科学学院语言程序设计》 《C 语言程序设计》 实 验 手 册 年 2 月 年级年级:2009级 2009级专业专业:电子商务班级:04班 04班姓名姓名:罗桂清学号学号:指导指导教师:廖雪花1 《C语言程序设计》实验课程简介 语言程序设计》实验课程简介课程名称:C语言程序设计实验 课程名称 课程性质课程性质:专业必修课 课程属性课程属性:专业必修课 学时学分:学时32 学分1 学时学分 开课实验室:软件实验室 开课实验室 面向专业:网络工程、软件工程、计算机科学与技术 面向专业一、课程的任务和基本要求C语言程序设计实验是面向计算机相关专业学生开设的 《C语言程序设计》 实验课, 是配合 《C 语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序 设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对 课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手。通过C语言上机实验 的,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。二、实验项目【实验一】最简单的C程序---顺序程序设计 【实验二】逻辑运算和判断选取控制 【实验三】循环结构程序设计(一) 【实验四】循环结构程序设计(二) 【实验五】函数 【实验六】数组(一) 【实验七】数组(二) 【实验八】指针 【实验九】结构体、共用体和文件 【实验十】C程序综合性实验三、有关说明1、与其它课程和教学环节的联系先修课程:计算机文化 后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程 2、教材和主要参考书目(1)教材《C程序设计习题解答与上机指导》,谭浩强 吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目《C语言程序设计》 谭浩强主编,清华大学出版社,2003年。2 三、实验内容程序-----顺序程序设计 实验一 最简单的 C 程序---顺序程序设计 (验证性实验 、 (一) 实验目的 1.熟悉 win-tc 程序运行环境 2.掌握运行一个 C 程序的步骤,理解并学会 C 程序的编辑、编译、链接方法 3.掌握 C 语言中使用最多的一种语句――赋值语句 4.掌握数据的输入输出方法,能正确使用各种格式控制符 、 (二) 实验内容 1.写出下列程序的运行结果 (1)#include { printf(“*****************\n”); printf(“This is a c program. \n”); printf(“****************\n”); } 运行结果及分析运行结果运行结果***************** This is a c program ***************** 分析分析1. c 程序中的#include&stdio.h&是指一个标准输入输出文件, 它包含了标准输入输出函数。2. 一个 c 程序中必须只能有一个 main 函数,void main()是指子最后不给程序返回任何 值; 3. 这个程序中的 prinft 函数是用来显示输出的,这三条命令全都会显示输出。将程序中的\n 去掉后,运行结果及分析运行结果运行结果************************This is a program*************************** 分析分析1. 一个 c 程序中必须只能有一个 main 函数,void main()是指子最后不给程序返回任何 值; 2.c 程序支持一些特殊的反斜杠字符常量,这些常量常用于输出函数中,\n 是指换行输 出,所以将\n 去掉后,printf 中的三条语句就不会换行输出,只显示在一排。(2)#include { int a=100,b=20,sum, sum=a+b; &stdio.h& &stdio.h& void main() 2 学时)void main()3 sb=a/b; printf(&sum=%d,sb=%d&,sum,sb); } 运行结果及分析运行结果运行结果sum=120.sb=5 分析分析1.这是一个关于数的简单加法计算和除法计算并显示出结算结果的 c 程序; 一个 c 程序中 必须只能有一个 main 函数,void main()是指子最后不给程序返回任何值; 2.用 int 将变量定义成了整型变量; 3.在定义变量时就将 a 和 b 初始化了值用于后面计算; 4.将 a 和 b 的和赋值到了 sum 中,将 a 和 b 的商赋值到了 sb 中,并显示输出; 5.%d 是指输出的时候是输出整数型 (3)#include { char c1,c2; c1=97;c2=98; printf(&%c ,%c\n&,c1,c2); printf(&%d,%d\n&,c1,c2); printf(&%c } 运行结果及分析运行结果运行结果a c, 分析分析1.一个 c 程序中必须只能有一个 main 函数, void main()是指子最后不给程序返回任何值; 2.用 char 将 c1 和 c2 定义成字符变量,并给其赋值;所以; 3.用 printf(&%c ,%c\n&,c1,c2)输出 c1 和 c2 所对应的字符,而 97、98 所对应的AS CII值是 a 和 b 4. 用 printf(&%d,%d\n&,c1,c2)输出所对应的值; 5. printf(&%c 值输出。(4)#include void main () { int i=8,j=10,m,n; m=++i;n=j++; printf(&%d,%d,%d,%d&,i,j,m,n); } &stdio.h& %c\n&,c1+1,c2+2)是指将c1和c2中的值加上1和2后所对应的字符 b d 97, 98 %c\n&,c1+1,c2+2); &stdio.h&void main( )4 运行结果及分析运行结果运行结果9,11,9,10 分析分析1.一个 c 程序中必须只能有一个 main 函数, void main()是指子最后不给程序返回任何值; 2.用 int 将 i,j,m,n 定义成整型变量; 3.m=++i 是指将 i 加 1 后赋值给 m 和 i,n=j++是指先将 j 的值赋给 n,然后 j=j+1; 4.用 printf(&%d,%d,%d,%d&,i,j,m,n)显示输出各变量所对应的值。再将本程序的第 3 行改为 m=i++;n=++j; 运行结果及分析运行结果运行结果9,11,8,11 分析1.一个 c 程序中必须只能有一个 main 函数, void main()是指子最后不给程序返回任何值; 分析2.用 int 将 i,j,m,n 定义成整型变量; 3.m=i++是指先将 i 的值赋给 m,然后 i=i+1 的值;n=j++是指将 j+1 的值赋给 j 和 m; 4.用 printf(&%d,%d,%d,%d&,i,j,m,n)显示输出各变量所对应的值。2.程序填空 任意输入一个有五位数字的正整数 x,分别输出每一数位上的数字(由高到低分别用 b5,b4,b3,b2,b1 表示),请将程序补充完整。#include &stdio.h& main() { int b1,b2,b3,b4,b5; long int b5= b3= b1= ; Scanf( “ %ld ”,&x); (x/10000)%10 x/10000) %10; (x/100) %10 x %10 ; %ld \n”,x); b4=(x/1000)%10; b2=(x/10)%10; printf(“the number is } 程序分析程序分析1.由于此程序要输出一个五位数,所以应将变量的类型定义成 long int,以免超出范围 后导致乱码输出; 2.scanf 函数用于键盘输入,此命令将用户输入的值赋给 x; 3.将输入的五位数的每一位的值通过运算公式转换成数,并用 prinft 函数显示输出。printf(“its bit is:%d,%d,%d,%d,%d\n”,b5,b4,b3,b2,b1);3.程序改错(注意 注意:题中的编号为行序号,并非程序本身) 注意 计算任意一个半径为 r 的圆的面积和周长(结果保留两位小数) (1)#include &stdio.h&5 (2)main() { (3) (4) (5) (6) (7) (8) (9)} 错误语句的行号(3) 改正后的语句全行:float r, p=3.14, c, float flo 错误语句的行号错误语句的行号(5 ) (6 ) 改正后的语句全行scanf(“%f”, &r); scanf(“%f” &r); 改正后的语句全行c=2*p*r; 错误语句的行号(7) 改正后的语句全行:area=p*r*r; area=p*r*r; 改错分析改错分析1.在 程序中,一个语句中声明多个变量是需要用“ ”隔开; 1.在 c 程序中,一个语句中声明多个变量是需要用“, 隔开; 2.用 函数时,变量前面必须加操作符& 指明该变量的地址; 2.用 scnf 函数时,变量前面必须加操作符&,指明该变量的地址; 3.乘法表示要用*号表示; 3.乘法表示要用*号表示; 乘法表示要用 4.每一个执行语句结束后必须用分号“ ”结束。4.每一个执行语句结束后必须用分号“; 结束。每一个执行语句结束后必须用分号 p=3.14,c, printf(“input r:”); scanf(“%f ”, r); c=2p*r; area=p*r*r printf(“c=%-7.2f,area=%-7.2f”,c,area);6 实验二 逻辑运算和判断选取控制 (验证性实验 、 (一) 实验目的 1.了解逻辑量在 C 语言中的表示方法 2.学会使用逻辑运算符和逻辑表达式 3.熟练掌握 if 语句和 switch 语句 、 (二) 实验内容 1.写出下列程序的运行结果 (1)#include { int a,b,x=10,y=9; a=(--x == y++)? --x ++y; b= printf(“%d,%d\n”,a,b); } 运行结果及分析运行结果运行结果8,10 分析分析1. 此程序是关于逻辑运算符、递增和递减运算符以及条件运算符的应用; 2. void main()是指程序结束后不返回任何值; 3. int a,b,x=10,y=9;是定义 int 类型的整数变量及给想 x 和 y 初始化值; 4. a=(--x == y++)? --x ++y;是指当 x-1 的值等于 y 的值时 x=x-1,否则 x=++y,因为 ―x=9=y,所以条件成立,a 的值就等于―x,而在前面的运算中 x=9、y=10,因此―x=8; b=y=9; 5. printf 函数显示输出所运算出来的结果。(2)#include { int a=2,b=-1,c=2; if(b&0)c=0; else c+=1; else printf(“%d\n”,c); } 运行结果及分析运行结果运行结果2 分析分析If(a&b) &stdio.h& &stdio.h& void main( ) 2 学时)void main()7 1. 此程序时关于 if 函数和 c+=1 类型的复合函数语句的应用; 2. 当 if 条件成立时就执行 if 下面的语句,不成立时则直接执行 else 语句,此程序中的 if(a&b)不成立,所以直接执行 else c+=1; 3. c+=1;是指 c=c+1, (3)#include { int a=0,b=0,c=0; if(++a & 0 || ++b & 0) ++c; printf(“\na=%d,b=%d,c=%d”,a,b,c); } 运行结果及分析运行结果运行结果a=1, b=0, c=1; 分析分析1. 此程序是关于 if 函数和递增运算符的应用; 2. int a=0,b=0,c=0;是定义整形变量并给其赋值; 3.if(++a & 0 || ++b & 0) 的运算,所以 b 还是等于 0; 4.Printf 输出运算结果。(4)#include &stdio.h& ++c;是值当++a & 0 和 ++b & 0 同时满足时,执行后面的++ 才,因为前面条件满足,所以执行++c;因此 a=1,c=1,而因为在逻辑条件成立时,值进行前面 &stdio.h&void main( )void main() { int x=-1; switch (x) { defaultprintf(“a”); case 1case 2} } 运行结果及分析运行结果运行结果abc 分析分析1. 此程序是关于 switch 语句的应用,在 C 语言中它经常跟 Case 一起使用,是一个判断选择 代码。其功能是控制业务流程流转的; 2. void main()是指程序结束后不返回任何值;intx=-1,是指定义整形变量并给其赋值;8printf(“b”); printf(“c”); 3. 在 switch()开始时,从 default 处开始执行,输出 a,在往下执行,不满足 case1,输 出 b,再执行 case2,也不满足,因此输出 c。在 case 1:printf(“b”);后加上语句,结果如何?修改程序并上机调试。运行结果及分析运行结果运行结果ab 分析1. 此程序是关于 switch 语句的应用,在 C 语言中它经常跟 Case 一起使用,是一个判断选择 代码。其功能是控制业务流程流转的; 2. void main()是指程序结束后不返回任何值;intx=-1,是指定义整形变量并给其赋值; 3. 在 switch()开始时,从 default 处开始执行,输出 a 在往下执行,不满足 case1 出 c. 在遇到 break 时退出执行。2.程序填空 输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“is larger” 。如果 这两个数相等,显示“These numbers are equal.” 。请在_____内填入正确内容。#include { int a,b; printf(“please input two numbers, a, b! scanf(“%d%d”,&a,&b); if( a&b ) printf(“%d is larger”, a ); else if(______a=b__ ___a=b________) printf(“These numbers are equal”); ___a=b__ printf(“ larger” else _____printf(“%d is larger”,b); printf( } 填空①:a&b a&b 填空②:__a=b__ __a=b__ 填空③_printf(“%d is larger”,b); printf(“ larger” printf( 结果分析运行结果运行结果5 is larger 分析分析1. 此程序涉及到了 scanf 键盘输入和 if 条件语句的应用; 2. scanf(“%d%d”,&a,&b)指用户输入两个数保存到 a 和 b 中; 3. if( a&b ) printf(“%d is larger”, a ); else if(______a=b__ ___a=b________) printf(“These numbers are equal”); ___a=b__ else _____printf(“%d is larger”,b); printf(“ larger”,b);指当 a&b 成立时输出 a is larger,若 a=b 时输 printf( 出 These numbers are equal,若前面都不成立,a&b 时,输出 b is larger.; “); &stdio.h& void main( )9 3.编写程序 (1)编写一个程序,读入 5 个整数,然后确定并显示这组数中的最大整数和最小整数。程序清单程序清单#include&stdio.h& void main() { int max,min,x,n; printf(&please input the first number:&); scanf(&%d&,&x); max=min=x; for(n=2;n&=5;n++) { printf(&please input the %d number:&,n); scanf(&%d&,&x); if(x&max) if(x&min) } printf(&the biggest number is:%d;the smallest number is:%d.\n&,max,min); getch(); } {max=x;} min=x;程序编写注意事项程序编写注意事项1. 此程序要连续输入五个数,可用 for 循环输出五条 printf 函数; 2. 五个数排列大小,在输入第一个数的时候这个数既是最大数也是最小数,在之后没输入一 个是数的时候就与前一个数进行比较,大的储存在 max 里,小的话就存在 min 里,直到第 五个数比较完后输出结果,printf(&please input the %d number:&,n); scanf(&%d&,&x); if(x&max) if(x&min) {max=x;} min=x;实现了这个功能。(2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。(提示:使用求模运算 符。偶数是 2 的倍数。任何 2 的倍数除以 2 时,余数均为零。) 程序清单程序清单#include &stdio.h& void main() { printf(&please input a number&);10 scanf(&%d&,& n); if(n%2==0) printf(&This number is even number&); else printf(&This number is odd number&); getch(); } 程序编写注意事项程序编写注意事项1. 键盘输入函数不能丢掉位置控制符号&; 2. %是模运算符,取两数相处的余数; 。else 语句。3. 判断是奇数还是偶数要用条件运算符 if。。(3)编写一个程序,从键盘中输入 3 个不同的整数,然后显示这 3 个整数的和、平均数、积、 最小数和最大数。(用 if 语句)屏幕中的对话内容如下所示:Input three different integers13 27 14 Sum is 54 Average is 18 Product is 4914 Smallest is 13 Largest is 27程序清单程序清单#include &stdio.h& void main() { int a ,b , c, m, printf(&Input three different integers:\n&); printf(&Input first number:&); scanf(&%d,&,& a); printf(&Input scend number:&); scanf(&%d,&,& b); printf(&Input third number:&); scanf(&%d,&,& c); printf(&Sum is %d\n&,a+b+c); printf(&Average is %d\n&,(a+b+c)/3); printf(&Product is %d\n&, a*b*c); if(a&b && a&c)m=a; else m=b; if(b&c)m=b;11 else m=c; printf(&Max is %d\n&, m); if(a&b)n=a; else n=b; if(b&c)n=b; else n=c; printf(&Min is %d\n&, n); getch(); } 程序编写注意事项程序编写注意事项1. 函数要在 main 函数中进行定义,然后用 scanf 函数给定义好的三个变量赋值; 2. 对函数进行算术运算是要用 c 语言中特定的运算符,乘号用*表示,除号用/表示,括号代表 优先级运算; 3. 比较三个数大小的时候要用 if..else 条件函数进行比较; 4. 如果要在一条语句中显示,要注意 c 语言中的运算顺序。12 实验三 循环结构程序设计( 实验三 循环结构程序设计(一) (验证性实验 、 (一) 实验目的 1.熟悉用 while 语句、do-wile 语句和 for 语句实现循环的方法 2.掌握在程序设计中用循环方法实现的算法 、 (二) 实验内容 1.写出下列程序的运行结果 (1)#include { int count=1; while(count&=10) { count++; printf(“%s\n”,count%2? “****”“++++++++++”); } } 运行结果及分析运行结果运行结果++++++++++ ****** ++++++++++ ****** ++++++++++ ****** ++++++++++ ****** ++++++++++ ****** 分析分析1. while 是入口控制循环语句,先计算测试条件,如果该条件为真,那么就运行其循环体 语句,运行完后,再次计算测试条件,如果仍为真,则继续计算循环体,直到条件为假, 所以在本程序中,直到将 count++运行到 count 等于 10 时停止运算; 2. 在 prinrf 语句中,count%2 是对 count 进行求模运算,并用?条件语句,当 count%2 时输出******,否则就输出++++++++++。因为 count 一直循环到 10,所以就各出了五 次。&stdio.h& void main() 2 学时)(2)#include {&stdio.h&void main()13 int row=10,C while(row&=1) { Column=1; while(Column &=10) { printf(“%s”,row%2 ? “&”“&”); Column++; } row--; printf(“\n”); } } 运行结果及分析运行结果运行结果&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& 分析分析1. while 是入口控制循环语句,先计算测试条件,如果该条件为真,那么就运行其循环体语 句,运行完后,再次计算测试条件,如果仍为真,则继续计算循环体,直到条件为 假; 2. while 可进行循环的嵌套,在本程序中就进行了循环的嵌套,在第一个循环下,再进行 while 循环,第二个循环是对 Column 进行求模和用?判断输出&&,一直循环到 Column=10 为止,第一个 while 循环是控制换行输出的,直到 row&=1 时退出循环。(3)#include {&stdio.h&void main() int y=9; for( ; y&0 ; y--) if(y%3==0) printf(&%d\n& , --y); } 运行结果及分析:14 运行结果运行结果8 5 2 分析分析1. for 语句也是一种入口控制循环,在本程序中 for( ; y&0 ; y--)是循环条件,先将 y 初始化为 9,每执行一次后面的循环体 y 就自减一次,知道 y&=0 是停止循环; 2. if(y%3==0) printf(&%d\n& , --y);是循环体,意识是当 y 除以 3 没有余数时就输出 y-1 的值; 3. 该程序是关于 for 循环和求模运算的应用。2.编写程序 (1)利用循环语句来显示如下所示的数值表:程序清单如下程序清单如下#include { printf(&N\t10*N\t100*N\t1000*N\n&) ; n=1; while(n&=10) {printf(&%d\t %d\t %d\t %d\n &,n,10*n,100*n,1000*n ); n++; } getch(); } &stdio.h& void main()程序编写注意事项程序编写注意事项1. 此程序的输出要用到循环语句,可以选择用 for 循环或者 while 循环; 2. 在编写程序时考虑到格式的美观可以用\t 使各个数之间保持一定的间距。15 (2)编写一程序,能够输入一组 10 个数字,判断并显示出这些数字中的最大数。提示:程序中 应该使用如下的 3 个变量Counter:能够记数到 10 的记数器。Number:当前输入到程序中的数字。Largest:迄今为止所发现的最大数字。程序清单程序清单#include &stdio.h& void main() { int Counter, Number, L printf(&please input the first number:&); scanf(&%d&, & Number); Largest=N for(Counter=2;Counter&=10;Counter++) { printf(&please input the %d number:&,Counter); scanf(&%d&, & Number); if(Number&Largest) Largest=N else Largest=L } printf(&the largest number is %d&, Largest); getch(); } 程序编写注意事项程序编写注意事项1. 首先要定义好所需要的三个变量,即 Counter:能够记数到 10 的记数器,Number:当前输入 到程序中的数字和 Largest:迄今为止所发现的最大数字;counter 在循环时用来计数, number 存储从键盘输入的数字,largest 就是用来存储比较后最大的那个数字; 2. 此程序涉及到循环输出和比较大小, 所以就要用 for 或者 while 语句来是想循环, 且在循环是 要注意没输入一个数时(第一个数除外)都要和之前输入的数进行比较,比较时就要用到 if 条 件语句。3. 要注意 printf 语句的位置,是在循环输入和比较之后再进行输出。(3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱 每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是 一个事例的输入/输出:16 程序清单程序清单#include &stdio.h& void main() { float Gallon,M printf(&Enter the gallons used &-1 to end&:&) ; scanf(&%f&, &Gallon); printf(&Enter the miles driven:&); scanf(&%f&, getch(); } 程序编写注意事项程序编写注意事项1. 在定义 Gallon 和 Miles 这两个变量时要定义成实数浮点型; 2. 在用 printf 显示输出信息后就要用 scanf 函数输入相对应的函数;用 scanf 输入数字时要 注意不要掉了地址控制符。&Miles); printf(&The Miles/Gallon for this tank was %f&,Miles/Gallon) ;(4)编写一个程序读入一个 5 位数,并判断该整数是否是回文。(回文指顺读和倒读都一样的数 字和文字语句,例:1。)提示:使用除法运算符和求模运算符把该数分解成个 数。程序清单程序清单#include &stdio.h& main() { int b1,b2,b3,b4,b5; scanf( & %ld &,&x); b5=(x/10000)%10; b4=(x/1000)%10; b3=(x/100)%10; b2=(x/10)%10;17 b1= x %10; if(b1==b5,b2==b4) printf(&the number %ld is huiwen&,x); else printf(&the numbe %ld is not huiwen&, x) ; } 程序编写注意事项程序编写注意事项:利用整除和取模运算计算出每一位上的数字,然后将第一项和第五项,第 二项和第四项比较,显示其结果。18 实验四 循环结构程序设计( 实验四 循环结构程序设计(二) (验证性实验 、 (一) 实验目的 1.熟练掌握循环语句。2.较灵活地运用三种不同循环语句实现循环程序设计。3.熟练掌握 break 语句、continue 语句及循环的嵌套使用。、 (二) 实验内容 1. 写出下列程序的运行结果 (1)#include { int i,j,k,x=0; for(i=0;i&2;i++) { x++; for(j=0;j&3;j++) { if(j%2) x++; } x++; } k=i+j; printf(&k=%d,x=%d\n& , k , x); } 运行结果运行结果 k=5,x=8 &stdio.h& void main() 2 学时)程序分析程序分析1. 此程序是关于 for 循环嵌套的应用,外循环 for(i=0;i&2;i++)是指给 x 赋值为 0, 循环一次后 x=x+1,直到 x 等于 2 时停止,是将{}里面的内容进行循环。2. 内循环 for(j=0;j&3;j++)是给 j 赋初始值值为 0,直到 j 等于 3 时停止循环,循环 体为 if(j%2) 则就退出循环, 4. 因为在循环结束后 i=2,j=3,所以 k=5,x++运行了 8 次,所以 x=8.
x++; 3. 在内循环中的 if 条件语句,是指当 j 对 2 求模运算余数为 0 时继续进行循环,否19 (2)#include {&stdio.h&void main() int x,y; for(y=1,x=1;y&=50;y++) { if(x&=10) x-=3; } printf(“x=%d,y=%d\n”,x,y); } 运行结果运行结果X=10,y=6 =10, 及分析及分析1. 此程序也是关于 for 循环和 if 条件判断语句的应用; 2. for(y=1,x=1;y&=50;y++)是指给 x 和 y 初始化值为 1,在每次循环后加上 1,直到 y 的 值&=50 后停止循环; 3. 在循环体中的 if(x&=10)是指当 x&=10 时停止跳出循环,if(x%2==1) { x+=5;}是指当 x 的值与 2 进行求模运算余数为 1 是进行 x+=5 的运算并继续,进行 x-=3 的运算 x 的变化过程为:6,3,8,5,10; 4. 因为 x&=10 时停止了循环,所以 x=10,总共循环了 5 次,y 的初始值为 1,所以 y 最后 的值为 6. (3)#include { int { sum=0; for(j=1;j&=4;j++) sum+=j; } printf(“sum=%d\n”, sum); } 运行结果运行结果Sum=10 分析分析1. 此程序是关于 for 循环结构的嵌套使用; 2. 外循环 for(i=1;i&6;i++)将 i 初始为 1,直到 i 的值等于 6 时停止循环; 3. 内循环 for(j=1;j&=4;j++)将 j 的值初始为 1,直到 j 的值等于 4 时停止循环,sum+=j i , j , for(i=1;i&6;i++) &stdio.h& if(x%2==1) { x+=5;}void main()20 时指 sum=sum+j; 4. 虽然外循环了 6 次,但每次在进行内循环时都将 sum 的值初始为 0 了,所以最后结果 j=10. (4) #include { int k = 0 , m = 0 , i , for( i = 0 ; i & 2 ; i++) { for ( j = 0 ; j & 3 ; j++) k++; k -= } m = i + printf(&k=%d,m=%d\n&,k,m); } 运行结果运行结果k=0, k=0,m=5 分析分析1. 此程序是关于 for 循环结构的嵌套使用; 2. 外循环 for( i = 0 ; i & 2 ; i++)是指将内循环进行两次循环,内循环是指将 k++; k -=进行三次循环; 3. j 循环中:k 的值变化为:1,1,2,1,2,0.循环两次结果不变,所以 k 的值就为 0,在 循环结束后 i 和 j 的值分别为 2 和 3,所以 m 的值为 5 &stdio.h&void main ( )2. 程序填空 (1)下面程序的功能是:输出 100 以内同时能被 3 和 7 整除的所有整数,请填空。#include &stdio.h& void main() { int i, j; for ( i=1;___①_____; i++ ) { if (___②______) continue; printf ( &%d\t&,i ); } } 填空①:i&=100; i&=100; 填空②:i%3&&i%7 i%3&&i%7 程序分析程序分析1)、此程序是关于 for 循环结构和 if 判断的应用; 2)、在 for 循环中,i=1 是给循环变量赋初始值为 1,i&=100;是循环条件,因为要计算21 1 到 100 直接能被 3 和 7 整除的数,所以要条件要&=100.i++是循环一次后进行自增运算; 3) 、判读一个是是否同时被 3 和 7 整除,要用模运算和逻辑运算符实现,即 i%3&&i%7, 并且当判断这个条件成立时将数输出。(2)判断 m 是否素数 #include &stdio.h& void main() { int m,i,k; scanf(“%d”,&m); for(i=2;i&m;i++) if(__m%i==0_____) m%i==0__ m%i==0__ if(i&=m)printf(“%d 是一个素数\n”,m); else printf(“%d 不是一个素数\n”,m); } 填空填空:m%i==0 并运行分析并运行分析1) 、此程序是关于 for 循环结构和 if 判断的应用; 2) 、素数是只能被 1 和它本身整除的数,所以在进行一个数是否是素数的时候, 就判断是否能被 2 和数本身-1 整除,如果可以就不是素数,反之就是,for(i=2;i&m;i++) if(__ (__m%i==0_____就是将一个数和 2 到本身减 1 进行模运算,为 0 时退出,并输出不 _____) (__ _____ 是素数,不等于 0 是输出是素数。3. 编写程序 (1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的 数目。程序清单程序清单#include &stdio.h& void main() { int i,n,low=0 ; printf(&please input a number:\n&); scanf(&%d&,&n); low=n; for(i=1;i&=4;i++) { printf(&please input a number:\n&); scanf(&%d&,&n); if(low&n) { low= } else22 { low=n; } } printf(&the smallest number is %d&,low); getch(); } 程序编写注意事项程序编写注意事项1、 读取多个数据时为了方便要使用循环语句; 、 2、 在对输入的数据进行比较时,将第一个数据赋给 low、然后再将 low 与后面每输入一个 就进行比较一次,每比较一次就将较小的值赋给 low,直到最后输出。(2)编写一个程序显示出如下菱形图案。可以使用 printf 语句来显示一个(*)和一个空格, 尽量多使用循环语句(嵌套的 for 语句) ,尽量少用 printf 语句。程序清单程序清单#include &stdio.h& #define N 5 void main() { int i, for(i=1;i&=N; i++) { for(j=1;j&=N-i;j++) { printf(& &); } for(j=1;j&=2*i-1;j++) { printf(&*&); } printf(&\n&) ; } i=4,j=0; for(;i&=1;i--) { for(j=1;j&=5-i;j++) {23 printf(& &); } for(j=1;j&=2*i-1;j++) { printf(&*&); } printf(&\n&) ; } getch(); } 程序编写注意事项程序编写注意事项1. 此程序要用到 fou 循环的多重嵌套; 2. 在显示上半部分正三角形时 for 循环的行数计数器是从 1 递增到 5,每行显示的空格的个 数用最大行数减去当前行数,输出的“*“号个数用公式 2*N-1 计算出来; 3. 在显示下半部分倒三角形时 for 循环行数从最大行递减到 1, 每行空格个数用 N-当前行数。*号个数还是用 2*N-1 计算出来,这时的*号个数是递减的。(3)输入从
这个范围内的年份,并使用 for 循环语句来生成一个简洁的日历。注意 闰年的情形。程序清单程序清单#include &stdio.h& #include&conio.h&/*--控制台输入输出函数--*/ #include&stdlib.h& int IsLeapYear(int);/*--判断某一年是否为闰年--*/ void main() { int temp_i; long int Year_days = 0; int Year_Start = 1; int Per_Year_D int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; /*-一年每个月的天数--*/ printf(&Please enter the year(form)&); scanf(&%d&,&year); /*--从公元 1 年开始执行循环,因为该年的一月一号为星期一,用某年的某天与这天相差的 天数与 7 求余数知道是星期几---*/ while(Year_Start & year) { /*---如果是闰年则为 366 天,否则就为 365 天---*/ if( IsLeapYear( Year_Start ) )24 Per_Year_Days = 366; else Per_Year_Days = 365; /*---从公元 1 年到输入年份的前一年的天数的总和--*/ Year_days = Year_days + Per_Year_D Year_Start++; } /*--tmp 为从 1 到 12,对应每年的 12 个月--*/ for( temp = 1; temp &=12; temp++ ) { switch( temp ) { case 1printf(& case 2printf(& case 3printf(& case 4printf(& case 5printf(& case 6printf(& case 7printf(& case 8printf(& case 9printf(& case 10printf(& case 11printf(& November(%d)\n&,year); October(%d)\n&,year); September(%d)\n&,year); August(%d)\n&,year); July(%d)\n&,year); June(%d)\n&,year); May(%d)\n&,year); April(%d)\n&,year); March(%d)\n&,year); February(%d)\n&,year); January(%d)\n&,year);25
case 12printf(& } /*---每个星期有七天,所以用每年的天数对 7 取余求是星期几--*/ i = Year_days % 7; printf(&Mon Tue Wed Thu Fri Sat Sun\n&); if( i != 0 ) for( temp_i = 0; temp_i & temp_i++) printf(& day = 1; if( IsLeapYear(year) && temp == 2) while( day &= month_day[12] )/*---去一年 365 天的值,是闰年则为 366 天-*/ { if( day &1 ) if( Year_days % 7 == 0 ) printf(&\n&); if( day &= 10 ) printf(&%d else printf(&%d Year_days++; day++; } else while (day &= month_day[temp-1]) { if( day & 1 ) if( Year_days % 7 == 0 )/*--如果是星期日则换行--*/ printf(&\n&); if( day &=10 ) printf(&%d else printf(&%d Year_days++; day++; } printf(&\n&); if( getch() == 'q' ) exit(0); } getch(); /*--判断是否是闰年,是则返回 1,不是则返回 0*/ &,day); &,day); &,day); &,day); &); December(%d)\n&,year);26 } int IsLeapYear( int year ) { if ((year %4 == 0) && (year % 100 != 0) || (year % 400 == 0) ) return 1; else return 0; 程序编写注意事项程序编写注意事项1. 编写此程序时要用到控制输入输出的函数,所以在开始要调用预定义文件中的函数; 2. 判断一年是否是闰年要用到 IsLeapYear()函数,判断某一天是星期几要用时间函数或者进 行计算;27 实验五 实验五 函数 (验证性实验、综合性实验 、 (一) 实验目的 1.掌握定义函数的方法 2.学会利用函数的相关概念解决问题 3.学会使用函数的方法设计程序 、 (二) 实验内容 1.写出下列程序的运行结果 (1)#include “stdio.h” f(int x, int y); void main() { int a=1,b=2; f(a,b); printf(“%d,%d\n”,a,b); } f(int x,int y) { x=x+1; y=y+1; } 运行结果运行结果 1,2 分析分析1、 在 main 函数之前进行了一个自定义函数的声明,该函数默认为 int 类型,有两个形参 变量,在 main 函数后进行了函数的定义,将两个变量的值各自加 1,不返回值; 2、 在 main 函数中定义了两个整形变量并分别赋值为 1,2.然后调用 f() ,将 a 和 b 的值 传到函数中进行运算,但是因为在调用函数时并没有返回值,所以调用完之后 a 和 b 中还是原来的值。(2) #include fun(int a); void main() { int a=3; fun(a); printf(&%d\n&,a); } fun(int a) { a=a+3; printf(&%d,&,a); &stdio.h& 2 学时)28 } 运行结果运行结果6 ,3 分析分析1、 在 main 函数之前进行了自定义 fun()函数的声明,在 main 函数哈进行了函数的 定义,函数的功能是将调用函数时的值加上 3 再付给原变量,然后输出该变量的值; 2、 在 main 函数中进行了函数调用,调用时传值为 3,因为调用函数没有返回值,因此 在函数调用结束之后,a 的值还是 3. (3)#include { static int a=3; a=a+x; } void main() { int k=2,m=1,n; n=fun(k); n=fun(m); printf(“%d\n”,n); } 运行结果运行结果6 分析分析1、 在 main 函数之前进行了 fun 函数的定义, fun 函数中将 a 定义成了静态变量, 在 所以 只将 a 的值在每次调用 fun 函数时只将 a 的值初始化一次,且每次计算过后的值都保 留在函数的 a 当中; 2、 在 main 函数中,第一次调用时将 k 的值的副本传递到 fun 函数,计算后 a=5,返回 a 的值赋给 n,第二次调用时将 m 的值的副本传递给 fun 函数进行计算,因为 a 时静态 变量,值还是 5,所以计算后的结果就为 6。(4) #include { if(n&0)printf(“error!”); else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); } void main() { int n=4; &stdio.h& float fac(int n) &stdio.h&int fun(int x)29
y=fac(n); printf(“%d!=%f\n”,n,y); } 运行结果运行结果结果分析结果分析1、 此程序是用函数的迭代来实现计算一个数的阶层; 2、 在 main 函数之前自定义了一个函数,函数中先判断接受进来的数是否小于 0,若小 于 0 就显示错误,等于 0 或 1 时返回 1,大于 1 时调用函数自身计算阶层; 3、 在 main 函数中定义 x 并初始化为 4,传递到 fun 函数中进行计算后将返回值赋给 y 并显示。2. 程序填空 (1) 通过调用函数求 a+b 的和。#include &stdio.h& float add(float x,float y); void main() { float add(float x,float y); float a,b,c; scanf(“%f,%f”,&a,&b); c=_ ____ add(a,b) add(a,b)_________; printf(“%f”,c); } float add(float x,float y) { z=x+y; } 填空填空add(a,b) 运行结果运行结果结果 分析分析1、 在主函数之前进行了自定义函数的声明,在 main 函数中定义三个实数,从键盘 读取两个值到 x 和 y 中,调用 add 函数将 x 和 y 的值传递过去进行计算并将返 回的值付给 c; 2、 在 add 函数的定义中,将返回值类型定义成 float 类型,并将计算后的值返回。(2)从键盘输入任意一个数,用函数计算它的阶乘 #include &stdio.h& long int f(int a)30 { long int t=t*i; return_(t)___; } void main() { scanf(“%ld”,&x); printf(“%ld”,f(x)); } 填空return_(t)___; 运行分析运行分析1. 在自定义函数中,用 for 循环来实现一个数的阶层的计算,用 t 来保存计算后的 值,计算完后将 t 的值返回给主函数; 2. 在主函数中,定义一个变量,从键盘读取之后传递到自定义的 f 函数中,并将返 回值显示出来,在编程时最好将返回值类型设置成长整型以便用来存储正确的数 值。3.编写程序 (1) 编写函数 floor,把值四舍五入为的整数。语句:y = floor + ( x + .5) ;将把 x 四 舍五入为最近的整数,并存如 y 。要求读取几个整数,并使用前面的语句把每个数字四舍五入 为最近的整数。对于程序中处理的每个整数,显示出原始数字和四舍五入后的数字。程序清单程序清单#include &stdio.h& int { int i=0,s; for(i=0;i&=3;i++) { m=0; printf(&Input a float number:&); scanf(&%f&,&m); s=floor(m); printf(&%d\n&,s); } getch(); } int floor(float n) { p=n+0.5 floor(float n); main() i,t=1; for(i=1;i&=a;i++)31 return(p); } 程序编写注意事项程序编写注意事项1、 在 main 函数前先进行 floor 函数的声明; 2、 定义 float 型变量用 sanf 函数读取需要进行四舍五入的数,调用 floor 函数时传递值 3、 在 main 函数后进行 floor 函数的定义,因为传递过去的值为 float 类型,在加上 0.5 后取整就是四舍五入后的值 (2) 实现下列每个整型函数。a)函数 Celsius 返回与华氏温度等价的摄氏温度。b)函数 Fahrenheit 返回与摄氏温度等价的华氏温度。c)使用这两个函数编写程序,使其显示一些图表,图表中显示从 0 度 ~ 100 度之间的所有摄氏 温度的华氏温度等价值,以及从 32 度 ~ 212 度之间的所有华氏温度的摄氏温度等价值。按照见 解的表格形式来显示输出结果,在保留可读性的同时使输出的行数最小。程序清单程序清单#include &stdio.h& #define LOW 32 #define MAX 212 float Celsius(float fah); float Fahrenheit(float cels); void main() { int i,j; float fahrenheit, /*--从华氏到摄氏--*/ printf(&Fahrenheit for(i=0;i&=100;i++) { celsius=Celsius(i*1.0); printf(& %d } /*---从摄氏到华氏---*/ printf(&Celsius { fahrenheit=Fahrenheit(j*1.0); printf(& } getch(); } float Celsius(float fah) { p=(fah-32.0)/1.8; %d %7.2f\n&,j, fahrenheit); Fahrenheit\n\n&); for(j=LOW;j&=MAX;j++) %7.2f\n&,i,celsius); Celsius\n\n&);32 return(p); } float Fahrenheit(float cels) { p=(9*cels)/5+32; return(p); } 程序编写注意事项:33 实验六 数组( 实验六 数组(一) (验证性实验 、 (一) 实验目的 1.掌握一维数组的定义,赋值和输入输出的方法。2.掌握二维数组有关的定义,赋值和输入输出的方法。3.掌握与数组有关的非数值计算方法。、 (二) 实验内容 1.写出下列程序的运行结果。(1) #include &stdio.h& void main() { int a[3]={1,2}; int i,j; for(i=0;i&3;i++) for(j=0;j&3;j++) { a[i]=a[j]+1; printf(&\n%d&,a[i]); } } 运行结果运行结果2 3 1 2 3 1 2 2 3 结果分析结果分析分析 1、 此程序是关于数组的运用,涉及到数组的定义及初始化值,数组在进行定义和赋值 时要注意到元素是从 0 开始,且要留一个位置储存结束标记,如果赋值的个数少于 数组大小,则后面的都默认为 0; 此程序就是用 for 循环将每一个元素依次和每一 2、 数组的每一个元素可以参加运算, 个元素相加。。(2)#include &stdio.h& #define N 20 fun(int a[],int n,int m) { int i,j; for(i=m;i&=n;i--) 2 学时)34 a[i+1]=a[i]; } void main() { int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i&5;i++) printf(&%d,&,a[i]); } 运行结果运行结果12334 分析分析1、 此程序既有关于数组的应用,也有关于函数的应用; 2、 Fun()所定义了一个函数,这个函数的作用是将 a[]数组里的元素从 m 个元素起,把前 一个元素的值赋给后一个,到第 n 个元素时结束; 3、 在 main 函数后定义了一大小为 20 的数组,并给前十个赋值,调用 fun 函数后输出前 五个元素的值,因为在调用过程中只将元素值改变到第四个,所以 a[2]=a[3],因此结 果为上图显示。(3)#include &stdio.h& void swap1(int c[]) { t=c[0];c[0]=c[1];c[1]=t; } void swap2(int c0,int c1) { t=c0;c0=c1;c1=t; } void main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a) ; swap2(b[0],b[1]); printf(&%5d %5d %5d %5d &,a[0],a[1],b[0],b[1]); } 运行结果运行结果结果 5 3 3 5 分析分析1、 此程序也是关于函数和数组的综合应用; 2、 自定义 Swap1 函数的作用是定义一个数组,定义一个整型变量,将变量 t 的值赋给数 组里的第一个元素,第一个元素赋给第二个元素,第三个元素赋给 t; 3、 自定义 swap2 函数的作用是定义三个变量,将 t 的值赋给 c1,c1 的值赋给 c2,c2 的35 值赋给 t,但是因为在调用函数时是备份了数组元素中的值,而函数调用过程中并没 有返回值,所以原数组中的值没变; 4、 Main 函数是调用两个自定义函数,并且分别显示两个数组的前两个元素。2.程序填空 (1)将 Fibonacci 数列前 15 项放入一个一维数组中(fib[0]=1,fib[1]=1) ,并计算其中奇数之 和。#include &stdio.h& void main() { int fib[15],i,s=0; fib[0]=1; fib[1]=1; for(i=2;i&15;i++) ① if( } 填空①:fib[i]=i; fib[i]=i fib[i]= 填空②:i%2==1; i%2==1; 程序分析程序分析此程序是一个关于数组的定义、赋值及运算的问题,定义一个大小为 15 的数组,将每一个数 组里依次装好想对应的值,利用与 2 求模运算来判断是否为奇数,如果是就将其与 s 相加,计算 总奇数的和 (2)给出以下形式数据,计算各行之和,并存入一个一维数组中。② ; )s=s+fib[i]; for(i=0;i&15;i++) printf(&%d\n&,s);1 2 4 6 1 5 8 0 0#include &stdio.h& void main() {int a[3][3]={{1,2,4},{6,1,5},{8,0,0}},b[3]={0}; int i,j; for(i=0;i&3;i++) for(j=0;j&3;j++) ① printf(&%6d&, } 填空①:b[i]=b[i]+a[i]a[j]; b[i]=b[i]+a[i]a[j]; b[i]=b[i]+a[i] 填空②:b[i] b[i] 程序分析程序分析1、 此程序涉及到了二维数组的定义、赋值与运算;36; ② );for(i=0;i&3;i++) 2、 int a[3][3]={{1,2,4},{6,1,5},{8,0,0},定义一个大小为 9 的二维数组并分别给每 行每列赋值,b[3]是用来存每行的和的; 3、 前两个 for 循环是用来计算每行的和的,后面的 for 循环是现实 b[3]的值。3. 编写程序 (1)已知数组 a[10]={3,7,6,5,4,1,2,9,9,7},计算数组下标为奇数的元素之和。程序清单程序清单#include &stdio.h& void main() { int s=0,a[10]={3,7,6,5,4,1,2,9,9,7}; for(i=0;i&10;i++) { if(i%2==1) { s=s+a[i]; } } printf(&%d&,s); getch(); } 程序编写注意事项程序编写注意事项此程序在编写时要注意数组的定义与赋值, 在进行奇数项运算时循环的计数器应从 0 开始, 条件要&10.奇数项判断要用取模运算。(2)使用数组解决下列问题。在对人员支付佣金。销售人员每个星期收到$200,以及 那个星期他们总销售额的 9%。例如, 在某个星期中销售额为$3000 的销售人员收到$200 以及$3000 的 9%,也就是$470。编写一个程序(使用计数器数组) ,确定销售人员在下列范围内可以赚取的 收入(假定每个销售人员的工资将截断为整数) a) b) c) d) e) f) g) h) i) $200 -$299 $300 -$399 $400 -$499 $500 -$599 $600 -$699 $700 -$799 $800 -$899 $900 -$999 $1000 以及$1000 以上程序清单程序清单#include &stdio.h& main() {37 int sales[9][2]; int pay[9][2],i,j; sales[0][0]=200,sales[0][1]=299; for(i=0;i&=9;i++) { for(j=0;j&2;j++) { pay[i][j]=sales[i][j]*0.09+200; sales[i+1][j]=sales[i][j]+100; } } for(i=0;i&9;i++) { printf(&\n%d-%d should pay %d-%d&,sales[i][0],sales[i][1],pay[i][0],pay[i][1]); } printf(&\nif you sales more than 1000,you can get more than %d\n&,pay[8][0]); getch(); } 程序编写注意事项程序编写注意事项1、 定义数组时要定义足够大的空间用来储存销售人员的成果; 2、 注意确定工资范围的算法,将每的销售成绩乘以 0.09 后就上 200 与 100 进行整除 确定范围,并在相应的数组中加上 1; 3、 显示时范围的输出和算法; (3) 使用二维数组来解决下列问题。公司与 4 个销售人员 ~ 4) 他们销售 5 种不同的产品 (1~ (1 , 5) 。每天,每个销售人员为销售的每种不同产品上交报告。每份报告包括a) 销售人员编号。b) 产品编号。c) 当天每种产品的总销售额。因此,每个销售人员每天上交 0~5 份销售报告。假设已经知道上个月所有报告的信息。编写一个 程序读取所有这些信息,以得到上个月的销售额,并对销售人员按产品来计算总销售额。所有总 和必须存储在二维数组 sales 中。在处理了上个月的所有信息之后,以列表形式输出结果,其中 列代表特定的销售人员,而行代表特定的产品。计算每行的总和,以得到上个月每个销售人员的 销售总额。输出结果应该在每行的右边显示产品销售总和,在每列的底部显示个人销售总和。程序清单程序清单#include &stdio.h& #define MAX 5 #define MAXS 4 void main() { int products[5]={1,2,3,4,5},mproduct[4]; int sales[MAX][MAXS]; int i,j;38 /*按产品种类输入每个人的销售成绩*/ printf(&Input products sold by every people:&); for(i=0;i&5;i++) { for(j=0;j&4;j++) { scanf(&%d&,&sales[i][j]); } } /*计算每个人的全部销售成绩*/ for(j=0;j&4;j++) { mproduct[j]=0; for(i=0;i&5;i++) { mproduct[j]=mproduct[j]+sales[i][j]; } } /*显示整个报告表*/ printf(&\tM1\tM2\tM3\tM4\n&); for(i=0;i&5;i++) { printf(&%d\t&,products[i]); for(j=0;j&4;j++) { printf(&%d\t&,sales[i][j]); } printf(&\n&); } for(j=0;j&4;j++) { printf(&\t%d&,mproduct[j]); } getch(); } 程序编写注意事项程序编写注意事项1、 此程序因为要显示每个销售人员的每种产品的成绩因此要用到二维数组, 在读取输入的 数据到二维数组时要应用 for 循环进行录入; 2、 计算每位职员的总成绩时需要定义另外一个数组储存相对应的总值,在最后用 for 循环 将结果输出,并且以报表的格式输出。39 实验七 数组( 实验七 数组(二) (验证性实验 、 (一) 实验目的 1. 掌握字符数组的定义、赋值和引用 2. 字符串函数的使用。、 (二) 预习内容 1.预习数组的定义、赋值及输入输出方法,以及典型的算法。2.熟练循环语句与数组处理语句结合的方法。、 (三) 实验内容 1. 写出下列程序的运行结果 (1)#include &stdio.h& void main() { char a[10]= &abcdefg&,b[ ]=&abcdefg&; a[3]=’\0’; b[3]=0; printf(&%d,%d&,sizeo } 运行结果运行结果 10,3,10,3 分析分析1、 此程序中定义了两个字符串数组,并分别给其中的元素用双引号赋值; 2、 给 a 数组的第四个元素赋值为空字符,b 数组的第四个元素赋值为整数 0; 3、 Sizeof 函数是显示整个数组的长度,strlen 函数是显示数组中字符串的长度,因为 a 数 组中的第四个元素赋值为空字符结束标记,所以字符串长度为 3,而 b 数组的第四个赋 值为数据类型的 0,所以其中的字符串长度为 3. (2)#include &stdio.h& void main() { char ch[2][5]={&6937&,&8254&}; int i,j,s=0; for(i=0;i&2;i++) for(j=0;ch[i][j]&'\0'&&ch[i][j]&='9';j+=2) s=10*s+ch[i][j]-'0'; printf(&%d\n&,s); } 运行结果运行结果6385 分析分析1、 将 ch 定义为一个 2 行 5 列的字符串数组,并给每一个元素赋值; f(a),strlen(a)); printf(&%d,%d&,sizeof(b),strlen(b)); 2 学时)40 2、 for(i=0;i&2;i++) for(j=0;ch[i][j]&'\0'&&ch[i][j]&='9';j+=2) s=10*s+ch[i][j]-'0';用 for 循环判断数组中的字符,不等于空字符和小于 9 的 ASCII 码时就将此字符的 ASCII 码加上 10 与 s 的乘积,减去字符 0 是将字符数字转换为相应的整 数值。。(3)下列程序的输出结果是#include &stdio.h& void main( ) { char p1[20]=&abcd&,p2[20]=&ABCD&,str[50]=&xyz&; strcpy(str+2,strcat(p1+2,p2+1)); printf(&%s&,str); } 运行结果运行结果结果分析结果分析分析 1、 此程序是关于字符串函数的应用,strcat 函数的作用是将两个字符串连接起来, strcat(p1+2,p2+1)的执行:p1=“abcd” ,由于 p1 指向其首地址 a,所以 p1+2 指向的是 c,同理,p2+1 指向的是 B,所以结果为 cdBCD; 2、 strcpy(str+2,strcat(p1+2,p2+1))的执行:str[50]=”xyz”,由于 str 指向&xyz&的首 地址'x'的地址, 所以 str+2 指向'z'的地址, 所以, strcpy(str+2,&cdBCD&)也就是将&z& 用&cdBCD&进行字符串拷贝,拷贝后,原有的以'z'为起始的空间被&cdBCD&覆盖,而前面 的&xy&不受影响。2. 程序填空 (1)将一个字符串按逆序重新存放,并输出。#include &stdio.h& void main() { char a[20]; int n,i,t; gets(a); ① {_ puts(a); } 填空①:n=strlen(a); n=strlen(a); 填空②:t=a[i]; t=a[i]; a[i]=a[na[i]=a[n-1-i]; a[na[n-1-i]=t; ; ②_ _____} for(i=0;i&n/2;i++)41 程序分析程序分析1、 此程序涉及到字符串函数计算串长度 srtlen()的应用, gets 读取一整行字符串, strlen 函数计算读取的字符串长度,这个长度作为 for 循环调换元素的值时的循环条件; 2、 需要注意的是在逆转元素的值时,要定义一个中间变量,而且因为数组的下标是从 0 开 始的,所以要用字符串长度-1 后再减 i 与下标为 i 的对应。(2) 以下程序中函数 huiwen 的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回 字符串:yes!,否则函数返回字符串:no!,并在主函数中输出. 所谓回文即正向与反向的拼写都一 ( 样,例如:adgda).请填空. #include &string.h& #include &stdio.h& int { int p,i,j; p=strlen(str); for(i=0,j=p-1;i&j; ) if( return 1; } void { char str[50]; printf(&Input:&); scanf(&%s&,str); if( else } 填空①:str[i]==str[j] str[i]== str[i]= 填空②:huiwen(str)==0 huiwen(str)==0 程序分析程序分析1、 程序因为要用到字符串函数,所以调用了 string 库文件; 2、 自定义了一个函数,先计算出输入字符串的长度,用 for 循环和 if 条件语句实现首 尾相对应的元素的比较,如果相等返回 0.继续比较,不相等返回 1 退出循环; 3、 在 main 函数中,当自定义 huiwen()返回的值是 0 时就输出 yes,是 1 的话就输出 no ② ) printf(&yes!&); printf(&no!&); main() ① ) return 0; huiwen(charstr[])42 3. 程序改错 写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的 内容) (1)以下 scpy( )函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成 一个新的字符串 s。请填空。① ② ③ ④ ⑤ ⑥ } ⑦ ⑧ ⑨ ⑩ } 错误语句的行号:③、④ 、⑥、⑧ ③ 改正后的语句全行③、int i=0; ④、while(t[i]!=’\0’) ⑥、st[i]=’\0’; ⑧、char str[20] ,str2[ ]=&abcdefgh&; 错误分析错误分析1、③语句的 i 在使用前应先初始化值; 2、④语句中的 while 语句是要实现 t 数组中的元素到结束标记时停止; 3、给 s 数组的最后一个元素赋值为结束标记; 4、在定义数组时如果没有赋值,必须定义数组的大小。void main( ) { char str1[ ],str2[ ]=&abcdefgh&; scpy(str1,str2); printf(&%s &,str1); #include &stdio.h& void scpy(char s[ ],char t[ ]) { while(t[i]) s[i++]=t[i++]; t[i]=‘\0’;43 (2)比较两个字符串的大小,如果相等输出 equal,如果不相等输出 unequal. ① ② ③ ④ ⑤ ⑥ } 错误语句的行号:①、④、⑤ ① 改正后的语句全行①、#include &string.h& ④、gets(s1),gets(s2); ⑤、if(strcmp(s1,s2)==0) printf(“equal”); 错误分析错误分析1、 因为判断两个字符串是否相等不能直接用关系式表示,要用到字符串函数,因此要调用字符 串库文件; 2、 两个语句之间在同一排时用逗号隔开; 3、 判断是字符串是否相等用 strcmp 函数,当返回值是 0 时就相等,否则不等。4. 编写程序 (1)将一个字符串首尾倒置,重新存放。程序清单程序清单#include &stdio.h& void main() { char str[20]; int i,t, gets(str); printf(&the old string is :&); puts(str); printf(&\n&); n=strlen(str); for(i=0;i&n/2;i++) { t=str[i]; str[i]=str[n-1-i]; str[n-1-i]=t; } printf(&the nwe string is:&) ; puts(str); #include &stdio.h& void main() { char s1[10],s2[10]; gets(s1);get2(s2); if(s1=s2) printf(“equal”); else printf(“unequal”);44 getch(); } 程序编写注意事项程序编写注意事项1、 用 gets 读取从键盘输入的数到数组中,用 puts 显示数组中所储存的字符串; 2、 在进行元素中的单个字符调换时,用 srtlen 函数读取字符串的长度,用 for 循环实现每 一个元素的调换,需要注意的是因为元素下标是从 0 开始,因此第一个元素对应的需要 逆转的元素下标应该为 n-1-i,以此类推。。(2) (飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。总裁要 求您为新系统编制程序。需要分配该航空公司的唯一一架飞机每个航班的座位(容量:10 个座 位) 。程序应该轮流显示下列菜单Please type 1 for “first class” Please type 2 for “economy” 如果输入 1, 则程序应该分配头等舱内的座位(座位 1 ~ 5) 。如果输入 2 ,则程序应该分配经 济舱的座位(座位 6 ~ 10) 。然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱, 还是经济舱内。使用一个数组来代表飞机的座位安排。将数组的所有元素初始化为 0, 以说明所有座位都是空的。当分配每个座位时,将数组的对应元素设置为 1,以说明不能再次使用那个座位号。当然,程序 不应该分配已经分配过的座位。当头等舱满员时,程序应询问是否可以安排在经济舱内(等等) 。如果可以, 则进行适当的座位分配。如果不可以, 则输出信息 “Next Flight leaves in 3 hours”. 程序清单程序清单#include &stdio.h& void input(); void print(); void assign(); int seat[11] = {0},i, char clas[10]; main() { input(); while(ch != 'Q') { assign(); print(); input(); } getch(); } void input() { printf(&Please type 1 for 'first class'\nPlease type 2 for 'economy'\n&); printf(&Please type Q to exit\n&);45 scanf(&%d&,&ch); } void assign() { if(ch==1) i=1; else i=6; while(seat[i] && i&10) i++; if(i&=5) { strcpy(clas,&First&); seat[i] = 1; } else { strcpy(clas,&Economy&); seat[i] = 1; } if(ch == 1 && i&=5) else if(ch == 2 && i&10) else { printf(&The %s is full,do you want a another class seat?

我要回帖

更多关于 责令改正 的文章

 

随机推荐