西南石油大学 C语言程序设计作业程序题(万维考试系统)_西南石油大学c语言-程序员宅基地

技术标签: 数学建模  c++  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;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_76707390/article/details/131415917

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线

推荐文章

热门文章

相关标签