C语言程序设计报告.docx

上传人:b****6 文档编号:7837011 上传时间:2023-01-26 格式:DOCX 页数:21 大小:28.02KB
下载 相关 举报
C语言程序设计报告.docx_第1页
第1页 / 共21页
C语言程序设计报告.docx_第2页
第2页 / 共21页
C语言程序设计报告.docx_第3页
第3页 / 共21页
C语言程序设计报告.docx_第4页
第4页 / 共21页
C语言程序设计报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言程序设计报告.docx

《C语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告.docx(21页珍藏版)》请在冰豆网上搜索。

C语言程序设计报告.docx

C语言程序设计报告

 

科目:

C语言程序设计

老师:

姓名:

学号:

专业:

化学工程与工艺

 

实验二

(1)输入下面的程序,进行编译,记录编译时出现的信息,分析出现这些错误信息的原因;按照自己的分析改正错误后,再进行编译,链接和运行。

/*****test1.c*****/

main()

printf("thisisaerroneousprogram");

编译时出现的信息:

Compiling...

yang.cpp

d:

\杨洪棋c++练习\test\yang.cpp(4):

errorC2065:

'printf':

undeclaredidentifier

d:

\杨洪棋c++练习\test\yang.cpp(4):

errorC2143:

syntaxerror:

missing')'before';'

d:

\杨洪棋c++练习\test\yang.cpp(4):

errorC2072:

'main':

initializationofafunction

d:

\杨洪棋c++练习\test\yang.cpp(5):

errorC2059:

syntaxerror:

')'

执行cl.exe时出错.

yang.obj-1error(s),0warning(s)

出现这些错误信息的原因:

该程序缺少命令行,还有函数体要用“{}”括起来,而不是“()”

改正

/*****test1.c*****/

#include

main()

{

printf("thisisaerroneousprogram.");

}

运行结果

thisisaerroneousprogram.

(2)下面程序的目的是计算两个整数的积。

请输入下面的程序,进行编译,记录编译时出现的信息,分析出现这些信息的原因。

按照自己的分析改正错误后,再进行编译。

链接和运行。

/*****test2.c*****/

#include

main()

{

a=3,b=5;

c=a*b;

printf("Theproductis:

",c)

}

编译时出现的信息:

--------------------Configuration:

test1-Win32Debug--------------------

Compiling...

hong.cpp

d:

\杨洪棋c++练习\test1\hong.cpp(5):

errorC2065:

'a':

undeclaredidentifier

d:

\杨洪棋c++练习\test1\hong.cpp(5):

errorC2065:

'b':

undeclaredidentifier

d:

\杨洪棋c++练习\test1\hong.cpp(6):

errorC2065:

'c':

undeclaredidentifier

d:

\杨洪棋c++练习\test1\hong.cpp(8):

errorC2143:

syntaxerror:

missing';'before'}'

d:

\杨洪棋c++练习\test1\hong.cpp(8):

warningC4508:

'main':

functionshouldreturnavalue;'void'returntypeassumed

执行cl.exe时出错.

hong.obj-1error(s),0warning(s)

出现这些错误信息的原因:

该程序没有对啊,不a,b,c定义,还有程序执行部分缺少输出格式,printf结束时缺少一个“;”

改正后

/*****test2.c*****/

#include

main()

{

inta,b,c;

a=3;

b=5;

c=a*b;

printf("Theproductis:

%d\n",c);

}

编译时出现的信息

--------------------Configuration:

test1-Win32Debug--------------------

Linking...

test1.exe-0error(s),0warning(s)

运行结果

Theproductis:

15

实验三

(1)分析下面字符的功能

分析它们是否可以用在变量名中,并编译程序上机测试之。

#%……&*(

)—+=;“`

\|?

><,.

/[]{}:

~

测试程序如下

intmain(void)

{

Inta?

b,c/d;

}

同理得出:

所有的都不能用在变量名中。

因为C语言规定只有合法的标识符才可以作为变量名。

(2)分析下面的程序

找出其中的错误,分析错误原因,将其与实验过程中出现的信息进行对比。

#include

intmain()

{

inta=3,b=5,c=7,x=1,y,z;

a=b=c;

x+2=5;

z=y+3;

return0;

}

编译时出现的信息:

--------------------Configuration:

test-Win32Debug--------------------

Compiling...

yang.cpp

D:

\杨洪棋c++练习\test\test\yang.cpp(6):

errorC2106:

'=':

leftoperandmustbel-value

执行cl.exe时出错.

yang.obj-1error(s),0warning(s)

出现这些错误信息的原因:

x+2不能出现在等式的左边,还有y一个没有赋值的变量。

改正后

#include

main()

{

inta,b,c,x,y,z;

a=3;

b=5;

c=7;

x=1;

a=b=c;

x=5-2;

y=b;

z=y+3;

return0;

}

编译时出现的信息:

--------------------Configuration:

test-Win32Debug--------------------

Linking...

test.exe-0error(s),0warning(s)

实验四

(1)整除的危险性

#include

main()

{

inta=5,b=7,c=100,d,e,f;

d=a/b*c;

e=a*c/d;

f=c/a*b;

printf("d=%d,e=%d,f=%d\n",d,e,f);

}

整除的危险性:

使程序无法输出正确的结果,因为d=a/b*c的输出结果为0,而0不可以作为分母,所以程序不能输出正确的结果。

(2)分析下面的程序:

试比较x++与++x之间的区别。

#include

main()

{

inta=5,b=8;

printf("a++=%d\n",a++);

printf("a=%d\n",a);

printf("++b=%d\n",++b);

printf("b=%d\n",b);

}

得出结果:

x++是先进行计算后在加,++x是先加后计算。

(3)分析下列表达式的值

编写测试程序对这些表达式的值进行比较,并使各表达式在相同的初始条件下执行。

b+a+++a=18

b+(a++)+a=18

b+a+(++a)=19

b+a+++a++=18

程序为:

#include

intadd1(inta,intb)

{

intf;

f=b+a+++a;

returnf;

}

intadd2(inta,intb)

{

inth;

h=b+(a++)+a;

returnh;

}

intadd3(inta,intb)

{

intg;

g=b+a+(++a);

returng;

}

intadd4(inta,intb)

{

intm;

m=b+a+++a++;

returnm;

}

main()

{

inta=5,b=8,i,j,k,l;

i=add1(a,b);

j=add2(a,b);

k=add3(a,b);

l=add4(a,b);

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);

}

表达式的值:

b+a+++a=18

b+(a++)+a=18

b+a+(++a)=19

b+a+++a++=18

(4)分析下列表达式哪些是错误的,为了验证自己的判断,编写一个测试程序。

i,ji+1,j+1i++,j++++i,++ji+++++j

只有i+++++j是错误的。

#include

main()

{

inti,j;

i=5;

j=6;

printf("%d,%d\n",i,j);

printf("%d,%d\n",i+1,j+1);

printf("%d,%d\n",i++,j++);

printf("%d,%d\n",++i,++j);

printf("%d\n",i+++++j);

}

--------------------Configuration:

sdsds-Win32Debug--------------------

Compiling...

dsds.cpp

D:

\杨洪棋c++练习\test\sdsds\dsds.cpp(11):

errorC2105:

'++'needsl-value

D:

\杨洪棋c++练习\test\sdsds\dsds.cpp(12):

warningC4508:

'main':

functionshouldreturnavalue;'void'returntypeassumed

执行cl.exe时出错.

dsds.obj-1error(s),0warning(s)

实验5

(1),编写一个用于测试所使用系统中的基本数据类型所占内存宽度的程序。

#include

main()

{

printf("&d=%d\n",sizeof(int));

}

Int所占内存的宽度为4

(2).编写程序来测试基本数据类型的取值范围。

#include

main()

{

charc0,c1,c2,c4,c5,c6;

inta,b,c,d,e,f;

printf("c0=%d,c1=%d,c4=%d,c5=%d,c6=%d\n",a,b,c,d,e,f);

}

(3).编写一个程序来测试数据类型的有效数字长度和精度。

#include

main()

{

floatd1,d2;

d1=0.123456789;

d2=12345678901234567890.123456789;

printf("%lf,%lf\n",d1,d2);

}

(4)编写程序来测试不同类型数据之间转换所出现的截去高位、丢失精度和变得不可知等问题

#include

main()

{

doublef1,f2;

f1=2.1234567;

f2=12345678901234567.123456789;

inti1,i2;

i1=(int)f1;

i2=(int)f2;

printf("%d,%d\n",i1,i2);

}

(5)编写程序来测试字符型数据的算术特征

#include

main()

{

charc1=35,c2='A',c3;

c3=c1+c2;

printf("%d,%c\n",c3,c3);

}

(6)编写程序来测试转义字符的用法

#include

main()

{

printf("\t,\t,\t");

}

实验6

(1).设计一个程序测试printf()函数中数据参数被引用的顺序。

#include

main()

{

inta=1;

printf("%d,%d,%d\n",++a,++a,++a);

}

可以看出数据参数是从后面被引用的。

输出结果:

4,3,2

(2).设计一个程序来测试printf()函数中格式符的意义

#include

main()

{

doubled=123456789.234567;

printf("%e\n",d);

}

输出结果:

1.234568e+008

(3)设计一个程序来测试printf()函数定义域宽与精度的方法所设计的程序要能证明以下内容。

A,域宽小于实际宽度时的情况。

B,默认的域宽与精度各是多少。

C,精度说明大于或小于实际精度时的处理。

D,float与double的最大精度。

E,符号位的处理方式。

F,多余的小数位被截断还是舍入。

(4).设计一个程序来测试scanf()函数中格式符的意义

#include

main()

{

doublex,y;

scanf("%lf,%lf\n",&x,&y);

printf("%f,%lf\n",&x,&x);

printf("%f,%lf\n",&y,&y);

}

输出结果:

3.03.0

0.0000000.000000

0.0000000.000000

(5)设计一个程序来测试用scanf()输入含有字符型数据的多个项时,数据项之间的分隔问题。

#include

main()

{

charc1,c2,c3;

inta1,a2,a3;

scanf("%d%d%d",&a1,&a2,&a3);

printf("%d%d%d\t",a1,a2,a3);

scanf("%c%c%c",&c1,&c2,&c3);

printf("%c%c%c\t",c1,c2,c3);

scanf("%c%c%c",&c1,&c2,&c3);

printf("%c%c%c\n",c1,c2,c3);

}

输入结果:

333adcadc

输出结果:

333adcadc

(6)编写一个程序来测试getchar()和putchar()的用法

#include

main()

{

charc;

while((c=getchar())!

='\n')

{

if(c>='a'&&c<='z')

c=c-'a'+'A';

putchar(c);

}

putchar('\n');

}

实验7

(1).编写一个用于测试关系表达式意义和取值的程序

分析结果:

0,0,1,10,0,1,1,1,1

#include

main()

{

inta=3,b=5,c=5;

printf("%d,%d,%d,%d\t",a==b,a==c,a!

=b,a!

=c);

printf("%d,%d,%d,%d,%d,%d\t",a>=b,a>=c,a<=b,a<=c,a

}

输出结果:

0,0,1,10,0,1,1,1,1

(2)阅读下面的程序并分析其运行结果

讲运行结果与上机结果进行比较

分析结果:

1.23OK!

#include

main()

{

floatx;

scanf("%lf",&x);/*从键盘上输入数据1.23*/

if(x=1.23)

printf("OK!

\n");

}

输出结果:

1.23

OK!

(3)编写一个用于测试逻辑表达式的意义和取值的程序

程序的执行结果:

0,1,0,11,1,1,0

#include

main()

{

inta=3,b=5,c=5;

printf("%d,%d,%d,%d\t",a==b&&a==c,a!

=b&&a!

=c,a>=b&&a>=c,a<=b&&a<=c);

printf("%d,%d,%d,%d\n",!

(a==b),!

(a>=b),!

(a>=c),!

(a<=b));

}

输出结果:

0,1,0,11,1,1,0

(4)编写程序来测试下例逻辑表达式的值

0&&a==01||a==10||a==a1&&a==a1&&a==aa||!

a==1a||a==a

a&&a==a!

(a||b)==!

a&&!

b!

(a&&b)==!

a||!

b!

(!

a)==a

程序的执行结果:

0,1,1,1,1,1,1,0

#include

main()

{

inta,b,c,d,e,f,g,h,i,j;

c=0&&a==0;

d=1||a==1;

e=0||a==a;

f=1&&a==a;

g=a||!

a==1;

h=a||a==a;

i=a&&a==a;

j=!

(a||b)==!

a&&!

b;

printf("%d,%d,%d,%d,%d,%d,%d,%d\n",c,d,e,f,g,h,i,j);

}

输出结果:

0,1,1,1,1,1,1,0

(5)分析下面程序段的执行结果并编写验证自己所做推断的程序

程序执行的结果:

10

#include

main()

{

inta=3,b=5,c=5;

printf("%d\t",a<5||(a==b&&b

")));

printf("%d\n",a>5&&(a==b||b

")));

}

输出结果:

10

实验9

#include

intmain(void)

{

doublee=1.0,x=1.0,y,detax;

inti=1;

printf("\npleaseenteraerror:

");

scanf("%lf",&detax);

y=1/x;

while(y>=detax)

{

x=x*i;

y=1/x;

e=e+y;++i;

}

printf("%12.10lf\n",e);

}

(1)设计一组detax,使程序能分别按照下面的要求运行。

不进入循环:

y>detax;

只循环一次:

y=detax;

只循环两次:

y<=detax;

进入死循环:

y

如果把原程序while语句之前的y=1/x语句去掉,观察程序的运行结果将发生什么变化

答:

去掉之后将不执行while语句,直接输出结果。

输入的detax<=y就可以测试出缺少了上述语句。

若把原程序的++i换成i++,观察程序的运行结果发生这样的变化

答:

没有发生什么变化。

把原程序中的while结构改成do-while结构,

#include

intmain(void)

{

doublee=1.0,x=1.0,y,detax;

inti=1,n=0;

printf("\npleaseenteraerror:

");

scanf("%lf",&detax);

y=1/x;

do

{

x=x*i;

y=1/x;

e=e+y;++i;

n++;

}

while(y>detax);

printf("%12.10lf,%d\n",e,n);

}

讲y=1/x去掉,讲没有输出结果。

其他的没有什么变化。

实验10

阅读下面程序,画出程序流程图或N-S图,指出程序的功能。

#include

main()

{

inti,j,k;

longsum=0;

for(i=19;i<=20;i++)

for(j=2;j<=3;j++)

sum+=(i+1)*(i+1)*(j+2);

printf("sumis:

%d\n",sum);

}

(1)按照上面所设计的测试用例,分别使程序运行所规定的次数,记录运行结果并与实验准备时估计的结果进行比较。

A.不循环。

i=20;j=3.输出结果为2205

B.外循环1次,不进行内循环。

I=19,j>3,输出结果为0

C.外循环,内循环各1次,i=19,j=2;输出结果:

7569

D..外循环1次,内循环2次;i=19,j=1;输出结果:

10092

E.外循环2次,内循环1次;i=18,j=2;输出结果:

10018

F.外循环19次,内循环3次,i=2,j=0;输出结果:

46284

G.外循环20次,内循环2次;i=1,j=1;输出结果:

39720

H.外循环21次,内循环3次;i=0,j=0输出结果:

46354

(2)为了了解每循环一次时循环体中变量的变化。

#include

main()

{

inti,j,k;

longsum=0;

for(i=0;i<=20;i++)

for(j=0;j<=3;j++)

printf("%d,%d\n",i,j);

sum+=(i+1)*(i+1)*(j+2);

printf("sumis:

%d\n",sum);

}

(3)将内/外循环的控制表达式对换,观察程序的执行结果是否有变化,并计算内/外循环共执行多少次。

与对换之前相比,有何变化。

#include

main()

{

inti,j,k=0,m=0;

longsum=0;

for(j=1;j<=3;j++)

k++;

for(i=1;i<=20;i++)

m++;

sum+=(i+1)*(i+1)*(j+2);

printf("sumis:

%d\n",sum);

printf("%d,%d\n",k,m);

}

程序执行的结果没有发生变化。

外循环循环了3次,内循环循环了20次。

(4)将程序修改如下

#include

main()

{

inti,j,k;

longsum=0;

for(j=2;j<=3;j++)

{

k=j+2;

for(i=19;i<=20;i++)

sum+=(i+1)*(i+1)*k;

}

printf("sumis:

%d\n",sum);

}

观察程序的执行结果没有发生变化。

(5)将程序修改如下

#include

main()

{

inti,j,m,n;

longsum=0;

for(j=1;j<=3;j++)

{

m=j+2;

for(i=1;i<=20;i++)

{

n=i+1;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1