C语言实验报告

时间:2024.4.20

C语言实验报告

1. 编写一个函数pi,其功能是根据以下近似公式求π值:(π*π)/6=1+1/(2*2) +1/(3*3) +… +1/(n*n)。并写一个主函数,调用该函数计算π的值,n在主函数中从键盘输入。要求程序存入test11.c。

设计思路:主要考察函数的调运,以及如何定义函数,函数的运行,此题应该使用一个循环。

调试结果:

 #include<stdio.h>

 #include<math.h>

 main( )

 {

    int m=1,n,s;

     float p=0,t;

    scanf("%d",&n);

  while(m<=n)

    {

    s=1/(m*m);

    p=p+s;

    m++;

    }

    t=sqrt(p*6);

   printf("t=%f",t);

 }

运行结果:

2. 下列程序是将一个数组中的值按逆序重新存放并输出。请输入并完善程序。要求程序存入test12.c。

#include <stdio.h>

void main()

{   int arr[10],i,j,temp;

    printf(“Input value of array:\n”);

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

        scanf(“%d”,   &arr[i]    );

    for(i=0,j=9;i<=j;i++,j--)

        temp=arr[i],arr[i]=    arr[j]    ,arr[j]=temp;

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

        printf(“%4d”,  arr[i]    );

}

设计思路:数组的考察,首先定义一个数组,FOR循环的使用,数组的转换。

运行结果:

3. 在下列程序中,函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符ASCII码差值,当s<t时返回负值。请输入程序并改正程序中带*的行中的错误,使它能够正确的输出结果。要求程序存入test13.c。

#include <stdio.h>

*   int my_cmp(char *s,char *t)

{   while(*s==*t)

*       {   if(*s++==0)

            return(0);

        ++s,++t;

    }

*       return(*s-*t);

}

void main()

{   char *s1,*s2;

*          gets(s1);   

           gets(s2);

    if(my_cmp(s1,s2)==0)

        printf(“EQ”);

    else if(my_cmp(s1,s2)>0)

            printf(“s1>s2”);

    else    printf(“s2>s1”);

}

设计思路:函数的调用,以及while、if语句的使用,如何输入一个字符串,指针的运用。

运行结果:

4. 编写一个程序用来统计学生成绩。其功能包括输入学生姓名和成绩,按成绩从高到低排列打印输出,对前80%的学生定为合格(pass),后20%的学生定为不合格(fail)。要求程序存入test14.c。

设计思路:

调试结果:#include "stdio.h"

#include "malloc.h"

struct student

{

    char name[20];

    float score;

    struct student *next;

};

int n;

struct student *creat(void)

{

    struct student *head,*p1,*p2;

    n=0;

    head=p1=p2=(struct student*)malloc(sizeof(struct student));

    printf("请输入学生姓名:\n");

    scanf("%s",p1->name);

    printf("请输入学生成绩:(成绩为零为结束)\n");

    scanf("%f",&p1->score);

    while(p1->score!=0)

    {

    n++;

    if(n!=1)p2->next=p1;

    p2=p1;

    p1=(struct student*)malloc(sizeof(struct student));

   

    printf("请输入学生姓名:\n");

    scanf("%s",p1->name);

    printf("请输入学生成绩:\n");

    scanf("%f",&p1->score);

    }

    p2->next=NULL;

    return head;

}

struct student *sort(struct student *head)

{

    struct student *p1,*p2,*p;

    int i,j,k;

    k=n;

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

    for(i=0,p=p1=head,p2=head->next; i<k-1-j&&p2!=NULL ;i++,p1=p->next,p2=p1->next)

    {   if(p1->score < p2->score)

        {   if(p==head&&i==0)

            {

                p1->next=p2->next;

                p2->next=p1;

                head=p2;

                p=p2;

            }

            else

            {

                p1->next=p2->next;

                p2->next=p1;

                p->next=p2;

                p=p2;

            }

        }

        else p=p1;

    }

    return(head);

}

void print(struct student *head)

{

    int k, i=1;

    k=n;

    k=k*0.8;

    while(head!=NULL)

    {

    if(i<=k)printf("%s,%f  合格(pass)\n",head->name,head->score);

    else printf("%s,%f  不合格(fail)\n",head->name,head->score);

    head=head->next;

    i++;

    }  

}

void main()

{

    struct student *p;

    p=sort(creat());

    print(p);

}

运行结果:

Test2

1. 编写一个程序计算下列不等式:1+1/2+1/3++1/n>limit所需级数的项数。其中limit是提出的要满足的条件,而所求的是项数n。(例如,当输入limit的值为5时,n的值为83),要求程序存入test21.c。

设计思路:

调试结果:#include"stdio.h"

void main()

{

    int limit;

    float a=0,n,i;

    printf("请输入limit的值\n");

    scanf("%d",&limit);

    for(i=1;;i++)

    {

    a=a+1/i;

    n=i;

    if(a>limit)break;

    }

    printf("n=%f\n",n);

}

设计思路:循环的使用,scanf函数的运用,for语句的运用。

运行结果:

2. 下列程序是一个二维数组行和列的元素互换,存到另一个二维数组中。请输入并完善程序。要求程序存入test22.c。

#include <stdio.h>

void main()

{      int i,j,arr1[2][3]={{2,4,6},{1,3,5}},arr2[3][2];

        printf(“Array arr1:\n”);

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

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

               {     printf(“%5d”,arr1[i][j]);

                        arr2[j][i]  =arr1[i][j];

               }

               printf(“\n”);

        }

        printf(“Array arr2:\n”);

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

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

                      printf(“%5d”,arr2[i][j]);

               printf(“\n”);

        }

}

设计思路:数组元素的转换,for语句的运用,函数的调运,以及对循环的使用。

运行结果:

3. 下列程序的功能是输入一个字符串并将其中从左到右第一个最大的字符与最后一个字符交换。如:“imaastudent123”,交换后为“imaast3dent12u”。请输入并改正程序中带*的行中的错误,使它能够正确的输出结果。要求程序存入test23.c。

#include <stdio.h>

void main()

{     char s[80],max;      int i,k;

*            gets(s);

       max=s[0];

       k=0;

*            for(i=0;s[i]!=’\0’;i++)

*                   if(s[i]> s[0])

                     max=s[i],k=i;

       if(k!=i-1)

*                   s[k]=s[i-1];

           s[i-1]=max;

       puts(s);

}

设计思路:字符串的输入和输出,循环的使用,数组的使用。

运行结果:

4. 编程实现:找出100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt、每个满足条件的I值以及这些I之和sum。

设计思路:

调试结果:#include <stdio.h>

#include <math.h>

void main()

{

    int i,sum=0,j,cnt=0;

    for(i=3;i<=90;i++)

    {

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

            if(i%j==0 || (i+4)%j==0 || (i+10)%j==0)

                break;

           

            if(i==j){

                sum=sum+i;

                cnt++;

                printf("i=%d\n",i);

            }

    }printf("cnt=%d\nsum=%d\n",cnt,sum);

           

}

运行结果:

Test 3 综合练习

1.编写程序,实现输入的时间屏幕显示一秒后的时间。显示格式为HH:MM:SS。程序需要处理以下三种特殊情况:

(1)若秒数加1后为60,则秒数恢复到0,分钟数增加1;

(2)若分钟数加1后为60,则分钟数恢复到0,小时数增加1;

(3)若小时数加1后为24,则小时数恢复到0。

设计思路:

调试结果:#include "stdio.h"

struct time

{ int hour;

int minute;

int second;

};

main()

{

    struct time now;

    printf("Please enter now time(HH,MM,SS)=\n");

    scanf("%d,%d,%d",&now.hour,&now.minute,&now.second);

    now.second++;

    if(now.second==60)

    {

        now.second=0;

        now.minute++;

    }

    if(now.minute==60)

    {

        now.minute=0;

        now.hour++;

    }

    if(now.hour==24)

        now.hour=0;

     printf("\nNow is %d:%d:%d\n",now.hour,now.minute,now.second);

}

运行结果:

2.编写函数,采用递归方法将任一正整数转换为二进制形式。

设计思路:

调试结果:

#include <stdio.h>

turn(n,a,k)

int n,a[ ],k;

{

    if(n>0)

    {

        a[k]=n%2;

      turn(n/2,a,k-1);

    }

    else return;

}

  main()

{

    int i,n,a[16]={0};

     printf("\nPlease enter n:");

     scanf("%d",&n);

    

     turn(n,a,15);

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

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

}

设计思路:函数的调运,字符串的输入和输出,循环的使用,数组的使用。

运行结果:

3.从键盘上输入两个日期,计算两者之间相隔的天数。具体要求如下:

(1) 定义一个一维数组,用以存放平年的12个月的每月天数。

(2) 设计一个自定义函数fa(),判断年份是否闰年,如果是则返回数值1,否则返回0。

(3) 设计一个自定义函数fb(),用以计算起始日期到年底的天数。

(4) 设计一个自定义函数fc(),用以计算起始日期到终止日期间的整年的天数。

(5) 设计一个自定义函数fd(),用以计算终止日期是该年的多少天。

(6) 主函数要求日期的输入与结果的输出有良好的提示信息。

设计思路:

调试结果:#include "stdio.h"

int fa(int q)

{

    if((q%4==0 && q%100!=0) || q%400==0)

        return(1);

    else

        return(0);

}

int fb(int a[],int b,int c)

{

    int i;

    int sum=a[b-1]-c;

    for(i=b;i<12;i++)

        sum+=a[i];

    return(sum);

}

int fc(int a[],int b,int c,int d,int e)

{

    int sum=0,sum1,sum2;

    int i;

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

        sum1+=a[i];

    sum1+=c,sum1--;

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

        sum2+=a[i];

    sum2+=e,sum2--;

    sum=sum2-sum1;

    return(sum);

}

int fd(int a[],int d,int e)

{

    int i;

    int sum=e;

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

        sum+=a[i];

    return(sum);

}

void main()

{

    int q;

    int b,c,d,e;

    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    printf("请输入你想判断的年份:");

    scanf("%d",&q);

    if(fa(q)==1)

    {

        printf("%d是闰年\n",q);

        a[1]++;

    }

    else

        printf("%d是平年\n",q);

    printf("请输入起始日期:");

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

    printf("请输入终止日期:");

    scanf("%d,%d",&d,&e);

    printf("起始日期到年底的天数为:%d\n",fb(a,b,c));

    printf("起始日期到终止日期间的整年的天数为:%d\n",fc(a,b,c,d,e));

    printf("终止日期是该年的第%d天\n",fd(a,d,e));

}

运行结果:函数的调运,字符串的输入和输出,循环的使用,数组的使用。

4.在主函数中输入20##年的某月某日,编写一个函数完成计算该日是星期几,在主函数中输出。程序存入TEST34.C中。(已知20##年的1月1日是星期二)

例如:输入:1/2(表示1月2日)

输出:Tue(表示星期二)

设计思路:

调试结果:#include"stdio.h"

void main()

{

    int fa(int n,int m);

    int n,m,y;

    printf("请输入月份,日期\n");

    scanf("%d,%d",&n,&m);

    y=fa( n, m);

    switch(y)

    {

    case 0:printf("Tue\n");break;

    case 1:printf("Wed\n");break;

    case 2:printf("Thu\n");break;

    case 3:printf("Fri\n");break;

    case 4:printf("Sat\n");break;

    case 5:printf("Sun\n");break;

    case 6:printf("Mon\n");break;

    }

}

int fa(int n,int m)

{

    int i,sum=0,c,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

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

    {

        if(i<n)sum=a[i-1]+sum;

        else break;

    }

    sum=sum+m-1;

    c=sum%7;

    return(c);

}

运行结果:

提高题:

1.兑奖程序:

体育彩票由七位数字组成,第七位数字是特别号码,只有在前面六位数都正确的时候才对第七位数。现在体彩中心给出了一个特等奖号码是1234567,程序要求在屏幕上任输入一个号码判断出中了几等奖。(如果七位数字都相同就是特等奖;前六位相同为一等奖,任连续五位相同为二等奖,任连续四位相同为三等,任连续三位相同为四等,任连续两位相同位五等。(注意:除特等奖外都不考虑第七位)

按照以下对奖方式,写出程序:

     不按位对奖:也就是说不管是多少位,只要有连续几位相同都可以。比如说给出的号码是:2312345就中了三等奖(因为1234和前面相同,注意,这里的第七位是5,虽然也相同但是不能算)

设计思路:

调试结果:

#include "stdio.h"

void main()

{

    char a[7],b[7];

    int i,j,num,max=0;

    printf("请输入中奖号码:");

    gets(a);

    printf("请输入兑奖号码:");

    gets(b);

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

    {

        for(i=0,num=0;i<6;i++)

        {

            if(a[i]==b[j])

            {

                j++;

                num++;

            }

        }

        if(num>max) max=num;

    }

    if(max==6)

    {

        if(a[6]==b[6]) printf("你中了特等奖\n");

        else printf("你中了一等奖\n");

    }

    else if(max==5) printf("你中了二等奖\n");

    else if(max==4) printf("你中了三等奖\n");

    else if(max==3) printf("你中了四等奖\n");

    else if(max==2) printf("你中了五等奖\n");

    else  printf("谢谢惠顾\n");

}

运行结果:

2.学生成绩管理系统:

编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。具体要求为:

建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。

       程序运行时显示一个简单的菜单,例如:

   (1):信息输入(INPUT)

   (2):总分统计(COUNT)

   (3):总分排序(SORT)

   (4):查询(QUERY)

     其中:

     (1):对4个学生的信息进行输入;

     (2):对每个学生的3门课程统计总分;

      (3):对4个学生的总分按降序排序并显示出来;

      (4):查询输入一个学号后,显示出该学生的有关信息;

请同学们根据实际情况再进行适当扩展。

#include "stdio.h"

#include "malloc.h"

struct student

{

       long num;

       char name[20];

       float fox;

       float c;

       float english;

       float sum;

       struct student *next;

};

int n;

struct student *input(void){

       int boolean =0;

       struct student *head,*p1,*p2;

       n=0;

       head=p1=p2=(struct student*)malloc(sizeof(struct student));

       printf("请输入学生学号: ");

       scanf("%d",&p1->num);

       printf("请输入学生姓名: ");

       scanf("%s",p1->name);

       printf("请输入学生各科成绩(FOR,C,ENGLISH): ");

       scanf("%f,%f,%f",&p1->fox,&p1->c,&p1->english);

      

       p1->sum=p1->fox+p1->c+p1->english;// COUNT;

      

       printf("是否继续输入? 1/继续,0/结束");

       scanf("%d",&boolean);

       while(boolean)

       {

              n++;

      

              p2=p1;

              p1=(struct student*)malloc(sizeof(struct student));

             

              printf("请输入学生学号: ");

              scanf("%d",&p1->num);

              printf("请输入学生姓名: ");

              scanf("%s",p1->name);

              printf("请输入学生各科成绩(FOR,C,ENGLISH): ");

              scanf("%f,%f,%f",&p1->fox,&p1->c,&p1->english);

              p1->sum=p1->fox+p1->c+p1->english;      

              p2->next=p1;

              printf("是否继续输入? 1/继续,0/结束");

              scanf("%d",&boolean);

      

       }

       p1->next=NULL;

       return (head);

}

struct student *sort(struct student *head)

{

       struct student *p1,*p2,*p;

       int i,j,k;

       k=n;

       if(head!=NULL)

       {    

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

                 for(i=0,p=p1=head,p2=head->next; i<k-1-j&&p2!=NULL ;i++,p1=p->next,p2=p1->next)

                     {     if(p1->sum < p2->sum)

                            {     if(p==head&&i==0)

                                   {

                                          p1->next=p2->next;

                                          p2->next=p1;

                                          head=p2;

                                          p=p2;

                                   }

                                   else

                                   {

                                          p1->next=p2->next;

                                          p2->next=p1;

                                          p->next=p2;

                                          p=p2;

                                   }

                            }

                            else p=p1;

                     }

              return(head);

       }

       else

       {

              printf("木有人!");

              return(head);

       }

}

void print(struct student *head)

{     if(head!=NULL)

       {

              while(head!=NULL)

              {

                     printf("%d,%s,FOR:%f,C:%f,English:%f,Sum:%f\n",head->num,head->name,head->fox,head->c,head->english,head->sum);

                     head=head->next;

              }

       }

       else printf("没有人!");

      

}

void query(struct student *head)

{

       int k;

       printf("请输入要找的学号:\n");

       scanf("%d",&k);

       if(head!=NULL)

       {

              while(head!=NULL)

              {

                     if(head->num==k)

                     {

                            printf("%d,%s,FOR:%f,C:%f,English:%f,Sum:%f\n",head->num,head->name,head->fox,head->c,head->english,head->sum);

                            return ;

                     }

                     head=head->next;

              }

              printf("你找谁啊?");

       }

       else printf("没有人!");

             

}

void main()

{     int boolean = 1;

       struct student *p;

       while(boolean)

       {

              printf("  请选择:\n(1):信息输入(INPUT)\n(2):总分统计(COUNT)\n(3):总分排序(SORT)\n(4):查询(QUERY)\n(0):结束(end)\n");

              scanf("%d",&boolean);

              if(boolean==1)

              {

                     p=input();

                     continue;

              }

              else if(boolean==2)

              {

                     print(p);

              }

              else if(boolean==3)

              {

                     print(sort(p));

              }

              else if(boolean==4)

              {

                     query(p);

              }

       }

}

  设计思路:通过建立链表,再通过调用函数。

调试情况:反复输入数据,进行调试,在算法上出现多处错误。

运行结果:

更多相关推荐:
c语言实验报告

四川师范大学计算机科学学院C语言程序设计实验手册20xx年2月年级20xx级专业电子商务班级04班姓名罗桂清学号20xx110438指导教师廖雪花1C语言程序设计实验课程简介课程名称C语言程序设计实验课程性质专...

c语言实验报告

课程设计报告学院课程名称专业班级学生姓名学号指导教师完成时间年月目录1菜单选择程序课程设计2学生信息管理系统课程设计题目1菜单选择程序课程设计一课程设计内容与要求1主菜单编写程序能够显示以下的主菜单主菜单1字母...

C语言实验报告书写格式及模板

大学学院实验报告专业名称实验室实验课程C实验名称姓名学号同组人员实验日期语言程序设计程序设计12345678

c语言实验报告模板完成版

高级语言程序设计学生实验报告专业计算机科学与技术学号姓名1实验一C程序的运行环境和使用方法1实验目的1了解所用的计算机系统的基本操作方法学会独立使用该系统2了解在该系统上如何编辑编译连接和运行一个C程序3通过运...

C语言实验报告(八)

华北水院高级语言程序设计C语言实验报告20xx20xx学年第二学期20xx级专业班级学号一实验题目文件二实验目的略三实验内容1程序验证用记事本编辑文本文件file1txt分析一下程序的功能及结果并验证inclu...

大学C语言实验报告答案

郑州大学09级C语言实验报告答案实验一1includeltstdiohgtvoidmainintabcscanfquotdddquotampaampbampcprintfquotsumdnquotabc2inc...

C语言实验报告(三)

华北水院高级语言程序设计C语言实验报告20xx20xx学年第二学期20xx级专业班级学号一实验题目循环结构程序设计二实验目的略三实验内容1程序验证略2程序设计1找出100900之间的无暇素数所谓无暇素数是指本身...

C语言数组实验报告

北京联合大学信息学院程序设计基础课程调研研究报告题目姓名学号专业计算机科学与技术编制时间20xx528版本指导教师北京联合大学信息学院编制数组实验程序设计报告20xx年5月28日班号姓名学号第一章实验情况概述本...

C语言实验报告模板完成版

高级语言程序设计学生实验报告专业学号姓名实验一C程序的运行环境和使用方法1实验目的1了解所用的计算机系统的基本操作方法学会独立使用该系统2了解在该系统上如何编辑编译连接和运行一个C程序3通过运行简单的C程序初步...

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

C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称数组实验一实验目的1掌握数组的说明初始化和使用2掌握一维数组作为函数参数时实参和形参的用法3掌握...

C语言程序设计 实验报告---范例

C语言程序设计实验报告学号姓名1设计一个函数fc统计数组中偶数和奇数的个数数组元素个数不多于10个编写main函数正确调用fc函数实现对数组a的统计输出统计结果includequotstdiohquotintj...

c语言综合实验报告

计算机系综合性实验实验报告课程名称程序设计语言C实验学期20xx至20xx学年第二学期学生所在系部年级专业班级学生姓名学号任课教师实验成绩计算机系制计算机系综合性实验报告实验报告须知1学生上交实验报告时必须为打...

c语言实验报告(38篇)