广州大学程序设计基础实验报告一

广州大学学生实验报告

                                            报告日期:  

学院

计算机科学与网络工程学院

年级/专业/班

姓名

学号

实验课程名称

程序设计基础(实验课)

成绩

实验项目名称

实验1 程序控制结构

指导

老师

实验A: 简单的C程序设计、数据类型、运算符与表达式

一、实验目的及要求

1. 了解在集成开发环境下程序的编辑、编译、连接、运行与调试;

2. 掌握C++语言的基本数据类型、算术运算符、赋值运算符和逗号运算符及表达式

3. 输入并编译C++程序

二、实验设备与平台

1. 实验设备:计算机

2. 平台:Windows操作系统,Microsoft Visual C++或其它合适的C++编程环境。

三、实验内容

编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

0、参考 教程:调试 C++ 代码 - Visual Studio (Windows) | Microsoft Docs ,了解项目的创建、编译、连接、运行与调试。

1、从键盘上输入两个int型数,比较其大小,并输出显示其中较小的数。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验A: 简单的C程序设计、数据类型、运算符与表达式

// 问题描述:从键盘上输入两个int型数,比较其大小,并输出显示其中  较小  的数。

#include<iostream>

using namespace std;

int main()

{

//定义两个需要比较的整型变量

int num1, num2;

// 数据初始化

num1 = num2 = 0;  

cout << "请从键盘上输入两个int型数:" << endl;

cin >> num1 >> num2;  // 数据输入

//比较两个数的大小,输出较小的数

if (num1 > num2)

cout << "较小的数为:" << num2 << endl;  

else if (num1 < num2)

cout << "较小的数为:" << num1 << endl;

else

cout << "两个数大小相等,均为:" << num1 << endl;

return 0;

}

程序运行结果截图:

心得与体会:

1、需要考虑两个数相等的情况。

2、从键盘上输入一个int型数、一个浮点数,比较大小,将其中较大的数输出。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验A: 简单的C程序设计、数据类型、运算符与表达式

// 问题描述:从键盘上输入一个int型数、一个浮点数,比较大小,将其中  较大  的数输出。

#include<iostream>

using namespace std;

int main()

{

//定义需要比较的整型变量和浮点型变量

int numIntage;

double numDouble;

// 数据初始化

numIntage = 0;  

numDouble = 0.0;

//数据输入

cout << "请从键盘上输入一个int型数:" << endl;

cin >> numIntage;

cout << "请从键盘上输入一个double型数:" << endl;

cin >> numDouble;

//比较数的大小并输出较大的数

if (numIntage > numDouble)

cout << "较大的数为:" << numIntage << endl;  

else if (numIntage < numDouble)

cout << "较大的数为:" << numDouble << endl;

else

cout << "两个数大小相等,均为:" << numIntage << endl;

return 0;

}

程序运行结果截图:

心得与体会:

  1. 比较浮点数时,不能简单地使用大于小于号进行比较,否则会出现下面这种情况:

因此需要采用另外一种方式:fabs(numIntage - numDouble)<1e-9。但这仅能用于判断两个精度很高的数是否相等。

3、输入一个摄氏温度,编程输出华氏温度。已知;华氏温度转换为摄氏温度的计算公式如下: C=5/9*(F-32),其中,F 表示华氏温度,C表示摄氏温度;结果保留两位小数。

程序代码:

// 程序设计基础实验1 程序控制结构

//实验A: 简单的C程序设计、数据类型、运算符与表达式

/*问题描述:输入一个摄氏温度,编程输出华氏温度。

  已知;华氏温度转换为摄氏温度的计算公式如下:

  C = 5 / 9 * (F - 32),

  其中,F 表示华氏温度,C表示摄氏温度;结果保留两位小数。*/ 

#include<iostream>

#include<iomanip>  // 包含此头文件,用于格式控制

using namespace std;

int main()

{

//定义变量

double F, C, p;  // F 表示华氏温度,C表示摄氏温度,p表示计算公式中的参数

//数据初始化

F = C = 0.0;    

//数据输入

cout << "请从键盘上输入一个摄氏温度C:" << endl;

cin >> C;  

//定义相关参数

p = 9.0 / 5.0;

F = p * C + 32;  // 公式转换

cout << "根据输入的摄氏温度C,转化的华氏温度为:" << endl;

//setprecision(n)和fixed合用以控制小数点后有几位

cout << fixed << setprecision(2) << F;  //格式控制,保留小数点后两位小数

return 0;

}

程序运行结果截图:

心得与体会:

1、需要将公式的自变量和因变量进行转化,因为题目要求自变量为摄氏度,因变量为华氏度。而题目公式给出的相反。

  1. 输入一个大于1000的int型数,将它的低4位(右四位)都置为1。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验A: 简单的C程序设计、数据类型、运算符与表达式

// 问题描述:输入一个大于1000的int型数,将它的低4位(右四位)都置为1

#include<iostream>

using namespace std;

int main()

{

//定义相关变量并进行初始化

int numPre, numNew, up, lowPre, lowNew;

numPre = numNew = up = lowPre = lowNew = 0;

//数据输入

cout << "请输入一个大于1000的int型数:" << endl;

cin >> numPre;

//执行将低4为赋值为全1的操作

up = numPre / 10000;  // 保存数据的非低4位的数值

lowPre = numPre - up * 10000;  // 保存数据先前的低4位的数值

lowNew = 1111;  // 新的数据的低4位的数值

numNew = up * 10000 + lowNew;  // 新的数据的值

cout << "将输入的数" << numPre << "的低4位(右四位)都置为1后,新的数为:" << endl;

cout << numNew << endl;  // 输出修改后的新数据的值

return 0;

}

程序运行结果截图:

5、请文字解释以下代码运行的过程及结果。

    short int s; //range?

    s = 32768;

    cout << s << " " << sizeof(short) << endl;

    float f; double d;

    f = 1.2345678901; d = 1.2345678901;

    cout << fixed << setprecision(9) << f << " " << d << "\n";

    int si; unsigned int ui;

    si = -5; ui = 5;

    cout << (si > ui) << '\n';

    char c; int i;

    c = 'A'; i = 0x30;

cout << c << " " << (int)c + 32 << " " << i << " " << (char)(i + 6) << endl;

分析:(请填写)

// 程序设计基础实验1 程序控制结构

// 实验A: 简单的C程序设计、数据类型、运算符与表达式

// 问题描述:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    // 短整型变量s,range为:-2^15 ~ 2^15-1,即-32768 ~ 32767

    short int s;

    // 超出了短整型的范围,会导致溢出。

    /*短整型(short int)是有符号整数类型,它可以表示负数和正数。

    在C++中,有符号整数类型使用最高位作为符号位,0表示正数,1表示负数。

    当一个数超出了有符号整数类型的范围时,它的二进制表示会被解释为负数。

    在这个例子中,32768的二进制表示是1000000000000000,最高位为1,表示负数。

    当发生溢出时,C++会将这个二进制数解释为负数,即-32768。

    所以输出的结果是-32768。*/

    s = 32768;  

    //打印变量s的数值以及变量s的字节数

    cout << s << " " << sizeof(short) << endl;  //短整型为2个字节

    // 单精度浮点数f,range为:双精度浮点数d,range为:

    float f; double d;  

    f = 1.2345678901; d = 1.2345678901;

    /*在这个例子中,我们将1.2345678901赋值给单精度浮点数f和双精度浮点数d。

    然后,我们使用fixed和setprecision(9)来设置输出的浮点数精度为小数点后9位有效数字。

    由于单精度浮点数的精度较低,它只能保留约7位有效数字。

    因此,当输出单精度浮点数f时,它的值被截断为1.234567881。

    双精度浮点数具有更高的精度,可以保留约15位有效数字。

    因此,当输出双精度浮点数d时,它的值保持不变,为1.234567890。*/

    //打印单精度浮点数f和双精度浮点数d的数值,并保留小数点后9位有效数字

    cout << fixed << setprecision(9) << f << " " << d << "\n";

    // 整型变量si,无符号整型变量ui

    int si; unsigned int ui;  

    si = -5; ui = 5;

    /*当我们执行(si > ui)时,我们正在比较一个有符号整数和一个无符号整数。

    在这种情况下,C++会进行隐式类型转换,将有符号整数转换为无符号整数,以便进行比较。

    在C++中,当将一个有符号整数转换为无符号整数时,如果有符号整数的值为负数,

    那么它的二进制表示将被解释为一个较大的正数。这是因为无符号整数类型只能表示非负数。

    在这个例子中,-5的二进制表示为1111 1111 1111 1111 1111 1111 1111 1011(假设使用32位整数)。

    当将这个二进制数解释为无符号整数时,它的值将被解释为一个较大的正数,即4294967291。

    因此,(si > ui)实际上是在比较4294967291和5,这个比较表达式为真*/

    cout << (si > ui) << '\n';  // 打印逻辑语句的结果,即4294967291>5为真,返回1

    char c; int i;  // 字符型变量c,整型变量i

    c = 'A'; i = 0x30;   // i用十六进行表示,转换为十进制,结果为48

    // 字符型变量在C++中实际上是以整数形式存储的

    // 使用类型转化,将字符型c强制转换为整型,结果为65,加上32后为97

    // (char)(i + 6)将返回ASCII码值为54的字符,即字符'6'。

    cout << c << " " << (int)c + 32 << " " << i << " " << (char)(i + 6) << endl;  

}

程序运行结果截图:

心得与体会:

1、在分析代码输出结果时,需要掌握好C++的深层原理,例如数据的储存变量的字节数变量的精度等,在掌握好这些后,才能够准确地分析代码运行结果。

实验B  顺序结构和选择结构设计程序设计

一、实验目的及要求:

  1. 学会正确使用逻辑运算符和逻辑表达式;
  2. 熟练掌握if语句和switch语句;
  3. 掌握在程序设计中灵活使用顺序结构选择结构。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Microsoft Visual C++或其它C++编程环境。

三、实验内容及步骤:

编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

1、有一个函数

                    x               x<=0

         Y=        5x-10           0<x<10

                    10x-20          x>=10

用cin输入函数输入x的值(分别为x<=0,0<x<10,x>=10),输出y的值 。

说明:这个题目主要是练习对if…else语句的使用。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验B  顺序结构和选择结构设计程序设计

// 问题描述:

/*有一个函数

                x               x<=0

         Y=     5x-10           0<x<10

                10x-20          x>=10

用cin输入函数输入x的值(分别为x<=0,0<x<10,x>=10),输出y的值 。*/

#include<iostream>

using namespace std;

int main()

{

    //定义相关变量

    int x, Y;  // x表示函数输出,Y表示函数输出

    //数据初始化

    x = Y = 0;  

    //数据输入

    cout << "请用键盘输入x的值,将其作为函数的输入:" << endl;

    cin >> x;

    //判断自变量范围

    if (x <= 0)

        Y = x;

    else if (x > 0 && x < 10)

        Y = 5 * x - 10;

    else

        Y = 10 * x - 20;

    //打印函数输出结果

    cout << "函数的输出 Y = " << Y << endl;

return 0;

}

程序运行结果截图:

2、给出一个不多于4位的正整数,要求:

(1) 求出它是几位数;

(2)分别输出每一位数;

(3)按逆序输出各位数字,例如原数为2560,应输出为0652。

说明:请分别使用if…else语句、switch语句进行实现。

程序代码1:使用if…else语句进行实现

// 程序设计基础实验1 程序控制结构

// 实验B  顺序结构和选择结构设计程序设计

// 问题描述:

/*给出一个不多于4位的正整数,要求:

(1)求出它是几位数;

(2)分别输出每一位数;

(3)按逆序输出各位数字,例如原数为2560,应输出为0652。

说明:使用if…else语句进行实现。 */

#include<iostream>

using namespace std;

int main()

{

    cout << "使用if…else语句进行实现" << endl;

    //定义相关变量

    int num, count, thousand, hundred, ten, one;  

    // num表示输入,count表示输入的位数,thousand、hundred、ten、one分别表示千位、百位、十位、个位

    //数据初始化

    num = count = thousand = hundred = ten = one = 0;  

    //数据输入

    cout << "请用键盘输入一个不多于4位的正整数:" << endl;

    cin >> num;  

    // 判断输入数据的位数:使用if…else语句进行判断

    if (num < 10)

        count = 1;

    else if (num <100)

        count = 2;

    else if (num < 1000)

        count = 3;

    else if (num < 10000)

        count = 4;

    cout << "输入数据为" << count << "位正整数" << endl;

    // 打印每一位数

    thousand = num / 1000;  // 整除操作

    hundred = (num - 1000 * thousand) / 100;

    ten = (num - 1000 * thousand - 100 * hundred) / 10;

    one = num % 10;  // 除余操作

    cout << "输入数据的个位数为:" << one << endl;

    if (count >= 2)

    {

        cout << "输入数据的十位数为:" << ten << endl;

        if (count >= 3)

        {

            cout << "输入数据的百位数为:" << hundred << endl;

            if (count == 4)

            {

                cout << "输入数据的千位数为:" << thousand << endl;

            }

        }

    }

    // 逆序输出

    if (count == 4)

        cout << "逆序输出各位数字的结果为:" << one << ten << hundred << thousand << endl;

    else if (count == 3)

        cout << "逆序输出各位数字的结果为:" << one << ten << hundred << endl;

    else if (count == 2)

        cout << "逆序输出各位数字的结果为:" << one << ten << endl;

    else

        cout << "逆序输出各位数字的结果为:" << one << endl;

    return 0;

}

程序运行结果截图:

心得与体会:为了逆序输出,我先对输入数据求解其每一位的数字,然后再从低位到高位进行滚打印即可。

程序代码2:使用switch…case语句进行实现

// 程序设计基础实验1 程序控制结构

// 实验B  顺序结构和选择结构设计程序设计

// 问题描述:

/*给出一个不多于4位的正整数,要求:

(1)求出它是几位数;

(2)分别输出每一位数;

(3)按逆序输出各位数字,例如原数为2560,应输出为0652。

说明:使用switch语句进行实现。 */

#include<iostream>

using namespace std;

int main()

{

    cout << "使用switch…case语句进行实现" << endl;

    //定义相关变量

    int num, count, thousand, hundred, ten, one;

    // num表示输入,count表示输入的位数,thousand、hundred、ten、one分别表示千位、百位、十位、个位

    //数据初始化

    num = count = thousand = hundred = ten = one = 0;  

    //数据输入

    cout << "请用键盘输入一个不多于4位的正整数:" << endl;

    cin >> num;  

    // 判断输入数据的位数

    int temp = num;

    while (temp != 0)

    {

        count++;

        temp /= 10;  //数据一直除以10,直到该数为零。最终记录下来count为该数的位数

    }

    cout << "输入数据为" << count << "位正整数" << endl;

    // 打印每一位数

    thousand = num / 1000;  // 整除操作

    hundred = (num - 1000 * thousand) / 100;

    ten = (num - 1000 * thousand - 100 * hundred) / 10;

    one = num % 10;  // 除余操作

    switch (count)

    {

    case 4:

        cout << "输入数据的千位数为:" << thousand << endl;

    case 3:

        cout << "输入数据的百位数为:" << hundred << endl;

    case 2:

        cout << "输入数据的十位数为:" << ten << endl;

    case 1:

        cout << "输入数据的个位数为:" << one << endl;

    }

    // 逆序输出

    switch (count)

    {

    case 1:

        cout << "逆序输出各位数字的结果为:" << one << endl;

        break;

    case 2:

        cout << "逆序输出各位数字的结果为:" << one << ten << endl;

        break;

    case 3:

        cout << "逆序输出各位数字的结果为:" << one << ten << hundred << endl;

        break;

    default:

        cout << "逆序输出各位数字的结果为:" << one << ten << hundred << thousand << endl;

    }

    return 0;

}

程序运行结果截图:

心得与体会:

1、在写代码的时候,我经常习惯性地使用if...else语句,而很少使用switch...case语句。但其实在有些情况下,switch...case语句更加适用,用起来更便捷

实验C  循环结构程序设计

一、实验目的及要求

1.掌握while、for、do…while 循环结构的使用方法以及循环条件的使用;

2.能够使用三种循环结构设计程序、分析程序并解决实际问题;

3.掌握三种循环结构的差异和不同,能灵活地实现三种结构间的转换;

4.正确编写具有循环结构的C语言程序。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Microsoft Visual C++或其它C++编程环境。

三、实验内容及步骤

编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

1、求          = 1+2+···+100    。

方法一:用while语句编程。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验C  循环结构程序设计

// 问题描述:

/*求          = 1+2+···+100    。

方法一:用while语句编程。*/

#include<iostream>

using namespace std;

int main()

{

    //定义相关变量

    int sum, temp;  // sum表示总和,temp表示临时变量

    

    //数据初始化

    sum = 0;  

    temp = 1;

    //使用while语句进行循环累加操作

    while (temp <= 100)

    {

        sum += temp;  // sum变量不断累加

        temp += 1;    // 自增1

    }

    //打印累加结果

    cout << "使用while语句编程,得到的累加结果为:" << sum << endl;  

    return 0;

}

程序运行结果截图:

方法二:用do-while语句编程。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验C  循环结构程序设计

// 问题描述:

/*求          = 1+2+···+100    。

方法二:用do-while语句编程。*/

#include<iostream>

using namespace std;

int main()

{

    //定义相关变量

    int sum, temp;  // sum表示总和,temp表示临时变量

    //数据初始化

    sum = 0;  

    temp = 1;

    //使用do...while语句进行循环累加操作

    do 

    {

        sum += temp;  // sum变量不断累加

        temp += 1;    // 自增1

    } while (temp <= 100);

    //打印累加结果

    cout << "使用do...while语句编程,得到的累加结果为:" << sum << endl;  

    return 0;

}

程序运行结果截图:

方法三:用for语句编程。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验C  循环结构程序设计

// 问题描述:

/*求          = 1+2+···+100    。

方法三:用for语句编程。*/

#include<iostream>

using namespace std;

int main()

{

    //定义相关变量

    int sum;  // sum表示总和

     //数据初始化

    sum = 0;

    //使用for语句进行循环累加操作

    for (int i = 1; i <= 100; i++)

    {

        sum += i;  // sum变量不断累加

    }

    //打印累加结果

    cout << "使用for语句编程,得到的累加结果为:" << sum << endl;  

    return 0;

}

程序运行结果截图:

心得与体会:

1、三种循环语句都有各自的特点,在使用while和do...while语句时,应该在每一次循环中,对某些变量进行自增或自减操作,否则循环体有可能没有终止条件。这是我在编程中经常忽略的。

2、先由计算机“想”一个1~200之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序代码:

// 程序设计基础实验1 程序控制结构

// 实验C  循环结构程序设计

// 问题描述:

/*先由计算机“想”一个1~200之间的数请人猜,

如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;

否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,

如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。

每次运行程序可以反复猜多个数,直到操作者想停止时才结束。*/

#include<iostream>

#include<stdlib.h>  // 包含两个头文件,用于设置随机数

#include<time.h> 

using namespace std;

int main()

{

    //定义相关变量

    bool isContinue = 0;

    //数据初始化

    int guessCount, upLimit, randNum, guess;  // guessCount用于统计玩家猜的次数

    upLimit = 10;  // 设置猜的次数上限为10

    //使用do...while语句来让玩家选择是否进行下一轮游戏

    do

    {

        guessCount = 0;  // 数据初始化:猜的次数初始化为零

        guess = 0;

        srand(time(nullptr));  // 设置随机数种子

        randNum = 1 + rand() % (200 - 1 + 1);   // 产生一个1~200之间的随机数

        cout << "游戏开始。\n计算机随机生成了一个1~200之间的数" << endl;

        //使用while语句来让玩家进行数字猜想

        while (guessCount < 10)

        {

            cout << "请输入您的猜测:" << endl;

            cin >> guess;  // 玩家输入猜测的数值

            guessCount++;  // 玩家猜测次数加1

            //判断玩家猜测的数字是否正确

            if (guess < randNum)

            {

                cout << "您猜小了" << endl;

            }

            else if (guess > randNum)

            {

                cout << "您猜大了" << endl;

            }

            else

            {

                //本轮游戏终止条件之一

                cout << "恭喜!您的猜想正确!" << endl;

                cout << "本轮游戏中,您总共猜测的次数为:" << guessCount << endl;

                break;

            }

        }

        //本轮游戏终止条件之一

        if (guessCount == 10)

        {

            cout << "猜测次数已达上限(10次),本轮游戏结束。" << endl;

        }

        // 玩家选择是否继续游戏

        cout << "是否继续下一轮游戏?(1表示继续,0表示结束)" << endl;

        cin >> isContinue;  

    } while (isContinue);

    cout << "游戏结束。" << endl;

    return 0;

}

程序运行结果截图:

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值