C语言集中上机实验报告

C语言集中上机实验报告

学   生:                  

学   号:                  

班   级:                  

专   业:                 

 重庆邮电大学移通学院

 20##年6月


第一章  循 环

1.1  实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法

(2)掌握字符数组和字符串函数的使用;

(3)掌握与数组有关的算法。

1.2 实验基本内容

1.1打印出以下图案

*

*   *   *

*   *   *   *   *

*   *   *   *   *   *   *

*   *   *   *   *

*   *   *

*

题目分析:运用数组初始化打印出图形。

程序:

#include"stdio.h"

void main()

{

       char a[7][7]={{' ',' ',' ','*'},{' ',' ','*','*','*'},{' ','*','*','*','*','*'},{'*','*','*','*','*','*','*'},{' ','*','*','*','*','*'},{' ',' ','*','*','*'},{' ',' ',' ','*'}};

int i,j;

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

{

for(j=0;j<7;j++)

printf("%c",a[i][j]);

printf("\n");

}

}

运行结果:

1.2编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5)

1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

1 2 3 4 5 4 3 2 1

1 2 3 4 3 2 1

1 2 3 2 1

1 2 1

1

题目分析:先用for循环依次打印出上半部分的各行元素,再用for循环打印下半部分的各行元素。

程序:

#include"stdio.h"

void main()

{

       int i,j,n;

       printf("input n:");

       scanf("%d",&n);

for(i=1;i<=n;i++)

{

for(j=1;j<=i;j++)

printf("%-3d",j);

for(j=i-1;j>=1;j--)

printf("%-3d",j);

printf("\n");

}

for(i=n-1;i>0;i--)

{

for(j=1;j<=i;j++)

printf("%-3d",j);

for(j=i-1;j>=1;j--)

printf("%-3d",j);

printf("\n");

}

}

运行结果:

思考题:

1题A

2题D

3题C

4题2.0

5题8

6题36

实验总结:通过试验熟悉了for循环语句的使用。

第二章  数 组

2.1  实验目的

(1) 掌握一维数组和二维数组的定义、赋值和输入输出的方法

(2) 掌握字符数组和字符串函数的使用;

(3) 掌握与数组有关的算法。

2.2  实验基本内容

1.1 打印以下图案:

*  *  *  *  *

   *  *  *  *  *

      *  *  *  *  *

         *  *  *  *  *

            *  *  *  *  *

题目分析:定义一个五行九列的数组,分别用双重for循环打印出*和空格。

程序:

#include "stdio.h"

void main()

{

char a[5][9];

int i,j;

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

{

for(j=i;j<=i+5;j++)

a[i][j]='*';

}

for(i=1;i<5;i++)

{

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

a[i][j]=' ';

}

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

{

for(j=5+i;j<9;j++)

a[i][j]=' ';

}

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

{

for(j=0;j<9;j++)

printf("%c",a[i][j]);

printf("\n");

}

}

运行结果:

1.2 输入4×4的数组,编写程序实现:

(1)求出对角线上各元素的和;

(2)求出对角线上行、列下标均为偶数的各元素的积;

(3)找出对角线上其值最大的元素和它在数组中的位置。

题目分析:主对角线上元素的行下标和列下标相等,负对角线上行下标和列下标的和等于3,然后运用for循环求出对角线上元素的和,找出对角线上元素的最大值。      

程序:

#include "stdio.h"

void main()

{

int a[4][4],i,j,sum=0,s=1,max=0,m,n;

printf("输入4×4的数组:\n");

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

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

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

   for(j=0;j<4;j++)

     if(i==j||i+j==3)

sum+=a[i][j];

for(i=1;i<4;i++)

   for(j=1;j<4;j++)

     if(i%2==0&&j%2==0)

     s*=a[i][j];

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

for(j=0;j<4;j++)

  if(i==j||i+j==3)

         if(a[i][j]>max)

               {

max=a[i][j];m=i;n=j;

}

printf("对角线上各元素的和%d\n对角线上行、列下标均为偶数的各元素的积%d\n对角线上其值最大的元素%d\n它在数组中的位置%d行%d列\n",sum,s,max,++m,++n);

}

思考题:

1题:A

2题:B

3题:C

4题:10010

5题:D

6题:5 7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1 5 7

7 4 8 9 1 5

实验总结:通过实验进一步掌握数组的概念,会定义和使用数组和数组的输入和输出。

第三章  函 数

3.1  实验目的

(1) 掌握定义函数的方法;

(2) 掌握函数实参与形参的对应关系以及“值传递”的方式;

(3) 掌握函数的嵌套调用和递归调用的方法;

(4) 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。

(5) 学习对多文件程序的编译和运行。

3.2  实验基本内容

1 编程

1.1  写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出“1└┘9└┘9└┘0”。

题目分析:用求余数依次求出各位数字再打印。

程序:

#include "stdio.h"

fun(int a)

{int i,j,m,n;

i=a/1000;

j=a/100%10;

m=a/10%100%10;

n=a%1000%100%10;

printf("%d %d %d %d\n",i,j,m,n);

}

void main()

{

int a;

       printf("输入一个四位数:");

scanf("%d",&a);

fun(a);

}

运行结果:

1.2  用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。

题目分析:用递归法依次对10求余,然后加上字符0,再打印出字符串。

程序:

#include "stdio.h"

void fun(int m)

{

if(m>=0&&m<=9)

printf("%c ",m+'0');

if(m>=10)

{

fun(m/10);

printf("%c ",m%10+'0');

}

}

void main()

{

int n;

printf("输入一个整数:");

scanf("%d",&n);

printf("输出字符串:");

fun(n);

printf("\n");

}

运行结果:

思考题:

1题:D

2题:B

3题:0 2 4 6 8 10 12 14 16 18

     0 2 4 6 8 10 12 14 16 18

4题:-125=-5*5*5

5题:i=5 i=2 i=2 i=4 i=2

6题:求出所有三位数中,其各位数字的立方和等于其本身的数。

实验总结:通过试验熟悉了对函数的使用,掌握了函数的定义形式。

第四章  指 针

4.1  实验目的

(1)  掌握指针的概念,掌握定义和使用指针变量的方法。

(2)  掌握使用数组的指针和指向数组的指针变量。

(3)  掌握使用字符串的指针和指向字符串的指针变量。

(4)  学习对多文件程序的编译和运行。

4.2 完成典型题目,分析遇到的困难和实验中的收获。

1 编程

1.1  编一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。

题目分析:先对指针数组初始化,再对输入数减一再用数组输出对应对应的英语月数。

程序:

#include "stdio.h"

void main()

{

       char *p[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

int n;

printf("输入月份号:");

scanf("%d",&n);

       printf("输出该月的英文月名:%s\n",p[n-1]);

}

运行结果:

1.2  有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

题目分析:

程序:

#include "stdio.h"

#include "string.h"

void fun(char s1[80],int m)

{

int i,j;

char s2[80];

 for(j=0,i=m;j<=(strlen(s1)-m)&&i<=strlen(s1);j++,i++)

s2[j]=s1[i];

puts(s2);

}

void main()

{

 char s1[80];

int m,n;

printf("输入一个字符串:\n");

gets(s1);

printf("从第几个字符开始复制:\n");

scanf("%d",&m);

n=m-1;

printf("输出的字符串:\n");

fun(s1,n);

printf("\n");

}

运行结果:

思考题:

1题:C

2题:A

3题:C

4题:B

5题:D

6题:5

实验总结:通过试验熟悉使用和定义指针。

第五章  综合练习

5.1  实验目的

(1)  掌握指针的概念,掌握定义和使用指针变量的方法。

(2)  掌握使用数组的指针和指向数组的指针变量。

(3)  掌握使用字符串的指针和指向字符串的指针变量。

(4)  学习对多文件程序的编译和运行。

5.2  实验基本内容

1.1  编写一个程序计算下式之和。

1+(1+2)+(1+2+3)+(1+2+3+4)+…...+(1+2+3+4+5+6+7+8+9+10)

题目分析:用for循环编写一个函数求1+2+…...+n的和,然后再编写一个函数求1+(1+2)+(1+2+3)+(1+2+3+4)+…...+(1+2+3+4+5+6+7+8+9+10) 的和。

程序:

#include "stdio.h"

int fun(int j)

{

       int i,s=0;

for(i=1;i<=j;i++)

s+=i;

return s;

}

 int fun1(int n)

{

    int j,sum=0;

for(j=1;j<=n;j++)

sum+=fun(j);

return sum;

}

void main()

{

int s,n;

 printf("please input n:\n");

scanf("%d",&n);

s=fun1(n);

printf("输出结果:%d\n",s);

}

运行结果:

1.2 在主函数中输入一个字符串,然后删除该字符串里面所有的空格,并打印删除空格后的字符串。(用指针)

题目分析:定义两个数组,用for循环判断是否为空格,若不为空格则将字符输入另一个数组,最后打印出该数组。

程序:

#include "stdio.h"

#include "string.h"

void main()

{

       char a[40],b[40];

int i,j=0;

printf("input a:");

gets(a);

for(i=0;a[i]!='\0';i++)

if(a[i]!=' ')

{

       b[j]=a[i];j++;

}

b[j]='\0';

printf("output b:");

puts(b);

}

运行结果:

思考题:

1题:D

2题:B

3题:A

4题:6

5题:976531

实验总结:通过实验对c语言的函数定义,数组的使用有了进一步的认识,对各种语句更能熟悉的运用。


集中上机总结

     通过集中上机试验,熟悉各种数据的定义,一维和二维数组的定义、赋值和输入输出, 字符数组和字符串数组的使用。了解了自己在c语言中各方面的不足之处。进一步掌握函数、指针、数组、for、while、do、、、while等循环语句的使用,熟练掌握各种语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则。掌握双重for循环控制数组的输入输出,掌握循环结构的嵌套使用,利用循环语句实现循环结构。掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

相关推荐