image


信息科学技术学院


C 语言程序设计实验指导书

目录

实 验 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


实验 1 C 语言入门及选择结构

一、实验目的

  1. 熟悉 C 语言的系统环境,掌握在集成环境中编辑、编译、连接和运行 C

    语言程序的方法。掌握C 语言源程序的结构特点与书写规范。

  2. 掌握标识符、变量与常量的使用,各种数据类型的应用及输出、输入函数。

  3. 掌握算术运算符和算术表达式,熟练运用赋值运算。

  4. 掌握关系、条件、逻辑运算符及关系、条件、逻辑表达式及 if 单分支、双分支和多分支语句。

  5. 掌握 switch 语句, if 语句的嵌套,对 ifswitch 多路分支语句进行比较分析总结。

二、实验学时数

10 学时


实验 1.1 Visual C++6.0 开发环境

一、实验目的

  1. 熟悉 C 语言的系统环境,掌握在集成环境中编辑、编译、连接和运行 C语言程序的方法。

  2. 掌握C 语言源程序的结构特点与书写规范。

二、实验学时数

2 学时

三、实验步骤及内容

(一) VC++6.0 集成环境

(1)运行 VC++6.0

  1. 双击桌面上的 VC++6.0 快捷方式,运行 VC++6.0

  2. 双击"C:\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE",运行 VC++6.0

1

image

菜单栏

执行

组建

输出

工作空间

标准按钮

编译

2)认识VC++6.0

标题栏的左侧显示当前的文件名,右侧有最小化,最大化和关闭三个按钮。菜单栏包含了开发环境中几乎所有的命令,其中一些常用的命令还被排列在

工具栏中。

工具栏上的按钮提出和一些菜单命令相对应,提供了经常使用的命令的一种快捷方式。

项目工作区窗口包含有Class View File View 两个页面。

  1. 建立C 语言源文件,单击[文件]-[新建],单击[文件]选项卡,新建一个 C++ Source File,选择存储位置(新建建立的文件夹 D:\test),输入文件名 “myhello.c”,进入 D:\test,可以看到新建的文件 myhello.c

    image

    2

    image

    输入C 语言源程序

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

  3. 编译

image

编译工具

编译结果

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


  1. 连接

    image

    连接工具

    连接结果

    点击[组建]-[编译]命令,或按F7,或点按连接按钮执行连接操作。连接成功生成扩展名为.exe 的文件。


  2. 执行

点击[组建]-[执行]命令,或按 ctrl+F5,或点按执行按钮完成“执行”操

作。

完成后界面如下,到目前为止一个简单的C 程序创建成功。



image

执行工具

结果输出窗体

  1. 关闭工作空间

    程序运行结束后,如果想输入一个新程序,我们需要将当前的程序关闭,选择菜单栏中的“文件”→“关闭工作空间”即可。

  2. 常用功能键及其意义


为了使程序员能够方便快捷地完成程序开发,开发环境提供了大量快捷方式来简化一些常用操作的步骤。键盘操作直接、简单,而且非常方便,因而程序员非常喜欢采用键盘命令来控制操作。下面是一些最常用的功能键,希望在实验中逐步掌握。


操作类型

功能键

对应菜单

含义

文件操作

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 语言的源文件,如何编辑程序,如何编译程序,如何连接程序,如何运行程序,程序结果然后显示?


(二)阅读程序

要求:编辑下面源程序,并且读懂与分析运行程序,上机运行程序,并与分析结果相对比。

  1. 输入并运行以下程序,观察运行结果。(sy1.1.1.c)

    # include <stdio.h> int main()

    { printf("*********************\n"); printf(" Hello world!\n"); printf("*********************\n"); return 0;

    }



    分析结果



    运行结果


    思考:如何采用一个输出(printf)函数调用实现此输出结果。


  2. 输入并运行以下程序,观察运行结果。 (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;


image

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>

  1. int main( )

  2. { int x;

3. x=5,y=8;

4. printf("\n%d,%d,%d\n",x,(x+5)*2,y);

5. return 0;

错 误 在 行

应改为:

调试正确后的运行结果

输出结果:

6. }


(五)编写程序

  1. 请用C 程序告诉大家你来自哪里? 有什么爱好?(sy1.1.6.c)

  2. 输出以下图案: (sy1.1.7.c)

    *

    **

    ***

    四、分析总结与讨论

    1.对本次实验及相关知识点进行分析总结。。

    2.列出遇到的问题的解决办法,记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。

  3. 总结C程序的结构和书写规则。


实验 1.2 C 程序快速入门

一、实验目的

  1. 掌握标识符、变量与常量的定义;

  2. 掌握C 语言数据类型的种类和作用;

  3. 熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符;

  4. 掌握不同的类型数据之间赋值的规律;

  5. 掌握输出、输入函数的使用及格式控制;

  6. 进一步熟悉C 程序语句和程序的结构特点,学习简单程序的编写方法。

二、实验学时数

2 学时

三、实验步骤及内容

(一)阅读程序

  1. 输入并运行以下程序,观察运行结果。

    #include <stdio.h> int main()

    { char c1,c2; c1=97;c2=98;

    printf("%c,%c\n",c1,c2); return 0;

    }

    1. 在第五行后面加入以下printf 语句,并运行。

      printf("%d,%d\n",c1,c2);



      分析结果



      运行结果


    2. 在(1)的基础上,将第三行改为以下语句,并运行。

      int c1,c2;



      分析结果




      运行结果


    3. 在(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;

}

(三)调试程序

要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。

  1. 行 号 #include <stdio.h>


    1

    int

    main( )

    2

    {

    int u=v=89;

    3


    printf(“u=%d,v=%d\n”,u,v);

    4


    return 0;

    5

    }



    错 误 在 行

    应改为:

    调试正确后

    的运行结果

    输出结果:

    (四)编写程序

    1. 编写一个程序,从键盘输入某电视机的价格,再输出该价格打 7 折后的价

      格。

      分析:必须设计一个实型变量接受从键盘输入的值,输入、输出应该有提示。

    2. 编写一个程序, 求一元一次方程ax+b=0 的根。

      分析:a、b 的值从键盘输入,输入时 a 的值不能为 0(无解),方程的根即 x的值为:-b/a

      四、分析总结与讨论

      对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


      实验 1.3 算术运算与赋值运算

      一、实验目的

      1. 掌握算术运算符和算术表达式

      2. 熟练掌握赋值运算符、复合的赋值运算符

      3. 熟练掌握自增 1 和自减 1 运算符。

      4. 熟练掌握顺序结构的程序设计,能够编写简单的应用程序。

二、实验学时数

2 学时

三、实验步骤及内容编写程序

  1. 编程序计算数学表达式:b2 -4ac,a,b,c 的值从键盘输入。

  2. 编程序计算 298 秒是几分几秒。

    提示: 设 int x=298; 再定义两个变量存放分( m )、秒(s) 值; 则: m=x/60;s=x%60;

  3. 从键盘输入一个三位数,求各位数字之和。例如,输入的三位数为 358,则输出结果为 3+5+8=16 。

    提示: 题目的关键是要求出该数的个、十、百位上的数字,可利用 C 语言整数相除,结果仍为整数的特点。若设该数为data,它的个、十、百位为g、s、 b,则b=data/100 ;s=(data-b*100)/10;g=data%10

  4. 用赋值语句表达:a 的值为 2,b 的值比 a 多 2,c 的值比 b 的值多 2,并输出a,b,c 的结果。请编出完整程序验证。

  5. 假设变量 a 和 b 均为整型,以下语句可以不借助任何变量把 a、b 中的值进行交换。请先填空,再编出完整程序验证。

    a+= ;(a 为 a 、 b 之 和 ) b=a- ;a-= ;


  6. 编写一个程序,其功能为:从键盘上输入一个浮点数,然后分别输出该数的整数部分和小数部分。

    分析:若输入的浮点数存入 fd 变量,则可用强制类型转换运算符,将输入的该数的整数部分取出:zhs=(int)fd;

  7. 从键盘输入三角形的三条边 a,b,c 的值,计算三角形的面积,程序框架如下:

#include “sdtio.h” #include “math.h” main()

{定义变量

从键盘输入 a,b,c 三条边的值计算 s 的值

计算三角形面积

输出结果

}

四、分析总结与讨论

对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


实验 1.4 逻辑运算及 if 语句

一、实验目的

  1. 掌握关系、条件、逻辑运算符及关系、条件、逻辑表达式

  2. 掌握逗号运算符和逗号表达式

  3. 熟练掌握三种单分支、双分支和多分支if 语句。

  4. 掌握if 语句的嵌套。

二、实验学时数

2 学时

三、实验步骤及内容

(一)阅读程序

  1. 分析程序运行结果: #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;

    }


    分析结果


    运行结果


  2. 输入并运行以下程序,观察运行结果。 #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;

    }


    分析结果


    运行结果


  3. 输入并运行以下程序,观察运行结果。 #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;

    }


    分析结果


    运行结果


  4. 输入并运行以下程序,观察运行结果。 #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;

}


分析结果


运行结果


(二)编写程序

  1. 输入某学生的成绩(成绩为 100 分制,可以为 89.5,如果输入的成绩不在 0-100 之间,请给出出错提示。),经处理后给出学生的等级,等级分类如下:

    90 分以上(包括 90): A

    80 至 90 分(包括 80):B

    70 至 80 分(包括 70):C

    60 至 70 分(包括 60):D

    60 分 以 下 : E

  2. 输入一个三位的正整数,判断该数是否为水仙花数。(水仙花数的是指一个三位数,其各位数字的立方各等于该数本身。例如:153 是一个水仙花数,因为 153=1^3+5^3+3^3)

  3. 某邮局对邮寄包裹有如下规定:若包裹的长宽高任一尺寸超过 1 米或重量超过 30 千克,不予邮寄;对可以邮寄的包裹每件收取手续费 0.5 元,再加上根据下表按重量 weight计算的邮资,请编写程序计算某包裹的邮寄资费。

  4. 输入一个正整数 n,再输入 n 个学生的成绩,计算平均分,并统计不及格成绩的个

数。

四、分析总结与讨论

对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


实验 1.5 switch 选择结构

一、实验目的

  1. 熟练掌握switch 语句。

  2. 掌握省略 break case 语句的执行方式。

  3. 比较 if 语句的嵌套及 ifswitch 多路分支语句。

二、实验学时数

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;

}


分析结果


运行结果


(二)完成程序

要求:按照给定题目要求,参照出现的语句,填写程序空白处。

image

  1. 以下程序实现的功能是: -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;

    }

  2. 用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. 输入某年某月某日,判断这一天是这一年的第几天?

    程序分析:以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)名称。

    1. 己知某公司员工的保底薪水为 500,某月所接工程的利润 p 与利润提成的关系如下:(计量单位:元)(选作)

      p<=1000 没 有 提 成

      1000<p<=2000 提 成 10%

      2000<p<=5000 提 成 15%

      5000<p<=10000 提 成 20%

      10000<p 提 成 25%


    2. 编写程序实现运输公司对用户计算运费。路程(s)越远,每公里运费越低。

    3. 考虑一个自动售货机,提供如下选择: [1]矿泉水

  1. 巧克力

  2. 爆米花

  3. 果汁

  4. 显示购买商品的数量

  5. 退出系统

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 2 循环结构及数组

    一、实验目的

    1. 掌握while ,do-while,for 循环语句的使用与不同循环结构的转换。

    2. 理解循环嵌套的使用。

    3. 掌握一维数组的定义、初始化、引用和输入输出。

    4. 会使用二维数组和字符数组。

二、实验学时数

8 学时


实验 2.1 循环结构

一、实验目的

  1. 掌握while ,do-while,for 循环语句的使用与区别;

  2. 掌握循环条件、循环体、循环终止等循环要素;

  1. 理解循环执行过程。

  2. 熟练使用循环语句编写程序。

二、实验学时数

2 学时

三、实验步骤及内容

(一)阅读程序

  1. #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;

    }

    分析结果



    运行结果


  2. #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;

}

分析结果


运行结果


(二)调试程序

要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。

  1. 下面程序的功能是计算n!

    行 号 #include<stdio.h>

    1. int main()

    2. { int i,n,s=1;

    3. 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 实现:

  1. 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。可以按以下的规律将电文变成密码:将字母 A 变成字母 Ea 变成 e,即变成其后的第 4 个字母,W 变成 AX 变成 BY 变成 CZ 变成 D。字母按上述规律转换,非字母字符不变。

  2. 计算 120 之间的奇数之和和偶数之和。

do…while 循环实现

1.日本一位中学生发现一个奇妙的定理,请角谷教授证明,而教授无能为力,于是产生角谷猜想,猜想的内容是:任给一个自然数,若为偶数除以 2,若为奇数则乘以 3 1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为 1,请编程验证。 2.统计一个整数的位数。从键盘输入一个整数,统计该数的位数。例如,输入 12345,输出 5;输入-99,输出 2

For 循环实现

  1. 马克思手稿里有一道有趣的数学问题:有 30 个人,其中有男人、女人和小孩,在一家

    饭馆吃饭共花了 50 先令:每个男人花 3 先令,每个女人花 2 先令,每个小孩花 1 先令,问男人、女人和小孩各有几人?

  2. 有一对兔子,从出生后第三个月起每个月都生一对小兔子,小兔子长到第三个月后每月又生一对小兔子,假如兔子都不死,问 20 个月内每个月的兔子总数为多少?

  3. 输入一批学生的成绩,找出最高分。

循环嵌套

1.计算 1+2+3+…+100!。要求使用嵌套循环。

  1. 三对情侣参加婚礼,三个新郎为 ABC,三个新娘为 XYZ,有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A 说他将和 X 结婚;X 说他的未婚夫是 CC 说他将和 Z 结婚,这人听后知道他们在开玩笑,全是假话,请编程找

    出谁将和谁结婚。

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 2.2 数组一:一维数组

    一、实验目的

    1. 掌握一维数组的定义。

    2. 掌握一维数组的初始化。

    3. 掌握一维数组的引用。

    4. 熟练对一维数组元素进行输入输出。

二、实验学时数

2 学时

三、实验步骤及内容

(一)阅读程序

  1. #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. 有一个含有 20 个元素的整型数组,程序要完成以下功能:

    1. 调用 C 库函数中的随机函数给所有元素赋予 0~49 的随机数。

    2. 输出数组元素的值,5 个元素为一行。

    3. 按顺序对下标为奇数的元素求和。程序


  2. 将一个长度为 N 的一维数组中的元素按颠倒的顺序重新存放,注意在操作时,只能借助一个临时存储单元而不得另外开辟数组。

    程序


  3. 试编制程序使数组中的数按照从小到大的次序排列。(起泡法)

    程序

    四、分析总结与讨论

    1、对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。

    2、总结每个实验,通过实验,分析定义与引用数组的区别。


    实验 2.3 数组二:二维数组

    一、实验目的

    1. 掌握二维数组的定义。

    2. 掌握二维数组的引用

    3. 掌握二维数组的初始化。

    4. 熟练对二维数组元素进行输入输出。

二、实验学时数

2 学时

三、实验步骤及内容

()阅读程序

  1. #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;

    }

    分析结果


    运行结果


  2. #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

  1. 2*3 的矩阵(二维数组)a,转置后存入 3*2 的矩阵 b 中。

  2. 3*4 矩阵所有外围元素之和。

  3. 定义一个矩阵,从键盘输入数据为它赋值,然后找出矩阵中的最大最小元素及其所在的行号和列号。

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 2.4 数组三:字符数组

    一、实验目的

    1. 掌握字符数组的定义。

    2. 掌握字符数组的引用。

    3. 掌握字符数组的初始化。

    4. 熟练对字符数组元素进行输入输出。

    5. 掌握常用的字符处理函数。

二、实验学时数

2 学时

三、实验步骤及内容

()阅读程序

  1. #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;

    }

    分析结果


    运行结果


  2. #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;

    }

    分析结果


    运行结果


  3. #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;

}

分析结果


运行结果


()完成程序

要求:依据题目要求,分析已给出的语句,填写空白但是不要增行或删行,改动程序的结构

  1. 下面程序的功能是将字符串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;

    }

  2. 从键盘输入 :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;

}

()调试程序

要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果

  1. 行号 #include <stdio.h> int main()

    1. { char a[ ] ;

    2. int i, len=0 ;

    3. a=“C Language Program” ; 4 for (i=0;a[i]!=‘ \0 ’;i++) 5 len++;

      1. printf(“%s ,%d\n”,a,len) ;

        错 误 在 行

        应改为:

        调试正确后

        的运行结果

        输出结果:

      2. return 0; 8 }


  2. 下面程序的功能是:将字符数组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

    }



    错 误 在 行

    应改为:

    调试正确后

    的运行结果

    输出结果:

  3. 调试下列程序,使之具有如下功能:任意输入两个字符串(如:"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;}

  1. printf("a=%s,b=%s\n",a,b);

  2. return 0;

13 }

错 误 在 行

应改为:

调试正确后的运行结果

输入数据: abc123 china

输出结果:

程序中的 strlen 是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。


()编写程序

P120

  1. 输入一行文字,最多有 80 个字符。要求分别统计其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

  2. 编写一个程序,将字符串 str1 复制到 str2 中(不能用 strcpy 函数),并显示出来。

  3. 输入三个字符串,要求找到其中的最大者。四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 3 函数与自定义数据类型

    实验目的

    1. 掌握函数的声明、定义及调用形式及应用。

    2. 掌握函数形参和实参的使用和传值调用,理解传址调用。

    3. 掌握结构体类型变量的定义和使用。

实验学时数

  1. 学时


    实验 3.1 函数一:函数的定义、调用和声明

    实验目的

    1. 掌握函数的声明形式及应用。

    2. 掌握函数的定义形式及应用。

    3. 掌握函数的调用形式及应用;

    实验学时数

    2 学时

    实验步骤及内容

    ()阅读程序

    1. #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;

      }

      分析结果


      运行结果


    2. #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);

分析结果


运行结果


}


()完成程序

要求:依据题目要求,分析已给出的语句,填写空白但是不要增行或删行,改动程序的结构

  1. 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行#include <stdio.h>


    image

    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) ; }

  2. 以下函数的功能是:求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>

    1. void func ( float a , float b )

    2. int main()

    3. { float x , y ;

    4. float z ;

5 scanf(“%f , % f”,&x ,&y);

  1. z = func ( x , y ) ;

  2. printf ( “z=%f\n” ,z ) ; return 0; 8 }

  1. void func ( float a , float b )

  2. { float c ;

  3. c = a * a + b * b ;

    正确

    运行结果:


    错误

    错误所在行:

    应改为:

  4. 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 }

  1. int main()

  2. { int x;

8 char s1[50],s2[50];

9 scanf("%s%s",s1,s2);

  1. x= sstrcmp(s1,s2);

  2. printf("%d\n",x);

    image

    应改为:

    错误所在行:

    错误

    运行结果:

    正确

  3. return 0; 13 }


(四)按照要求写函数

  1. 以下程序通过调用 max()函数求 a,b 中的大数,请写出 max()函数的定义。 #include "stdio.h"

    main( )

    {int a, b, c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d",c);

    }


  2. 下面的函数可以输出数字金子塔,请写出 main()函数调用它,输出 3、5、7以内的数字金字塔。

    #include "stdio.h" void pyra(int n)

    {int i,j; for(i=1;i<=n;i++)

    { for(j=1;j<=n-i;j++) printf(" ");

    printf("%d ",i);

    printf("\n");

    }

    }

  3. 以下程序求三角形的面积,请写出 pb 函数和 area 函数的定义。 #include "math.h"

    #include "stdio.h" main(){

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

    if(pb(a,b,c)) printf("area=%d",area(a,b,c)); else printf(“input error!);

    }

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 3.2 函数二:函数的参数传递 2

    实验目的

    1. 掌握形参和实参的使用和传值调用;

    2. 理解函数的地址传递。

实验学时数

2 学时

实验步骤及内容

(一)完成程序

  1. 完善成绩统计程序,写一个函数求成绩的最高分,再写一个函数求不及格人数,在 main()函数中调用它们。

    分析:求成绩最高分的函数基本框架如下: maxf(int s[],int n)

    {int max,i;

    return max;

    }

    求不及格人数的函数与 maxf()函数基本框架相似。

  2. 已有如下 main()函数,它调用 add1 函数使 a 数组的各个元素加 1,请写出 add1 函数的定义

#include <stdio.h> main()

{int i;

static int a[]={0,1,2,3,4,5,6,7,8,9};

add1(a,10); for(i=0;i<10;i++) printf("%d ",a[i]);

}


()编写程序

  1. 编写一个函数,选出能被 3 整除且至少一位是 5 的两位数,用主函数调用这个函数,并输出所有这样的两位数。

  2. 编写函数判断某数是否为素数,如果是素数,则返回 1,否则返回 0,在 main 函数中调用该函数,根据返回值判断是否为素数。

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 3.3 函数三:函数的嵌套和递归

    实验目的

    1. 理解函数的嵌套与递归调用,掌握递归函数的编写规律。

    2. 掌握函数的嵌套调用。

    3. 理解变量的作用域,掌握局部变量和全局变量。

实验学时数

2 学时

实验步骤及内容

(一)完成程序

  1. main()函数中随机产生 10 个数,调用 even()函数判断是否为偶数,是偶数统计偶数的个数,是奇数,再调用 prime()函数判断是否为素数,输出其中的奇数,素数。请填空。

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

    {a=rand()%50;

    if(even( )) cn++;

    }

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

    }

  2. 有五个人坐在一起,问第五个人多少岁?他说比第四个人大 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));}变量的作用域

  3. 已有如下 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; }

  4. 以下程序中 main()函数调用 avmaxmin (),求出数组中的平均值、最大值和最小值,

    请写出 maxmin 变量的定义并填空。

    #include "stdio.h" #define N 10


    image

    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);

    }

    变量的存储类型:

    1. 分析以下程序,写出程序的结果

      void test_static()

      {static int vs=0; printf(static=%d\n,vs);

      ++vs;}

      main()

      {int i;

      for(i=0;i<4;i++) test_static();}

    2. 已有如下 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));}

四、分析总结与讨论

对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


实验 3.4 自定义数据类型

实验目的

1. 掌握结构体类型变量的定义和使用; 2.掌握共用体的概念与使用。

实验学时数

2 学时

实验步骤及内容

(一) 阅读程序

  1. 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]);

    }

    输入两个整数 1000020000 u.i[0]u.i[l],分析运行结果。

    分析结果


    运行结果



  2. scanf 语句改为:

    scanf("ld",&u.b)

    输入 60000 b,分析运行结果

    分析结果


    运行结果



    (二) 找出以下程序的错误并改正。(共有 5 处错误)

    #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);

    }

    (三) 编程题

    1. 有 10 个学生,每个学生的数据包括学号、姓名、3 门课的成绩,从键盘输入 10 个学生数据,要求用结构体解决,打印出 3 门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3 门课的成绩、平均分数)。

      要求用input 函数输入 10 个学生数据;用 average 函数求总平均分;用 max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。

      四、分析总结与讨论

      对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


      实验 4 指针

      实验目的

      1. 掌握指针变量的定义、赋值和引用。

      2. 初步掌握指向数组的指针的定义和使用。

      3. 理解数组与指针的关系并能够利用指针解决数组的简单问题。

      4. 理解字符串与指针的关系并能够利用指针处理字符串的简单问题。

实验学时数

6 学时


实验 4.1 指针一:指针的定义及运算

实验目的

  1. 掌握指针变量的定义和赋值;

  2. 掌握指针变量的引用;

实验学时数

2 学时

实验步骤及内容

(一)阅读程序

  1. #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;

    }

    分析结果


    运行结果


  2. #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;

    分析结果


    运行结果


    }


    (二)调试程序

    要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。

    1. 行号 #include <stdio.h>

      1. int main()

      2. { int a , b ;

      3. int *p ,*q ;

      4. 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. }


(三)编写程序

  1. 一个数组中的 15 个值已经按升序排列存放,输入一个数,编程查找是否

    有该数,有显示其所在的位置,没有,显示“No Found”,通过指针实现。

    四、分析总结与讨论

    对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


    实验 4.2 指针二:指向数组的指针

    实验目的

    1. 理解数组与指针的关系并能够利用指针解决数组的简单问题。

    2. 掌握指向一维数组的指针

    3. 理解指向二维数组的指针

实验学时数

2 学时

实验步骤及内容

(一) 阅读程序

  1. #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");

    }

    分析结果


    运行结果


  2. #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;

    }

    分析结果


    运行结果


  3. #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 的人退出圈子,编程求最后留下的人的编号是多少。

四、分析总结与讨论

对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。


实验 4.3 指针三:用指针操作字符串

实验目的

  1. 理解字符串与指针的关系;

  2. 能够利用指针处理字符串的简单问题。

实验学时数

2 学时

实验步骤及内容

(四) 阅读程序

  1. #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;

    }

    分析结果


    运行结果



  2. #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++;

    }

    }


    分析结果


    运行结果



    (二)完成程序

    要求:依据题目要求,分析已给出的语句,填写空白但是不要增行或删行,改动程序的结构

    1. 以下程序通过指针实现求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;

      }

    2. 下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。

      #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;

      }

    3. 编写一个程序,实现将任意输入的两个字符串,连接成一个字符串,在子函数中实现连接,形参用字符指针变量,在 填写正确内容。

#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];

  1. void swap();

  2. printf("Please enter three string:\n");

  3. gets(str1); gets(str2);gets(str3);

  4. if (strcmp(str1,str2)>0) swap(str1,str2);

  5. if (strcmp(str1,str3)>0) swap(str1,str3);

  6. if (strcmp(str2,str3)>0) swap(str2,str3);

  7. printf("\n");

  8. printf("%s\n%s\n%s\n",str1,str2,str3);

  9. return 0;

13 }

  1. void swap(char *p1,char *p2)

  2. { char *p;

16 p=p1;p1=p2;p2=p;

17 }

运行结果

错 误 在 行

应改为:

四、分析总结与讨论

对本次实验及相关知识点进行分析总结,列出遇到的问题的解决办法。