文章目录
浙大版《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;
}