C语言实验报告

更新时间:2023-12-16 07:28:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电子信息工程学院《C语言程序设计》实验报告

姓名: 潘美娟 学号:222013314011016

实验序号: 第 3 次实验

实验名称:最简单的C程序设计—顺序程序设计 实验目的:

(1)掌握C语言中使用最多的一种语句—赋值语句的使用方法;

(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符; (3)进一步掌握编写程序和调试程序的方法。

实验内容:

(1)通过下面的程序掌握各种格式转换符的正确使用方法;

①输入以下程序:

# include int main() {int a,b; double 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=3157.890121;g=0.123456789; m=50000;n=-40000; p=32768;q=-60000;

printf(\ printf(\}

②运行此程序并分析结果。

③在此基础上,将程序第10~14行改为

c1=a;c2=b;

f=3157.890121;g=0.123456789; d=f;e=g;

p=a=m=50000;q=b=n=-60000;

运行程序,分析结果。 代码:

sizeof(int) = 4 sizeof(float) = 4;

sizeof(double) = 8; sizeof(char) = 1; char *p;

sizeof( p) = 4; sizeof(long) = 4;

sizeof( unsigned int) = 4;

运行结果:②

④用sizeof运算符分别检测程序中各类型的数据占多少字节。例如,int型变量a的字节数为sizeof(a)或sizeof(int),用printf函数语句输出各类型变量的长度(字节数) 代码:

sizeof(int) = 4 sizeof(float) = 4; sizeof(double) = 8; sizeof(char) = 1; char *p;

sizeof( p) = 4; sizeof(long) = 4;

sizeof( unsigned int) = 4;

(2)设圆的半径r=1.5,圆柱高h=3,求圆周长,圆面积,园球表面积,圆球体积、圆柱体积。编程序,用scanf 输入数据,输出计算结果。输出时要有文字说明,取小数点后两位数字。 代码:

#include int main ()

{float h,r,l,s,sq,vq,vz; float pi=3.141526;

printf(\请输入圆半径r,圆柱高h∶\

scanf(\ //要求输入圆半径r和圆柱高h l=2*pi*r; //计算圆周长l s=r*r*pi; //计算圆面积s

sq=4*pi*r*r; //计算圆球表面积sq vq=3.0/4.0*pi*r*r*r; //计算圆球体积vq vz=pi*r*r*h; //计算圆柱体积vz printf(\圆周长为: l=%6.2f\\n\ printf(\圆面积为: s=%6.2f\\n\ printf(\圆球表面积为: sq=%6.2f\\n\ printf(\圆球体积为: v=%6.2f\\n\ printf(\圆柱体积为: vz=%6.2f\\n\ return 0; }

(实验运行结果)

结果说明:任意输入圆半径r和圆柱高h,均可自动得到上述五个值。

(3)题目:计算存款利息。

有1000元,想存5年,可按以上5种办法存: ①一次存5年期。

②先存2年期,到后期将本息再存3年期。 ③先存3年期,到期后将本息再存2年期。

④先存1年期,到期后将本息再存1年期,连续存5次。 存活期存款。活期利息每一季度结算一次。 银行存款利率:中国银行2015年最新利率表 (一)活期存款 0.35 (二)定期存款 1.整存整取 三个月 2.2.35 六个月 2.55 一年 2.75 两年 3.25 五年 代码:

4.00 #include #include int main()

{float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.040; r3=0.0375; r2=0.0325; r1=0.0275; r0=0.0035;

p1=p*((1+r5)*5); // 一次存5年期

p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf(\ // 输出按第1方案得到的本息和 printf(\ // 输出按第2方案得到的本息和 printf(\ // 输出按第3方案得到的本息和 printf(\ // 输出按第4方案得到的本息和 printf(\ // 输出按第5方案得到的本息和 return 0; }

运算结果:

结果说明:

p1输出按第1方案得到的本息和为5200 p2输出按第2方案得到的本息和为1184.8 p3输出按第3方案得到的本息和为1184.8 p4输出按第4方案得到的本息和为1455.8 p5输出按第5方案得到的本息和为1017.6

(4)题目:编程序将“china”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“china”应译为“glmre”。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为‘C’,’h’,‘i’,‘n’,‘a’,经过运算使c1,c2,c3,c4,c5分别变为‘C’,’h’,‘i’,‘n’,‘a’。分别用putchar函数和printf函数输出这5个字符。

①输入事先已编好的程序,并运行改、该程序。分析是否符合要求。

②改变c1,c2,c3,c4,c5的初值为‘T’,’O’,’d’,’a’,’y’,对译码规律

作如下补充:‘W’用‘A’代替,‘X’用‘B’代替,‘Y’用‘C’代替,‘Z’用‘D’代替。修改程序并运行。

③将译码规律修改为:将一个字母被它前面第4个字母代替,例如‘E’用‘A’代替,’Z‘用’U‘代替,用’D‘代替’Z‘,’C‘用’Y‘代替,’B‘用’X‘代替,’A‘用’V‘代替。修改程序并运行。

代码:

①#include int main()

{char c1='C',c2='h',c3='i',c4='n',c5='a'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4;

printf(\ return 0; }

②#include int main()

{char c1='T',c2='o',c3='d',c4='a',c5='y'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4;

printf(\ return 0; }

③#include int main()

{char c1='e',c2='z',c3='d',c4='y',c5='b'c6='a'; c1=c1-4; c2=c2-4; c3=c3-4; c4=c4-4; c5=c5-4; c6=c6-4;

printf(\ return 0; }

运行结果:①

结果说明:程序使得China→Glmre

结果说明:程序使得Today→Xshec

结果说明:程序使得China→Xshec

实验总结:

①第一个程序运行时,一直报错,分析原因有程序本身的单词拼写错误和数据类型不符,经过修改,运行出正确结果;

②程序输入不熟悉,容易输错,经过不断调试,才运行出结果; ③编程序真的很费劲,每个算法需好好斟酌。

实验序号: 第 4次实验 实验名称:选择结构程序设计 实验目的:

(1)了解C语言表示的逻辑量的方法(以0代表“假”,以非0代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。

(3)熟练掌握if语言的使用(包括if语言的嵌套)。 (4)熟练掌握分支选择语句—switch语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。

实验内容:

第一题:

有一函数:写程序,输入y相应的值。用scanf函数输入x的值,求y值。 运行程序,输入x的值(分别为x<1、1<=x<10、x>=10这3种情况),检查输出的

y值是否正确。 代码:

#include int main() { int x,y;

printf(\输入x:\ scanf(\

if(x<1) /* x<1 */ { y=x;

printf(\ y=x=%d\\n\ }

else if(x<10) /* 1==10 */ { y=3*x-11; printf(\ y=3*x-11=%d\\n\ } return 0; }

运行结果:①

结果说明:输入x=-6,(-6<1),得到y=x=-6;

结果说明:输入x=4,(0≦4<10),得到y=2*x-1=7;

结果说明:输入x=25,(25≧10),得到y=3*x-11=64;

第二题:

从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否小于1000的正数。若不是,则要重新输入。

代码:

#include #include #define M 1000 int main() {

int i,k; printf(\请输入一个小于%d的整数i:\ scanf(\ if (i>M)

{printf(\输入的数不符合要求,请重新输入一个小于%d的整数i:\ scanf(\ }

k=sqrt(i);

printf(\的平方根的整数部分是:%d\\n\ return 0; }

运行结果:

结果说明:运行结果显而易见; 第三题:

给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,81—89分为B,70-79分为C,60-69分为D,60分以下为E。

①事先编好程序,要求分别用if语句和switch语句来实现。运行程序,并检查结果是否正确。

②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据大于100小于0时,通知用户“输入数据错”,程序结束。 代码:

#include int main()

{ float score; char grade;

printf(\请输入学生成绩:\ scanf(\

while (score>100||score<0) {printf(\输入有误,请重输\ scanf(\ }

switch((int)(score/10)) {case 10:

case 9: grade='A';break; case 8: grade='B';break; case 7: grade='C';break; case 6: grade='D';break; case 5: case 4: case 3: case 2: case 1: case 0: grade='E'; }

printf(\成绩是 %5.1f,相应的等级是%c\\n \ return 0; }

运行结果:

第四题:

输入4个整数,要求按由小到大顺序输出。

在得到正确结果后,修改程序使之按由大到小顺序输出。 代码:

#include int main() {int a,b,c,d ,t;

printf(\请输入四个数:\

scanf(\ printf(\ if (a>b)

{ t=a;a=b;b=t;} if (a>c)

{ t=a;a=c;c=t;} if (a>d)

{ t=a;a=d;d=t;} if (b>c)

{ t=b;b=c;c=t;}

if (b>d)

{ t=b;b=d;d=t;} if (c>d)

{ t=c;c=d;d=t;}

printf(\排序结果如下: \\n\

printf(\ %d %d %d \\n\ return 0; }

②修改后的程序:

#include int main() {int a,b,c,d ,t;

printf(\请输入四个数:\

scanf(\ printf(\ if (a

{ t=a;a=b;b=t;} if (a

{ t=a;a=c;c=t;} if (a

{ t=a;a=d;d=t;} if (b

{ t=b;b=c;c=t;} if (b

{ t=b;b=d;d=t;} if (c

{ t=c;c=d;d=t;}

printf(\排序结果如下: \\n\

printf(\ %d %d %d \\n\ return 0; }

运行结果:①

修改后运行的结果

实验总结:本次实验的问题大都是数学问题,思路比较清楚,但调试程序比较

麻烦,对printf语句不是很熟悉。

实验序号: 第 5 次实验 实验名称:循环结构程序设计 实验目的:

(1)熟练掌握用while语句、do??while语句实现循环的方法。

(2)掌握在程序中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调式程序。

实验内容:

第一题:

输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。 在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符个数。 代码:

①#include int main() {

char c;

int letters=0,space=0,digit=0,other=0; printf(\请输入一行字符:\\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(\字母数:%d\\n空格数:%d\\n数字数:%d\\n其它字符数:%d\\n\ return 0; } ②

#include int main() {

char c;

int capital=0,lowercase=0,space=0,digit=0,other=0; printf(\请输入一行字符:\\n\ while((c=getchar())!='\\n') {

if (c>='A' && c<='Z') capital++; else if(c>='a' && c<='z') lowercase++; else if (c==' ') space++;

else if (c>='0' && c<='9') digit++; else other++; }

printf(\大写:%d\\n小写:%\\n空格数:%d\\n数:%d\\n\ return 0; }

数字数:%d\\n其它字符

运行结果:①

修改后运行的结果

第二题:

输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3+5^3+3^3. 代码:

#include

int main() {

int i,j,k,n;

printf(\ for (n=100;n<1000;n++) {

i=n/100; j=n/10-i*10; k=n;

if (n==i*i*i + j*j*j + k*k*k) printf(\ }

printf(\ return 0; }

运行结果:

结果说明:水仙花数是153,370,371,407 第三题:

猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的猴子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想在吃时,见只剩一个桃子了。求第1天共摘了多少桃子。 代码:

①#include int main() {

int day,x1,x2; day=9; x2=1;

while(day>0)

{x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1; day--; }

printf(\ return 0; }

②#include int main() {

int day,x1,x2;

day=9; x2=1;

while(day>0)

{x1=(x2+2)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1; day--; }

printf(\ return 0; }

运行结果:①

结果说明:第一天一共摘了1534个桃;

结果说明:第一天一共摘了2556个桃;

实验总结:程序比较容易想,思路清楚,且老师上课已经给出一些代码,所以

比较快完成这个实验。

实验序号: 第 6次实验 实验名称:数组 实验目的:

(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。 (2)掌握字符数组和字符串函数的使用。

(3)掌握与数组有关的算法(特别是排序算法)。

实验内容:

第:一题:

用选择法对10个整数排序。10个整数用scanf函数输入。 代码:

#include int main()

{int i,j,min,temp,a[11];

printf(\ for (i=1;i<=10;i++) {printf(\ scanf(\ }

printf(\

printf(\ for (i=1;i<=10;i++) printf(\ printf(\

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]=temp; }

printf(\ for (i=1;i<=10;i++) printf(\ printf(\ return 0; } ??

运算结果:

第二题:

已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。 代码:

#include int main()

{ int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf(\ for (i=0;i<10;i++) printf(\ printf(\

printf(\ scanf(\ end=a[9];

if (number>end) a[10]=number; else

{for (i=0;i<10;i++) {if (a[i]>number) {temp1=a[i]; a[i]=number; for (j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } }

printf(\ for (i=0;i<11;i++) printf(\ printf(\ return 0; }

运算结果:

第三题:

有一篇文章,共有3行文字文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

代码:

#include int main()

{int i,j,upp,low,dig,spa,oth; char text[3][80];

upp=low=dig=spa=oth=0; for (i=0;i<3;i++)

{ printf(\ gets(text[i]);

for (j=0;j<80 && text[i][j]!='\\0';j++) {if (text[i][j]>='A'&& text[i][j]<='Z') upp++;

else if (text[i][j]>='a' && text[i][j]<='z') low++;

else if (text[i][j]>='0' && text[i][j]<='9') dig++;

else if (text[i][j]==' ') spa++; else oth++; } }

printf(\ printf(\ printf(\ : %d\\n\ printf(\ : %d\\n\ printf(\ : %d\\n\ return 0; }

运行结果:

第四题:

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

应当至少准备两组测试数据: 1.二维数组有鞍点,例如:

99021080?60?32054096110189

二维数组没有鞍点,例如:

9902104580?60?35420540961101891567

用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。

如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请读者修改程序以实现之。 代码:

#include #define N 3

#define M 3 /* 数组为3行3列 */ int main() {

int i,j,k,a[N][M],max,maxj,flag;

printf(\

for (i=0;i

{max=a[i][0]; /* 开始时假设a[i][0]最大 */ maxj=0; /* 将列号0赋给maxj保存 */ for (j=0;jmax) {max=a[i][j]; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ }

flag=1; /* 先假设是鞍点,以flag为1代表 */ for (k=0;ka[k][maxj]) /* 将最大数和其同列元素相比 */ {flag=0; /* 如果max不是同列最小,表示不是鞍点令flag1为0 */ continue;}

if(flag) /* 如果flag1为1表示是鞍点 */ {printf(\ /* 输出鞍点的值和所在行列号 */ break; } }

if(!flag) /* 如果flag为0表示鞍点不存在 */ printf(\ return 0; }

运行结果:①

实验总结:本实验(3)与实验五中(1)个有些类似,故在此基础上,对程序

进行部分修改,即可运行出结果,其他程序运行过程中总是报错,调试了好多次才弄好。不得不说,c语言很强大,自己需要掌握的还有很多。

本文来源:https://www.bwwdw.com/article/nmh5.html

Top