知ing

大学C/C++语言程序设计实验教程

阳小华 罗晨晖 编 / 电子工业出版社

王大胆 上传

查看本书

书名:大学C/C++语言程序设计实验教程

作者: 阳小华 罗晨晖 编

出版社:电子工业出版社



实验1  基本程序示例

任务1  熟悉C语言程序的编辑、编译、连接和运行过程

【上机内容】

1.输入并运行下面程序,写出运行结果。

#include "stdio.h"

main( )

{

  char  c1c2;

       c1=97;c2=98;

       printf("%c%c", c1, c2);

}

在此基础上,完成以下3项任务:

1)在c1=97;c2=98;语句后加入如下语句,并运行。

printf("%d, %d", c1, c2 );

运行结果:

ab9798

2)将char  c1c2;改为如下语句,再运行。

int c1, c2;

运行结果:

ab

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"iji++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 ↙   (注解:aA之间输入一个空格,且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.  xy有如下函数关系,编写程序输入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. 输入一个百分制分数,要求输出对应的成绩等级:90100为‘A’,8089为‘B’,7079为‘C’,6069为‘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));

}


查看更多