西南石油大学 C语言程序设计作业程序题(万维考试系统)

仅供学习使用

目录

实验1 2023

实验2 2023

实验3 简单循环

实验4 多重循环

实验5 函数

实验6-1 一维数组

实验6-2 二维数组与字符串

实验7-1指针与数组

实验7-2 指针与字符串


实验1 2023


1.


//请编写程序在屏幕上输出 hello world! 

/**********Program**********/
//在这里开始写程序
#include "stdio.h"
void main()
{
    printf("hello world!");
    
}

/**********  End  **********/

2.


//输入输出语句练习,请完成该程序

/**********Program**********/

#include "stdio.h"   
void main() 
{
      int a,b;//在本行定义2个整形变量a和b
      float x=0.1234f;//在本行定义1个单精度浮点型变量x,并且赋值为0.1234f
      double y=2.0;//在本行定义1个双精度浮点型变量y,并且赋值为2.0
      char c = 'A';//在本行定义1个字符型变量c,并且赋值为'A' 

      scanf("%d,%d",&a,&b);//输入2个整形变量a和b的值,两个变量以逗号隔开
      scanf("%f",&x);//输入单精度浮点形变量x的值
      scanf("%lf",&y);//输入双精度浮点形变量y的值
      scanf("%c",&c);//输入字符型变量c的值

      printf("%d,%d\n",a,b);//输出2个整形变量a和b的值,两个变量以逗号隔开,输出后换行
      printf("%.2f\n",x);//输出单精度浮点形变量x的值,保留两位小数,输出后换行
      printf("%3lf\n",y);//输出双精度浮点形变量y的值,保留三位小数,输出后换行
      printf("%c\n",c);//输出字符型变量c的值,输出后换行
}

/**********  End  **********/


3.


//编写程序,实现用户输入1个摄氏温度c,转换为华氏温度f
//计算公式为:f = 1.8 * c + 32;
//例如:
//输入:10
//输出:转换后的华氏温度为50度

/**********Program**********/
//在这里开始写程序
#include <stdio.h>
void main()
{
    double c,f;
    scanf("%lf",&c);
    f=1.8*c+32;
    printf("转换后的华氏温度为%.f 度",f);
}


/**********  End  **********/


4.


//编写程序,用户输入3条边a,b,c的长度,计算三角形面积
//面积公式为s=(a+b+c)/2;
//          area=根号(s*(s-a)*(s-b)*(s-c)); 
//例如:
//输入:3,4,5
//输出:三角形面积为6.0000

/**********Program**********/

//需要引入的文件
#include "stdio.h"
#include "math.h"
//如解答错误,注意检查错误信息提示,对比预期输出和实际输出之间的差异
void main() 
{
  double a,b,c,s,area;
  scanf("%lf;%lf;%lf",&a,&b,&c);
  s=(a+b+c)/2;
  area=sqrt(s*(s-a)*(s-b)*(s-c));
  printf("三角形面积为%lf",area);
  
}


/**********  End  **********/
 

实验2 2023

1.


/*------------------------------------------------
功能:对任意输入的 x,用下式计算并输出 y 的值。
            5      x<10
      y=    0      x=10
           -5      x>10
------------------------------------------------*/
/**********Program**********/

#include "stdio.h"
void main()
{
    double x,y;//定义双精度变量,x和y
    scanf("%lf",&x);//用户输入x
    //条件语句判断,多行
    if(x<10)
    {
        y=5;
    }
    else if(x==10)
    {
        y=0;
    }
    else
    {
        y=-5;
    }
    //输出y的结果
    printf("%f",y);
}

/**********  End  **********/

2.

/*-------------------------------------------------------
从键盘输入任意整数年份,判断是否为闰年
闰年的条件是:能被4整除但是不能被100整除 或者 能被400整除。

输入格式:        输出格式:
1900              1900年不是闰年 

输入格式:        输出格式:
2008              2008年是闰年
-------------------------------------------------------*/
/**********Program**********/ 

#include <stdio.h>
int main()
{
    int year; //定义整形变量year
    scanf("%d",&year);//键盘输入年份
    if(year%4==0 &&year%100!=0 ||year%400==0)//判断是否是闫年
    {
        printf("%d年是闫年",year);
    }
    else
    {
        printf("%d年不是闰年",year);
    }
}


/**********  End  **********/


3.

//用户输入1个字符,判断该字符是大写字母、小写字母、或者不是字母
//例如 输入A   输出 A是大写字母
//例如 输入b   输出 b是小写字母
//例如 输入}   输出 }不是字母

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    char c;
    scanf("%c",&c);
    if(c>='A' && c<='Z')
    {
        printf("%c是大写字母",c);
    }
    else if(c>='a' && c<='z')
    {
        printf("%c是小写字母",c);
    }
    else
    {
        printf("%c不是字母",c);
    }
}


//**********  End  **********此句必须放到末尾,否则没有分

4.


/*等级判断,输入成绩到float变量s,输出对应的等级
   0-60    E
>=60-70    D
>=70-80    C
>=80-90    B
>=90-100   A 
*/


//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    float s;
    scanf("%f",&s);
    if(s<60)
    {
        printf("E");
    }
    else if(s<70)
    {
        printf("D");
    }
    else if(s<80)
    {
    printf("C");
    }
    else if(s<90)
    {
        printf("B");
    }
    else
    {
        printf("A");
    }
}

//**********  End  **********此句必须放到末尾,否则没有分


5.


//任意输入三个float类型的边长x,y,z,判断是否能构成三角形,
//若能构成三角形,则判断该三角形是等边三角形、等腰三角形还是普通三角形.
//输出为:不能构成三角形  等边三角形   等腰三角形  普通三角形

//请输入测试数据  3,3,7  不能构成三角形
//请输入测试数据  3,7,3  不能构成三角形
//请输入测试数据  3,3,3  等边三角形
//请输入测试数据  3,3,2  等腰三角形
//请输入测试数据  3,4,5  普通三角形

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    float x,y,z;
    scanf("%f,%f,%f",&x,&y,&z);
    if(x+y>z && x+z>y && y+z>x)
    {
        if(x==y && y==z)
        {
            printf("等边三角形");
        }
        else if(x==y || y==z || x==z)
        {
            printf("等腰三角形");
        }
        else
        {
            printf("普通三角形");
        }
    }
    else
    {
        printf("不能构成三角形");
    }
}

//**********  End  **********此句必须放到末尾,否则没有分


 

实验3 简单循环

1.

/*
编写程序分别使用for语句、while语句、do while语句输出数字1-9,每个数字占一行
循环变量使用i
每组的9个数字输出后,输出1个空行
*/


//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    int i;
    for(i=1; i<=9; i++)
    {
        printf("%d\n",i);
    }
    printf("\n");
    i=1;
    while(i<=9)
    {
        printf("%d\n",i);
        i=i+1;
    }
    printf("\n");
    i=1;
    do
    {
        printf("%d\n",i);
        i=i+1;
    }while(i<=9);
    printf("\n");
}

//**********  End  **********此句必须放到末尾,否则没有分


2.

/*
用户输入一个整形数n
编写程序分别使用for语句、while语句、do while语句计算小于n的奇数的和,输出结果

要求:循环变量使用i,储存结果的变量为双精度类型变量sum
每个结果占用一行

例如:
输入 5
输出 4.00000
     4.00000
     4.00000
*/

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    int i;
    int n;
    double sum=0;
    scanf("%d",&n);
    for(i=1; i<n; i=i+2)
    {
        sum=sum+i;
    }
    printf("%f\n",sum);
    i=1;
    sum=0;
    while(i<n)
    {
        sum=sum+i;
        i=i+2;
    }
    printf("%f\n",sum);
    i=1;
    sum=0;
    do
    {
        sum=sum+i;
    i=i+2;
    }while(i<n);
    printf("%f\n",sum);
}

//**********  End  **********此句必须放到末尾,否则没有分


3.


/*
用户在一行输入两个整形数n、m
编写程序分别使用for语句、while语句计算n、m之间(包含n和m)的所有3的倍数 或 7的倍
数的和,输出结果

要求:循环变量使用i,储存结果的变量为双精度类型变量sum
每个结果占用一行

例如:
输入 1,8
输出 16.00000
     16.00000
*/

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    int i;
    int n,m;
    double sum=0;
    scanf("%d,%d",&n,&m);
    for(i=n; i<=m; i++)
    {
        if(i%3==0 || i%7==0)
        {
            sum=sum+i;
        }
    }
    printf("%f\n",sum);
    i=n;
    sum=0;
    while(i<=m)
    {
        if(i%3==0 || i%7==0)
        {
            sum=sum+i;
        }
        i=i+1;
    }
    printf("%f\n",sum);
}


//**********  End  **********此句必须放到末尾,否则没有分

4.


/*
水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身
(例如:1^3 + 5^3+ 3^3 = 153), 输出所有的水仙花数。

使用for语句编写程序,输出的每个数占一行

输出 153
     370
     371
     407
*/

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
#include <math.h>
void main()
{
    int n1,n2,n3;
    int i;
    for(i=100; i<1000; i++)
    {
        n1=i%10;
        n2=i/10%10;
        n3=i/100;
        if(pow(n1,3)+ pow(n2,3)+pow(n3,3)==i)
        {
            printf("%d\n",i);
        }
    }
}

//**********  End  **********此句必须放到末尾,否则没有分


5.

/*
一个四位数,各位数字互不相同,所有数字之和等于6,并且这个数是11的倍数,
输出满足这种要求的所有四位数

要求:千位、百位、十位、各位分别用整形变量n1、n2、n3、n4来表示
输出 1023
     1320
     2013
     2310
     3102
     3201
*/

//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
    int i;
    int n1, n2, n3, n4;
    for(i=1000; i<=9999; i++)
    {
        n1 = i/ 1000;
        n2 = i / 100 % 10;
        n3 = i / 10 % 10;
        n4 = i % 10;
        if(n1!=n2 && n2!=n3 && n3!=n4 && (n1+n2+n3+n4)==6 && i%11==0)
        {
            printf("%d\n",i);
        }
    }
}

//**********  End  **********此句必须放到末尾,否则没有分
 

实验4 多重循环

1.


#include "stdio.h"
void main()
{
    int i,n,zc;
    scanf("%d",&n);
    zc=0;
    for(i=2; i<n; i++)
    {
        if(n%i==0)
        {
            zc=1;
            break;
        }
    }
    if(zc==1)
        printf("%d不是素数\n",n);
    else
        printf("%d是素数\n",n);
}


2.


#include "stdio.h"
void main()
{
    int i,j;
    //写出输出第1行的for语句
    for(i=1; i<=5; i++)
        printf("%4d",i);
    printf("\n");
    //写出输出第2行的for语句
    for(i=1; i<=5; i++)
        printf("%4d",i+5);
    printf("\n");
    //写出输出第3行的for语句
    for(i=1; i<=5; i++)
        printf("%4d",i+10);
    printf("In");
    //写出输出第4行的for语句
    for(i=1; i<=5; i++)
        printf("%4d",i+15);
    printf("\n");
    //写出输出第5行的for语句
    for(=1; i<=5;i++)
        printf("%4d",i+20);
    printf("\n");
    printf("\n");
    for(j=0;j<5;j++)
    {
        for(i=1; i<=5; i++)
            printf("%4d",i+(5*j+0));
        printf("\n");
    }
}


3.


#include "stdio.h"
void main()
{
    int i,j;
    for(j=0; j<4; j++)
    {
        for(i=0; i<-1*j+3; i++)
            printf(" ");
        for(i=0; i<2*j+1; i++)
            printf("*");
        printf("\n");
    }
    for(j=0; j<3; j++)
    {
        for(i=0; i<1*j+1; i++)
            printf(" ");
        for(i=0; i<-2*j+5; i++)
            printf("*");
        printf("\n");
    }
}


4.


#include "stdio.h"
void main()
{
    int i,j;
    for(j=1; j<=9; j++)
    {
        for(i=1; i<=j; i++)
            printf("%d*%d=%d ",j,i,j*i);
        printf("\n");
    }
}


5.


#include "stdio.h"
void main()
{
    int x,y,z;
    printf("公鸡,母鸡,小鸡\n");
    for(x=0; x<=20; x++)
    {
        for(y=0; y<=33; y++)
        {
            z=100-x-y;
            if(5*x+3*y+z/3.0==100)
            {
                printf("%d,%d,%d\n",x,y,z);
            }
        }
    }
}

6.


#include "stdio.h"
void main()
{
    int i,n,zc;
    for(n=70; n<=100; n++)
    {
        zc=0;
        for(i=2; i<n; i++)
        {
            if(n%i==0)
            {
                zc=1;
                break;
            }
        }
        if(zc==0)
            printf("%d\n",n);
    }
}

实验5 函数

1.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:请编写函数,其功能是计算3到n之间所有素数的平方根之和。
例如, 在主函数中从键盘给n输入100后,输出为: sum=148.874270。
(注意: 要求n的值大于2且不超过100。)

-------------------------------------------------------*/

#include <math.h>
#include <stdio.h>
double fun(int  n)
{
/**********Program**********/
int i,j=0;
double s=0;
for(i=3; i<=n; i++){
    for(j=2; j<i; j++)
        if (i%j==0)break;
    if (j==i) s=s+sqrt(i);
}
return s;

        
/**********  End  **********/
}
int main()
{
        int  n; 
        double  sum;
        printf("\n\nInput n:  "); scanf("%d",&n);
        sum=fun(n);
        printf("\n\nsum=%lf\n\n",sum);
        return 0;
}

2.

/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:将大于形参m且紧靠m的k个素数求和并返回到主函数输出。例如,若

输入17, 5,可以找出五个素数分别是19, 23, 29, 31, 37。和为139

-------------------------------------------------------*/

#include<stdio.h>
int fun(int m,int k)
{
/**********Program**********/
int i,j=1,t=m+1,sum=0;
while(j<=k)
{
    for(i=2;i<t;i++)
    {
        if(t%i==0)break;
    }
    if(i>=t){sum=sum+t;j++;}
    t++;
}
return sum;

/**********  End  **********/
}

int main()
{
     printf("%d\n",fun(17,5));
     return 0;
}


3.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:计算如样图所示的多项式求和,输入一个x就可以得到求和
      要求x<0.97。
      例如,若输入x为0.5,则多项式的和为1.224744

-------------------------------------------------------*/
#include<stdio.h>
#include<math.h>

double fun(double x)
{
/**********Program**********/
int i;
double s=1.0, xn=0.5*x;
for(i=2;fabs(xn)>=1e-6;i++){
    s=s+xn;
    xn=xn*x*(0.5-(i-1))/i;
}
return s;


        
/**********  End  **********/
}

int main()
{
        double x;
        scanf("%lf",&x);                                  
        printf("%lf\n",fun(x));
        return 0;
}


4.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:请编写一个函数fun,它的功能是:根据以下样图公式求π的值
   (比如要求公式右边的累加项满足精度0.0005, 即某项小于0.0005 时停止迭代,则此时PI=3.140578)

-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>

double  fun ( double  eps)
{
/**********Program**********/
int i;
double s=0,xn=1;
for(i=1;xn>=eps;i++){
    s=s+xn;
    xn=xn*i/(2*i+1);
}
return 2*s;
/**********  End  **********/
}

int main( )

        double  x;
        printf("Input eps:") ;
        scanf("%lf",&x);
        printf("\neps = %lf, PI=%lf\n", x, fun(x));
        return 0;
}

5.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
 编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的
一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1 ,F(n)=F(n-1)+F(n-2)
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
int  fun( int  t)
{
/**********Program**********/ 
int f0=0,f1=1,f;
do{
    f=f0 +f1;
    f0=f1;
    f1=f;
}while(f<t);
return f;

/**********  End  **********/
}

main()   /* 主函数 */

        int  n;  
        n=1000;   
        printf("n = %d, f = %d\n",n, fun(n));
        return 0;
}

6.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:若形参ch中是小写字母就转换成大写字母;若是大写字母就
转换成小写字母,若是数字字符就转换成阿拉伯数字,其他字符不变。
最终以ASCII值形式返回主函数输出。
(不采用isupper函数和isdigit函数判断)

-------------------------------------------------------*/
#include <stdio.h>

int fun(char ch)

/**********Program**********/
if(ch>='A'&&ch<='Z')ch=ch+32;
else if(ch>='a'&&ch<='z')ch=ch-32;
else if(ch>='0'&&ch<='9')ch=ch-48;
else ch=ch;
return ch;

/**********  End  **********/
}

int main()

    char ch;
    ch=getchar();
    printf("%d\n",fun(ch));
    return 0;
}

7.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:用循环实现输入一个五位正整数,将它倒序后返回给主函数输出。
例如输入12345,输出应为54321。(不采用指针、数组)

-------------------------------------------------------*/
#include <stdio.h>

int fun(int  n)

/**********Program**********/
int x=0,i;
while(n>0){
    i=n%10;
    x=10*x+i;
    n=n/10;
}
return x;

/**********  End  **********/
}
int main()

   int n,r;
   scanf("%d",&n);
   r=fun(n);
   printf("%d\n", r);
   return 0;
}

实验6-1 一维数组


1.


/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:找出一批正整数中的最大的偶数。

------------------------------------------------*/

#include <stdio.h>
void wwjt();
     
int fun(int a[],int n)
{
  
  /**********Program**********/
    int i,num;
    num=-1;
    for(i=0;i<n;i++)
    if(a[i]%2==0 && a[i]>num) num=a[i];
    return num;
  
  
  
  
  
  /**********  End  **********/
  
}

main()
{
  int a[]={1,2,9,24,35,18},k;
  k=fun(a,6);
  printf("max=%d\n",k);
  wwjt();
}

void wwjt()
{
  FILE *IN,*OUT;
  int iIN[10],iOUT,i,j;
  IN=fopen("28.IN","r");
  if(IN==NULL)
  {
    printf("Please Verify The Currernt Dir..it May Be Changed");
  }
  OUT=fopen("28.out","w");
  if(OUT==NULL)
  {
    printf("Please Verify The Current Dir.. it May Be Changed");
  }
     
  
    for(i=0;i<6;i++)
      fscanf(IN,"%d",&iIN[i]);
    iOUT=fun(iIN,6);
    fprintf(OUT,"%d\n",iOUT);
  
 

  fclose(IN);
  fclose(OUT);
}


2.


/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:统计出若干个学生的平均成绩,最高分以及得最高
      分的人数。(最高分可能不止一个)
例如:输入10名学生的成绩分别为92,87,68,56,92,
      84,67,75,92,66,则输出平均成绩为77.9,
      最高分为92,得最高分的人数为3人。

------------------------------------------------*/

#include <stdio.h>
   
float Max=0;/*Max为最高分变量,注意最高分不止一个*/
int J=0; /*J为最高分的人数*/

float fun(float array[],int n)
{
  
  /**********Program**********/

    float f;
    int i,j=0;
    for(i=0;i<n;i++)
        f+=array[i];
    f=f/n;
    for(i=1;i<n;i++)
    {
        if(array[j]<array[i])
            j=i;
    }
    Max=(int)array[j];
    for(i=0;i<n;i++)
        if(Max==(int)array[i])
            J++;
    return f;

  
  
  
  
  
  /**********  End  **********/
  
}

main(  )
{
  float  a[10],ave;
  int i=0;
  for(i=0;i<10;i++)
    scanf("%f",&a[i]);
  ave=fun(a,10);
  printf("ave=%f\n",ave);
  printf("max=%f\n",Max);
  printf("Total:%d\n",J);
  return 0;
}


3.

/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:编写函数用排序法对数组中的数据进行从小到
      大的排序。

------------------------------------------------*/

#include <stdlib.h>
#include<stdio.h>

void sort(int a[],int n)
{
  /**********Program**********/
    int i,j,t;
 for(i=0;i<n-1;i++)
   for(j=0;j<n-1-i;j++)
     if(a[j]>a[j+1])
       {t=a[j];
    a[j]=a[j+1];
    a[j+1]=t;
    }
 
  
  
  
  
  
  /**********  End  **********/
}

main()
{
  int a[16],i;
  for(i=0;i<16;i++)
    a[i]=rand()%100;
  for(i=0;i<16;i++)
    printf("%4d",a[i]);
  printf("\n-------------------\n");
  sort(a,16);
  for(i=0;i<16;i++)
    printf("%4d",a[i]);
}

4.

有bug

/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 编写函数,要求计算并输出不超过n的最大的k个素数以及它们的和。注意找到
的k个素数先要保存在数组a中。

输入格式:  输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
输出格式:  在一行中按下列格式输出:
           素数1+素数2+…+素数k=总和值

  其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

输入样例1:  1000 10
输出样例1: 997+991+983+977+971+967+953+947+941+937=9664

输入样例2:   12 6
输出样例2: 11+7+5+3+2=28

-------------------------------------------------------*/
#include <stdio.h>
int a[11];
int count=0,sum=0;/*count数组中存放素数的个数,sum数组中素数求和*/
void fun(int n,int k)
{   
    int i,j;
/**********Program**********/  
    for(i=n; i>=2; i--){
    for(j=2; j<i; j++){
        if(i%j == 0){
            break;
        }
    }
    if(j==i){
        a[count]=i;
        sum+=a[count];
        count++;
    }
    if(count == k)
        break;
}
 
for(count = 0; count < k; count++){
    if (a[count] == 0)
        break;
    printf("%d+",a[count]);
}
printf("\b");
printf("=%d", sum);
// printf("%d=%d",a[count],sum);


/**********  End  **********/
}
int main()
{
    int n,k;
    printf("\nInput n and k:  ");scanf("%d %d",&n,&k);
    fun(n,k);
    return 0;
}


 

实验6-2 二维数组与字符串


1.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:程序定义了N×N的二维数组,并在主函数中赋值。
请编写函数fun,函数的功能是:求出数组周边元素的平均值
并作为函数值返给主函数中的s。
-------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define  N  5
double fun ( int w[][N] )
{
/**********Program**********/  
    int i,j,k=0;
      double r=0.0;
      for(j=0;j<N;j++)
      {
        r+=w[0][j];
        k++;
      }
      for(j=0;j<N;j++)
      {
        r+=w[N-1][j];
        k++;
      }
      for(i=1;i<=N-2;i++)
      {
        r+=w[i][0];
        k++;
      }
      for(i=1;i<=N-2;i++)
      {
        r+=w[i][N-1];
        k++;
      }
      return r/=k;


/**********  End  **********/        
}

main ( )

   int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
   int i, j;
   double s ;
   printf("***** The array *****\n");
   for ( i =0;  i<N; i++ )
   {  for ( j =0; j<N; j++ )
     {  printf( "%4d", a[i][j] ); }
        printf("\n");
   }
   s = fun ( a );
   printf ("***** THE  RESULT *****\n");
   printf( "The average is :  %lf\n",s );
}

2.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编一个函数void fun(int tt[M][N ], int pp[N]),tt指向
一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入
pp所指一维数组中。二维数组中的数已在主函数中赋予。
   示例结果可以见样图

-------------------------------------------------------*/
#include <stdio.h>
#define  M  3
#define  N  4
void  fun ( int tt[M][N], int pp[N] )
{
/**********Program**********/          
    int i,j,min;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M-1; j++)
        {
            if (tt[j][i] < tt[j + 1][i])
            {
                min = tt[j][i];
                tt[j + 1][i] = tt[j][i];
            }
            else
                min = tt[j + 1][i];
        }
        pp[i] = min;
    }

/**********  End  **********/
}

main( )
{
   int t [ M ][ N ]={{22,45, 56,30},
                     {19,33, 45,38},
                     {20,22, 66,40}};
   int  p [ N ],  i,  j,  k;
   printf ( "The original data is : \n" );
   for( i=0; i<M; i++ ){
     for( j=0; j<N; j++ )
       printf ( "%6d", t[i][j] );
     printf("\n");
   }
   fun ( t, p );
   printf( "\nThe result  is:\n" );
   for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] );
   printf("\n");
}


3.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编一个函数fun(char s[]),函数的功能是把s所指字符串
中的内容逆置。例如:字符串中原有的字符串为:abcdefg,则调
用该函数后, 串中的内容为:gfedcba。

-------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#define   N   81
void fun ( char  s[ ] )
{
/**********Program**********/          
    char ch;
    int i,m,n;
    i=0;
    m=n=strlen(s)-1;
    while(i<(n+1)/2)
    {
        ch=s[i];
        s[i]=s[m];
        s[m]=ch;
        i++;
        m--;
    }

/**********  End  **********/
}
main( )
{
   char   a[N];
   printf ( "Enter  a  string :  " ); gets ( a );
   printf ( "The original string is :  " ); puts( a );
   fun ( a );
   printf("\n");
   printf ( "The string after modified :  ");
   puts ( a );
}


4.


/* 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:
     删除字符串中所有的*号。
     在编写函数时,不得使用C语言提供的字符串函数。
     例如,字符串中的内容为:****A*BC*DEF*G*******
     删除后,字符串中的内容应当是:ABCDEFG。
     
  注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
*/

#include <stdio.h>
void  fun( char a[])
{
  /**********Program**********/
    int i=1,j=1,k;
    char str[50];
    str[0]=a[0];
    while(a[i]!='\0')
    {
        if(a[i]!='*')
        {
            str[j]=a[i];
            j++;
        }
        i++;
    }
    for(k=0;k<j;k++)
    {
    printf("%c",str[k]);
    }
    printf("\n");


  /**********  End  **********/

}

main()
{
   char  s[81];
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
}

5.


int i,k=0;
    for(i=0;s[i]!='\o';i++)
    if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
    k++;
    return k;


 

实验7-1指针与数组


1.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个交换函数void swap(int *p , int *q),该函数
实现两个整数的交换。在main函数中构造两个整型变量,通过调
用swap函数实现这两个整型变量的数值交换,并显示交换前和交
换后的数据。
-------------------------------------------------------*/
#include <stdio.h>
void  swap( int  *p, int *q)
{
/**********Program**********/  
    int temp;
    temp = *p;
    *p = *q;
    *q = temp;

/**********  End  **********/   
}

int main()

   int a=10,b=20;
   printf("交换前a和b的值\n");printf("a=%d,b=%d\n",a,b);
   swap(&a,&b);
   printf("交换后a和b的值\n");printf("a=%d,b=%d\n",a,b);
   return 0;
}


2.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun, 函数的功能是: 移动一维数组中的内容; 
若数组中有n个整数, 要求把下标从0到p(含p,p小于等于n-1)的
数组元素平移到数组的最后。例如, 一维数组中的原始内容为:
 1,2,3,4,5,6,7,8,9,10 
p的值为3。移动后, 一维数组中的内容应为:
 5,6,7,8,9,10,1,2,3,4 

-------------------------------------------------------*/
#include <stdio.h>
#define    N    80
void  fun(int  *w, int  p, int  n)
{
/**********Program**********/  
    int x,j,ch;
    for(x=0;x<=p;x++){
        ch=w[0];
        for(j=1;j<n;j++){
            w[j-1]=w[j];
        }
        w[n-1] = ch;
    }

/**********  End  **********/ 
}
int main()

   int  a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int  i,p,n=15;
   printf("The original data:\n");
   for(i=0; i<n; i++)printf("%3d",a[i]);
   printf("\n\nEnter  p:  ");scanf("%d",&p);
   fun(a,p,n);
   printf("\nThe data after moving:\n");
   for(i=0; i<n; i++)printf("%3d",a[i]);
   printf("\n\n");
   return 0;
}

3.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun, 函数的功能是: 删去一维数组中所有相
同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,
函数返回删除后数组中数据的个数。
例如, 一维数组中的数据是:
      2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 
删除后,数组中的内容应该是: 
      2 3 4 5 6 7 8 9 10 
-------------------------------------------------------*/

#include <stdio.h>
#define    N    80
int  fun(int  *a, int  n)
{
/**********Program**********/  
    int i,j=1;
    for(i=1;i<n;i++)
    if(a[j-1]!=a[i]){
    a[j]=a[i];
    j++;
    }
    return j;

/**********  End  **********/   
}
int main()
{  
   int  a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
   printf("The original data :\n");
   for(i=0; i<n; i++)printf("%3d",a[i]);
   n=fun(a,n);
   printf("\n\nThe data after deleted :\n");
   for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
   return 0;
}


4.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过
调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段
的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄
段的人数放在d[2]中, 其余依此类推, 把100岁 (含100)以上年龄的人数
都放在d[10]中。结果在主函数中输出。

-------------------------------------------------------*/

#include <stdio.h>
#define   N   50
#define   M   11
void  fun(int *a, int *b)
{
/**********Program**********/
    int i;
    for(i=0;i<=10;i++)
    b[i]=0;
    for(i=0;i<N;i++){
    if(a[i]>=100)
    b[10]++;
    else
    b[ a[i]/10 ]++;
    }

/**********  End  **********/

}
double  rnd()  //产生一个随机小数
{  static int t=29,c=217,m=1024,r=0;
   r=(r*t+c)%m;  return((double)r/m);
}
main()
{  int  age[N], i, d[M]={0};//d数组用于存放各年龄段人数
   for(i=0; i<N;i++)age[i]=(int)(115*rnd());//调用rnd()函数产生的一个随机小数,用来将age数组中每个元素都赋值为115以内的整数
   printf("The original data :\n");
   for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]);
   printf("\n\n");
   fun( age, d);
   for(i=0;i<10;i++)printf("%4d---%4d:%4d\n",i*10,i*10+9,d[i]); //按格式输出年龄段人数统计
   printf("  Over  100:%4d\n",d[10]);
   
}


 

实验7-2 指针与字符串

1.


/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:求统计一个给定字符串中英文字母的个数。
      如“12abc5FGkjh78”,k=8
------------------------------------------------*/

#include <stdio.h>
void wwjt();
    
int fun(char s[])
{
  
  /**********Program**********/
 int i,k=0;                                                                         
   for(i=0;s[i]!='\0';i++)
    if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
     k++;
    return k;      

  
  /**********  End  **********/
  
}

main()
{
  char str[]="Best wishes for you!";
  int k;
  k=fun(str);
  printf("k=%d\n",k);
  wwjt();
  
}

void wwjt()
{
  FILE *IN,*OUT;
  char sin[80];
  int iOUT,i;
  IN=fopen("in.dat","r");
  if(IN==NULL)
  {
    printf("Please Verify The Currernt Dir..it May Be Changed");
  }
  OUT=fopen("out.dat","w");
  if(OUT==NULL)
  {
    printf("Please Verify The Current Dir.. It May Be Changed");
  }
  for(i=0;i<10;i++)
  {    
    fscanf(IN,"%s",sin);
    iOUT=fun(sin);
  }
  fprintf(OUT,"%d\n",iOUT);
  fclose(IN);
  fclose(OUT);
}

2.


/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:将字符串中的小写字母转换为对应的大写字母,
      其它字符不变。

------------------------------------------------*/

#include "string.h"
#include <stdio.h>
void  wwjt(); 

void change(char str[])
{
  /**********Program**********/
  int i;
    for(i=0;str[i]!='\0';i++)
        if(str[i]>='a'&& str[i]<='z')
            str[i]=str[i]-32;
  
  
  
  
  /**********  End  **********/
}

main()
{
  char str[40];
  gets(str);
  change(str);
  puts(str);
  wwjt();
}

void wwjt()
{
  FILE *IN,*OUT;
  char i[200];
  IN=fopen("in.dat","r");
  if(IN==NULL)
  {
    printf("Read FILE Error");
  }
  OUT=fopen("out.dat","w");
  if(OUT==NULL)
  {
    printf("Write FILE Error");
  }
  fscanf(IN,"%s",i);
  change(i);
  fprintf(OUT,"%s\n",i);
  fclose(IN);
  fclose(OUT);
}


3.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个函数fun,它的功能是:比较两个字符串的长度,
(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符
串。若两个字符串长度相同,则返回第一个字符串。
    例如,输入beijing <CR> shanghai <CR>(<CR>为回车键),  
函数将返回shanghai。
-------------------------------------------------------*/

#include <stdio.h>
char  *fun ( char *s,  char *t)
{
/**********Program**********/  
    int n=0,m=0;
    char *p=s,*q=t;
    while(*p)
    {
        n++;
        *p++;
    }
    while(*q)
    {
        m++;
        *q++;
    }

    if(n>m)
        p=s;

    if(n<m)
        p=t;

    return p;

/**********  End  **********/
}

int main( )
{
        char a[20],b[20];
        printf("Input 1th string:") ;
        gets( a);
        printf("Input 2th string:") ;
        gets( b);
        printf("%s\n",fun (a, b ));
        return 0;
}

4.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编写一个函数,函数的功能是删除字符串中的所有
空格。例如, 主函数中输入"asd af aa z67", 
则输出为 "asdafaaz67"。
-------------------------------------------------------*/
#include <stdio.h>


void fun(char *str)
{
/**********Program**********/  

    int i=0;
    char*p=str;
    while(*p)    
 
    {
        if(*p!=' ')
        {
            str[i]=*p;
            i++;
        }
    p++;
    }
    str[i]='\0';

/**********  End  **********/   
}

int main()
{
  char str[81];
  printf("Input a string:") ;
  gets(str);
  puts(str);
  fun(str);
  printf("*** str: %s\n",str);
  return 0;
}


5.


/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:假定输入的字符串中只包含字母和*号。请编写函数fun,它的
功能是:除了尾部的*号之外,将字符串中其它*号全部删除。形参p已
指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供
的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,
删除后,字符串中的内容应当是: ABCDEFG*******。
-------------------------------------------------------*/
#include <stdio.h>
void  fun( char *a,  char *p)
{
/**********Program**********/  
    char *q;int i=0,k,j;
    for(q=a;q<p;q++)//q指向数组a的开头,在q遍历到p之前实行for循环:删除指针p之前的'*',注意这里q最终指向p的时候才结束循环
    {    if(*q!='*')a[i++]=*q;
        k=i;
    }
    for(q;*q;q++)//p指向q为起始位置,将最后一个字母以及之后的内容写入到数组a中,直到原字符串遍历结束,
    {a[k++]=*q;j=k;}//注意:由于j小于原字符串得到最后一个元素的下标,a数组的部分空间依旧是原来的字符
    a[j]='\0';    //为新数组添加结束标志,否则a数组的部分空间依旧会存储原字符串的部分字符。

/**********  End  **********/   
}

int main()
{  
   char  s[81],*t;
   printf("Enter a string:\n");gets(s);
   t=s;
   while(*t)t++;
   t--;
   while(*t=='*')t--;
   fun( s , t );
   printf("The string after deleted:\n");puts(s);
   return 0;
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值