初见此题    是在cf上面看见的风流倜傥题关于计算几何的标题

C语言基本功考试题

//

// main.m

// C语言考试题库

//

// Created by MRBean on 15/5/20.

// Copyright (c) 2015年 MRBean. All rights reserved.

//

 

#import

 

澳门新葡萄京所有网站 ,/** 5 , 12题

* 判别多个数是还是不是是质数

*

* @param x 要一口咬住不放的数

*

* @return 再次来到0代表不是质数,1意味质数

*/

int isZhiShu(int x)

{

int count = 0;

for (int i=1; i<=x; i++) {

if (x%i==0) {

count++;

}

}

if (count==2) {

return 1;

}

return 0;

}

 

//=============================================================

 

/**

* 6.

* 写出叁个乘除三角形面积的函数

*/

typedef struct SanJiaoXing

{

double a;//三角形的一条边长度

double b;

double c;

 

}SanJiaoXing;//定义二个构造体变量,变量类型是 SanJiaoXing

 

double mianJi(SanJiaoXing s卡塔尔(قطر‎//第6题总结三角形的面积

{

 

double area = 0;//三角形的面积

if (s.a +s.b >s.c && s.a +s.c >s.b && s.b +s.c >s.a
卡塔尔国//能构成三角形的尺码是自由两边之和超过第三边

{

double r = (s.a + s.b + s.c)/2;

area = sqrt(r*(r-s.a)*(r-s.b)*(r-s.c卡塔尔国卡塔尔;//使用Hellen公式来计算面积

printf(“三角形的面积是 %g”,area卡塔尔;

return area;

}

else

{

printf(“不可能组成三角形!”);

return area;

 

}

 

 

}

//===============================================

 

/**

* 7.判别圆是还是不是重叠

*

*/

 

//定义三个圆结构体

typedef struct Circle

{

double x;//圆心的x坐标

double y;//圆心的y坐标

double r;//圆的半径

}Circle;

 

int chongDie(Circle a,Circle b)

{

double distance = sqrt(pow(a.x-b.x, 2卡塔尔(قطر‎+pow(a.y-b.y, 2卡塔尔(قطر‎卡塔尔;//圆心之间的间隔

double radiusSum = a.r+b.r;

if(distance

{

printf(“五个圆之间重叠!n”);

return 1;//重叠

}

else {

printf(“多少个圆不重叠!n”);

return 0;//不重叠

 

}

}

 

//====================================

/**

* 8.字符串加密

*

*/

 

char *JiaMi(char str[])

{

for (int i=0; str[i]; i++) {

if (str[i]==’z’) {

str[i]=’a’;

}

else if (str[i]==’Z’)

{

str[i]=’Z’;

}

else if ((str[i]>=’A’ && str[i]<=’Y’) ||
(str[i]>=’a’&&str[i]<=’y’))

{

str[i]++;

}

 

}

printf(“加密之后的字符串是 %s”,strState of Qatar;

return str;

}

 

//===============================================

/**

*
11.概念叁个3个极点(使用构造体卡塔尔国,判别该3个点是或不是能够组合三角形,即便得以组合三角形,计算三角形的面积(Hellen公式卡塔尔;不然打印”不能够组成三角形”.

*

*/

 

//定义就一个点组织体类型

typedef struct

{

double x;

double y;

}MPoint;

 

//依照三角形的多个终端总括其面积

double mianJi2(MPoint a,MPoint b,MPoint c)

{

double len1 = sqrt(pow(a.x-b.x, 2)+pow(a.y-b.y, 2State of Qatar卡塔尔;//ab之间的离开

double len2 = sqrt(pow(a.x-c.x, 2卡塔尔+pow(a.y-c.y, 2卡塔尔卡塔尔(قطر‎;//ac之间的离开

double len3 = sqrt(pow(c.x-b.x, 2State of Qatar+pow(c.y-b.y, 2State of Qatar卡塔尔;//cb之间的离开

double area = 0;//三角形的面积

if (len1+len2>len3 && len1+len3>len2 && len2+len3>len1)

{

double r = (len1 + len2 +len3)/2;

area = sqrt(r*(r-len1)*(r-len2)*(r-len3));

printf(“三角形的面积是%g”,area卡塔尔国;

return area;

}

 

else

{

printf(“那么些点不可能组成三角形!”);

return area;

}

 

}

 

 

//=================================================

 

 

 

 

 

 

 

 

 

int main(int argc, const char * argv[]) {

 

//==========================================

/**

* 1.输入四个正整数m,n。输出其最大契约数和最小公倍数

* 使用辗转相除法求多少个数a,b的最大公约数c

*/

 

// int m;

// int n;

// printf(“请输入四个数:n”);

// scanf(“%d%d”,&m,&n);

// int temp = m*n;//暂存m*n乘积,以便来计量最小公倍数

// int c = m%n;

// while (c!=0) {

// m = n;//除数作为被除数

// n = c;//余数作为除数

// c = m%n;

// }

// printf(“最大公约数:%d,最小公倍数%dn”,n,temp/n);

 

// ==============================================

/**

* 2,输入大器晚成行字符串,分别总结大写字母和小写字母的个数

*/

 

// char str[1000];

// int count1 = 0;//小写个数个数

// int count2 = 0;//大写

// printf(“请输入三个字符串n”);

// gets(str);

// for (int i=0; str[i]!=’’; i++) {

// if (str[i]>=’a’ && str[i]<=’z’) {

// count1++;

// }

// else if (str[i]>=’A’ && str[i]<=’Z’) {

// count2++;

// }

// }

// printf(“大写字母的个数是 %d,小写字母的个数是%d”,count1,count2State of Qatar;

 

//================================================

 

/**

* 3,输入八个正整数,a和n 程序输出 a+aa+aaa+…(a…a卡塔尔国(n个a卡塔尔(قطر‎的值

*/

 

// printf(“请输入三个整数n”);

// int a;

// int n;

// int fac = 0;//情势如 a,aa,aaa…的表达式

// int sum = 0;//计算和

// scanf(“%d%d”,&a,&n);

// for (int i=0; i

// {

// fac = fac*10+a;// aa = a*10+a,后二个对等前贰个数*10+a

// sum +=fac;

//

// }

// printf(“a+aa+aaa…. = %dn”,sum);

 

//=======================================================

 

 

/**

* 4,输入一个正整数n,求 1!+2!+…n!的值(n!表示n的阶乘)

*/

 

// int sum = 0;//记录阶乘之和

// int fac = 1;//记录 三个数的阶乘

// int n;//个数节制

// printf(“请输入贰个不超过10的整数n”);

// scanf(“%d”,&n);

// for (int i=1; i<=n; i++) {

// fac *=i;

// sum +=fac;

// }

//

// printf(“1!+2!+…+n! = %d”,sum);

 

 

//==================================================

 

/**

* 5,写四个料定质数的函数,在主函数中输入叁个整数,输出是还是不是为质数的音讯

*/

 

// int n;

// printf(“请输入一个卡尺头”卡塔尔(قطر‎;

// scanf(“%d”,&n);

// if (isZhiShu(n)==1) {

// printf(“是质数!n”);

// }

// else

// {

// printf(“不是质数!”);

// }

 

//==================================================

 

 

/**

*
6,定义三个结构体包含天船三边长度,写三个函数,输入那几个构造体变量,重临此三角形面积(注意三角形是不是有效难题)

*/

 

// SanJiaoXing s ;

// printf(“请输入三角形的三角n”);

// scanf(“%lf%lf%lf”,&s.a,&s.b,&s.c);

// mianJi(s卡塔尔国;//计算三角形的面积

//

 

 

//=================================================================

 

 

/**

*
7,定义三个构造体蕴涵圆心和半径,写叁个函数,输入多个构造体变量,再次回到三个圆是不是有重叠部分

*/

 

 

// Circle a;//第叁个圆

// Circle b;//第一个圆

// printf(“请输入第二个圆的圆心和半径n”);

// scanf(“%lf%lf%lf”,&a.x,&a.y,&a.r);

// printf(“请输入第一个圆的圆心和半径n”);

// scanf(“%lf%lf%lf”,&b.x,&b.y,&b.r);

// chongDie(a, b);

 

//================================================================

 

/**

* 8,写三个函数,将字符串加密,加密法则为,a->b z->a 就这样类推。

*/

 

// char s[1000];

// gets(s);

// JiaMi(s);

 

//================================================================

 

/**

* 9,客商输入10个数,再次来到最大和最小值

*/

 

// int a[10];

// int max = 0;

// int min = 0;

// printf(“输入10个数n”);

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

// {

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

// if(i==0)

// {

// max = a[0];

// min = a[0];

// }

//

// if (max <>

// {

// max=a[i];

// }

//

// if (min>a[i])

// {

// min =a[i];

// }

//

// }

// printf(“最大值为%dn最小值为%dn”,max,min);

//

// printf(“请输入拾个数n”);

// int a[10];

// for (int i=0; i<10; i++) {

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

// }

// int max = a[0];//最大值

// int min = a[0];//最小值

// for (int i=1; i<10; i++) {

// if (max

// max = a[i];

// }

// if (min>a[i]) {

// min = a[i];

// }

// }

//

// printf(“最大值是 %d,最小值是 %d”,max,min卡塔尔(قطر‎;

//

//===================================================================

 

/**

*

 

10,下列代码有和主题素材,请提出

 

int * p;

{

int a;//a出括号后会被放走

p = &a;

}

*p = 3;// 难题是: 野指针万分

 

*/

//===================================================================

 

/**

*
11.概念七个3个极点(使用构造体State of Qatar,推断该3个点是或不是能够构成三角形,如若得以组成三角形,计算三角形的面积(Hellen公式卡塔尔(قطر‎;不然打字与印刷”无法整合三角形”.

*/

 

// MPoint a;//三角形的极端

// MPoint b;

// MPoint c;

// printf(“请依次输入3个点!n”);

// scanf(“%lf%lf%lf%lf%lf%lf”,&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);

// mianJi2(a, b, c);

 

 

//===================================================================

 

/**

* 12.打印100个质数

*/

 

// int count = 0;//已经打字与印刷的质数的个数

// for (int i=1; count<=100; i++卡塔尔//循环条件是在
count<=100相当于还未找到玖19个质数就循环下去

// {

// if (isZhiShu(i卡塔尔(قطر‎==1卡塔尔国 {//境遇一个质数

// printf(“%d “,i);

// count++;

// }

//

// }

 

//===================================================================

 

/**

* 13.客商输入十一个数,计算平均值

*/

 

// double a[10];//用来保存14个数

// double avg;//平均值

// double sum = 0.0;

// printf(“请输入10个数n”);

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

// {

// scanf(“%lf”,&a[i]);

// sum+=a[i];

// }

//

// avg = sum/10;

// printf(“平均值是 %g”,avg卡塔尔(قطر‎;

 

//==================================================

 

/**

* 14.计算 1-2+3-4+5-6+…100的结果

*/

 

// int sum = 0;

// for ( int i=1; i<=100; i++)

// {

// if (i%2==0)

// {

// sum-=i;

// }

// else

// {

// sum+=i;

// }

// }

//

// printf(“和是 %d”,sum);

 

//=======================================================

 

 

/**

* 15.输入正整数n 程序输出 八分之生机勃勃+2/3+…n/n+1的值

*/

 

 

// int sum = 0;

// int n;

// printf(“请输入一个正整数!n”);

// scanf(“%d”,&n);

// for (int i=1; i<=n; i++)

// {

// sum+=i/(i+1);

// }

// printf(“计算之和是 %d”,sumState of Qatar;

 

//===================================================================

return 0;

}

// // main.m // C语言考试题库 //
// Created by MRBean on 15/5/20. // Copyright (cState of Qatar 二〇一五年 MRBean. All
rights reserved. // #import /** 5 , 12题 * 判断…

1.写三个函数,分别求七个整数的最大左券数和最小公倍数,用主函数调用那五个函数,并出口结果。几个整数由键盘输人。

然而那后生可畏题是求多个数的做大合同数   万般无奈  
只能将七个数的最大合同数找找求了出来

/*
时间:2011年11月29日11:54:34
标题:习题7.1写五个函数,分别求四个整数的最大左券数和最小公倍数
须求:用主函数调用那多个函数,并出口结果。五个整数由键盘输人。
备考:最小公倍数(Least Common Multiple卡塔尔(قطر‎简写为LCM;最大契约数(greatest
common divisor,简写为gcd
公式:两整数的乘积 等于 其最大合同数*最小公倍数
*/
# include <stdio.h>
int a,b;
int lcm,gcd;

求八个浮点数的最大协议数    有意气风发种很直观的情势便是将浮点数化成分数      
然后分别求出三个数的分母的最小公倍数和成员的最大契约数    
然后做除法运算   就求出来了七个浮点数的最大公约数。。。。

void sort(void);
void Least_Common_Multiple (void);
void greatest_common_divisor
(void);

代码如下:

int main()
{
    printf(“输入七个正整数:”卡塔尔国;
    scanf(“%d%d”,&a,&b);    
    sort();
    Least_Common_Multiple();
    greatest_common_divisor();
    return 0;
}

 

void sort (void)
{
    int t;
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    return;
}

#include <iostream>
#include <cstring>
#include <cmath>
#include <sstream>
#include <iomanip>
using namespace std;
int toint(string str)
{
    int n=0;
    stringstream stream;
    stream<<str;
    stream>>n;
    return n;
}
int gcd(int a,int b)
{
    int c=0;
    c=(a>b?b:a);
    int n;
    for(int i=1;i<=c;i++)
    { if(a%i==0&&b%i==0)
    n=i;

void Least_Common_Multiple (void)
{
    int n=1;
    do
    {
        lcm = n*a;
        ++n;
    }while(0!=lcm%b);
    printf(“最小公倍数是%dn”,lcm);
}

    }

void greatest_common_divisor
(void)
{
    gcd = a*b/lcm;
    printf(“最大左券数是%dn”,gcd);
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入八个正整数:12 18
最小公倍数是36
最大契约数是6
Press any key to continue
————————————
*/

    return n;
}

 
2.求方程ax^2+bx+c=0的根,用3个函数分别求当:b^2-4nc大于0、等于0和小于0
时的根并出口结果。从主函数输入a,b,c的值。

int main()
{
    string str1,str2;
    int x,y,z,w;
    cin>>str1>>str2;

/*
时间:2011年11月29日11:29:30
题目:习题7.2 求方程ax^2+bx+c=0的根,
须求:用3个函数分别求当:b^2-4nc大于0、等于0和小于0时的根并出口结果。
*/
# include <stdio.h>
# include <math.h>
double a,b,c;
double delta;
double x1,x2;

    int loc1=str1.find(“.”,0);
    string s1=str1.substr(0,loc1);
    int len1=str1.length()-loc1-1;
    string s2=str1.substr(loc1+1,str1.length());

void input(void);
void cal_delta (void);
void positive (void);
void negative (void);
void zero (void);

    int loc2=str2.find(“.”,0);
    string b1=str2.substr(0,loc2);
    int len2=str2.length()-loc2-1;
    string b2=str2.substr(loc2+1,str2.length());

int main()
{
    input();
    cal_delta();
    if(delta>0)
    {
        positive();
    }
    else if(0==delta)
    {
        zero();
    }
    else
    {
        negative();
    }
    return 0;
}

    int a1,a2,m1,m2;
    a1=toint(s1)*pow(10,len1)+toint(s2);
    a2=pow(10,len1);
    m1=toint(b1)*pow(10,len2)+toint(b2);
    m2=pow(10,len2);

void input(void)
{
    printf(“输入方程的周密:n”);
    printf(“a= “);
    scanf(“%lf”,&a);
    printf(“b= “);
    scanf(“%lf”,&b);
    printf(“c= “);
    scanf(“%lf”,&c);
    return;
}

    int m=gcd(a1,m1);
    int n=gcd(a2,m2);
    int lcm=a2*m2/n;

void cal_delta (void)
{    
    delta=b*b-4*a*c;
    return;
}

    double lcmr=1.0*m/lcm;
    cout<<setprecision(10)<<lcmr<<endl;
    return 0;
}

void positive (void)
{
    x1 = (-b + sqrt(delta))/(2*a);
    x2 = (-b – sqrt(delta))/(2*a);
    printf(“方程有七个实根:nx1=%0.2lf,x2=%0.2lfn”,x1,x2);
    return;
}

另生龙活虎种办法正是将原数乘以10^n(n小数位数卡塔尔(قطر‎,然后求新的得生龙活虎组数的最大左券数,然后再除以原数小数位数最少的10^n,这种形式绝对来讲比较轻松,就不再写代码了QAQ

void negative (void)
{
    double real,image;
    real = -b/(2*a);
    image = sqrt(-delta)/(2*a);    
    printf(“方程有多少个共轭的虚根:nx1=%0.2lf+%0.2lfi,x2=%0.2lf-%0.2lfin”,real,image,real,image);
    return;
}

void zero (void)
{
    x1 = (-b + sqrt(delta))/(2*a);
    printf(“方程有贰个实根:nx=%0.2lfn”,x1);
    return;
}

/*
在VC++6.0中的输出结果为:
————————————
输入方程的周密:
a= 1
b= 2
c= 1
方程有二个实根:
x=-1.00

Press any key to continue

输入方程的周全:
a= 1
b= 2
c= 3
方程有五个共轭的虚根:
x1=-1.00+1.41i,x2=-1.00-1.41i

Press any key to continue

输入方程的周全:
a= 1
b= 3
c= 2
方程有七个实根:
x1=-1.00,x2=-2.00
Press any key to continue
————————————
*/

 
3.写七个判素数的函数,在主函数输入三个板寸,输出是或不是为素数的新闻。

/*
时间:2011年11月29日10:51:21
题目:习题7.3
写一个判素数的函数,在主函数输入二个整数,输出是不是为素数的音信
*/
# include <stdio.h>
int Is_Prime (int number);

int main()
{
    int n;
    printf(“输入叁个整数: “State of Qatar;
    scanf(“%d”,&n);
    if(Is_Prime(n))
    {
        printf(“这么些数是素数n”);
    }
    else
    {
        printf(“那个数不是素数n”);
    }
    return 0;
}

int Is_Prime (int number)
{
    int i;
    for(i=2; i<number; ++i)
    {
        if(0==number%i)
        {
            return 0;
        }
    }
    if(i==number)
    {
        return 1;
    }
}

/*
在VC++6.0中的输出结果为:
————————————
输入叁个寸头: 2
其意气风发数是素数

Press any key to continue

输入二个莫西干发型: 4
其风度翩翩数不是素数
Press any key to continue
————————————
*/

 
4.写叁个函数,使给定的一个3×3的二维整型散组转置,即行列调换。

/*
时间:2011年11月29日10:40:55
难点:习题7.4
写叁个函数,使给定的叁个3×3的二维整型散组转置,即行列调换。
*/
# include <stdio.h>
# define N 3

void input (int a[N][N]);
void convert (int a[N][N]);
void output (int a[N][N]);

int main()
{
    int a[N][N];
    input(a);
    convert(a);
    output(a);
    return 0;
}

void input (int a[N][N])
{
    int i,j;
    printf(“输入%dX%d阶矩阵的值:n”,N,N);
    for(i=0; i<N; ++i)
    {
        for(j=0; j<N; ++j)
        {
            scanf(“%d”,&a[i][j]);
        }
    }
    return;
}

void convert (int a[N][N])
{
    int i,j;
    int t;
    for(i=0; i<N; ++i)
    {
        for(j=i; j<N; ++j)
        {
            t=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=t;
        }
    }
    return;
}

void output (int a[N][N])
{
    int i,j;
    printf(“转置后的矩阵:n”);
    for(i=0; i<N; ++i)
    {
        for(j=0; j<N; ++j)
        {
            printf(“%d “,a[i][j]);
        }
        printf(“n”);
    }
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入3X3阶矩阵的值:
1 2 3
4 5 6
7 8 9
转置后的矩阵:
1 4 7
2 5 8
3 6 9
Press any key to continue
————————————
*/

 
5.写三个函数,使输人的一个字符串按反序贮存,在主函数中输入和输出字符串。

/*
时间:2011年11月23日13:32:09
标题:习题7.5
写三个函数,使输人的一个字符串按反序贮存,在主函数中输入和出口字符串。
*/
# include <stdio.h>
# include <string.h>
# define N 100
void inverse (char str[]);

int main()
{
    char str[N];
    printf(“输入字符串n”);
    gets(str);
    inverse(str);
    printf(“逆序后的字符串:n”);
    puts(str);
    
    return 0;
}

void inverse (char str[])
{
    int i,j;
    char t;
    
    for(i=0; i<(strlen(str)/2); ++i)
    {
        j=strlen(str)-1-i;
        t=str[i];
        str[i]=str[j];
        str[j]=t;
    }
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入字符串
123abc
逆序后的字符串:
cba321
Press any key to continue
————————————
*/

 
6.写叁个函数,将多个字符串连接。

/*
时间:2011年11月29日13:17:03
难点:习题7.6 写二个函数,将多个字符串连接。
*/
# include <stdio.h>
# include <string.h>
# define N 100
void connect (char str1[],char str2[]);

int main()
{
    char str1[N],str2[N];
    gets(str1);
    gets(str2);
    connect(str1,str2);
    return 0;
}    

void connect (char str1[],char str2[])
{
    int i;
    char str[2*N];
    int len =
strlen(str1)+strlen(str2);
    for(i=0; i<strlen(str1); ++i)
    {
        str[i]=str1[i];
    }
    for(i=strlen(str1); i<len;
++i)
    {
        str[i]=str2[i-strlen(str1)];
    }
    for(i=0; i<len; ++i)
    {
        printf(“%c”,str[i]);
    }
    printf(“n”);
}
/*
在VC++6.0中的输出结果为:
————————————
12345
abcde
12345abcde
Press any key to continue
————————————
*/

 
7.写三个函数,将贰个字符串中的元音字母复制到另一字符串,然后输出。

/*
时间:2011年11月23日14:55:05
题材:习题7.7
写四个函数,将一个字符串中的元音字母复制到另一字符串,然后输出
*/
# include <stdio.h>
# include <string.h>
# define N 100
int vowel (char alphabet);

int main()
{
    char
str1[N],str2[N]={NULL};
    int i,j=0;
    
    printf(“输入字符串:n”);
    gets(str1);
    for(i=0; i<strlen(str1); ++i)
    {
        if(vowel(str1[i]))
        {
            str2[j]=str1[i];
            ++j;
        }
    }
    printf(“输出元音字母字符串:n”);
    puts(str2);
    return 0;
}

int vowel (char alphabet)
{
    switch (alphabet)
    {
    case ‘a’
:
    case ‘A’
:    
    case ‘e’
:
    case ‘E’
:    
    case ‘i’
:
    case ‘I’
:
    case ‘o’
:
    case ‘O’
:    
    case ‘u’
:
    case ‘U’
:            
        return 1;
    default :
        return 0;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
输入字符串:
I Love You
输出元音字母字符串:
Ioeou
Press any key to continue
————————————
*/

 
8.写八个函数,输人一个4位数字,供给输出那4个数字字符.但每三个数字间空几个空格。如输人1989.应输出“l
9 9 0”。

/*
时间:2011年11月23日15:28:51
标题:习题7.8 写八个函数,输人一个4位数字
务求:输出那4个数字字符.但每多个数字间空贰个空格。如输人一九八七.应输出”l
9 9 0″。

*/
# include <stdio.h>
# include <string.h>
# define N 100
void insert (char str[]);

int main()
{
    char str[N]={NULL};
    
    printf(“输入三个数字:n”);
    gets(str);
    insert(str);
    printf(“输出插入空格后的数字:n”);
    puts(str);
    return 0;
}

void insert (char str[]State of Qatar                //将字符串数组中第二个要素初步过后的成分挪到下标乘2的职位,在其前方插入空格
{
    int i;
    for(i=strlen(strState of Qatar-1; i>0; –i卡塔尔        //注意从后往前挪动
    {
        str[i*2]=str[i];
        str[i*2-1]=’
‘;
    }
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入多个数字:
1990
输出插入空格后的数字:
1 9 9 0
Press any key to continue
————————————
*/

 
9.编辑二个函数,由实参传来八个字符串,总计此字符串中字母、数字、空格和别的字符的个数.在主函数中输人字符串以至出口上述的结果。

/*
时间:2011年11月23日15:52:42
主题材料:习题7.9
编写叁个函数,由实参传来三个字符串,总括此字符串中字母、数字、空格和此外字
符的个数.在主函数中输人字符串以至出口上述的结果。
*/
# include <stdio.h>
# include <string.h>
# include <ctype.h>
# define N 100
int space=0;
int digit=0;
int alpha=0;
int other=0;
void count (char str[]);

int main()
{
    char str[N];
    
    printf(“输入字符串:n”);
    gets(str);
    count(str);
    printf(“空格%d个n数字%d个n字母%d个n别的字符%d个n”,space,digit,alpha,other);
    return 0;
}

void count (char str[])
{
    int i;
    for(i=0; i<(strlen(str)); ++i)
    {
        if(isalpha(str[i]))
        {
            ++alpha;
        }
        else if(isdigit(str[i]))
        {
            ++digit;
        }                
        else if(isspace(str[i]))
        {
            ++space;
        }
        else
        {
            ++other;
        }
    }
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入字符串:
I love you 1314!
空格3个
数字4个
字母8个
其他字符1个
Press any key to continue
————————————
*/

 
10.写三个函数.输入生龙活虎行字符,将此字符串中最长的单词输出。

/*
时间:2011年11月28日9:50:18
主题素材:习题7.10 写多少个函数.输入风华正茂行字符,将此字符串中最长的单词输出。
*/
# include <stdio.h>
# include <string.h>
# include <ctype.h>
# define N 100
void longest (char str[]);

int main()
{
    char str[N];
    printf(“输入黄金年代行字符:n”);
    gets(str);
    longest(str);
    return 0;
}

void longest (char str[])
{
    int n=0;
    int len=0;
    int i,j;
    for(i=0; i<strlen(str); ++i)
    {
        if(isalpha(str[i]))
        {
            ++n;
            if(n>len)
            {
                len=n;
                j=i;
            }
        }
        else
        {
            n=0;    
        }    
    }
    printf(“最长单词是:”卡塔尔国;
    for(i=j-len+1; i<=j; ++i)
    {
        printf(“%c”,str[i]);
    }
    printf(“n”);
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入朝气蓬勃行字符:
I love you
最长单词是:love
Press any key to continue
————————————
*/

 
11.写三个函数,用“起泡法”对输人的十五个字符按由小到西魏序排列。

/*
时间:2011年11月28日10:13:10
主题素材:习题7.11
写三个函数,用”起泡法”对输人的13个字符按由小到金朝序排列。
*/
# include <stdio.h>
# include <string.h>
# define N 10
void sort(char string[]);

int main()
{
    char str[N];
    printf(“输入10个字符:”);
    gets(str);
    while(10!=strlen(str))
    {
        printf(“输入的不是十叁个字符,请重新输入:”卡塔尔国;
        gets(str);
    }
    sort(str);
    return 0;
}

void sort(char string[])
{
    int i,j;
    char t;
    for(i=0; i<N-1; ++i)
    {
        for(j=i+1; j<N; ++j)
        {
            if(string[i]>string[j])
            {
                t=string[i];
                string[i]=string[j];
                string[j]=t;
            }
        }
    }
    printf(“排序后的字符为:n”);
    for(i=0; i<N; ++i)
    {
        printf(“%c”,string[i]);
    }
    printf(“n”);
    return;
}
/*
在VC++6.0中的输出结果为:
————————————
输入10个字符:13579
输入的不是十一个字符,请重新输入:2468013579
排序后的字符为:
0123456789
Press any key to continue
————————————
*/

 
12.用Newton迭代法求根。方程为。ax^3+bx^2+cx+d,全面a,b,c,d的值依次为1。2.3,4,由主函数输人。求方程在1东接的叁个实根。求出根后由主函数输出

/*
时间:2011年11月28日10:47:11
主题材料:习题7.12
用Newton迭代法求根。方程为。ax^3+bx^2+cx+d,全面a,b,c,d的值依次为1。2.
3,4,由主函数输人。求方程在1北邻的二个实根。求出根后由主函数输出
*/
# include <stdio.h>
# include <math.h>
double solut(double a, double b, double c, double d);

int main()
{
    double a,b,c,d;
    double x;
    
    printf(“输入方程参数:n”);
    printf(“a= “);
    scanf(“%lf”,&a);
    printf(“b= “);
    scanf(“%lf”,&b);
    printf(“c= “);
    scanf(“%lf”,&c);
    printf(“d= “);
    scanf(“%lf”,&d);
    x=solut(a,b,c,d);
    printf(“方程的根是:%lfn”,x);
    return 0;
}

double solut(double a, double b, double c, double d)
{
    double x1=1.0;
    double x0;
    double f,f1;
    do
    {
        x0=x1;
        f=((a*x0+b)*x0+c)*x0+d;
        f1=(3*a*x0+2*b)*x0+c;
        x1=x0-f/f1;
    }while(fabs(x1-x0)>=1e-6);
    return x1;
}
/*
在VC++6.0中的输出结果为:
————————————
输入方程参数:
a= 1
b= 2
c= 3
d= 4
方程的根是:-1.650629
Press any key to continue
————————————
*/

 
13 用递归法求n阶勒让德多项式的值

/*
时间:2011年11月28日11:12:56
标题:习题7.13 用递归法求n阶勒让德多项式的值
公式:Pn(X) =1  (n=0)
            =x  (n=1)
            =((2n-1)x-Pn-1(X)-(n-1)Pn-2(x))/n  (n>=1)
*/
# include <stdio.h>
double p(int n, int x);

int main()
{
    int n;
    int x;
    double f;
    printf(“输入勒让德多项式的阶数: “卡塔尔国;
    scanf(“%d”,&n);
    printf(“输入x的值: “);
    scanf(“%d”,&x);
    f=p(n,x);
    printf(“P%d(%d)=%.2lfn”,n,x,f);
    return 0;
}

double p(int n, int x)
{
    double f;
    switch (n)
    {
    case 0:
        f=1;
        break;
    case 1:
        f=x;
        break;
    default:
        f=((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n;
        break;
    }
    return f;
}
/*
在VC++6.0中的输出结果为:
————————————
输入勒让德多项式的阶数: 0
输入x的值: 2
P0(2)=1.00

Press any key to continue

输入勒让德多项式的阶数: 1
输入x的值: 2
P1(2)=2.00

Press any key to continue

输入勒让德多项式的阶数: 2
输入x的值: 2
P2(2)=1.50
Press any key to continue
————————————
*/

 
14.输入拾三个学子5门课的大成,达成以下功用
    1.寻思每一个学生的平均分
    2.计算每门课的平均分
    3.找寻装有四十八个分数中最高的分数对应的学生和科目
    4.测算平均分方差

/*
时间:2011年11月29日10:01:45
难点:习题7.14 输入十一个学生5门课的战表,完毕以下职能
功能:1.计量每一种学子的平分分
      2.思考每门课的平分分
      3.搜索全部肆十几个分数中最高的分数对应的上学的小孩子和课程
      4.总计平均分方差
*/
# include <stdio.h>
# define N 10
# define M 5

struct student
{
    double score[5];
};
double aver_stu[N];        //计算方差时要用,改为全局变量

void input (struct student stu[]);
void average_stu (struct student stu[]);
void average_cour (struct student stu[]);
void highest (struct student stu[]);
void variance (struct student stu[]);

int main()
{
    struct student stu[N];
    input(stu);
    average_stu(stu);
    average_cour(stu);
    highest(stu);
    variance(stu);
    return 0;
}

void input (struct student stu[])
{
    int i,j;
    for(i=0; i<N; ++i)
    {
        printf(“输入第%d位学子的成就: “,i+1卡塔尔国;
        for(j=0; j<M; ++j)
        {
            scanf(“%lf”,&stu[i].score[j]);
        }
    }
    return;
}

void average_stu (struct student stu[])
{
    int i,j;
    double sum;
    for(i=0; i<N; ++i)
    {
        sum=0;
        for(j=0; j<M; ++j)
        {
            sum+=stu[i].score[j];
        }
        aver_stu[i]=sum/M;
        printf(“第%d位学子的平分战表=%0.2lfn”,i+1,aver_stu[i]);
    }
    return;
}

void average_cour (struct student stu[])
{
    int i,j;
    double aver_cour[M];
    double sum;
    for(j=0; j<M; ++j)
    {
        sum=0;
        for(i=0; i<N; ++i)
        {
            sum+=stu[i].score[j];
        }
        aver_cour[j]=sum/N;
        printf(“第%d门课程的平分战表=%0.2lfn”,j+1,aver_cour[j]);
    }
    return;
}

void highest (struct student stu[])
{
    int i,j;
    int a,b;
    double max;
    max=stu[0].score[0];
    for(j=0; j<M; ++j)
    {
        for(i=0; i<N; ++i)
        {
            if(max<=stu[i].score[j])
            {
                max=stu[i].score[j];
                a=i+1;
                b=j+1;
            }
        }
    }
    printf(“成绩最高的是第%d位学子的第%d门课程,战表是%0.2lfn”,a,b,max);