c语言程序设计实验报告(数组)

时间:2024.3.31

 C语言程序设计  实验报告

专业  计算机 班级计算机卓工         日期 20121231成绩            

实验组别        8次实验;指导教师  李开

学生姓名 徐钦振   学号 U201215120    

实验名称  指针实验

一、实验目的

(1)熟练掌握指针的使用,赋值与使用。

(2)掌握用指针引用数组的元素,熟练指向数组的指针的使用。

(3)熟练掌握字符数组与字符串的使用。

(4)掌握指针函数与函数指针的使用。

(5)掌握带有参数的main函数的使用。

二、实验内容及要求。

1.源程序改错

 下面的源程序中是否存在问题?如果存在,原因是什么?如果存在错误,请改正并输出正确的结果。

源程序:

#include<stdio.h>

int main(void)

{

    float *p;

    scanf("%d",p);

    printf("%f\n",*p);

    return 0;

}

2.源程序修改,完善与替换。

(1)下面的源程序的功能是,通过函数指针和菜单选择来调节用字符串拷贝函数或字符串连接函数。请在源程序中的下划线处填写正确的表达式,完善程序。

源程序:

#include<stdio.h>

#include<string.h>

int main(void)

{

    _____________________

    char a[80],b[80],c[160],*result=c;

    int choice,i;

    do{

        printf("\t\t1 copy string.\n");

        printf("\t\t2 connect string.\n");

        printf("\t\t3 exit.\n");

        printf("\t\t2 input a number(1-3)please!\n");

        scanf("%d",&choice);

      }while(choice<1||choice>5);

      switch(choice){

          case 1:

                 p=strcpy;

                 break;

          case 2:

                 p=strcat;

                 break;

          case 3:

                 goto down;

      }

      getchar();

      printf("input the first string please!\n");

      i=0;

      __________________________________________

      printf("input the second string please!\n");

      i=0;

      __________________________________________

      result=______________________(a,b);

      printf("The result is %s\n",result);

      down:

      ;

      return 0;

}

3.跟踪调试源程序

请按下面的要求对所给的源程序进行操作,并回答问题和排除错误。

(1)按照单步执行源程序,进入strcpy时,watches窗口中的s为何值?返回main函数时,s为何值?

(2)排除源程序的错误,并输出正确的答案。

源程序:

#include<stdio.h>

char *strcpy(char *,char *);

int main()

{

    char a[20],b[60]="There is a boat in the lake.";

    printf("%s\n",strcpy(a,b));

    return 0;

}

char *strcpy(char *s,char *t)

    while(*s++=*t++);

    return(s);

}

4.程序设计

编写并上机调试运行能够实现以下功能的程序或者函数。

(1)已知一个长整型变量占4个字节,其中每个字节又分为高四位和低四位。是编写一个程序,从该整型的高字节开始,一次取出每个字节的高四位为低四位,并以数字字符的形式进行显示。

(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。是编写一个函数,他的每一行中连续的多个空格字符压缩为一个空格字符。在调用函数时输入压缩后的各行,空行不予输出。

(3)编写一个程序,输入n个数,排列后输出。

5.选做题

编写并上机调试运行能够实现以下功能的程序或者函数。

1)设有N位整数和M位小数的两个数据ab。编写

计算a+b并输出结果。

(2)编写一个使用复杂申明的程序。

(三)指向main函数的参数

选择“project/set programs’arguments...”菜单命令,即可打开图2.12所示的对话框,在文本框中输入main函数的参数。注意只输入命令行中文件名后的参数,文件名不输入。

              (图2.12   输入main函数的参数)

(三)实验步骤以及结果

1.源程序改错:

存在错误,造成了空指针,并且scanf函数的格式不对应。

正确的源程序应为:

#include<stdio.h>

int main(void)

{

    float a,*p;

    p=&a;

    scanf("%f",p);

    printf("%f\n",*p);

    return 0;

}

2.源程序修改,完善与替换。

正确的源程序为:

#include<stdio.h>

#include<string.h>

int main(void)

{

    char * (*p)(char *,char *);

    char a[80],b[80],c[160],*pa=a,*pb=b,*result=c;

    int choice,i;

    do{

        printf("\t\t1 copy string.\n");

        printf("\t\t2 connect string.\n");

        printf("\t\t3 exit.\n");

        printf("\t\tinput a number(1-3)please!\n");

        scanf("%d",&choice);

      }while(choice<1||choice>=4);

      switch(choice){

          case 1:

                 p=strcpy;

                 break;

          case 2:

                 p=strcat;

                 break;

          case 3:

                 goto down;

      }

      getchar();

      printf("input the first string please!\n");

      i=0;

      gets(pa);

      printf("input the second string please!\n");

      i=0;

      gets(pb);

      result=(*p)(a,b);

      printf("The result is: %s\n",result);

      down:

      ;

      return 0;

}

运行的结果为:

3.跟踪调试源程序

进入strcpy时,s的值为:0x28fefc

返回main函数时,s的值为:0x28fedd

修改之后的正确的源程序为:

#include<stdio.h>

char *strcpy(char *,char *);

int main()

{

    char a[20],b[60]="There is a boat in the lake.";

    printf("%s\n",strcpy(a,b));

    return 0;

}

char *strcpy(char *s,char *t)

{

    char *p=s;

    while(*s++=*t++);

    return(p);

}

4.程序设计

(1)源代码为:

#include<stdio.h>

int main(void)

{

    long x=0x1234ABCD,k;

    char *p=(char *)&x;

    char uphalf,lowhalf;

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

    {

        lowhalf=(*(p+3))&0x0f;

        if(lowhalf<10)

          lowhalf|='0';

        else lowhalf=(lowhalf-10)+'A';

        uphalf=(*(p+3)>>4)&0x0f;

        if(uphalf<10)

          uphalf|='0';

        else uphalf=(uphalf-10)+'A';

        p--;

        printf("%c\t%c\n",uphalf,lowhalf);

    }

    return 0;

}

运行结果为:

(2)源程序为:

#include<stdio.h>

#define N 3

void getid(char *);

int main()

{

   char a[N][80],*p[N];

   int i;

   printf("请输入n行字符\n");

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

   {

       gets(a[i]);

       p[i]=a[i];

   }

   printf("输出的结果是:\n");

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

    {

        getid(p[i]);

        printf("\n");

    }

   return 0;

}

void getid(char *ps)

{

    int b=0;

    putchar(*ps);

    while(*ps++)

    {

        if(*ps==' ')

        {

            if(b==0)

            {

                b=1;

                putchar(*ps);

            }

        }

        if((*ps)!=' ')

        {

            b=0;

            putchar(*ps);

        }

    }

}

运行的结果为:

程序(3):

源代码为:#include<stdio.h>

#include<stdlib.h>

#include<string.h>

void sort1(int *,int );

void sort2(int *,int );

int main(int argc,char *argv[])

{

    void (*p1)(int *,int n);

    void (*p2)(int *,int n);

    int a[argc-2],b[argc-1],i;

    p1=sort1;

    p2=sort2;

    if(argc>1&&strcmp(argv[1],"-d")==0)

    {

       for(i=0;i<argc-2;i++)

       a[i]=atoi(argv[i+2]);

       p1(a,argc);

       for(i=0;i<argc-2;i++)

       printf("%d\n",a[i]);

    }

    else

    {

       for(i=0;i<argc-1;i++)

       b[i]=atoi(argv[i+1]);

       p2(b,argc);

       for(i=0;i<argc-1;i++)

       printf("%d\n",b[i]);

    }

    return 0;

}

void sort1(int a[],int argc)

{

    int j,k;

    for(j=0;j<argc-2-1;j++)

    for(k=0;k<argc-2-j-1;k++)

    {

        int t;

        if(a[k]<a[k+1])

        t=a[k],a[k]=a[k+1],a[k+1]=t;

    }

}

void sort2(int a[],int argc)

{

    int j,k;

    for(j=0;j<argc-1-1;j++)

    for(k=0;k<argc-1-j-1;k++)

    {

        int t;

        if(a[k]>a[k+1])

        t=a[k],a[k]=a[k+1],a[k+1]=t;

    }

}

运行的结果为:

#include<stdio.h>

#define M 2

#define N 5

void averageput(float *);/*计算每个学生各门课程的平均成绩*/

float *averageall(float *);/*计算全班每门课程的平均成绩*/

void below(float *,float *);

int main()

{

    char a[M][10],(*pa)[10]=a;

    int i,j;

    printf("请输入各个课程的名字:\n");

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

    scanf("%s",*pa+j);

    float b[N][M];

    float *pb1=&b[0][0];

    float *pd;

    printf("请输入各个学生的各门课程的成绩:\n");

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

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

    scanf("%f",pb1+M*i+j);

    averageput(pb1);

    printf("\n\n");

    pd=averageall(pb1);

    below(pb1,pd);

    return 0;

}

void averageput(float *p)

{

    float c[N],*pc=c,t=0,*pp=p;

    int i,j;

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

    {

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

      t+=*(pp+M*i+j);

      *(pc+i)=t/M;

      printf("该同学的平均成绩为:%.1f\n",*(pc+i));

      t=0;

    }

}

float *averageall(float *p)

{

    float c[M],*pc=c,*pc2=c,t=0,*pp=p;

    int i,j;

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

    {

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

      t+=*(pp+N*i+j);

      *(pc+i)=t/N;

      printf("该课程的平均成绩为:%.1f\n",*(pc+i));

      t=0;

    }

    return pc2;

}

void below(float *p,float *pd)

{

    int i,j,s[M],m[M],n[M],*ps=s,*pm=m,*pn=n;

    float *pp=p;

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

    {

        *(ps+i)=0;

        *(pm+i)=0;

        *(pn+i)=0;

        for(j=0;j<N;j++){

        if(*(pp+N*i+j)<*(pd+i))

        *(ps+i)+=1;

        if(*(pp+N*i+j)<60.0)

        *(pm+i)+=1;

        if(*(pp+N*i+j)>=90.0)

        *(pn+i)+=1;}

        printf("低于平均成绩的人数为:%d\n",*(ps+i));

        printf("不及格的人数为:%d\n",*(pm+i));

        printf("高于90分的人数为:%d",*(pn+i));

    }

}

运行的结果为:

(四):实验体会

有点难,但是绝对有挑战性;好好做就可以做出来。人就是这样成长起来的。

更多相关推荐:
C语言程序设计实验报告——张蒙蒙

重庆邮电大学移通学院C语言程序设计实验报告学生张蒙蒙学号0214110122班级一班专业数字媒体重庆邮电大学移通学院1重庆邮电大学移通学院目录第一章基础掌握311实验目的错误未定义书签12实验要求313实验基本...

《C语言程序设计》课程实验报告

C语言程序设计课程实验报告学院名称建筑工程学院专业年级土木104学生姓名学号联系电话Email20xx年4月13日

C语言程序设计实验报告——实验3 最简单的C程序设计

凯里学院C语言程序设计实验报告专业年级班,学号姓名成绩合作者实验日期年月日指导教师评阅日期年月日实验三最简单的C程序设计一、实验目的:1、掌握C语言的数据类型和变量的声明。2、掌握不同类型数据之间赋值的规律。3…

C语言程序设计实验报告9

C语言程序设计实验报告九专业计算机科学与技术班级卓越工程师班日期20xx年12月23日实验组别第一组成绩第九次实验结构与联合实验指导教师李开学生姓名学号实验名称结构与联合实验一实验目的1熟悉和掌握结构的说明和引...

C语言程序设计实验报告

实验报告实验名称火车票订票系统信息与通信学院院系电子信息工程专业班第作者学号实验日期20xx年12月29日一实验目的和要求1列车原始信息可以从文件导入或者控制台录入包括车次票数等2客户可以按车次进行列车信息查询...

C语言程序设计实验报告

实验一1includestdiohmainIntabcsa5b4c6sabc3printfadbdcdnsdabcs已知a5b4c6求出s并换行2includestdiohmainintrsscanfdampr...

C语言程序设计实验报告(数组)

C语言程序设计实验报告数组1实验目的1熟练掌握一维数组二维数组的定义初始化和输入输出方法2熟练掌握字符数组和字符串函数的使用3掌握与数组有关的常用算法查找排序等2实验内容编写函数catStrcharstr1ch...

C语言程序设计五猴分桃问题实验报告

课程设计报告学院系专业名称课程设计科目所在班级学生学号学生姓名指导教师完成时间吉林大学珠海学院计算机科学与技术系软件工程C语言程序课程设计10班04121010赵学文郭晓燕20xx年3月5月五猴分桃问题一设计任...

C语言程序设计学生成绩管理系统实验报告 2

福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx02620xx415一实验目的1在编辑应用程序过程中逐步加深对C语言编程的理解2加强实践...

C语言程序设计第四次(2.8)实验报告

C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称实验8指针实验一实验目的1熟练掌握指针的说明赋值使用2掌握用指针引用数组的元素熟悉指向数组的指针...

C语言程序设计第三次2.5实验报告

C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称编译预处理实验一实验目的1掌握文件包含宏定义条件编译assert宏的使用2练习带参数的宏定义条件...

C语言程序设计学生成绩管理系统实验报告

计算机学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师班级姓名学号座号20xx615一实验目的1在编辑应用程序过程中逐步加深对C语言编程的理解2加强实践的能力动手能力同时进一步对所学的知识进...

c语言程序设计实验报告(33篇)