書名:大學(xué)C/C++語言程序設(shè)計實驗教程
出版社:電子工業(yè)出版社
實驗1 ?基本程序示例
任務(wù)1 ?熟悉C語言程序的編輯、編譯、連接和運行過程
【上機內(nèi)容】
1.輸入并運行下面程序,寫出運行結(jié)果。
#include "stdio.h"
main(?)
{
??char ?c1,c2;
???????c1=97;c2=98;
???????printf("%c,%c", c1, c2);
}
在此基礎(chǔ)上,完成以下3項任務(wù):
(1)在c1=97;c2=98;語句后加入如下語句,并運行。
printf("%d, %d", c1, c2 );
運行結(jié)果:
a,b97,98
(2)將char ?c1,c2;改為如下語句,再運行。
int c1, c2;
運行結(jié)果:
a,b
(3)將c1=97;c2=98;改為如下語句,再運行,并分析其運行結(jié)果。
c1=300; c2=400;
運行結(jié)果:
,,怭(或,,?)
?????
2.分析下面程序,寫出運行結(jié)果,再輸入計算機中運行,將得到的結(jié)果與分析得到的結(jié)果比較對照。
#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);
}
運行結(jié)果:
aa bb ??abcc
A N
?
3.分析下面程序,寫出運行結(jié)果,再輸入計算機中運行,將得到的結(jié)果與分析得到的結(jié)果比較對照。
#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);
}
運行結(jié)果:
9,11,9,10
分別進行以下改動后,先分析結(jié)果,再運行對照。
(1)將m=++i; n=j++;改為如下:
m=i++; n= ++ j;
運行結(jié)果:
9,11,8,11
(2)程序改為如下:
#include "stdio.h"
main(?)
{
int i , j ;
i=8; j=10;
printf("%d,%d", i++, j++);
}
運行結(jié)果:
8,10
(3)程序改為如下:
#include "stdio.h"
main(?)
{
int i , j ;
i=8; j=10;
printf("%d,%d", ++ i, ++ j);
}
運行結(jié)果:
9,11
(4)程序改為如下:
#include "stdio.h"
main(?)
{
int i , j ;
i=8; j=10;
printf("%d,%d,%d,%d",i,j,i++,j++);
}
運行結(jié)果:
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);
}
運行結(jié)果:
i=9,j=9,m=8,n=-9
任務(wù)2 ?簡單的C語言程序設(shè)計
1.按格式要求輸入、輸出數(shù)據(jù)。
程序請單如下:
#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);
}
運行該程序,必須按如下方式在鍵盤上輸入數(shù)據(jù):
????a=3,b=7 ↙
????8.5,71.82a ?A?↙ ??(注解:a與A之間輸入一個空格,且a緊跟71.82后寫,不要空格)
請寫出輸出結(jié)果。
運行結(jié)果:
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);
}
運行結(jié)果:(具體情況根據(jù)自己輸入的數(shù)據(jù)而定)
如在鍵盤上輸入:3,4,5↙
則運行結(jié)果為:
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);
}
運行結(jié)果:(具體情況根據(jù)自己輸入的數(shù)據(jù)而定)
如在鍵盤上輸入:5,6↙
則運行結(jié)果為:
圓周長為: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);
}
運行結(jié)果:(具體情況根據(jù)自己輸入的數(shù)據(jù)而定)
如在鍵盤上輸入:37↙
則運行結(jié)果為:
52.56
?
實驗2 選擇結(jié)構(gòu)
任務(wù)1 ?if語句程序設(shè)計
1.修改下列程序,使之滿足輸入10時輸出“= =”,否則輸出“!=”的條件。
#include"stdio.h"
main()
{int x;
scanf("%d",&x);
if(x==10)printf("==\n");
else printf("!=\n");
}
2.修改下列程序,使之實現(xiàn)以下功能:① 當(dāng)a=?=b并且b==c時,輸出“a==b==c”;② 當(dāng)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.程序填空。從鍵盤輸入任意一個大寫字母,將其轉(zhuǎn)換成相應(yīng)小寫字母輸出。
????#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.有以下程序,執(zhí)行后輸出結(jié)果為_______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.有以下程序,執(zhí)行后輸出結(jié)果為______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.有以下程序,執(zhí)行后輸出結(jié)果為_____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有如下函數(shù)關(guān)系,編寫程序輸入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. 輸入一個百分制分數(shù),要求輸出對應(yīng)的成績等級: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位的正整數(shù),編寫程序完成以下要求:
(1)求出它是幾位數(shù);
(2)分別輸出每一位數(shù)字;
(3)按逆序輸出各位數(shù)字,例如,原數(shù)為321,應(yīng)輸出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位數(shù),原數(shù)為%d,逆序數(shù)為%d\n",x,x,c*100+b*10+a);
else if(b!=0)
???printf("%d為2位數(shù),原數(shù)為%d,逆序數(shù)為%d\n",x,x,c*10+b);
?????else
????printf("%d為1位數(shù),原數(shù)為%d,逆序數(shù)為%d\n",x,x,c);
}
?
任務(wù)2 ?switch語句程序設(shè)計
1.有如下程序,執(zhí)行后輸出結(jié)果為______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',則輸出結(jié)果是_____?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.有以下程序,執(zhí)行后輸出結(jié)果為_______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語句來實現(xiàn),使它完成相同的功能。
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.以下程序計算某年某月有幾天,閏年與平年的二月份天數(shù)不同。判別閏年的條件是:能被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.假設(shè)獎金稅率如下(ma代表獎金,tr代表稅率), 利用switch語句編寫程序?qū)斎氲囊粋€獎金數(shù),輸出稅率和應(yīng)交稅款以及實得獎金數(shù)(扣除獎金稅后),
① 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("獎金數(shù)為%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,應(yīng)交稅款為=%.2f,實得獎金數(shù)為=%.2f\n",tr,ma*tr,ma*(1-tr));
}