PTA-刘二

浙大版《C语言程序设计(第3版)》

01

本题要求实现函数输出n行数字金字塔。

函数接口定义:
void pyramid( int n );

其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行数字金字塔。

注意每个数字后面跟一个空格。
在这里插入图片描述

#include <stdio.h>
void main()
{
    
    
	void pyramid( int n );
	int n;
	printf("请输入n:");
	scanf("%d",&n);
	pyramid(n);
	 
}
void pyramid( int n )
{
    
    
	int i;
	for(i=1;i<=n;i++)
	{
    
    
		//空格输出
		int j;
		for(j=n-i;j>0;j--)
			printf(" "); 
		//输出数字
		int k;
		for(k=1;k<=i;k++)
		{
    
    
			printf("%d ",i);
		 } 
		 printf("\n");
	}
}

02

本题要求实现一个求整数的逆序数的简单函数。

函数接口定义:
int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

树状数组

3 5 4 8 2 6 9

大体思路为:新建一个数组,将数组中每个元素置0

0 0 0 0 0 0 0

取数列中最大的元素,将该元素所在位置置1

0 0 0 0 0 0 1

统计该位置前放置元素的个数,为0

接着放第二大元素8,将第四个位置置1

0 0 0 1 0 0 1

统计该位置前放置元素的个数,为0

继续放第三大元素6,将第六个位置置1

0 0 0 1 0 1 1

统计该位置前放置元素的个数,为1

这样直到把最小元素放完,累加每次放元素是该元素前边已放元素的个数,这样就算出总的逆序数来了

刘二

实验六 字符数组

实验七 函数

求两数最大值

#include<stdio.h>
void max(int a ,int b)
{
    
    
	int m = (a>b)? a:b;
	printf("%d",m);
}
void main()
{
    
    
	int a,b;
	scanf("%d,%d",&a,&b);
	max(a,b);
}

简单排序

#include<stdio.h>
#include<stdio.h>
#include<time.h>

void sort(int [],int );


void main()
{
    
    
	srand((unsigned int)time(NULL));
	int a[10],i,j;
	for(i=0;i<10;i++)
	{
    
    
		a[i] = rand()%101;
		// 在 0-100之间 
	}
	sort(a,10) ;
	for(i=0;i<10;i++)
	{
    
    
		printf("%d\t",a[i]); 
	 } 
	 printf("\n");
}

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

递归法求阶乘

#include<stdio.h>

#include<time.h>

double factorial(int n);
void main()
{
    
    
	printf("%lf",factorial(5));
}


double factorial(int n)
{
    
    
	if(n==0)
		return 1;
	else
		return n*factorial(n-1);
}

拓展

用factorial函数求使
x! == x^3-10x成立的数

注意
相等需要写一个equl函数

#include<stdio.h>
#include<math.h>
#define epi 1e-6

int isequl(double x,double y);
double factorial(int n);


void main()
{
    
    
	int i;
	for(i=1;i<10;i++)
	{
    
    
		if(isequl(factorial(i),pow(i,3)-10*i))
			printf("%d",i);
	}
}

int isequl(double x,double y)
{
    
    
	if(fabs(x-y)>epi)
		return 0;
	else 
		return 1;
}
double factorial(int n)
{
    
    
	if(n==0)
		return 1;
	else
		return n*factorial(n-1);
}


4

浮点型 --离散的

第六题

在这里插入图片描述

#include<stdio.h>
#include<math.h>
#define epi 1e-6


double combination(int m,int n); 
double factorial(int n);


void main()
{
    
    
	printf("%lf",combination(10,2));
}

double factorial(int n)
{
    
    
	if(n==0)
		return 1;
	else
		return n*factorial(n-1);
}

double combination(int m,int n)
{
    
    
	return factorial(m)/(factorial(n)*factorial(m-n));
}

第七题

在这里插入图片描述
??? 指针
??? 结构体??

#include<stdio.h>
#include<math.h>

double delta(double a,double b,double c);



void main()
{
    
    
	printf("%f\n",delta(3,4,5));
}

double delta(double a,double b,double c)
{
    
    
	return b*b - 4*a*c;
}

实验八 指针

第一题

在这里插入图片描述
用指针遍历数组!!!!!

#include<stdio.h>
#include<math.h>

void main(){
    
    
	int a[10];
	int *p = a,*q = a+9;

//   输入数组
	for(p=a;p<a+10;p++){
    
    
		scanf("%d",p);
	}
// 两个指针交换指向的元素
	for(p=a,q<a+19;p<q;p++,q--){
    
    
		int tmp = *p;
		*p = *q;
		*q = tmp;		
	}
// 输出
	for(p=a;p<a+10;p++){
    
    
		printf("%d\t",*p);
	}
}

题目 2

在这里插入图片描述

#include<stdio.h>
void main()
{
    
    
	char a[100],t,*q,*p;
	gets(a);
	//  直到q 指针指到了'\0'才结束 
	for(q=a;*q!='\0' ;q++);
	//q指针直到最后一个元素 
	q--;
	for(p=a;p<q;p++,q--) 
	{
    
    
		char t = *p;
		*p = *q;
		*q = t;
	}
	puts(a);
 } 

第三题

在这里插入图片描述

#include<stdio.h>
#define len 5
void main()
{
    
    
	int a[len],t;
	int *p,*max,*min;
	for(p=a;p<a+len;p++)
	{
    
    
		scanf("%d",p);
	}
	
	for(p=a;p<a+len;p++)
		printf("%d\t",*p);
	printf("\n");
	
	max = min = a;
	for(p=a+1;p<a+len;p++)
	{
    
    
		if(*p>*max)
			max = p;
		if(*p<*min)
			min = p;
	}
	
#include<stdio.h>
#define len 5
void main()
{
    
    
	int a[len],t;
	int *p,*max,*min,max1,min1;
	for(p=a;p<a+len;p++)
	{
    
    
		scanf("%d",p);
	}
	
	for(p=a;p<a+len;p++)
		printf("%d\t",*p);
	printf("\n");
	
	max = min = a;
	for(p=a+1;p<a+len;p++)
	{
    
    
		if(*p>*max)
			max = p;
		if(*p<*min)
			min = p;
	}
	
//	printf("%d,%d",*max,*min);

	p = a+9;
	t = *p;
	*p = *max;
	*max = t;

	if(min==a+9) 
   		min=max;

	p = a;
	t = *p;
	*p = *min;
	*min = t;
	
	for(p=a;p<a+len;p++)
		printf("%d\t",*p);
}

第四题

在这里插入图片描述

#include<stdio.h>

int strlen(char *s);
char * strcpy(char *t,char *s);

void main()
{
    
    
	char s1[20],s2[20];
	gets(s1);
	printf("length:%d\n",strlen(s1)); 
	printf("copy:%s\n",strcpy(s2,s1));
}








 字符串的复制 
char * strcpy(char *t,char *s)
	{
    
    
	char *result = t;
	while(*t++ = *s++)
		return result;
	}


// 求长度 
int strlen(char *s)
{
    
    
	char *p;
	for(p=s;*p!='\0';p++)
		return p-s;
}

实验九 结合体

实验十 文件操作

猜你喜欢

转载自blog.csdn.net/weixin_51552144/article/details/121594911