书名:大学C/C++语言程序设计实验教程
出版社:电子工业出版社
实验1 基本程序示例
任务1 熟悉C语言程序的编辑、编译、连接和运行过程
【上机内容】
1.输入并运行下面程序,写出运行结果。
#include "stdio.h"
main( )
{
char c1,c2;
c1=97;c2=98;
printf("%c,%c", c1, c2);
}
在此基础上,完成以下3项任务:
(1)在c1=97;c2=98;语句后加入如下语句,并运行。
printf("%d, %d", c1, c2 );
运行结果:
a,b97,98
(2)将char c1,c2;改为如下语句,再运行。
int c1, c2;
运行结果:
a,b
(3)将c1=97;c2=98;改为如下语句,再运行,并分析其运行结果。
c1=300; c2=400;
运行结果:
,,怭(或,,?)
2.分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。
#include "stdio.h"
main( )
{
char c1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%c b%c\tabc%c \n",c1,c2,c3);
printf("\t\b%c %c",c4,c5);
}
运行结果:
aa bb abcc
A N
3.分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。
#include "stdio.h"
main( )
{
int i , j , m , n ;
i=8; j=10;
m=++i; n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
运行结果:
9,11,9,10
分别进行以下改动后,先分析结果,再运行对照。
(1)将m=++i; n=j++;改为如下:
m=i++; n= ++ j;
运行结果:
9,11,8,11
(2)程序改为如下:
#include "stdio.h"
main( )
{
int i , j ;
i=8; j=10;
printf("%d,%d", i++, j++);
}
运行结果:
8,10
(3)程序改为如下:
#include "stdio.h"
main( )
{
int i , j ;
i=8; j=10;
printf("%d,%d", ++ i, ++ j);
}
运行结果:
9,11
(4)程序改为如下:
#include "stdio.h"
main( )
{
int i , j ;
i=8; j=10;
printf("%d,%d,%d,%d",i,j,i++,j++);
}
运行结果:
8,10,8,10
(5)程序改为如下:
#include "stdio.h"
main( )
{
int i , j , m=0 , n=0 ;
i=8; j=10;
m+= i ++; n-= --j;
printf("i=%d,j=%d,m=%d,n=%d",i,j,m,n);
}
运行结果:
i=9,j=9,m=8,n=-9
任务2 简单的C语言程序设计
1.按格式要求输入、输出数据。
程序请单如下:
#include "stdio.h"
main( )
{
in 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); /*录入时%c与%c之间有个空格*/
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.82a A ↙ (注解:a与A之间输入一个空格,且a紧跟71.82后写,不要空格)
请写出输出结果。
运行结果:
a=7,b=3,x=8.500000,y=71.820000,c1=a,c2=A
2.输入三角形的三条边长,求三角形面积。
程序清单如下:
#include "stdio.h"
#include "math.h"
main( )
{
float a,b,c,s,area;
scanf("%f ,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
}
运行结果:(具体情况根据自己输入的数据而定)
如在键盘上输入:3,4,5↙
则运行结果为:
area=6.000000
3.已知圆半径、圆柱高、求圆周长、圆柱体积。
程序清单如下:
#include "stdio.h"
main( )
{
float r,h,l,v,pi;
pi=3.1415926;
scanf("%f,%f",&r,&h);
l=2*pi*r;
v=pi*r*r*h;
printf("圆周长为:%6.2f\n",l);
printf("%圆柱体积为:6.2f",v);
}
运行结果:(具体情况根据自己输入的数据而定)
如在键盘上输入:5,6↙
则运行结果为:
圆周长为:31.42
圆柱体积为:471.24
4.输入一个摄氏温度,要求输出华氏温度,公式为f = 5/9·c+32。
程序清单如下:
#include "stdio.h"
main( )
{
float c,f;
scanf("%f",&c);
f=5.0/9*c+32;
printf("%5.2f\n",c);
}
运行结果:(具体情况根据自己输入的数据而定)
如在键盘上输入:37↙
则运行结果为:
52.56
实验2 选择结构
任务1 if语句程序设计
1.修改下列程序,使之满足输入10时输出“= =”,否则输出“!=”的条件。
#include"stdio.h"
main()
{int x;
scanf("%d",&x);
if(x==10)printf("==\n");
else printf("!=\n");
}
2.修改下列程序,使之实现以下功能:① 当a= =b并且b==c时,输出“a==b==c”;② 当a!=b时,输出“a!=b”。
#include “stdio.h”
main( )
{ int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if (a==b)
{if(b==c)
printf(“a==b==c”);
}
else
printf(“a!=b”);
}
3.程序填空。从键盘输入任意一个大写字母,将其转换成相应小写字母输出。
#include <stdio.h>
main()
{ char c;
scanf("%c",&c);
if (c>='A'&&c<='Z')或(c>=65&&c<=90)
c=c+32;
printf("\n%c",c);
}
4.有以下程序,执行后输出结果为_______4_______。
#include “stdio.h”
main( )
{ int a=1,b=2,c=3,d=4;
if(a<b<c) printf(“%d\n”,d);
else if((c-b)==a) printf(“%d\n”,2*d);
else printf(“%d\n”,4*d);
}
5.有以下程序,执行后输出结果为______9 7 0_____。
#include "stdio.h"
main( )
{ int a=8,b=7,c=9,t=0;
if(a<b) t=a;a=b;b=t;
if(a<c) t=a;a=c;c=t;
if(b<c) t=b;b=c;c=t;
printf("%5d%5d%5d\n",a,b,c);
}
6.有以下程序,执行后输出结果为_____9 8 7_____。
#include "stdio.h"
main( )
{ int a=8,b=7,c=9,t=0;
if(a<b) {t=a;a=b;b=t;}
if(a<c) {t=a;a=c;c=t;}
if(b<c) {t=b;b=c;c=t;}
printf("%5d%5d%5d\n",a,b,c);
}
7. x、y有如下函数关系,编写程序输入x,输出y值。
x (x<1)
y = 2x–1 (1≤x<10)
3x–11 (x≥10)
参考答案:
#include "stdio.h"
main()
{ double x,y;
scanf ("%lf",&x);
if (x<1)
y=x;
else if(x<10)
y=2*x-1;
else
y=3*x-11;
printf ("y=%lf",y);
}
8. 输入一个百分制分数,要求输出对应的成绩等级:90~100为‘A’,80~89为‘B’,70~79为‘C’,60~69为‘D’,不及格为‘E’。
参考答案:
#include<stdio.h>
main( )
{ float score;
printf("input socre:");
scanf("%f", &score);
if(score>=90)
printf("A\n");
else if(score>=80)
printf("B\n");
else if(score>=70)
printf("C\n");
else if(score>=60)
printf("D\n");
else
printf("E\n");
}
9.给一个不多于3位的正整数,编写程序完成以下要求:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字,例如,原数为321,应输出123。
参考答案:
#include "stdio.h"
void main()
{int a,b,c,x,n;
scanf("%d",&x);
a=x/100;
b=(x-a*100)/10;
c=x%10;
if(a!=0)
printf("%d为3位数,原数为%d,逆序数为%d\n",x,x,c*100+b*10+a);
else if(b!=0)
printf("%d为2位数,原数为%d,逆序数为%d\n",x,x,c*10+b);
else
printf("%d为1位数,原数为%d,逆序数为%d\n",x,x,c);
}
任务2 switch语句程序设计
1.有如下程序,执行后输出结果为______14______。
#include “stdio.h”
main ( )
{ int i=5;
switch(i)
{ case 4:i+=1;
case 5:i+=2;
case 6:i+=3;
default:i+=4;
}
printf("%d\n",i);
}
2.有如下程序段,若grade的值为'C',则输出结果是_____ Medium!____
Pass!______ 。
switch(grade)
{ case 'A':printf("Excellent!\n");
case 'B':printf("Fine!\n");break;
case 'C':printf("Medium!\n");
case 'D':printf("Pass!\n");break;
default:printf("Fail!\n");
}
3.有以下程序,执行后输出结果为_______a=3,b=5__________
#include "stdio.h"
main( )
{ int x=0,y=1,a=2,b=3;
switch(x)
{ case 0:
switch(y)
{ case 0: a++;
case 1: b++; break;
}
case 1: a++;b++; break;
case 2: a++;b++;
}
printf("\na=%d,b=%d",a,b);
}
4.将下列的程序段改用switch语句来实现,使它完成相同的功能。
if(x>=0&&x<10) y=x;
else if(x<20) y=x+3;
else if(x<40) y=-0.5*x+10;
else y=2*x-5;
参考答案:
#include "stdio.h"
main()
{ float x1,x2;
float y;
scanf("%f",&x1);
x2=x1;
switch(x1>0)
{ case 0 :y=0; break;
case 1 : switch((int)x2/10)
{ case 0: y=x2; break;
case 1: y=x2+3;break;
case 2:
case 3: y=-0.5*x2+10;break;
default: y=2*x2-5;break;
}
}
printf("x=%f,y=%f",x1,y);
}
5.以下程序计算某年某月有几天,闰年与平年的二月份天数不同。判别闰年的条件是:能被4整除但不能被100整除的年是闰年,或者能被400整除的年也是闰年。请分析程序填空。
#include "stdio.h"
#include "stdio.h"
main()
{ int yy,mm,days;
printf("input year and month:");
scanf("%d %d",&yy,&mm);
switch(mm)
{ case 1: case 3: case 5: case 7:case 8:
case 10:case 12: days=31 ;break;
case 4: case 6: case 9: case 11:days=30;break;
case 2:if(yy%4==0&&yy%100!=0||yy%400==0) days=29 ;
else days=28;
break;
default:printf("input error");break;
}
printf("the days of %d %d is %d\n",yy,mm,days);
}
6.假设奖金税率如下(ma代表奖金,tr代表税率), 利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款以及实得奖金数(扣除奖金税后),
① ma<1000时, tr=0%;
② 1000 ≤ma<2000时, tr=5%;
③ 2000 ≤ma<4000时, tr=8%;
④ 4000 ≤ma时, tr=10%。
参考答案:
#include "stdio.h"
main()
{ float ma, tr,ma_tr;
scanf("%f",&ma);
printf("奖金数为%8.2f",ma);
switch(ma>=1000)
{ case 0 :tr=0; break;
case 1 : switch((int)ma/1000)
{ case 1: tr=0.05;break;
case 2:
case 3: tr=0.08;break;
default: tr=0.1;break;
}
}
printf("税率为=%.2f,应交税款为=%.2f,实得奖金数为=%.2f\n",tr,ma*tr,ma*(1-tr));
}