
目录
实 验 1 C 语 言 入 门 及 选 择 结 构 1
实 验 1.1 Visual C++6.0 开 发 环 境 1
实 验 1.2 C 程 序 快 速 入 门 8
实 验 1.3 算 术 运 算 与 赋 值 运 算 11
实 验 1.4 逻 辑 运 算 及 if 语 句 13
实 验 1.5 switch 选 择 结 构 16
实 验 2 循 环 结 构 及 数 组 20
实 验 2.1 循 环 结 构 20
实 验 2.2 数 组 一 : 一 维 数 组 24
实 验 2.3 数 组 二 : 二 维 数 组 27
实 验 2.4 数 组 三 : 字 符 数 组 29
实 验 3 函 数 与 自 定 义 数 据 类 型 34
实 验 3.1 函 数 一 : 函 数 的 定 义 、 调 用 和 声 明 34
实 验 3.2 函 数 二 : 函 数 的 参 数 传 递 2 39
实 验 3.3 函 数 三 : 函 数 的 嵌 套 和 递 归 41
实 验 3.4 自 定 义 数 据 类 型 44
实 验 4 指 针 46
实 验 4.1 指 针 一 : 指 针 的 定 义 及 运 算 46
实 验 4.2 指 针 二 : 指 向 数 组 的 指 针 49
实 验 4.3 指 针 三 : 用 指 针 操 作 字 符 串 52
第 II 页
熟悉 C 语言的系统环境,掌握在集成环境中编辑、编译、连接和运行 C
语言程序的方法。掌握C 语言源程序的结构特点与书写规范。
掌握标识符、变量与常量的使用,各种数据类型的应用及输出、输入函数。
掌握算术运算符和算术表达式,熟练运用赋值运算。
掌握关系、条件、逻辑运算符及关系、条件、逻辑表达式及 if 单分支、双分支和多分支语句。
掌握 switch 语句, if 语句的嵌套,对 if、switch 多路分支语句进行比较分析总结。
10 学时
熟悉 C 语言的系统环境,掌握在集成环境中编辑、编译、连接和运行 C语言程序的方法。
掌握C 语言源程序的结构特点与书写规范。
2 学时
(1)运行 VC++6.0
双击桌面上的 VC++6.0 快捷方式,运行 VC++6.0。
双击"C:\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE",运行 VC++6.0。
第 1 页

菜单栏
执行
组建
输出
工作空间
标准按钮
编译
(2)认识VC++6.0
标题栏的左侧显示当前的文件名,右侧有最小化,最大化和关闭三个按钮。菜单栏包含了开发环境中几乎所有的命令,其中一些常用的命令还被排列在
工具栏中。
工具栏上的按钮提出和一些菜单命令相对应,提供了经常使用的命令的一种快捷方式。
项目工作区窗口包含有Class View 和File View 两个页面。
建立C 语言源文件,单击[文件]-[新建],单击[文件]选项卡,新建一个 C++ Source File,选择存储位置(新建建立的文件夹 D:\test),输入文件名 “myhello.c”,进入 D:\test,可以看到新建的文件 myhello.c。

第 2 页

输入C 语言源程序
输入C 语言源程序,在打开的程序编辑窗口输入C 语言源程序。
编译

编译工具
编译结果
点击[组建]-[编译],或按 ctrl+F7 进行预编译,或用工具栏工具编译,编译成功生成.obj 目标文件(myhello.obj),显示在输出窗口。
连接

连接工具
连接结果
点击[组建]-[编译]命令,或按F7,或点按连接按钮执行连接操作。连接成功生成扩展名为.exe 的文件。
执行
点击[组建]-[执行]命令,或按 ctrl+F5,或点按执行按钮完成“执行”操
作。
完成后界面如下,到目前为止一个简单的C 程序创建成功。

执行工具
结果输出窗体
关闭工作空间
程序运行结束后,如果想输入一个新程序,我们需要将当前的程序关闭,选择菜单栏中的“文件”→“关闭工作空间”即可。
常用功能键及其意义
为了使程序员能够方便快捷地完成程序开发,开发环境提供了大量快捷方式来简化一些常用操作的步骤。键盘操作直接、简单,而且非常方便,因而程序员非常喜欢采用键盘命令来控制操作。下面是一些最常用的功能键,希望在实验中逐步掌握。
操作类型 | 功能键 | 对应菜单 | 含义 |
文件操作 | Ctrl+N | File|New | 创建新的文件、项目等 |
Ctrl+O | File|Open | 打开项目、文件等 | |
Ctrl+S | File|Save | 保存当前文件 | |
编辑操作 | Ctrl+X | Edit|Cut | 剪切 |
Ctrl+C | Edit|Copy | 复制 | |
Ctrl+V | Edit|Paste | 粘贴 | |
Ctrl+Z | Edit|Undo | 撤消上一个操作 | |
Ctrl+Y | Edit|Redo | 重复上一个操作 | |
Ctrl+A | Edit|Select All | 全选 | |
Del | Edit|Del | 删除光标后面的一个字符 | |
建立程序操作 | Ctrl+F7 | Build| Compiler current file | 编译当前源文件 |
Ctrl+F5 | Build|Run exe | 运行当前项目 | |
F7 | Build|Build exe | 建立可执行程序 | |
F5 | Build|Start Debugging | 启动调试程序 | |
调试 | F5 | Debug|Go | 继续运行 |
F11 | Debug|Step into | 进入函数体内部 | |
shift+F11 | Debug|Step out | 从函数体内部运行出来 | |
F10 | Debug|Step over | 执行一行语句 | |
F9 | 设置/清除断点 | ||
Ctrl+F10 | Debug|Run to cursor | 运行到光标所在位置 | |
shift+F9 | Debug|QuickWatch | 快速查看变量或表达式的值 | |
Shift + F5 | Debug|Stop debugging | 停止调试 |
要求:请用最简单的语言描述如何新建一个 C 语言的源文件,如何编辑程序,如何编译程序,如何连接程序,如何运行程序,程序结果然后显示?
要求:编辑下面源程序,并且读懂与分析运行程序,上机运行程序,并与分析结果相对比。
输入并运行以下程序,观察运行结果。(sy1.1.1.c)
# include <stdio.h> int main()
{ printf("*********************\n"); printf(" Hello world!\n"); printf("*********************\n"); return 0;
}
分析结果 | |
运行结果 |
思考:如何采用一个输出(printf)函数调用实现此输出结果。
输入并运行以下程序,观察运行结果。 (sy1.1.2.c)
# include <stdio.h> int main()
{ int a,b,sum,minus; a=456;b=123;
sum=a+b; minus=a-b;
printf("a+b=%d\na-b=%d\n",sum,minus);
return 0;
}
分析结果 | printf 中删除 a+b=和 a-b= | 输出结果: |
printf 中删除第一个\n | 输出结果: | |
运行结果 | printf 中删除 a+b=和 a-b= | 输出结果: |
printf 中删除第一个\n | 输出结果: |
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
1.求(a-b)×c 的值。(设 a=33,b=22,c=11)(sy1.1.3.c) # include <stdio.h>
int main( )
{ int a,b,c; a=33; c=11;
![]()
printf("%d\n",(a-b)*c); return 0;
}
2.求圆的面积。(sy1.1.4.c) #include <stdio.h>
#define PI 3.14 int main( )
{
float r,area;
printf("\n Enter r value:"); scanf("%f",&r);
area=PI*r*r;
printf(" \n area=%f\n", ); return 0;
}
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。(sy1.1.5.c)
行 号 #include <stdio.h>
int main( )
{ int x;
3. x=5,y=8;
4. printf("\n%d,%d,%d\n",x,(x+5)*2,y);
5. return 0;
错 | 错 误 在 行 |
应改为: | |
调试正确后的运行结果 | 输出结果: |
6. }
请用C 程序告诉大家你来自哪里? 有什么爱好?(sy1.1.6.c)
输出以下图案: (sy1.1.7.c)
*
**
***
1.对本次实验及相关知识点进行分析总结。。
2.列出遇到的问题的解决办法,记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。
总结C程序的结构和书写规则。
掌握标识符、变量与常量的定义;
掌握C 语言数据类型的种类和作用;
熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符;
掌握不同的类型数据之间赋值的规律;
掌握输出、输入函数的使用及格式控制;
进一步熟悉C 程序语句和程序的结构特点,学习简单程序的编写方法。
2 学时
输入并运行以下程序,观察运行结果。
#include <stdio.h> int main()
{ char c1,c2; c1=97;c2=98;
printf("%c,%c\n",c1,c2); return 0;
}
在第五行后面加入以下printf 语句,并运行。
printf("%d,%d\n",c1,c2);
分析结果 | |
运行结果 |
在(1)的基础上,将第三行改为以下语句,并运行。
int c1,c2;
分析结果 |
运行结果 |
在(1)的基础上,将第四行改为以下语句,并运行。
分析结果 | |
运行结果 |
c1=321;c2=400;
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
1.求任意输入字符的ASCⅡ码。 #include <stdio.h>
int main( )
{ ;//变量的定义 printf(“请输入一个字符:”); scanf(“%c”,&a);
b=(int)a;
printf(“\n\n%c 的ASCⅡ码为%d\n”,a,b); return 0;
}
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。
行 号 #include <stdio.h>
1 | int | main( ) |
2 | { | int u=v=89; |
3 | printf(“u=%d,v=%d\n”,u,v); | |
4 | return 0; | |
5 | } |
错 | 错 误 在 行 |
应改为: | |
调试正确后 的运行结果 | 输出结果: |
编写一个程序,从键盘输入某电视机的价格,再输出该价格打 7 折后的价
格。
分析:必须设计一个实型变量接受从键盘输入的值,输入、输出应该有提示。
编写一个程序, 求一元一次方程ax+b=0 的根。
分析:a、b 的值从键盘输入,输入时 a 的值不能为 0(无解),方程的根即 x的值为:-b/a
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握算术运算符和算术表达式。
熟练掌握赋值运算符、复合的赋值运算符
熟练掌握自增 1 和自减 1 运算符。
熟练掌握顺序结构的程序设计,能够编写简单的应用程序。
2 学时
编程序计算数学表达式:b2 -4ac,a,b,c 的值从键盘输入。
编程序计算 298 秒是几分几秒。
提示: 设 int x=298; 再定义两个变量存放分( m )、秒(s) 值; 则: m=x/60;s=x%60;
从键盘输入一个三位数,求各位数字之和。例如,输入的三位数为 358,则输出结果为 3+5+8=16 。
提示: 题目的关键是要求出该数的个、十、百位上的数字,可利用 C 语言整数相除,结果仍为整数的特点。若设该数为data,它的个、十、百位为g、s、 b,则b=data/100 ;s=(data-b*100)/10;g=data%10
用赋值语句表达:a 的值为 2,b 的值比 a 多 2,c 的值比 b 的值多 2,并输出a,b,c 的结果。请编出完整程序验证。
假设变量 a 和 b 均为整型,以下语句可以不借助任何变量把 a、b 中的值进行交换。请先填空,再编出完整程序验证。
a+= ;(a 为 a 、 b 之 和 ) b=a- ;a-= ;
编写一个程序,其功能为:从键盘上输入一个浮点数,然后分别输出该数的整数部分和小数部分。
分析:若输入的浮点数存入 fd 变量,则可用强制类型转换运算符,将输入的该数的整数部分取出:zhs=(int)fd;
从键盘输入三角形的三条边 a,b,c 的值,计算三角形的面积,程序框架如下:
#include “sdtio.h” #include “math.h” main()
{定义变量
从键盘输入 a,b,c 三条边的值计算 s 的值
计算三角形面积
输出结果
}
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握关系、条件、逻辑运算符及关系、条件、逻辑表达式。
掌握逗号运算符和逗号表达式。
熟练掌握三种单分支、双分支和多分支if 语句。
掌握if 语句的嵌套。
2 学时
分析程序运行结果: #include <stdio.h> int main()
{ int i , j , m=0 , n=0 ; i=8; j=10;
m+=i++; n-=--j;
printf(“%d,%d, \n”,(i,j,m),n); return 0;
}
分析结果 | |
运行结果 |
输入并运行以下程序,观察运行结果。 #include <stdio.h>
int main()
{
int x=10,y=9,a,b,c; a=(--x==y++)?--x:++y;
b=x++; c=y;
printf("a=%d,b=%d,c=%d\n",a,b,c); return 0;
}
分析结果 | |
运行结果 |
输入并运行以下程序,观察运行结果。 #include <stdio.h>
int main()
{ int a,b,c; a=10;b=60;c=30;
if(a>b) a=b; b=c;
c=a;
printf("a=%d,b=%d,c=%d\n" , a , b, c ); return 0;
}
分析结果 | |
运行结果 |
输入并运行以下程序,观察运行结果。 #include <stdio.h>
int main()
{ int x=60,a=30,b=20; int v1=3,v2=8;
if (a<b)
if (b!=15)
if (!v1) x=1; else
if (v2) x=10;
x=-2;
printf(“%d\n”, x); return 0;
}
分析结果 | |
运行结果 |
输入某学生的成绩(成绩为 100 分制,可以为 89.5,如果输入的成绩不在 0-100 之间,请给出出错提示。),经处理后给出学生的等级,等级分类如下:
90 分以上(包括 90): A
80 至 90 分(包括 80):B
70 至 80 分(包括 70):C
60 至 70 分(包括 60):D
60 分 以 下 : E
输入一个三位的正整数,判断该数是否为水仙花数。(水仙花数的是指一个三位数,其各位数字的立方各等于该数本身。例如:153 是一个水仙花数,因为 153=1^3+5^3+3^3)
某邮局对邮寄包裹有如下规定:若包裹的长宽高任一尺寸超过 1 米或重量超过 30 千克,不予邮寄;对可以邮寄的包裹每件收取手续费 0.5 元,再加上根据下表按重量 weight计算的邮资,请编写程序计算某包裹的邮寄资费。
输入一个正整数 n,再输入 n 个学生的成绩,计算平均分,并统计不及格成绩的个
数。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
熟练掌握switch 语句。
掌握省略 break 的 case 语句的执行方式。
比较 if 语句的嵌套及 if、switch 多路分支语句。
2 学时
1. 输入并运行以下程序,观察运行结果。 #include <stdio.h>
int main()
{ int i=1; switch(i)
{case 1:printf("%d\t",i++); case 2:printf("%d\t",i++); case 3:printf("%d\t",i++); case 4:printf("%d\t",i++);
}
printf("\ni=%d\n",i); return 0;
}
分析结果 | |
运行结果 |
要求:按照给定题目要求,参照出现的语句,填写程序空白处。
![]()
以下程序实现的功能是: -1 x<0,请将以下程序补充完整
y= 0 x=0
1 x>0
#include <stdio.h> int main()
{ int x,y;scanf(“%d”,&x);
switch(x<0)
{case 1: ;break; case 0:switch(x==0)
{ case 1;y=0;break; case 0:y=1;
}
}
printf(“y=%d\n”,y); return 0;
}
用switch 结构编写一个处理四则运算的程序。 #include<stdio.h>
int main()
{ float v1,v2;char op;
printf(“please type your expression:\n”); scanf(“%f%c%f”,&v1,&op,&v2);
switch( )
{case ‘+’:printf(“%1.0f+%1.0f=%1.0f\n”,v1,v2,v1+v2);break; case ‘ ’:printf(“%1.0f-%1.0f=%1.0f\n”,v1,v2,v1-v2); break; case ‘*’:printf(“%1.0f*%1.0f=%1.0f\n”,v1,v2,v1*v2); break; case ‘/’:
if( ){printf(“除数为零\n”);break;} else
{printf(“%1.0f/%1.0f=%1.0f\n”,v1,v2,v1/v2);break;} default:printf(“运算符错误\n”);
}
return 0;
}
输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3 月5 日为例,应该先把前两个月的加起来,然后再加上5 天即本年的第几天,特殊情况,闰年且输入月份大于3 时需考虑多加一天。
#include <stdio.h> int main()
{ int day,month,year,sum,leap; printf("\nplease input year,month,day\n");
scanf("%d,%d,%d", ); switch(month)/*先计算某月以前月份的总天数*/
{
case 1: ;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break;
default:printf("data error");break;
}
数应该加一天*/
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||( ))/* 判 断 是 不 是 闰 年 */ leap=1;
else leap=0;
if( )/* 如 果 是 闰 年 且 月 份 大 于 2, 总 天
;
printf("It is the %dth day. \n ",sum); return 0;
}
1. 以下4 种水果([1]苹果[2]梨[3]桔子[4]芒果)单价分别是2.0 元/公斤,2.5
元/公斤,3.0 元/公斤,4.5 元/公斤,请输入水果编号、重量,计算应付款。
2 . 从 键 盘 输 入 1-7 , 显 示 输 出 该 日 期 对 应 的 英 文 日 期
(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,sunday)名称。
己知某公司员工的保底薪水为 500,某月所接工程的利润 p 与利润提成的关系如下:(计量单位:元)(选作)
p<=1000 没 有 提 成
1000<p<=2000 提 成 10%
2000<p<=5000 提 成 15%
5000<p<=10000 提 成 20%
10000<p 提 成 25%
编写程序实现运输公司对用户计算运费。路程(s)越远,每公里运费越低。
考虑一个自动售货机,提供如下选择: [1]矿泉水
巧克力
爆米花
果汁
显示购买商品的数量
退出系统
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握while ,do-while,for 循环语句的使用与不同循环结构的转换。
理解循环嵌套的使用。
掌握一维数组的定义、初始化、引用和输入输出。
会使用二维数组和字符数组。
8 学时
掌握while ,do-while,for 循环语句的使用与区别;
掌握循环条件、循环体、循环终止等循环要素;
理解循环执行过程。
熟练使用循环语句编写程序。
2 学时
#include <stdio.h> int main()
{ int a=2,b=8; while(b--<0)
b-=a ; a++ ;
printf(“a=%d,b=%d\n”,a,b); return 0;
}
分析结果 |
运行结果 |
#include <stdio.h> int main()
{ int x=2 ,y=6 , z=3; do
y=y-1;
while(z-->0&&++x<5) ; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); return 0;
}
分析结果 | |
运行结果 |
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。
下面程序的功能是计算n!。
行 号 #include<stdio.h>
int main()
{ int i,n,s=1;
printf("Please enter n:");
4 scanf("%d",&n);
5 for(i=1;i<=n;i++)
6 s=s*i;
7 printf("%d! = %d\n",n,s);
错 | 错误在 | 行 | |||
应改为: | |||||
调试正确后的运行结果 | 输入数据: 1 | 5 | 9 | 12 | 15 |
输出结果: | |||||
8 return 0; 9 }
3. 以下程序输出 1---100 的数字
行号 | #include <stdio.h> int main() | |
1 | { int i =100; | |
2 | while( 1 ) | |
3 | { i = i%100+1 ; | |
5 | printf( “ %4d ,“ ,i ) ; | |
6 | if ( i%10==0 ) printf ( “ \n ”) ; | |
7 | if ( i>100) break ; | |
8 | } | |
9 | return 0; | |
10 | } |
错 | 错 误 在 行 |
应改为: |
While 实现:
译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。可以按以下的规律将电文变成密码:将字母 A 变成字母 E,a 变成 e,即变成其后的第 4 个字母,W 变成 A,X 变成 B,Y 变成 C,Z 变成 D。字母按上述规律转换,非字母字符不变。
计算 1~20 之间的奇数之和和偶数之和。
do…while 循环实现
1.日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想,猜想的内容是:任给一个自然数,若为偶数除以 2,若为奇数则乘以 3 加 1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为 1,请编程验证。 2.统计一个整数的位数。从键盘输入一个整数,统计该数的位数。例如,输入 12345,输出 5;输入-99,输出 2。
For 循环实现
马克思手稿里有一道有趣的数学问题:有 30 个人,其中有男人、女人和小孩,在一家
饭馆吃饭共花了 50 先令:每个男人花 3 先令,每个女人花 2 先令,每个小孩花 1 先令,问男人、女人和小孩各有几人?
有一对兔子,从出生后第三个月起每个月都生一对小兔子,小兔子长到第三个月后每月又生一对小兔子,假如兔子都不死,问 20 个月内每个月的兔子总数为多少?
输入一批学生的成绩,找出最高分。
循环嵌套
1.计算 1!+2!+3!+…+100!。要求使用嵌套循环。
三对情侣参加婚礼,三个新郎为 A,B,C,三个新娘为 X,Y,Z,有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A 说他将和 X 结婚;X 说他的未婚夫是 C;C 说他将和 Z 结婚,这人听后知道他们在开玩笑,全是假话,请编程找
出谁将和谁结婚。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握一维数组的定义。
掌握一维数组的初始化。
掌握一维数组的引用。
熟练对一维数组元素进行输入输出。
2 学时
#include <stdio.h> int main()
{ int a[]={1,2,3,4,5},i,j,s=0; j = 1;
for ( i = 4 ; i>=0 ; i--)
{
s = s+ a[i] * j ; j = j * 10 ;
}
printf(" s= %d \n" , s ); return 0;
}
分析结果 | |
运行结果 |
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
1. 设数组 a 的元素均为正整数,以下程序是求 a 中奇数的个数和奇数的平均值,请在 上填写正确内容。
#include<stdio.h> int main()
{ int a[10]={10,9,8,7,6,5,4,3,2,1};
int k,s,i; float ave;
for(i=0,k=s=0;i<10;i++)
{ if( ) continue ; s+= ;
k++;
}
if(k!=0)
{ ave=s/k;
printf ("%d,%f\n",k,ave);
}
return 0;
}
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。
1.以下程序实现的功能是输入四个数,求这四个数的和. #include<stdio.h>
int main()
1. { | int | a(4)={4*0}; |
2. | int | i; |
3. | for | (i=0;i<4;i++) scanf("%d",&a[i]); |
4. | for | (i=0;i<4;i++) a[0]=a[0]+a[i]; |
5. printf( "%d ",a[0]); return 0;
错 | 错误在 | 行 | |||
应改为: | |||||
调试正确后的运行结果 | 输入数据 | 1 | 8 | 18 | 36 |
输出结果: | |||||
}
P100
1、对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
2、总结每个实验,通过实验,分析定义与引用数组的区别。
掌握二维数组的定义。
掌握二维数组的引用
掌握二维数组的初始化。
熟练对二维数组元素进行输入输出。
2 学时
(一)阅读程序
#include<stdio.h> int main()
{ int k ;
int a[3][3] = {9,8,7,6,5,4,3,2,1} ;
for (k =0;k < 3;k++ ) printf("%d \n",a[k][2-k]); return 0;
}
分析结果 | |
运行结果 |
#include <stdio.h> int main()
{ int i , j ,x =0 ,y = 0 , m ;
int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 }; m = a [0][0] ;
for (i=0 ;i < 3 ;i++)
for (j = 0 ; j<3 ; j++ ) if ( a[ i] [ j ] >m )
{ m = a[ i ][ j ] ; x = i ;
y = j ;
}
printf(“ ( % d , % d ) = % d \n”, x , y,m ); return 0;
}
分析结果 | |
运行结果 |
P109
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握字符数组的定义。
掌握字符数组的引用。
掌握字符数组的初始化。
熟练对字符数组元素进行输入输出。
掌握常用的字符处理函数。
2 学时
(一)阅读程序
#include <stdio.h> #include <string.h> int main()
{ char s1[50]= “I am”; char s2[ ]=” student!” ;
printf(“%d,\n”, strlen(s2) ); strcat(s1,s2); printf(“%s\n”,s1);
return 0;
}
分析结果 | |
运行结果 |
#include <stdio.h> int main()
{ char b[7]={"67da12"}; int i=0,s=0;
for(i =0 ; b[i] >='0'&&b[i]<='9';i+=2) s=10*s+b[i] -'0';
printf("%d\n",s); return 0;
}
分析结果 | |
运行结果 |
#include <stdio.h> int main()
{ int i= 0 ;
char a[ ] = “cbm” ;
char b[ ] = “cqid” , c[10] ;
while ( a[i] != ‘\0’ && b[i] != ‘\0’ )
{ if (a[i] >= b[i] ) c[i] = a[i] - 32 ; else c[i] = b[i] - 32 ;
++i ;
}
c[i] = ‘\0’; puts(c) ; return 0;
}
分析结果 | |
运行结果 |
(二)完成程序
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
下面程序的功能是将字符串a 中所有的字符 d 删除。
#include <stdio.h> int main()
{ char s[80] ; int i,j; gets(s);
for(i=j=0;s[i]!='\0'; i++)
if (s[i]!='d') ; s[j]='\0';
puts(s) ; return 0;
}
从键盘输入 :apple <CR> computer<CR>music<CR>game<CR>,想找出最大字符串。
#include <stdio.h> #include <string.h> int main()
{ char str[10],temp[10]={""}; int i;
for (i=0;i<4;i++)
{ gets(str);
if( )strcpy(temp,str);
}
puts(temp); return 0;
}
(三)调试程序
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。
行号 #include <stdio.h> int main()
{ char a[ ] ;
int i, len=0 ;
a=“C Language Program” ; 4 for (i=0;a[i]!=‘ \0 ’;i++) 5 len++;
printf(“%s ,%d\n”,a,len) ;
错 | 错 误 在 行 |
应改为: | |
调试正确后 的运行结果 | 输出结果: |
return 0; 8 }
下面程序的功能是:将字符数组a [6] ={ ‘a’, ‘ b’, ‘ c’, ‘d’, ‘e’,‘ f’ } 变为 a [6] ={‘f’,‘a’, ‘b’ , ‘c’, ‘d’,‘e’}。
行号 1 | #include <stdio.h> int main( ) { int i;char t; | |
2 | char | a[6] |
={‘a’,‘ | b’,‘ c ’,‘ d’,‘ e ’,‘ f’ } ; | |
3 | t=a[5] ; | |
4 | for (i=5;a[i]!='\ 0’;i--) | |
5 | a[i]=a[i–1] ; | |
6 | a[0]=t; | |
7 | for(i=0;i<=5;i++) | |
8 | printf(“%c”,a[i]); | |
9 | printf ( “\n”) ; | |
10 | return 0; | |
11 | } |
错 | 错 误 在 行 |
应改为: | |
调试正确后 的运行结果 | 输出结果: |
调试下列程序,使之具有如下功能:任意输入两个字符串(如:"abc 123"和"china"),并存放在a,b 两个数组中。然后把较短的字符串放在a 数组,较长的字符串放在b 数组。并输出。
行号#include <stdio.h> #include <string.h>
int | main() | |
1 | { | char a[10],b[10]; |
2 | int c,d,k; | |
3 | scanf("%s",&a); | |
4 | scanf("%s",&b); | |
5 | printf("a=%s,b=%s\n",a,b); | |
6 | c=strlen(a); | |
7 | d=strlen(b); | |
8 | if(c>d) | |
9 | for(k=0;k<d;k++) | |
10 | { ch=a[k];a[k]=b[k];b[k]=ch;} |
printf("a=%s,b=%s\n",a,b);
return 0;
13 }
错 | 错 误 在 行 |
应改为: | |
调试正确后的运行结果 | 输入数据: abc123 china |
输出结果: |
程序中的 strlen 是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。
(四)编写程序
P120
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握函数的声明、定义及调用形式及应用。
掌握函数形参和实参的使用和传值调用,理解传址调用。
掌握结构体类型变量的定义和使用。
学时
掌握函数的声明形式及应用。
掌握函数的定义形式及应用。
掌握函数的调用形式及应用;
2 学时
(一)阅读程序
#include <stdio.h>
void fun (int x, int y, int z)
{ z=x * x + y * y;
}
int main()
{ int a=38; fun(7,3,a);
printf("%d\n",a); return 0;
}
分析结果 | |
运行结果 |
#include <stdio.h>
void fun (int x,int y ); int main()
{ int x=5,y=3; fun(x,y);
printf("%d,%d\n",x,y); return 0;
}
void fun (int x,int y )
{ x=x+y; y=x-y;
x=x-y; printf("%d,%d\n",x,y);
分析结果 | |
运行结果 |
}
(二)完成程序
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 #include <stdio.h>
![]()
int main()
{ double x,y; scanf("%lf%lf",&x,&y); printf("%.8lf\n",max(x,y)); return 0;
}
double max(double a,double b)
{ return (a>b ? a:b) ; }
以下函数的功能是:求x 的 y 次方,请填空,并配写出主调函数。 double fun( double x, int y)
{ int i; double z;
for(i=1, z=x; i<y;i++) z=z* ; return z;
}
int main( )
{
return 0;
}
(三)调试程序
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。 1.行号 #include <stdio.h>
void func ( float a , float b )
int main()
{ float x , y ;
float z ;
5 scanf(“%f , % f”,&x ,&y);
z = func ( x , y ) ;
printf ( “z=%f\n” ,z ) ; return 0; 8 }
void func ( float a , float b )
{ float c ;
c = a * a + b * b ;
正确 | 运行结果: |
错误 | 错误所在行: |
应改为: |
return c ; 13 }
2.函数sstrcmp()的功能是对两个字符串进行比较。当 s 数组中字符串和 t 数组中字符串相等时,返回值为 0;当s 数组中字符串大于t 数组中字符串时,返回值大于 0;当 s 数组中字符串小于 t 数组中字符串时,返回值小于 0(功能等同于库函数strcmp())。
行号
1 int sstrcmp(char s[ ],char t[]) 2 { int i=0 , j=0 ;
3 while(s[i]&&t[j]&& s[i]== t[j] ) ;
4 return s[i]-t[j]; 5 }
int main()
{ int x;
8 char s1[50],s2[50];
9 scanf("%s%s",s1,s2);
x= sstrcmp(s1,s2);
printf("%d\n",x);

应改为:
错误所在行:
错误
运行结果:
正确
return 0; 13 }
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握形参和实参的使用和传值调用;
理解函数的地址传递。
2 学时
(二)编写程序
编写一个函数,选出能被 3 整除且至少一位是 5 的两位数,用主函数调用这个函数,并输出所有这样的两位数。
编写函数判断某数是否为素数,如果是素数,则返回 1,否则返回 0,在 main 函数中调用该函数,根据返回值判断是否为素数。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
理解函数的嵌套与递归调用,掌握递归函数的编写规律。
掌握函数的嵌套调用。
理解变量的作用域,掌握局部变量和全局变量。
2 学时
在 main()函数中随机产生 10 个数,调用 even()函数判断是否为偶数,是偶数统计偶数的个数,是奇数,再调用 prime()函数判断是否为素数,输出其中的奇数,素数。请填空。
for(i=0;i<10;i++)
{a=rand()%50;
if(even( )) cn++;
}
printf("\n 偶数的个数为:%d\n", );
}
有五个人坐在一起,问第五个人多少岁?他说比第四个人大 2 岁。问第四个人多少岁?他说比第三个人大 2 岁。问第三个人多少岁?他说比第二个人大 2 岁。问第二个人多少岁?他说比第一个人大 2 岁。最后问第一个人多少岁?他说 10 岁。请问第五个人多少岁?根据分析,有如下公式:
age(n)= 10 (n=1)
age(n-1)+2 (n>1)
程序如下,请填空:
age(int n)
{ int c ;
if(n==1) c=10;
else c= ; /* 递 归 调 用 */ return ( );
}
main(){ printf(“%d”,age(5));}变量的作用域
已有如下 main()函数,请写出 carea()函数,它接受圆的半径 r 后,得到圆的面积及
圆的周长(c1)。
main()
{float r,area; printf(“r=?”);
scanf(“%f”,&r); area=carea(r);
printf(“r=%5.2f,carae=%5.2f,cl=%5.2f\n”,r,area,cl); float cl;/*定义全局变量 c1*/
float carea(float r)
{float ar; ar=3.14*r*r; cl=2*3.14*r; return ar; }
以下程序中 main()函数调用 avmaxmin (),求出数组中的平均值、最大值和最小值,
请写出 max、min 变量的定义并填空。
#include "stdio.h" #define N 10
![]()
avmaxmin( int score[])
{int i,pj=0; max=min=score[0];
for(i=0;i<N;i++)
{pj=pj+score[i];
if(max< ) max=score[i]; if(min ) min=score[i];}
return ;} main(){
int score[10]={56,78,45,78,98,46,55,67,87,90},ave;
ave= avmaxmin ( );
printf(“\n average =%d,max=%d,min=%d\n”,ave/N,max,min);
}
变量的存储类型:
分析以下程序,写出程序的结果
void test_static()
{static int vs=0; printf(“static=%d\n”,vs);
++vs;}
main()
{int i;
for(i=0;i<4;i++) test_static();}
已有如下 main()函数,它通过 5 次函数调用 fact()函数打印 1 到 5 的阶乘值。请
设计 fact()函数。通过 5 次函数调用打印 1 到 5 的阶乘值。
1!=1, 在 1! 的基础上再乘 2, 就得 2!(2!=1!*2), 在 2! 的基础上再乘 3, 就得
3!(3!=2!*3),…,
int fact(int x)
{ static int t=1; t*=x;
return t;
}
main(){ int i;
for(i=1;i<=5;i++) printf(“%d!=%d\n”i,fact(i));}
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
1. 掌握结构体类型变量的定义和使用; 2.掌握共用体的概念与使用。
2 学时
union data
{
int i[2]; float a; long b; char c[4];
}u;
main ( )
{
scanf("%d,%d",&u.i[0],&u.i[1]); printf(“i[0]=%d,i[1]=%da=%fb=%1dc[0]=%c, c[1]=%c,c[2]=%c,c[3]=%c “,u.i[0],u.i[1],u.a,
u.b,u.c[0],u.c[1],u.c[2],u.c[3]);
}
输入两个整数 10000、20000 给u.i[0]和u.i[l],分析运行结果。
分析结果 | |
运行结果 |
将scanf 语句改为:
scanf("%ld",&u.b);
输入 60000 给 b,分析运行结果
分析结果 | |
运行结果 |
#include<stdio.h> #include<string.h> void main( )
{ struct student
{ int num;
char name[ ]; float score;
}; stu, *p; p=stu; stu.num=1001;
(*p).name=”Mary”;
scanf(“%f”, p->score);
printf(“%6d%10s%6.2f\n”, p.num, p->name, p->score);
}
有 10 个学生,每个学生的数据包括学号、姓名、3 门课的成绩,从键盘输入 10 个学生数据,要求用结构体解决,打印出 3 门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3 门课的成绩、平均分数)。
要求用input 函数输入 10 个学生数据;用 average 函数求总平均分;用 max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
掌握指针变量的定义、赋值和引用。
初步掌握指向数组的指针的定义和使用。
理解数组与指针的关系并能够利用指针解决数组的简单问题。
理解字符串与指针的关系并能够利用指针处理字符串的简单问题。
6 学时
掌握指针变量的定义和赋值;
掌握指针变量的引用;
2 学时
#include <stdio.h> int main()
{ int *p,a=15,b=5; p=&a;
a=*p+b; printf("a=%d,%d\n",a ,*p); return 0;
}
分析结果 | |
运行结果 |
#include<stdio.h> int sub(int *p); int main()
{ int i ,k;
for( i=0;i<5;i++)
{ k= sub(&i); printf("k= %d\n",k);
}
return 0;
}
int sub(int *p)
{ static int t=0; t=*p +t ;
return t;
分析结果 | |
运行结果 |
}
要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。
行号 #include <stdio.h>
int main()
{ int a , b ;
int *p ,*q ;
printf("请输入两个整数:"); 5. scanf("%d,%d", p ,q);
6. printf("%d,%d\n",a ,b); 7. printf("%d,%d\n",*p,*q);
对 | 运行结果 |
错 | 错 误 在 行 |
应改为: |
8. return 0; 9. }
一个数组中的 15 个值已经按升序排列存放,输入一个数,编程查找是否
有该数,有显示其所在的位置,没有,显示“No Found”,通过指针实现。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
理解数组与指针的关系并能够利用指针解决数组的简单问题。
掌握指向一维数组的指针。
理解指向二维数组的指针
2 学时
#include<stdio.h> void main( )
{ int a[10]={0,1,2,3,4,5,6,7,8,9};
int i,n,temp,*p; scanf("%d", &n); for(i=1;i<=n;i++)
{ temp=*(a+9); for(p=a+9; p>a; p--)
*p=*(p-1);
*a=temp;
}
for(i=0;i<10;i++) printf("%3d", *(a+i)); printf("\n");
}
分析结果 | |
运行结果 |
#include<stdio.h> int main()
{ int a[ ]={1,2,3,4,5,6};
int *p ,i ; p=a;
*(p+4)+=3;
printf("n1=%d,n2=%d\n",*p , *(p+3));
return 0;
}
分析结果 | |
运行结果 |
#include<stdio.h> int main()
{ int a[ ]={2,4,6,8,10};
int *p=a; printf("%d\n",(*p++));
printf("%d\n",(* ++p));
printf("%d\n",(* ++p)++);
printf("%d\n",*p); return 0;
分析结果 | |
运行结果 |
}
1.以下程序实现求数组中的元素的和。行号#include <stdio.h>
int main()
1 | { | int a[10]={1,2,3,4,5,6,7,8,9,0}; |
2 | int sum ,*p ; | |
3 | sum=0; | |
4 | p=&a; | |
5 | while( p<p+10) | |
6 | s + = *p; | |
7 | printf(“sum=%d\n”,sum); | |
8 | return 0; | |
9 | } |
对 | 运行结果 |
错 | 错 误 在 行 |
应改为: |
1、编程将数组中的数据逆序存放,要求:用指向数组的指针变量实现。
2、有 n 个人围成一圈,按顺序编号。从第 1 个人开始报数(1 到 3 报数),凡报到 3 的人退出圈子,编程求最后留下的人的编号是多少。
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。
理解字符串与指针的关系;
能够利用指针处理字符串的简单问题。
2 学时
#include <stdio.h> #include <string.h> int main()
{ char b1[8]="abcdef",b2[8],*pb=b1+4; while (--pb>=b1)
{strcpy(b2,pb);puts(b2);}
printf("%d\n",strlen(b2)); return 0;
}
分析结果 | |
运行结果 |
#include <stdio.h> #include <string.h> void main( )
{ char *p1, *p2, a[20]="language", b[20]="programme"; int k, len;
p1=a; p2=b; len=strlen(b); for(k=0; k<len; k++)
{ if(*p1= =*p2) putchar(*p1); p1++; p2++;
}
}
分析结果 | |
运行结果 |
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
以下程序通过指针实现求a 数组中各元素的和,请在 填写正确内容。
#include <stdio.h> main()
{ int a[6]={2,4,6,8,10,12};
int s, i,*p ; s=0;
p=a;
for (i=0;i<6;i++)
//求各元素的和。 printf(“s=%d\n”,s);
return 0;
}
下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。
#include <stdio.h> int main()
{ char str[61],*p; int i;
for (i=0;i<60;i++)
{ str[i]=getchar();
if(str[i]=='\n') break;
}
str[i]='\0'; p=str; while(*p)
putchar( );//输出p 指向单元的内容,并使得 p 指针指向下一下单元。
return 0;
}
编写一个程序,实现将任意输入的两个字符串,连接成一个字符串,在子函数中实现连接,形参用字符指针变量,在 填写正确内容。
#include <stdio.h>
void mystrcat(char *pa,char *pb)
{
while(*pa!='\0')pa++;//pa 指向第一个字符串的尾部 while(*pb!='\0')
{ }// 把 pb 指 向 单 元 的 内 容
//连接在pa 之后,可用一句或多句实现
*pa='\0';
}
int main()
{ char a[90],b[30]; gets(a);
gets(b);
//调用函数,实现两个字符串的连接。 printf("\n 链接后的字符串是:%s\n",a);
return 0;
}
1.以下程序的功能是:输入三个字符串,按由小到大的顺序输出;行号#include <stdio.h>
1 int main()
2 {
3 char str1[20],str2[20],str3[20];
void swap();
printf("Please enter three string:\n");
gets(str1); gets(str2);gets(str3);
if (strcmp(str1,str2)>0) swap(str1,str2);
if (strcmp(str1,str3)>0) swap(str1,str3);
if (strcmp(str2,str3)>0) swap(str2,str3);
printf("\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
return 0;
13 }
void swap(char *p1,char *p2)
{ char *p;
16 p=p1;p1=p2;p2=p;
17 }
对 | 运行结果 |
错 | 错 误 在 行 |
应改为: |
对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。