《C 程序设计》 上机实验报告(二)之分支结构程序设计

实验内容:

1.运行程序

#include

void main( )

{  int x,y;

printf(“Enter two integers:x,y”);

   scanf(“%d,%d”,&x,&y);

printf(“%4d%4d%4d\n”,x>y,x==y,x

}

要求:

(1)输入并调试上述源程序。

(2)对源程序进行编译、连接。

(3)运行源程序并存盘,文件名按规定定义。

(4)写出程序的运行结果。

(5)按给定的测试数据,运行程序,并将结果填入表3-1中。

程序:

#include

int main()

{

    system("color f3");

    int x, y;

    printf("Enter two integers:x,y");

   scanf_s("%d,%d", &x, &y);

    printf("%4d%4d%4d\n", x > y, x == y, x < y);

}

 

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第1张图片

 

2.运行程序

#include

void main( )

{  char ch;

   printf("Enter a character:");

   ch=getchar();

if(ch>='a'&&ch<='z')

      printf("\n\n");

Else

      printf("\nThis is not a lowercase\n");

}

 要求:

(1)输入并调试上述源程序。

(2)对源程序进行编译、连接。

(3)运行源程序并存盘,文件名规定定义。

(4)写出程序运行结果,填入表3-2。

程序:

#include

void main()

{

    system("color f3");

    char ch;

    printf("Enter a character:");

    ch = getchar();

    if (ch >= 'a' && ch <= 'z')

        printf("\nThis is a lowercase\n");

    else

        printf("\nThis is not a lowercase\n");

}

   

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第2张图片

3. 运行程序

程序功能是求一元二次方程ax2+bx+c=0的根,完成下列要求。

#include

#include

void main( )

{   float a,b,c,d,x1,x2;

    scanf("%f,%f,%f",&a,&b,&c);

    d=b*b-4.0*a*c;

    if(fabs(d)<1.0e-6)

{     x1=x2=-b/(2.0*a);

          printf("\nx1=x2=%f",x1);

 }

   else

{

       if(d>0)

       {   printf("\nx1=%f",(-b+sqrt(d))/(2.0*a));

            printf("\nx2=%f",(-b-sqrt(d))/(2.0*a));

       }

        else

       {    printf("\nx1=%f+i%f",-b/(2.0*a),sqrt(-d)/(2.0*a));

            printf("\nx2=%f+i%f",-b/(2.0*a),sqrt(-d)/(2.0*a));

       }

   }

}

要求:

(1)输入并调试上述源程序。

(2)对源程序进行编译、连接。

(3)运行源程序并存盘。

(4)写出程序运行结果(输入数据分别求出该方程的3种根,即相等实根、不等实根和共轭复根),填入表3-3。

程序:

#include

int main()

{

    system("color f3");

    float a, b, c, d, x1, x2;

    scanf_s("%f,%f,%f", &a, &b, &c);

    d = b * b - 4.0 * a * c;

    if (fabs(d) < 1.0e-6)

    {

        x1 = x2 = -b / (2.0 * a);

        printf("\nx1=x2=%f", x1);

    }

    else

    {

        if (d > 0)

        {

            printf("\nx1=%f", (-b + sqrt(d)) / (2.0 * a));

            printf("\nx2=%f", (-b - sqrt(d)) / (2.0 * a));

        }

        else

        {

            printf("\nx1=%f+i%f", -b / (2.0 * a), sqrt(-d) / (2.0 * a));

            printf("\nx2=%f+i%f", -b / (2.0 * a), sqrt(-d) / (2.0 * a));

        }

    }

}

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第3张图片

思考:分析程序中分支结构的嵌套,用if-else-if结构实现该程序。说明为什么用(fabs(d)<1.0e-6)表示d等于0?

答:这是为了判断浮点数相等,由于计算机保存的浮点数是2进制的,在精度上有一定的偏差。if (disc == 0.0) 时,disc不一定精确地等于0,也许会等于0.000001。为了避免浮点数比较上的误差,就要设定一个误差范围,也就是(-1e-6, 1e-6)这个范围内,如果disc落在这个范围内,就认为其等于0了。

4.程序填空

从健盘输入5种算术运算符,+、-、*、/、%,再输入两个整数,对其进行对应的算术运算并输出结果,如果输入的字符不是算术运算符,则输出字符串“Input error!”,提示出错。

#include

void main( )

{  char op;

   int a,b;

   op=getchar();

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

   switch(op)

   {   case '+':printf("a%cb=%d",op,a+b);

            break;

   case '-':printf("a%cb=%d",op,a-b);

            break;

   case '*':                         

            break;

   case '/':printf("a%cb=%d",op,a/b);

            break;

   case '%':printf("a%cb=%d",op,a%b);

            break;

   default:                      

   }

要求:

(1)根据要求在上述源程序的横线上填入适当内容,并输入调试。

(2)对源程序进行编译连接、运行,写出程序运行结果(要求输入5组数据,分别对应+、-、*、/、%)。填入表3-4,并对结果进行分析,理解switch case结构的语法形式和应用场合。

程序:

#include

int main()

{

    system("color f3");

    char op;

    int a, b;

    op = getchar();

    scanf_s("%d,%d", &a, &b);

    switch (op)

    {

    case'+':printf("a%cb=%d", op, a + b);

        break;

    case'-':printf("a%cb=%d", op, a - b);

        break;

    case'*':printf("a%cb=%d", op, a * b);

        break;

    case'/':printf("a%cb=%d", op, a / b);

        break;

    case'%':printf("a%cb=%d", op, a % b);

        break;

    default:printf("input error!\n");

    }

}

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第4张图片

5.有一分段函数:

  

编写程序,输入x值,输出y值

程序:

#include

int main()

{

    int x, y;

    printf("请输入x的值");

    scanf_s("%d,", &x);

    if (x < 0)//使用多个if对x的范围进行判断

    {

        y = 4 * x + 5;

    }

    if (x >= 0 && x < 10)//&&是且的意思

    {

        y = x * x - 2 * x + 5;

    }

    if (x >= 10)

    {

        y = x * x * x - 6 * x;

    }

    printf("y的值是%d\n", y);

    return 0;

}

6.编写程序

从健盘输入年份,判断该年份是否为闰年。判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。

程序:

#include

int main()

{

    system("color f3");

    int year, a;

    printf("请输人年份:\n");

    scanf_s("%d", &year);

    if (year % 400 == 0)

        a = 1;

    else

    {

        if (year % 4 == 0 && year % 100 != 0)//"!=":不等于

            a = 1;

        else

            a = 0;

    }

    if (a == 1)

    {

        printf("%d 此年是闰年\n", year);

    }

    else

    {

        printf("%d 此年非闰年\n", year);

}

}

7.编写程序

已经一包海鲜单价为46.5元,如果购买100~300包,则按95%优惠;如果购买300~500包,则按85%优惠;如果购买501~1000包,则按80%优惠;如果购买10000包以上,则按70%优惠。试编写一个计算顾客购买x包海鲜所需金额且打印购买数量、单价和总金额的程序。

程序:

#include

int main(void)

{

    system("color f3");

    double a = 46.5, c = 0;//a为单价 b为数量 c为总金额

    int b = 0;

    printf("输入你想要购买的数量\n");

    scanf_s("%d", &b);

    if (b < 0)

    {

        printf("check your input!(num>=0)\n");

        return 0;

    }

    if (b < 100)

        c = b *a;

    if (b >= 100 && b <= 300)

        c = b * a * 0.95;

    if (b > 300 && b <= 500)

        c = b * a * 0.85;

    if (b > 500 && b <= 1000)

        c = b * a * 0.8;

    if (b > 1000)

        c = b *a * 0.7;

    printf("数量:%d 单价:%lf 总金额:%lf", b, a,c);

    return 0;

}

8.编写程序

输入10个整数。统计其中正数、负数的个数,并求正数及负数的累加和。

程序:

#include

int main()

{

 system("color f3");

    int i, n, count = 0, s = 0;

    for (i = 0; i < 10; i++)

    {

        printf("请输入第%d个数:", i + 1);

        scanf_s("%d", &n);

        if (n >= 0)

            count++;

        s += n;

    }

    printf("正数的个数为:%d\n", count);

    printf("负数的个数为:%d\n", 10 - count);

    printf("sum=%d\n", s);

9.编写程序

要求36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要求一次搬完。问:男、女、小孩各多少人?

程序:

#include

void main(void)

{

    int i, j, k;

    for (i = 1; i < 9; i++)

    {

        for (j = 1; j < 18; j++)

        {

            k = 36 - i - j;

            if (k % 2 == 0)

            {

                if (4 * i + 2 * j + k / 2 == 36)

                    printf("%d,%d,%d", i, j, k);

            }

        }

    }

}

10.编写程序

有4个圆塔,圆心分别为(2,2) (-2,2) (2,-2) (-2,-2) ,圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

算法提示:

输入某点坐标(x,y),求出(x,y)到各塔心的距离,判断输入点是否在塔外。

程序:

#include

int main()

{

    int r = 1;

    printf("请输入任意一点的坐标:");

    int a, b;

    int x, y;

    float c;

    scanf_s("%d %d", &a, &b);

    x = fabs(a);

    y = fabs(b);//先将a和b的坐标取绝对值

c = sqrt((x - 2) * (x - 2) + (y - 2) * (y - x));//c是点到圆心的距离

    if (c > r)

        printf("0");//求点到圆心的距离大于半径,高度为0

    else

        printf("10");//求点到圆心的距离小于半径,高度为10

    return 0;

}

程序测试及运行结果:

5.《C 程序设计》 上机实验报告(二)之分支结构程序设计_第5张图片

6.

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第6张图片7.《C 程序设计》 上机实验报告(二)之分支结构程序设计_第7张图片

8.《C 程序设计》 上机实验报告(二)之分支结构程序设计_第8张图片

9.

《C 程序设计》 上机实验报告(二)之分支结构程序设计_第9张图片

10.《C 程序设计》 上机实验报告(二)之分支结构程序设计_第10张图片

结果分析与讨论:

  1. 比较if语句和switch语句的不同点。

答:

(1)if语句的判断条件大部分都是bool类型,switch语句是用(类似)枚举的方式来标识各个分支的

(2)switch 更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件 类型单一,只有一个入口,在分支执行完后(如果没有 break 跳出),不加 判断地执行下去;而 if—elseif—else 多分枝主要适用于分支较少的分支结构, 判断类型不是单一,只要一个分支被执行后,后边的分支不再执行。

(3)switch 为等值判断(不允许比如>= <=),而 if 为等值和区间都可以,if 的 使用范围大。

2.在分支结构编写程序过程中,要注意哪些问题?

答:

  1. 基本的命题表达式化。
  2. 分段函数程序中在分支中只执行分段函数的赋值,分支结束后再输出分段函数的结果。
  3. 语句用于根据条件选择执行语句,else 不能独立存在且总是跟它最近的 if 相匹配。
  4. switch 语句对应单个条件多个分支的情形,case 语句分支必须要有 break,否则会导致分支重叠,default 语句必须要加上。

你可能感兴趣的:(实验报告,c语言,算法,数据结构)