封面

C语言程序设计实验(校内课程)

写作时间:2024-02-29 09:00:00
📁 C语言
# 程序设计 # 实验

实验01:C语言集成开发环境

一、实验信息


1. 课程名称:C语言程序设计

2. 实验名称:实验01:C语言集成开发环境

3. 完成时间:2024年2月29日


二、实验目的


1. 熟悉 Visual Studio 开发环境

2. 熟悉 Visual C++ 6.0 开发环境

3. 熟悉 Dev-C++ 开发环境

4. 掌握 C 语言程序的编辑、调试及运行过程

5. 熟悉集成开发环境中常见的错误提示信息


三、实验环境


1. 中文 Windows 11 操作系统


四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码


1 输出学生的学号和姓名


输出示例:

学号:06011126

姓名:王晨 (虚构,并非实际存在的人)


程序代码:


#include <stdio.h>

int main(void)

{

    printf("学号:06011126\n");

    printf("姓名:王晨\n");

    return 0;
}

程序及运行结果: 学号和姓名输出

2 编程输出图形

输出:

**



程序代码:


#include <stdio.h>

int main(void)
{
    printf("*\n");
    printf("**\n");
    printf("***\n");
    printf("****\n");
    return 0;
}

程序及运行结果: 图形输出

3 编程计算 37+29 的值并输出 程序代码:


#include <stdio.h>
int main(void)
{
    int a, b, c;
    a=37;
    b=29;
    c=a+b;
    printf("%d+%d=%d\n",a,b,c);
    return 0;
}

程序及运行结果: 37+29 的值输出

4 上机实践分析输出结果 程序代码:

#include <stdio.h>

int main(void)
{
    char c;
    printf("请输入一个字符:");
    scanf("%c", &c);
    printf("%c对应的ASCII码是:%d\n", c, c);
    return 0;
}

程序及运行结果: ASCII码输出 程序代码:


#include <stdio.h>

int main(void)
{
    int a = 100;
    float b = 123.456;
    float x=35.567, y;
    printf("a=%d\n", a);
    printf("a=%-5d\n", a);
    printf("b=%6.2f\n", b);
    printf("b=%e\n", b);
    y=(int)(x*100+0.5)/100.0;
    printf("x=%f,y=%f\n",x,y);
    return 0;
}

程序及运行结果: 输出 程序代码:


#include <stdio.h>
int main(void)
{
    int a=168;
    printf("十进制数%d对应的八进制数是%o\n", a, a);
    printf("十进制数%d对应的十六进制数是%x\n", a);
    return 0;
}

程序及运行结果: 输出

六、实验心得

通过本次实验,我对 C 语言的基础编程有了初步认识,同时熟悉了多种集成开发环境(Visual Studio、Visual C++ 6.0、Dev-C++)的使用流程。在实验过程中,我有以下收获:

程序编辑与运行流程 熟悉了 C 语言程序从编辑、编译到运行的完整流程,理解了每条语句的作用以及编译器的工作原理。

调试技巧 在运行过程中遇到语法或逻辑错误时,可以快速定位问题,提高了调试能力。

数据类型与格式控制 通过实验 4 的输出分析,掌握了字符、整数、浮点数的不同输出格式,以及如何进行数据类型转换和格式化输出。

程序结构与思维训练 通过图形打印和算术计算练习,增强了对程序结构的理解,包括顺序执行、变量定义、运算操作以及输出语句的使用。

实验规范与记录习惯 实验要求将程序及运行截图完整记录,使我养成了整理实验资料、形成实验报告的良好习惯。

总体来说,实验一虽然内容基础,但为后续深入学习 C 语言打下了坚实基础,同时提高了实际操作能力和问题分析解决能力。

实验02:顺序结构与单选择结构

一、实验信息


1. 课程名称:C语言程序设计

2. 实验名称:实验02:顺序结构与单选择结构

3. 完成时间:2024年3月10日

二、实验目的


1. 掌握 C 语言的顺序结构与单选择结构

2. 掌握变量定义和基本数据处理

3. 掌握输入/输出函数的功能、格式及使用方法,设计简单的顺序结构程序和选择结构程序

三、实验环境


1. 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1.已知 a=1.5,b=5.3,c=2.9,计算 s=b^2-4ac 的结果并输出


输出示例: s=10.690000

程序代码:


#include <stdio.h>
int main(void)
{
    double a, b, c, s;
    a = 1.5;
    b = 5.3;
    c = 2.9;
    s = b*b - 4*a*c;
    printf("s=%lf\n", s);
    return 0;
}

程序及运行结果: 计算输出

2 输入某学生三个科目的期末考试成绩,计算总分和平均分

输入示例:70 85 92 输出示例:sum = 247, average = 82.333333

程序代码:


#include <stdio.h>
int main(void)
{
    int math, english, c_program, sum;
    double average;
    scanf("%d %d %d", &math, &english, &c_program);
    sum = math + english + c_program;
    average = (double)sum / 3;
    printf("sum = %d, average = %lf\n", sum, average);
    return 0;
}

程序及运行结果: 计算总分和平均分

3 输入两个数 a 和 b,将两数的值互换后输出新值

输入示例:a=4,b=3

程序代码:


#include <stdio.h>
int main(void)
{
    int a, b, temp;
    scanf("%d %d", &a, &b);
    temp = a;
    a = b;
    b = temp;
    printf("a = %d, b = %d\n", a, b);
    return 0;
}


程序及运行结果: 互换后输出

4 输入 x 的值计算分段函数 y y = x^2 + 2x, x < 2 y = 2x - 1, x >= 2 输入示例: 第一次运行:输入 x=3 → 输出 y=5.000000 第二次运行:输入 x=1.99 → 输出 y=7.940100 第三次运行:输入 x=1 → 输出 y=3.000000

程序代码:

#include <stdio.h>
int main(void)
{
    double x, y;
    scanf("%lf", &x);
    if (x >= 2)
        y = 2 * x - 1;
    else
        y = x * x + 2 * x;
    printf("y=f(%lf)=%lf\n", x, y);
    return 0;
}

程序及运行结果: 计算分段函数 y 的值 计算分段函数 y 的值 计算分段函数 y 的值

六、实验心得

通过本次实验,我进一步掌握了 C 语言中顺序结构与单选择结构的编程方法,同时巩固了变量定义、输入输出以及简单运算的使用技巧。在实验过程中,我有以下收获:

顺序结构熟练度提升 能够独立编写顺序执行的程序,并理解程序从上到下执行的逻辑。

选择结构理解与应用 学会使用 if-else 条件语句进行分支判断,理解条件语句的执行顺序和逻辑关系。

输入输出技巧强化 熟练掌握 scanf 和 printf 的格式化输入输出,能够处理整数与浮点数数据,并正确进行类型转换。

程序调试能力增强 通过实验发现并解决输入格式错误、运算优先级问题以及变量使用错误,提高了调试效率。

实验记录规范化 将程序及运行截图完整记录,有助于形成规范化实验报告的习惯。

总体来说,实验二在实验一基础上增加了程序逻辑判断,提升了实际编程能力,为后续条件结构和循环结构的学习打下了坚实基础。

实验03:选择结构程序设计

一、实验信息


课程名称:C语言程序设计

实验名称:实验03:选择结构程序设计

完成时间:2024年3月14日

二、实验目的


1 理解 C 语言数据类型的概念,掌握如何定义整型、字符型和实型变量

2 学会正确使用关系表达式

3 熟练使用 if-else、if-else if-else 和 switch 语句

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 编写一个程序输入某人的身高(cm)和体重(kg),按下式判断体重是否标准、过胖或过瘦

判断标准: 标准体重 = 身高 - 110 超过标准体重 5kg 为过胖 低于标准体重 5kg 为过瘦

输入/输出示例: 第一次运行:输入 160 50 → 输出 标准 第二次运行:输入 160 56 → 输出 过胖 第三次运行:输入 160 44 → 输出 过瘦

程序代码:


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int h, w, a;
    scanf("%d%d", &h, &w);
    a = h - 110 - w;
    if(a < -5)
        printf("过胖");
    else if(a >= -5 && h - 110 - w <= 5)
        printf("标准");
    else
        printf("过瘦");
    return 0;
}

程序及运行结果: 输出

2 输入 x,计算分段函数 y 的值 y = −5, x < 0 y = x^2, 0 ≤ x ≤ 1 y = x/2, x > 1

输入/输出示例: 第一次运行:输入 -4 → 输出 -5 第二次运行:输入 0.5 → 输出 0.25 第三次运行:输入 3 → 输出 1.5

程序代码:


#include <stdio.h>

int main(void) 
{
    double x, y;
    scanf("%lf", &x);
    if(x < 0)
    {
        y = -5;
        printf("%f", y);
    }
    else if(x > 1)
    {
        y = x / 2;
        printf("%f", y);
    }
    else
    {
        y = x * x;
        printf("%f", y);
    }
    return 0;
}


程序及运行结果: 输出

3 输入一个字符(A、B、C 或其他字符),使用 switch 语句输出奖项

输入/输出示例: 第一次运行:输入 A → 输出 一等奖 第二次运行:输入 C → 输出 三等奖 第三次运行:输入 0 → 输出 很遗憾,此次未中奖

程序代码:


#include <stdio.h>

int main(void)
{
    char p;
    scanf("%c", &p);
    switch (p)
    {
    case 'A': printf("一等奖"); break;
    case 'B': printf("二等奖"); break;
    case 'C': printf("三等奖"); break;
    default: printf("很遗憾,此次未中奖!"); break;
    }
    return 0;
}


程序及运行结果: 输出

4 改错题:输入两个整数 num1 和 num2,以及运算符(+、-、*、/、%),输出计算结果,其他字符输出“运算符输入错误”

输入/输出示例: 第一次运行:输入 5*4 → 输出 20 第二次运行:输入 16%3 → 输出 1 第三次运行:输入 6#8 → 输出 运算符输入错误

程序代码:


#include <stdio.h>

int main(void) 
{
    char sign;
    int x, y;
    printf("输入x运算符y:");
    scanf("%d %c %d", &x, &sign, &y);
    if (sign == '*')
        printf("%d*%d = %d \n", x, y, x * y);
    else if (sign == '/')
        printf("%d / %d = %d \n", x, y, x / y);
    else if (sign == '%')
        printf("%d Mod %d = %d \n", x, y, x % y);
    else
        printf("运算符输入错误!\n");
    return 0;
}

程序及运行结果: 输出

六、实验心得

通过本次实验,我熟练掌握了选择结构的编程方法,能够灵活使用 if-else、if-else if-else 和 switch 语句处理各种判断问题。在实验过程中,我收获如下:

数据类型与条件判断理解 加深了对整型、字符型和实型变量的理解,掌握了关系表达式的使用。

条件分支逻辑清晰化 能够根据条件设计多分支程序,理解条件语句的执行顺序和逻辑关系。

调试能力提升 通过改错题练习,学会了识别运算符及语法错误,增强了调试能力。

程序规范与记录 将程序及截图完整记录,提高了实验报告规范性和可读性。

本次实验为后续循环结构和函数设计奠定了基础,同时提升了实际编程能力和问题分析解决能力。

实验04:循环结构程序设计

一、实验信息


课程名称:C语言程序设计

实验名称:实验04:循环结构程序设计

完成时间:2024年3月28日

二、实验目的


1 理解循环程序的结构和执行流程

2 掌握 for、while 和 do-while 语句的格式和功能

3 熟练使用 for、while 和 do-while 语句实现循环程序设计

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 输入某学生八个科目的期末考试成绩,计算成绩总分和平均分

输入示例: Input grade: 76 85 79 94 68 78 80 98

输出示例: sum=658 average=82.25

程序代码:


#include <stdio.h>

int main(void) 
{
    int i, data, sum;
    double average;
    i = 0;
    sum = 0;
    while(i <= 7)
    {
        scanf("%d", &data);
        sum = sum + data;
        i = i + 1;
    }
    average = (double)sum / 8;
    printf("sum=%d\naverage=%lf", sum, average);
    return 0;
}

程序及运行结果: 输出

2 计算 1+4+7+…+301

输出示例: sum=15251

程序代码:


#include <stdio.h>

int main(void) 
{
    int i, sum;
    i = 1;
    sum = 0;
    while(i <= 301)
    {
        sum = sum + i;
        i = i + 3;
    }
    printf("sum=%d", sum);
    return 0;
}


程序及运行结果: 输出

3 读入一批正整数(以零或负数为结束标志),求其中的偶数和

输入示例: input integers: 1 2 6 10 21 0

输出示例: the sum of even number is 18

程序代码:


#include <stdio.h>

int main(void)
{
    int data, sum;
    sum = 0;
    scanf("%d", &data);
    while(data > 0)
    {
        if(data % 2 == 0)
            sum = sum + data;
        scanf("%d", &data);
    }
    printf("sum=%d", sum);
    return 0;
}


程序及运行结果: 输出

4 输入一个正整数,输出是否为素数(使用 do-while 或 while 循环)

第一次运行: 输入:5 → 输出:5是素数

第二次运行: 输入:8 → 输出:8不是素数

程序代码:


#include <stdio.h>

int main(void) 
{
    int a, b, c;
    b = 2;
    c = 0;
    scanf("%d", &a);
    while(a > b)
    {
        if(a % b == 0)
            c = 1;
        b = b + 1;
    }
    if(c == 1)
        printf("%d不是素数", a);
    else
        printf("%d是素数", a);
    return 0;
}

程序及运行结果: 输出

六、实验心得

通过本次实验,我进一步掌握了 C 语言中循环结构的使用方法。实验中我收获如下:

循环结构理解加深 通过 while、do-while 的练习,理解了循环条件的判断和循环体的执行顺序。

循环应用能力提升 能够利用循环语句解决求和、均值计算、数据处理等问题。

程序调试能力增强 在处理输入数据和判断条件时,发现并解决了边界条件、初值及循环终止条件的问题。

算法思维训练 通过素数判断和奇偶数求和练习,提高了用循环分析问题、设计算法的能力。

实验记录规范化 保持程序代码和运行结果截图完整记录,有助于形成规范化实验报告的习惯。

总体来说,实验四让循环语句的理论知识和实际应用得到了系统训练,为后续条件循环结合的复杂问题打下了基础。

实验05:程序结构的综合练习1

一、实验信息

课程名称:C语言程序设计

实验名称:实验05:程序结构的综合练习1

完成时间:2024年4月6日

二、实验目的

1 熟练掌握顺序结构、选择结构(if,switch)、循环结构(while,do-while,for)的综合应用

2 熟练掌握 break 和 continue 控制语句的使用

3 熟练掌握选择结构和循环结构的一些常用算法

4 熟练掌握 C 语言集成开发环境中的程序调试方法

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 求前驱字符和后继字符

输入示例: Input a character: a

输出示例: z,b,a,122,98,97

程序代码:


#include <stdio.h>

int main(void)
{
    char a, b, c;
    printf("输入一个英文字母:");
    scanf("%c", &b);
    if (b == 97)
        a = 122, b = 98, c = 97, printf("%c,%c,%c,%d,%d,%d", a, b, c, a, b, c);
    else if (b == 122)
        a = 122, b = 121, c = 97, printf("%c,%c,%c,%d,%d,%d", a, b, c, a, b, c);
    else
        a = b + 1, c = b - 1, printf("%c,%c,%c,%d,%d,%d", a, b, c, a, b, c);
    return 0;
}

程序及运行结果: 输出

2 输入某个点 A 的平面坐标,判断在圆内、圆外还是圆周上

圆心坐标:(2, 2),半径=1

输入示例与输出: 第一次运行:输入点坐标:2.0, 3.0 → 输出:圆周上 第二次运行:输入点坐标:2.1, 2.2 → 输出:圆内 第三次运行:输入点坐标:3.0, 3.0 → 输出:圆外

程序代码:


#include <stdio.h>
#include <math.h>

int main(void)
{
    double ax, ay, d;
    printf("输入点坐标:");
    scanf("%lf%lf", &ax, &ay);
    d = sqrt((ax - 2) * (ax - 2) + (ay - 2) * (ay - 2));
    if (d == 1)
        printf("圆周上");
    else if (d < 1)
        printf("圆内");
    else
        printf("圆外");
    return 0;
}


程序及运行结果: 输出

3 使用 do-while 控制结构,计算级数 s=1+3+5+…,当累加到某项 s > 100 时停止

程序代码:


#include <stdio.h>

#include <stdio.h>

int main(void)
{
    int a, s;
    a = 1;
    s = 0;
    do
        s = s + a, a = a + 2;
    while (s < 100);
    printf("结束时总和为:%d, 此时该项为%d", s, a);
    return 0;
}


程序及运行结果: 输出

4 输入 10 个字符,统计其中的英文字母个数(不区分大小写)

输入示例: A123bc55%D

输出示例: 英文字母个数为:4

程序代码:


#include <stdio.h>

int main(void)
{
    int n = 0, i = 0;
    char ch;
    printf("请输入10个字符:");
    for (i = 0; i <= 10; i++)
    {
        scanf("%c", &ch);
        if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
            n = n + 1;
    }
    printf("有%d个英文字母", n);
    return 0;
}

程序及运行结果: 输出

六、实验心得

通过本次实验,我对 C 语言的程序结构综合应用有了更深入的理解:

综合应用能力提升 能够将顺序结构、选择结构和循环结构结合,解决复杂问题。

控制语句熟练掌握 学会了 break 和 continue 的使用方法,提高了循环控制的灵活性。

算法设计思维加强 通过前驱后继字符、圆内外判断和累加级数等练习,提高了用程序分析问题、设计算法的能力。

调试能力增强 在实验中发现逻辑错误和边界问题,学会了通过调试逐步定位问题。

实验规范性训练 保持程序代码和运行结果完整记录,有助于形成规范化实验报告的习惯。

总体来说,实验五对程序结构的综合训练显著提升了我的实际编程能力,为后续更复杂的算法学习奠定了基础。

实验06:程序结构的综合练习2

一、实验信息


课程名称:C语言程序设计

实验名称:实验06:程序结构的综合练习2

完成时间:2024年4月14日

二、实验目的

熟练掌握顺序结构、选择结构(switch)、循环结构(while,do-while,for),嵌套选择循环结构的综合应用

熟练掌握 break 和 continue 控制语句的使用

熟练掌握选择结构和循环结构的一些常用算法

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 统计整数各位 0 的个数并求最大值

输入示例: 60089

输出示例: count=2, max=9

程序代码:


#include <stdio.h>

int main(void)
{
    int num, count = 0, m = 0, n = 0;
    printf("输入一个在0和99999之间的整数:");
    scanf("%d", &num);
    while (num != 0)
    {
        m = num % 10;
        num = num / 10;
        if (m == 0)
            count++;
        if (m > n)
            n = m;
    }
    printf("count=%d,max=%d", count, n);
    return 0;
}

程序及运行结果: 输出

2 输出菱形图案

程序代码:


#include <stdio.h>

int main(void)
{
    int i;
    printf("输入菱形的行数(奇数):");
    scanf("%d", &i);
    for (int m = 1; m <= (i + 1) / 2; m++)
    {
        for (int n = 1; n <= (i + 1) / 2 - m; n++)
            printf(" ");
        for (int n = 1; n <= 2 * m - 1; n++)
            printf("*");
        printf("\n");
    }
    for (int m = (i + 1) / 2 + 1; m <= i; m++)
    {
        for (int n = 1; n <= m - (i + 1) / 2; n++)
            printf(" ");
        for (int n = 1; n <= (i - m) * 2 + 1; n++)
            printf("*");
        printf("\n");
    }
    return 0;
}


程序及运行结果: 输出

3 改错题:计算整数各位数之和

输入示例: 2586

输出示例: 2+5+8+6=21

程序代码(修改后的正确版本):


#include <stdio.h>

int main(void)
{
    int temp, number;
    int i, j, k;
    int count, sum;
    count = 0;
    sum = 0;
    printf("Please input a short type integer: ");
    scanf("%d", &number);
    temp = number;
    do
    {
        temp /= 10;
        count++;
    } while (temp != 0);
    k = 1;
    for (i = count; i > 1; i--)
    {
        for (j = 1; j < i; j++)
            k = k * 10;
        temp = number / k;
        printf("%d%c", temp, '+');
        sum = sum + temp;
        number = number - k * temp;
        k = 1;
    }
    sum = sum + number;
    printf("%d=%d \n", number, sum);
    return 0;
}


程序及运行结果: 输出


六、实验心得

通过本次实验,我在程序结构的综合应用上有了更深入的理解和提升:

嵌套结构掌握 学会在循环中嵌套选择结构或在选择结构中使用循环,处理更复杂的逻辑问题。

循环与条件结合应用 通过统计数字 0 的个数、求最大值和输出菱形图案的练习,增强了循环与条件判断结合的能力。

调试能力提高 在改错题中发现原程序的逻辑错误和变量使用问题,并通过分析和修改,掌握了程序调试方法。

算法思维锻炼 理解了数字分解、累加计算、菱形图案生成等常用算法的实现思路,提升了算法设计能力。

实验规范性 保持程序代码、运行结果和截图完整记录,形成了良好的实验报告习惯。


实验07:一维数组

一、实验信息


课程名称:C语言程序设计

实验名称:实验07:一维数组

完成时间:2024年4月21日

二、实验目的

熟练掌握一维数组的定义、赋值和输入/输出的方法

熟练掌握与一维数组有关的操作和算法(如排序算法)

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求

请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 求最小值

输入示例: 5 7 9 1 6

输出示例: min=1, index=3

程序代码:


#include <stdio.h>
int main(void)
{
    int i, min=9, index, a[5];
    printf("Input 5 integers:");
    for (i = 0; i < 5; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] < min)
            min = a[i], index = i;
    }
    printf("min=%d,index=%d", min, index);
    return 0;
}

程序及运行结果: 输出

2 最大值与第一个数交换

输入示例: 7 5 7 2 8 9 3 1

输出示例: After swapped: 9 7 2 8 5 3 1

程序代码:


#include <stdio.h>
#include <corecrt_malloc.h>

int main(void)
{
    int i, n, max = 0, index = 0;
    printf("Input n:");
    scanf("%d", &n);
    int* a = (int*)malloc(n * sizeof(int));
    printf("Input %d integers:", n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] > max)
        {
            max = a[i];
            index = i;
        }
    }
    int b = a[0];
    a[0] = a[index];
    a[index] = b;
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}

程序及运行结果: 输出

3 冒泡排序

输入示例: 5 8 6 9 11 3

输出示例: After sorted: 11 9 8 6 3

程序代码:


#include <stdio.h>
#include <corecrt_malloc.h>

int main(void) {
    int i, n, temp;
    printf("Input n:");
    scanf("%d", &n);
    int* a = (int*)malloc(n * sizeof(int));
    printf("Input %d integers:", n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (a[j] > a[j + 1]) 
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
    printf("After sorted: ");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}

程序及运行结果: 输出

4 查找数组中与 x 相同的元素

输入示例1: 5 8 6 9 11 3 9

输出示例1: 和9相同的数组元素是a[2] = 9

输入示例2: 5 8 6 9 11 3 12

输出示例2: 没有找到与12相等的元素!

程序代码:


#include <stdio.h>
#include <corecrt_malloc.h>

int main(void) {
    int i, x, n;
    printf("输入数组元素的个数:");
    scanf("%d", &n);
    int* a = (int*)malloc(n * sizeof(int));
    printf("输入数组 %d 个元素:", n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    printf("输入x:");
    scanf("%d", &x);

    for (i = 0; i < n; i++)
        if (a[i] == x) {
            printf("和%d相同的数组元素是a[%d] = %d\n", x, i, a[i]);
            break;
        }
    if (i == n)
        printf("没有找到与%d相等的元素!\n", x);
    return 0;
}

程序及运行结果: 输出

六、实验心得

数组基本操作熟练 能够灵活使用数组存储多个数据并进行访问与修改。

算法应用能力提升 通过冒泡排序和查找算法的实现,加深了对数组元素处理逻辑的理解。

动态内存分配使用 使用 malloc 动态申请数组空间,掌握了指针与数组结合的用法。

调试和错误修改能力增强 在查找数组元素的改错练习中,学会分析逻辑错误并正确处理边界条件。

程序规范与实验记录 保持实验报告格式规范,截图清晰完整,有助于养成良好的实验习惯。

实验08:字符串和二维数组

一、实验信息


课程名称:C语言程序设计

实验名称:实验08:字符串和二维数组

完成时间:2024年4月26日

二、实验目的

熟练掌握字符串的定义和使用

熟练掌握二维数组的编程

三、实验环境


1 中文 Windows 11 操作系统

四、实验要求


请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 字符串中查找字符的最大下标

输入示例1: programming m 输出示例1: index = 7

输入示例2: 1234 a

输出示例2: Not found

程序代码:


#include <stdio.h>
#include <string.h>

int main(void)
{
    int i, l, index, j = 0;
    char ch, c[80];
    printf("Input a string:");
    gets(c);
    l = strlen(c);
    printf("Input a character:");
    scanf("%c", &ch);
    for (i = 0; i < l; i++)
        if (ch == c[i])
            index = i, j = 1;
    if (j == 0)
        printf("Not found");
    else 
        printf("index=%d", index);
    return 0;
}

程序及运行结果: 输出

2 按相反顺序输出字母和数字

输入示例: 1+2=3abc/ABC.

输出示例: CBAcba321

程序代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char* str = NULL;
    int length = 0, i = 0;
    char c, ch;
    printf("Input a string:");
    while ((ch = getchar()) != '.' && ch != EOF) 
    {
        length++;
        str = (char*)realloc(str, length * sizeof(char));
        str[length - 1] = ch;
    }
    str = (char*)realloc(str, (length + 1) * sizeof(char));
    str[length] = '\0';

    for (i = 0; i <= length; i++)
    {
        c = str[length - i];
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
            printf("%c", c);
    }
    return 0;
}

程序及运行结果: 输出

3 计算矩阵主对角线和副对角线元素和

输入示例: 4 2 3 4 1 5 6 1 1 7 1 8 1 1 1 1 1

输出示例: sum=21

程序代码:


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, i = 0, j = 0, sum = 0;
    int** a;

    printf("Input n:");
    scanf("%d", &n);

    a = (int**)malloc(n * sizeof(int*));
    for (i = 0; i < n; i++) 
        a[i] = (int*)malloc(n * sizeof(int));

    printf("Input array:\n");
    for (i = 0; i < n; i++) 
        for (j = 0; j < n; j++) 
            scanf("%d", &a[i][j]);

    for (i = 0; i < n; i++)
        sum = sum + a[i][i];
    for (i = 0; i < n; i++)
        sum = sum + a[n - i - 1][i];

    printf("sum=%d", sum);
    return 0;
}

程序及运行结果: 输出

4 去掉非数字字符,将字符串数字转为整数

输入示例: 3a5b6abc

输出示例: 356

程序代码:


#include <stdio.h>
#include <string.h>

int main(void) 
{
    int i, s = 0;
    char str[80];
    i = 0;
    while ((str[i] = getchar()) != '\n' && i < 79)
        i++;
    str[i] = '\0';
    for (i = 0; i < strlen(str); i++) 
        if (str[i] >= '0' && str[i] <= '9') 
            s = s * 10 + (str[i] - '0');
    printf("%d", s);
    return 0;
}

程序及运行结果: 输出

六、实验心得

字符串操作熟练 掌握了 gets、strlen、字符数组的操作以及字符判断条件。

动态内存管理理解 通过 malloc 与 realloc 动态申请二维数组和字符串的空间,学会处理不同长度数据。

二维数组操作能力增强 熟练输入、遍历二维数组,计算矩阵主副对角线元素和。

字符过滤与数据转换 通过遍历字符数组,将符合条件的数字提取并转换为整数,掌握字符与整数的转换方法。

程序调试能力提升 改错题帮助理解逻辑错误及边界条件处理,提高调试能力。

实验09:函数1

一、实验信息


课程名称:C语言程序设计

实验名称:实验09:函数1

完成时间:2024年5月11日

二、实验目的

熟练掌握函数的定义与调用

熟练掌握使用函数编写程序

掌握函数的实参、形参、返回值的概念及使用

三、实验环境

1 中文 Windows 11 操作系统

四、实验要求

请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 计算整数阶乘

输入示例: 5

输出示例: 5!=120

程序代码:


#include <stdio.h>

int fun(int n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return n * fun(n - 1);
}

int main(void) 
{
    int x;
    printf("Input n: ");
    scanf("%d", &x);
    printf("%d!=%d\n", x, fun(x));
    return 0;
}

程序及运行结果: 输出

2 求奇数和

输入示例: 11 3 7 6 8 9 11 0

输出示例: sum=41

程序代码:


#include <stdio.h>

int even(int n) {
    if (n % 2 == 0)
        return 1;
    else
        return 0;
}

int main(void)
{
    int num, sum = 0;
    printf("输入一批正整数(以零或负数为结束标志):\n");
    scanf("%d", &num);

    while (num > 0) 
    {
        if (!even(num))
            sum = sum + num;
        scanf("%d", &num);
    }

    printf("sum=%d\n", sum);
    return 0;
}

程序及运行结果: 输出

3 统计素数个数及求和

输入示例: 2 10

输出示例: count = 4, sum=17

程序代码:


#include <stdio.h>

int isprime(int n) 
{
    if (n <= 1)
        return 0;
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main(void) 
{
    int m, n, count = 0, sum = 0;
    printf("Input m, n: ");
    scanf("%d %d", &m, &n);

    if (m > n) 
    {
        int temp = m;
        m = n;
        n = temp;
    }

    for (int i = m; i <= n; i++) 
    {
        if (isprime(i)) 
        {
            count++;
            sum = sum + i;
        }
    }

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

    return 0;
}

程序及运行结果: 输出

4 计算 1! + 2! + ... + 10!

输出示例: 1! + 2! + ... + 10! = 4037913.000000

程序代码:


#include <stdio.h>

double fact(int n) 
{
    int i;
    double result = 1.0;
    for (i = 1; i <= n; i++)
        result = result * i;
    return result;
}

int main(void) 
{
    int i;
    double sum = 0;
    for (i = 1; i <= 10; i++)
        sum = sum + fact(i);
    printf("1! + 2! + ... + 10! = %.6f\n", sum);
    return 0;
}

程序及运行结果: 输出

六、实验心得

函数调用熟练 通过阶乘、奇数和、素数判断等实验掌握了函数的定义与调用方法。

递归理解 阶乘函数使用递归,理解了递归函数的执行流程与返回值传递。

逻辑判断能力提升 奇数和、素数统计程序中需要条件判断,进一步锻炼了逻辑分析能力。

返回值类型注意 计算大阶乘时使用 double 类型避免溢出,并掌握了函数返回不同类型值的方法。

实验10:函数与指针

一、实验信息


课程名称:C语言程序设计

实验名称:实验10:函数与指针

完成时间:2024年5月20日

二、实验目的

熟练掌握使用函数编写程序

掌握函数的实参、形参、返回值的概念及使用

掌握指针的概念及指针的定义、使用方法

熟悉指针的运算(取地址运算 &、取内容运算 *、指针移动等)

三、实验环境

1 中文 Windows 11 操作系统

四、实验要求

请将每一题的程序及运行结果完整截图粘贴在程序及运行结果下面。截图应保证清晰完整,大小适中。

五、实验内容与代码

1 求小于 lim 的素数并存入数组

输入示例: lim = 30

输出示例: 小于 30 的素数共有 10 个:2 3 5 7 11 13 17 19 23 29

程序代码:


#include <stdio.h>
#include <stdbool.h>
#define MAX 1000

int fun(int lim, int aa[MAX])
{
    if (lim <= 2) 
        return 0;
    bool a[30];
    for (int i = 0; i < lim; i++) 
        a[i] = true;
    a[0] = a[1] = false;
    for (int i = 2; i * i < lim; i++) 
        if (a[i])
            for (int j = i * i; j < lim; j += i)
                a[j] = false;
    int count = 0;
    for (int i = 2; i < lim; i++)
        if (a[i])
            aa[count++] = i;
    return count;
}

int main(void) 
{
    int lim = 30;
    int aa[MAX];
    int b = fun(lim, aa);
    printf("小于 %d 的素数共有 %d 个:\n", lim, b);
    for (int i = 0; i < b; i++)
        printf("%d ", aa[i]);
    printf("\n");
    return 0;
}

程序及运行结果: 输出

2 字符串中间五个字符降序排序

输入示例: CEAedca

输出示例: 排序后字符串:CedcEAa

程序代码:


#include <stdio.h>
#include <string.h>

void sort_descending(char* a, int length) {
    for (int i = 0; i < length - 1; i++) 
        for (int j = i + 1; j < length; j++) 
            if (a[i] < a[j]) 
            {
                char temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
}

void fun(char str[]) 
{
    if (strlen(str) != 7) 
    {
        printf("输入的字符串长度不是7个字符\n");
        return;
    }
    char middle[6];
    for (int i = 1; i < 6; i++)
        middle[i - 1] = str[i];
    middle[5] = '\0';
    sort_descending(middle, 5);
    for (int i = 1; i < 6; i++) 
        str[i] = middle[i - 1];
}

int main(void) 
{
    char str[] = "CEAedca";
    printf("原字符串: %s\n", str);
    fun(str);
    printf("排序后字符串: %s\n", str);
    return 0;
}

程序及运行结果: 输出

3 华氏温度转摄氏温度(使用指针)

输出示例:

华氏温度 摄氏温度 0 -17.78 20 -6.67 40 4.44 60 15.56 80 26.67 100 37.78

程序代码:


#include <stdio.h>

int main(void) 
{
    int fahr;
    double celsius;
    int* pf;
    double* pc;
    pf = &fahr;
    pc = &celsius;
    printf("华氏温度    摄氏温度\n");
    for (*pf = 0; *pf <= 100; *pf += 20) 
    {
        *pc = (*pf - 32) * 5.0 / 9.0;
        printf("%d\t      %.2f\n", *pf, *pc);
    }
    return 0;
}

程序及运行结果: 输出

六、实验心得

指针运算理解 通过华氏温度转换实验掌握了取地址(&)和取内容(*)的指针基本操作,并理解了指针作为函数参数的使用方法。

数组与函数结合 素数求解实验中,将函数返回值与数组结合,理解了函数返回值作为计数及数组存储的实践方法。

字符串处理能力提升 中间五个字符降序排序实验熟悉了字符串下标操作、子数组提取和自定义排序函数的实现方法。

综合运用能力增强 实验涉及指针、函数、数组、字符串等多种知识点,增强了对 C 语言综合应用的能力。

💬

留言板暂未开启

评论方案(Giscus / Twikoo)将在后续版本敲定, 敬请期待。