实验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;
}
程序及运行结果:

4 上机实践分析输出结果 程序代码:
#include <stdio.h>
int main(void)
{
char c;
printf("请输入一个字符:");
scanf("%c", &c);
printf("%c对应的ASCII码是:%d\n", c, c);
return 0;
}
程序及运行结果:
程序代码:
#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;
}
程序及运行结果:

六、实验心得
通过本次实验,我进一步掌握了 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 语言综合应用的能力。