实验3 最简单的C程序设计

发布于:2021-10-16 21:04:06

实验 3 最简单的 C 程序设计

一、实验目的

(1)掌握 C 语言中赋值语句的使用方法。

(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。

二、实验内容和步骤

题目 1 若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,

c2=’b’。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

要求输出的结果如下:

a=3b=4c=5

x=1.200000,y=2.400000,z=-3.600000

x+y=3.60y+z=-1.20z+x=-2.40

u=51274n=128765

c1=’a’or97(ASCII)

c2=’b’or98(ASCII)

编程:

main( )

{

int a,b,c;

long int u,n;

float x,y,z;

char c1,c2;

a=3;b=4;c=5;

x=1.2;y=2.4;z=-3.6;

u=51274;n=128765;

c1=’a’;c2=’b’;

printf("\n");

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

printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z);

printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);

printf("u=%6ld n=%9ld\n",u,n);

printf("c1=’%c’ or %d(ASCII)\n",c1,c1);

printf("c2=’%c’ or %d(ASCII)\n",c2,c2);

}

思考:程序最后两行的 printf 语句中,在" "内部即格式控制部分,哪些属原样

输出的普通字符?哪些属要输出数据的格式说明?

题目 2 请写出下面程序的输出结果:

main( )

{

int a=5,b=7;

float x=67.8564,y=-789.124;

char c=’A’;

long n=1234567;

unsigned u=65535;

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

printf("%3d%3d\n",a,b);

printf("%f,%f\n",x,y);

/*以各种小数形式输出实数*/

printf("%-10f,%-10f\n",x,y);

printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);

printf("%e,%10.2e\n",x,y);

/*以指数形式输出实数*/

printf("%c,%d,%o,%x\n",c,c,c,c); /*以各种形式输出字符变量的值*/

printf("%ld,%lo,%x\n",n,n,n);

printf("%u,%o,%x,%d\n",u,u,u,u); /*以无符号十进制、八进制、十六进制,带符号十进

制形式输出 u 值*/

printf("%s,%5.3s\n","COMPUTER","COMPUTER");/*输出字符串*/

}

思考:解释倒数第三个 printf 语句的输出结果。

题目 3 用下面的 scanf 函数输入数据,使 a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。

问在键盘上如何输入?

main( )

{int a,b;

float x,y;

char c1,c2;

scanf("a=%d b=%d",&a,&b);

scanf(" %f %e",&x,&y);

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

printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);

}

可按如下方式在键盘上输入:

a=3 b=7↙

8.5 71.82↙

A a↙

a=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a

思考:为什么在第三个 scanf 函数双引号第一个字符为空格字符,如果没有这个空格字符,而写成:

scanf("%c %c",&c1,&c2); 按以上的输入,输出将如何变化?

答案:将变为:

a=3,b=7,x=8.500000,y=71.820000,c1=

,c2=A

这是因为在输入完第二行数据后按的回车键被作为一个字符送到内存输入缓冲区中,因此第三个

scanf 函数中的第一个变量 c1 读入了回车符(实际上是回车符的 ASCII 码)。第三行输入的第一个字符 A 被

c2 读取,所以在执行 printf 函数输出 c1 时,就输出一个回车符,输出 c2 时就输出字符 A。我们在程序

第三个 scanf 函数双引号中第一个字符处放了一个空格字符,这样第二行末尾输入的回车符就不会输入给

c1,而是与该空格字符对应,第三行输入的第一个字符 A 就被 c1 读取。也可以不在 scanf 函数中加空格,

而在第三个函数前加一个 getchar 函数:getchar( );(注意要相应地在程序开头加:#include<stdio.h

>)用它将前面的回车符“吃掉”。在一个函数中的如果有几个 scanf 函数,在输入数据时往往会出现一些

想象不到的情况(例如前面碰到的情况),其中一个重要的原因就是由回车符引起的。C 语言很灵活,书上

不可能把一切细节都讲到,读者在遇到类似情况时,上机多试验一下就可以找出规律来。

题目 4 设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用 scanf 输入数据,输出计算结果,输出时要求有文字说明,取小数点后 2 位数字。请编程序。

main( )

{

float pi,h,r,l,s,sq,vq,vz;

pi=3.1415926;

printf("input r,h:\n");

/*输入半径和高*/

scanf("%f,%f",&r,&h);

/*求圆周长*/

l=2*pi*r;

/*求圆面积*/

s=r*r*pi;

/*求圆球表面积*/

sq=4*pi*r*r;

/*求圆球体积*/

vq=4.0/3.0*pi*r*r*r;

/*求圆柱体积*/

vz=pi*r*r*h;

1

printf("l=%6.2f\n",l);

printf("s=%6.2f\n",s);

printf("sq=%6.2f\n",sq);

printf("vq=%6.2f\n",vq);

printf("vz=%6.2f\n",vz);

}

运行结果:

input r,h:

1.5,3↙

1= 9.42

s= 7.07

sq= 28.27

vq= 14.14

vz= 21.21

题目 5 输入一个华氏温度,要求输出摄氏温度。公式为 c= 5 (F-32)。输出要有文字说明,取 2 9
位小数。

main( )

{

float c,f;

printf("input f:\n");

scanf("%f",&f);

/*输入华氏温度 f*/

c=(5.0/9.0)*(f-32); /*求摄氏温度 c*/

printf("c=%5.2f\n",c);

}

运行结果:

input f:

78↙

c=25.56

思考:求 c 值的语句可否改成 c=(5/9)*(f-32);为什么?

题目 6 下列程序的运行结果为

main( )

{

int x=2,y,z;

x*=3+2;printf("%d\t",x);

x*=y=z=4;printf("%d\t",x);

x=y=1;

z=x++-1;

/*此处等价于 z=x-1;x=x+1;故 z 为 0,x 为 2*/

printf("%d,%d\t",x,z);

z+=-x+++y;

/*此处等价于 z+=-(x++)+y*/

printf("%d,%d\t",x,z);

x=40;y=4;z=4;

x=y==z;printf("%d\t",x);

x=x==(y=z);printf("%d\n",x);

}

运行结果为:

10

40

2,0

3,-1

1

0

思考:表达式 i+++j 如何理解?

题目 7 下列程序的运行结果为

main( )

{

2

int i,j;

i=16;j=(i++)+i;printf("%d\t",j); /*表达式 i++的值为 i 的原值*/

i=15;printf("%d\t%d\t",++i,i); /*函数参数的求值顺序是自右而左*/

i=20;j=i--+i;printf("%d\t",j);

i=13;printf("%d\t%d\n",i++,i);

}

运行结果为:

32

16

15

40

13

13

思考:如函数参数求值顺序是自左向右,则结果又将如何?

题目 8 下列程序的运行结果为

main( )

{

unsigned char a=’a’,b=’b’,c=’c’; /*无符号字符型变量,取值范围 0--255*/

a=a-32;

b+=c-a;

c=c-32+b-a;

printf("a=%c,b=%c,c=%c\n",a,b,c);

}

题目 9 下列程序的运行结果为

#include"stdio.h"

main( )

{

int x=2,y=4,z=40;

x*=3+2;

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

x=y=z;

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

}

思考:赋值运算符的结合顺序?

题目 10 以下程序运行的结果为

#define GZ 30

/*定义符号常量 GZ*/

main( )

{

int num,total,gz;

/*gz 为整型变量*/

gz=40;

num=10;

total=num*GZ;

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

}

思考: 符号常量与变量的区别?

题目 11 下列程序运行结果为

main( )

{

unsigned x1;

int b=-1;

x1=b;

/*有符号数据传送给无符号变量*/

printf("%u",x1);

}

思考:不同类型的整型数据相互赋值时,规则是什么?

题目 12 下列程序的运行结果为

main( )

3

{

int a=5;

printf("\n%d,",(3+5,6+8)); /*输出逗号表达式的值*/

a=(3*5,a+4);

/*逗号表达式的值赋给 a*/

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

}

思考:程序第 5 行如改为 a=3*5,a+4;结果将如何?

题目 13 输入 a 字母时,下列程序运行结果为

#include<stdio.h>

main( )

{

char ch;

ch=getchar( );

(ch>=’a’&&ch<=’z’)?putchar(ch+’A’- ’a’):putchar(ch);

/*在条件表达式的求值过程中执行输出动作*/

}

题目 14 下列程序运行结果为

main( )

{

int x,y,z;

x=24;

y=024;

z=0x24;

printf("%d,%d,%d\n",x,y,z);

}

题目 15 执行下面的程序后,变量 w,x,y,z 的值分别为

main( )

{

int w=5,x=4,y,z;

y=w++*w++*w++;

/*把 5 作为所有 w 的值,求得整个表达式的值后 w 自加 3*/

z=--x*--x*--x; /*先使 x 作 3 次自减运算,再取 x 的值作乘法*/

printf("%d %d %d %d",w,x,y,z);

}

运行结果为:

8 1 125 1

4


相关推荐

最新更新

猜你喜欢