@
@南方
实验二:最简单的C程序设计和逻辑运算及判断选取控制
一.实验目的
1. 掌握C语言中使用最多的一种语句的使用。
2. 掌握数据的输入输出的方法,能正确使用权各种转换符。
3. 了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”)。
4. 学会正确使用逻辑运算符和逻辑表达式。
5. 熟练掌握if和switch语句。
二.实验环境
CPU:P133; RAM:48M; OS:WINDOWS98; SOFTWARE:TURBO C2。0
三.实验过程
程序一
输入并运行以下程序
main()
{
int a,b;
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=3157.890121;g=0.123456789;
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);
}
运行结果:
a=61,b=62
c1=a,c2=b
d= 3.56,e= -6.87
f= 3157.890121,g= 0.123456789000
m=50000,n=-60000
p=32768,q=40000
a、b;c1、c2以字符形式输出;d、e以6列2位小数的形式输出,3.56和-6.87位数不够,左端补空格;f以15列6位小数的形式输出,g以15列12位小数的形式输出,小数位数不够右端补0;m、n是长整型数所以要以%ld输出;p、q出以无符号十进制整数输出。
把第8~13行改为:
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.1234567;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
其运行结果
a=-15536,b=5536
c1==,c2=>
d=3157.89,e= 0.12
f= 3157.890121,g= 0.123456700000
m=50000,n=-60000
p=50000,q=5536
由上可见给字符型变量赋值必须用‘‘括起来,否则会出错;而a、b是带符号的整型数,它的最大范围为-32768~+32767,而现在赋给它的值超出了这个范围,也输出了错误的结果;p、q是不带符号的整型数,它的最大范围为0~65535,而给q赋的值是-60000,所以产生了q=5536的错误。
接着再作如下修改:
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\n",a,b,c1,c2,d,e);
printf("f=%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n",f,g,m,n,p,q);
输出结果:
a=-15536,b=5536
c1==,c2=>
d= 3157.890137,e= 0.123456701636
f=3157.890121,g=0.123457
m=-15536,n=0
p=5536,q=-1
d、e是单精度实型数,只能保7位的有效数字,当以多于7位的形式输出时,多出的后面的数字是无意义的。即d=3157.890137中最后的137和e= 0.123456701636中最后的01636是无意义的。
%f格式隐含输出6位小数,所以g=0.1234567输出时变成了0.123457。
p、q是不带符号的整型数,不应以%d这种带符号的方式输出。
改作scanf函数输入数据而不用赋值语句,scanf函数如下:
scanf("%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u",&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入数据如下:
61,62,a,b,3.56,-6.87,3,157.890121,0.123456789,50000,-60000,37678↙
运行结果:
a=61,b=62
c1=a,c2=b
d= 3.560000,e=-6.869999885559
f=3.000000,g=157.890121
m=0,n=0
p=4706,q=32
p是unsigned,所以不能输入-60000这个负数;m定义的是long形式,输入0.123456789时只留下整数部分0;e是单精度浮点数,以12位小数的单精度浮点数形式输出,而实际输入的-6.87,只有2位小数,系统会加一些数补充;q定义的是unsigned型,不应以%d这种带符号的方式输出.
程序二:
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆柱体积。用scanf输入数据,输出计算结果。输出时要有文字说明,取小数点后两位数字。
程序如下:
main()
{
float pi,h,r,l,s,sq,vq,vz;
pi=3.1415926;
printf("请输入圆半径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;
printf("圆周长为: l=%6.2f\n",l);
printf("圆面积为: s=%6.2f\n",s);
printf("圆球表面积为: sq=%6.2f\n",sq);
printf("圆柱体积为 : sv=%6.2f\n",vq);
printf("圆柱体积为 : sz=%6.2f\n",vz);
}
程序运行如下:
请输入圆半径r,圆柱高h:
1.5,3↙
圆周长为: l= 9.42
圆面积为: s= 7.07
圆球表面积为: sq= 28.27
圆柱体积为 : sv= 14.14
圆柱体积为 : sz= 21.21
程序三:(比较putchar和printf的区别)
#include<stdio.h>
main()
{
char c1,c2;
c1=getchar();c2=getchar();
putchar(c1);putchar(c2);putchar('\n');
printf("%c%c\n",c1,c2);
}
程序运行如下:
AB ↙
AB
AB
putchar的特点是只能输出一个字符,而printf可以输出多个数据,且为任意类型。
程序四:
编程序解决以下问题
有一函数
x (x<1)
y= 2x-1 (1<=x<10)
3x-11 (x>=10)
用scanf函数输入x的值(分别为x<1、1~10、>=10 三种情况),求y的值。
程序如下:
main()
{int x,y;
printf("input x:");
scanf("%d",&x);
if(x<1)
{y=x;
printf("x=%d, y=x=%d\n",x,y);
}
else if(x<10)
{y=2*x-1;
printf("x=%d, y=2*x-1=%d\n",x,y);
}
else
{y=3*x-11;
printf("x=%d, y=3*x-11=%d\n",x,y);
}
}
运行结果为
1.input x:4↙
x=4, y=2*x-1=7
2.input x:-1↙
x=-1, y=x=-1
3.input x:18↙
x=18, y=3*x-11=43
程序五:
给一个百分制成绩,要求输出等级‘A’‘B’‘C’‘D’‘E’。90分以上为‘A’80~89为‘B’,70~79为‘C’,60~69为‘D’,60下为‘E’。
程序如下:
main()
{int score,temp,logic;
char grade;
logic=1;
while(logic)
{printf("请输入学生成绩:");
scanf("%d",&score);
if((score>100)||(score<0))
printf("输入有误,请重输。");
else
logic=0;
}
if(score==100)
temp=9;
else
temp=(score-score%10)/10;
switch(temp)
{ 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("成绩是%d,相应的等级是%c\n。",score,grade);
}
运行结果为
1.请输入学生成绩:101↙
输入有误,请重输。
请输入学生成绩:-2↙
输入有误,请重输。
请输入学生成绩:90↙
成绩是90,相应的等级是A。
2.请输入学生成绩:50↙
成绩是50,相应的等级是E。
程序六:
给出一个不多于5位的正整数,要求:1.求它是几位数;2.分别打印出每一位数字;3.按逆顺序打印出各位数字,例如原数为321,应输出123。
程序如下:
main()
{
long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;
printf("请输入一个整数(0~99999):");
scanf("%ld",&num);
if(num>9999)
place=5;
else if(num>999)
place=4;
else if(num>99)
place=3;
else if(num>9)
place=2;
else place=1;
printf("place=%d\n",place);
printf("每位数字为:");
ten_thousand=num/10000;
thousand=num%10000/1000;
hundred=num%10000%1000/100;
ten=num%10000%1000%100/10;
indiv=num%10000%1000%100%10;
switch(place)
{case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d,%d,%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d,%d\n", indiv,ten,hundred,thousand);
break;
case 3:printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d\n", indiv,ten,hundred);
break;
case 2:printf("%d,%d",ten,indiv);
printf("\n反序数字为:");
printf("%d,%d\n", indiv,ten);
break;
case 1:printf("%d",indiv);
printf("\n反序数字为");
printf("%d\n", indiv);
}
}
运行结果为
请输入一个整数(0~99999):9876↙
place=4
每位数字为:9,8,7,6
反序数字为:6,7,8,9
程序七:
输入四个整数,要求按大小顺序输出。
程序如下:
main()
{int t,a,b,c,d;
printf("请输入四个整数:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=b;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 %d",a,b,c,d);
}
运行结果为
请输入四个整数:2,5,3,8↙
a=2,b=5,c=3,d=8
排序结果如下
2 3 5 8
本次实验掌握了printf、scanf和if、switch等的使用方法。应注意的是在使用scanf时,不能漏写”&”符号;另外定义整数时应注意整数的大小,以防溢出。
一.实验目的
1. 掌握C语言中使用最多的一种语句的使用。
2. 掌握数据的输入输出的方法,能正确使用权各种转换符。
3. 了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”)。
4. 学会正确使用逻辑运算符和逻辑表达式。
5. 熟练掌握if和switch语句。
二.实验环境
CPU:P133; RAM:48M; OS:WINDOWS98; SOFTWARE:TURBO C2。0
三.实验过程
程序一
输入并运行以下程序
main()
{
int a,b;
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=3157.890121;g=0.123456789;
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);
}
运行结果:
a=61,b=62
c1=a,c2=b
d= 3.56,e= -6.87
f= 3157.890121,g= 0.123456789000
m=50000,n=-60000
p=32768,q=40000
a、b;c1、c2以字符形式输出;d、e以6列2位小数的形式输出,3.56和-6.87位数不够,左端补空格;f以15列6位小数的形式输出,g以15列12位小数的形式输出,小数位数不够右端补0;m、n是长整型数所以要以%ld输出;p、q出以无符号十进制整数输出。
把第8~13行改为:
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.1234567;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
其运行结果
a=-15536,b=5536
c1==,c2=>
d=3157.89,e= 0.12
f= 3157.890121,g= 0.123456700000
m=50000,n=-60000
p=50000,q=5536
由上可见给字符型变量赋值必须用‘‘括起来,否则会出错;而a、b是带符号的整型数,它的最大范围为-32768~+32767,而现在赋给它的值超出了这个范围,也输出了错误的结果;p、q是不带符号的整型数,它的最大范围为0~65535,而给q赋的值是-60000,所以产生了q=5536的错误。
接着再作如下修改:
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\n",a,b,c1,c2,d,e);
printf("f=%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n",f,g,m,n,p,q);
输出结果:
a=-15536,b=5536
c1==,c2=>
d= 3157.890137,e= 0.123456701636
f=3157.890121,g=0.123457
m=-15536,n=0
p=5536,q=-1
d、e是单精度实型数,只能保7位的有效数字,当以多于7位的形式输出时,多出的后面的数字是无意义的。即d=3157.890137中最后的137和e= 0.123456701636中最后的01636是无意义的。
%f格式隐含输出6位小数,所以g=0.1234567输出时变成了0.123457。
p、q是不带符号的整型数,不应以%d这种带符号的方式输出。
改作scanf函数输入数据而不用赋值语句,scanf函数如下:
scanf("%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u",&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入数据如下:
61,62,a,b,3.56,-6.87,3,157.890121,0.123456789,50000,-60000,37678↙
运行结果:
a=61,b=62
c1=a,c2=b
d= 3.560000,e=-6.869999885559
f=3.000000,g=157.890121
m=0,n=0
p=4706,q=32
p是unsigned,所以不能输入-60000这个负数;m定义的是long形式,输入0.123456789时只留下整数部分0;e是单精度浮点数,以12位小数的单精度浮点数形式输出,而实际输入的-6.87,只有2位小数,系统会加一些数补充;q定义的是unsigned型,不应以%d这种带符号的方式输出.
程序二:
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆柱体积。用scanf输入数据,输出计算结果。输出时要有文字说明,取小数点后两位数字。
程序如下:
main()
{
float pi,h,r,l,s,sq,vq,vz;
pi=3.1415926;
printf("请输入圆半径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;
printf("圆周长为: l=%6.2f\n",l);
printf("圆面积为: s=%6.2f\n",s);
printf("圆球表面积为: sq=%6.2f\n",sq);
printf("圆柱体积为 : sv=%6.2f\n",vq);
printf("圆柱体积为 : sz=%6.2f\n",vz);
}
程序运行如下:
请输入圆半径r,圆柱高h:
1.5,3↙
圆周长为: l= 9.42
圆面积为: s= 7.07
圆球表面积为: sq= 28.27
圆柱体积为 : sv= 14.14
圆柱体积为 : sz= 21.21
程序三:(比较putchar和printf的区别)
#include<stdio.h>
main()
{
char c1,c2;
c1=getchar();c2=getchar();
putchar(c1);putchar(c2);putchar('\n');
printf("%c%c\n",c1,c2);
}
程序运行如下:
AB ↙
AB
AB
putchar的特点是只能输出一个字符,而printf可以输出多个数据,且为任意类型。
程序四:
编程序解决以下问题
有一函数
x (x<1)
y= 2x-1 (1<=x<10)
3x-11 (x>=10)
用scanf函数输入x的值(分别为x<1、1~10、>=10 三种情况),求y的值。
程序如下:
main()
{int x,y;
printf("input x:");
scanf("%d",&x);
if(x<1)
{y=x;
printf("x=%d, y=x=%d\n",x,y);
}
else if(x<10)
{y=2*x-1;
printf("x=%d, y=2*x-1=%d\n",x,y);
}
else
{y=3*x-11;
printf("x=%d, y=3*x-11=%d\n",x,y);
}
}
运行结果为
1.input x:4↙
x=4, y=2*x-1=7
2.input x:-1↙
x=-1, y=x=-1
3.input x:18↙
x=18, y=3*x-11=43
程序五:
给一个百分制成绩,要求输出等级‘A’‘B’‘C’‘D’‘E’。90分以上为‘A’80~89为‘B’,70~79为‘C’,60~69为‘D’,60下为‘E’。
程序如下:
main()
{int score,temp,logic;
char grade;
logic=1;
while(logic)
{printf("请输入学生成绩:");
scanf("%d",&score);
if((score>100)||(score<0))
printf("输入有误,请重输。");
else
logic=0;
}
if(score==100)
temp=9;
else
temp=(score-score%10)/10;
switch(temp)
{ 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("成绩是%d,相应的等级是%c\n。",score,grade);
}
运行结果为
1.请输入学生成绩:101↙
输入有误,请重输。
请输入学生成绩:-2↙
输入有误,请重输。
请输入学生成绩:90↙
成绩是90,相应的等级是A。
2.请输入学生成绩:50↙
成绩是50,相应的等级是E。
程序六:
给出一个不多于5位的正整数,要求:1.求它是几位数;2.分别打印出每一位数字;3.按逆顺序打印出各位数字,例如原数为321,应输出123。
程序如下:
main()
{
long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;
printf("请输入一个整数(0~99999):");
scanf("%ld",&num);
if(num>9999)
place=5;
else if(num>999)
place=4;
else if(num>99)
place=3;
else if(num>9)
place=2;
else place=1;
printf("place=%d\n",place);
printf("每位数字为:");
ten_thousand=num/10000;
thousand=num%10000/1000;
hundred=num%10000%1000/100;
ten=num%10000%1000%100/10;
indiv=num%10000%1000%100%10;
switch(place)
{case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d,%d,%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d,%d\n", indiv,ten,hundred,thousand);
break;
case 3:printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d,%d,%d\n", indiv,ten,hundred);
break;
case 2:printf("%d,%d",ten,indiv);
printf("\n反序数字为:");
printf("%d,%d\n", indiv,ten);
break;
case 1:printf("%d",indiv);
printf("\n反序数字为");
printf("%d\n", indiv);
}
}
运行结果为
请输入一个整数(0~99999):9876↙
place=4
每位数字为:9,8,7,6
反序数字为:6,7,8,9
程序七:
输入四个整数,要求按大小顺序输出。
程序如下:
main()
{int t,a,b,c,d;
printf("请输入四个整数:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=b;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 %d",a,b,c,d);
}
运行结果为
请输入四个整数:2,5,3,8↙
a=2,b=5,c=3,d=8
排序结果如下
2 3 5 8
本次实验掌握了printf、scanf和if、switch等的使用方法。应注意的是在使用scanf时,不能漏写”&”符号;另外定义整数时应注意整数的大小,以防溢出。