山东科技大学pta题库浙大版《C语言程序设计(第3版)》题目集

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

函数体

练习5-1 求m到n之和 (10 分)

int sum( int m, int n )
{
    int res=0;
    for(int i=m;i<=n;i++)
        res+=i;
    return res;
}

练习5-2 找两个数中最大者 (10 分)

int max( int a, int b )
{
    return a>b?a:b;
}

练习5-3 数字金字塔 (15 分)

/* 你的代码将被嵌在这里 */
void pyramid( int n )
{
    for(int i=1;i<=n;i++)
    {
        for(int t=0;t<n-i;t++)
            printf(" ");
        for(int k=0;k<i;k++)
            printf("%-2d",i);
        printf("\n");
    }
}

习题5-1 符号函数 (10 分)

int sign(int x)
{
    if(x>0)
        return 1;
    else if(x<0)
        return -1;
    else
        return 0;
}

习题5-2 使用函数求奇数和 (15 分)

/* 你的代码将被嵌在这里 */
int even( int n )
{
    if(n%2==0)
        return 1;
    else
        return 0;
}
int OddSum( int List[], int N )
{
    int sum=0;
    for(int i=0;i<N;i++)
    {
        if(!even(List[i]))
            sum+=List[i];
    }
    return sum;
}

习题5-3 使用函数计算两点间的距离 (10 分)

/* 你的代码将被嵌在这里 */
double dist( double x1, double y1, double x2, double y2 )
{
    return sqrt(pow(x2-x1,2)+pow(y2-y1,2));
}

习题5-4 使用函数求素数和 (20 分)

/* 你的代码将被嵌在这里 */
int prime( int p )
{

    if(p<=1)
        return 0;
    else if(p==2)
        return 1;
    else
    {
        for(int i=2;i<=sqrt(p);i++)
        {
            if(p%i==0)
                return 0;
        }
        return 1;
    }
}
int PrimeSum( int m, int n )
{
    int sum=0;
    for(int k=m;k<=n;k++)
    {
        if(prime(k))
            sum+=k;
    }
    return sum;
}

习题5-5 使用函数统计指定数字的个数 (15 分)

int CountDigit( int number, int digit )
{
    if(number<0)
    {
        number*=-1;
    }
    int k=0;
 do
    {
        if(number%10==digit)
            k++;
        number/=10;
    }   while(number);
    return k;
}

习题5-6 使用函数输出水仙花数 (20 分)

/* 你的代码将被嵌在这里 */
int narcissistic( int number )
{
    int num=number;
    int n=0;
    while(num)
    {
        num/=10;
        n++;
    }
    double sum=0;
    num=number;
    while(num)
    {
        sum+=pow(num%10,n);
        num/=10;
    }
    if(sum==number)
        return 1;
    else
        return 0;
}
void PrintN( int m, int n )
{
    for(int k=m;k<n;k++)
    {
        if(narcissistic(k))
            printf("%d\n",k);
    }
}

习题5-7 使用函数求余弦函数的近似值 (15 分)

/* 你的代码将被嵌在这里 */
double fact(int n);
double funcos( double e, double x )
{
    int i=0,flag=1;
    double sum=0,temp;
    do{
        temp=pow(x,i)/fact(i);
        sum+=flag*temp;
        i+=2;
        flag*=-1;
    }while(temp>=e);
    return sum;
}
double fact(int n)
{
    double sum=1;
    for(int i=1;i<=n;i++)
        sum*=i;
    return sum;
}

习题6-1 分类统计字符个数 (15 分)

void StringCount( char s[] )
{
    char c;
    int letter=0,blank=0,digit=0,other=0;
    for(int i=0;(c=s[i])!='\0';i++)
    {
        if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
            letter++;
        else if(c==' '||c=='\n')
            blank++;
        else if(c>='0'&&c<='9')
            digit++;
        else
            other++;
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
}

习题6-2 使用函数求特殊a串数列和 (20 分)

int fn( int a, int n )
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        sum+=a*pow(10,i);
    }
    return sum;
}
int SumA( int a, int n )
{
    int sum=0;
    for(int i=1;i<=n;i++)
        sum+=fn(a,i);
    return sum;
}

习题6-3 使用函数输出指定范围内的完数 (20 分)


/* 你的代码将被嵌在这里 */
int factorsum( int number )
{
    int sum=1;
    for(int i=2;i<number;i++)
    {
        if(number%i==0)
            sum+=i;
    }
    return sum;
}
void PrintPN( int m, int n )
{
    int flag=0;
    for(int k=m;k<=n;k++)
    {
        if(factorsum(k)==k)
        {
            flag=1;
            printf("%d = %d",k,1);
            for(int i=2;i<k;i++)
            {
                if(k%i==0)
                    printf(" + %d",i);
            }
            printf("\n");
        }
    }
    if(flag==0)
        printf("No perfect number");
}

习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)

/* 你的代码将被嵌在这里 */
int fib( int n )
{
    if(n==1||n==2)
        return 1;
    else
    {
        int i=3;
        int x=1,y=1;
        while(i<=n)
        {
            int temp=y;
            y+=x;
            x=temp;
            i++;
        }
        return y;
    }
}
void PrintFN( int m, int n )
{
    int i,c=0;
    for(i=1;fib(i)<m;i++);
    while(fib(i)<=n)
    {
        if(c==0)
            printf("%d",fib(i));
         else
         printf(" %d",fib(i));
        c++;
        i++;
    }
    if(c==0)
        printf("No Fibonacci number");

}

习题6-5 使用函数验证哥德巴赫猜想 (20 分)

/* 你的代码将被嵌在这里 */
int prime( int p )
{
    if(p==1)
        return 0;
    else if(p==2)
        return 1;
    else
    {
        for(int i=2;i<=sqrt(p);i++)
        {
            if(p%i==0)
                return 0;
        }
        return 1;
    }
}
void Goldbach( int n )
{
    for(int k=1;k<=n;k++)
    {
        if(prime(k)&&prime(n-k))
        {
            printf("%d=%d+%d",n,k,n-k);
            break;
        }
    }
}

习题6-6 使用函数输出一个整数的逆序数 (20 分)

/* 你的代码将被嵌在这里 */
int reverse( int number )
{
    int flag=1;
    if(number<0){
        number*=-1;
        flag=-1;
    }
    int a[10],i=0;
    while(number)
    {
        a[i++]=number%10;
        number/=10;
    }
    double sum=0;
    int l=i;
    for(int k=0;k<i;k++)
    {
        sum+=a[k]*pow(10,--l);
    }
    return flag*sum;
}

练习8-2 计算两数的和与差 (10 分)

/* 你的代码将被嵌在这里 */
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
    *psum=op1+op2;
    *pdiff=op1-op2;
}

练习8-8 移动字母 (10 分)

/* 你的代码将被嵌在这里 */
void Shift( char s[] )
{
    char str1[80];
    strncpy(str1,s,3);;
    str1[3]='\0';
    char str2[80];
    strcpy(str2,s+3);
    strcat(str2,str1);;
  strcpy(s,str2);
}

习题8-1 拆分实数的整数与小数部分 (15 分)

void splitfloat( float x, int *intpart, float *fracpart )
{
    *intpart=(int)x;
    *fracpart=x-*intpart;
}

习题8-2 在数组中查找指定元素 (15 分)

/* 你的代码将被嵌在这里 */
int search( int list[], int n, int x )
{
    for(int i=0;i<n;i++)
    {
        if(list[i]==x)
            return i;
    }
    return -1;
}

习题8-3 数组循环右移 (20 分)

/* 你的代码将被嵌在这里 */
int ArrayShift( int a[], int n, int m )
{
    if(m>n)
        m%=n;
    sort(0,n-m-1,a);
    sort(n-m,n-1,a);
    sort(0,n-1,a);
}
void sort(int left,int right,int a[])
{
    if(left>right)
        return ;
    else
    {
        for(int i=0;i<=(right-left)/2;i++)
        {
            int temp=a[left+i];
            a[left+i]=a[right-i];
            a[right-i]=temp;
        }
    }
}

习题8-4 报数 (20 分)

void CountOff( int n, int m, int out[] )
{
    int i=0,j=0,k=0,cnt=0,a[MAXN]; 
    for(i=0;i<n;i++)//n个人从1开始报数 
        a[i] = i+1;
    i=0;
    while(cnt < n)
    {
        if(a[i]!=0)//没有出局 
            k++;
        if(k==m)//如果出局了 
        {
         
            k=0;//重新归零 
            cnt++;
            out[i]=cnt;//标记出局 
            a[i]=0;
        }
        i++;
        if(i==n)
            i=0;
    }
}

习题8-5 使用函数实现字符串部分复制 (20 分)

/* 你的代码将被嵌在这里 */
void strmcpy( char *t, int m, char *s )
{
    if(m>strlen(t))
        s[0]='\0';
        else
            strcpy(s,t+m-1);
}

习题8-6 删除字符 (20 分)

/* 你的代码将被嵌在这里 */
void delchar( char *str, char c )
{
    int k=0;
    for(int i=0;str[i]!='\0';i++)
    {
        if(str[i]==c)
            k++;
        else
            str[i-k]=str[i];
    }
    int l=strlen(str);
    str[l-k]='\0';
}

习题8-8 判断回文字符串 (20 分)

/* 你的代码将被嵌在这里 */
bool palindrome( char *s )
{
 int l=strlen(s);
 for(int i=0;i<l/2;i++)
 {
     if(s[i]!=s[l-1-i])
        return false;
 }
 return true;
}

习题8-9 分类统计各类字符个数 (15 分)

/* Your function will be put here */
void StringCount( char *s )
{
    char c;
    int Dletter,Lletter,blank,number,other;
    Dletter=Lletter=blank=number=other=0;
    for(int i=0;(c=s[i])!='\0';i++)
    {
        if(c>='A'&&c<='Z')
            Dletter++;
        else if(c>='a'&&c<='z')
            Lletter++;
        else if(c==' ')
            blank++;
        else if(c>='0'&&c<='9')
            number++;
        else
            other++;
    }
    printf("%d %d %d %d %d",Dletter,Lletter,blank,number,other);
}

习题9-2 计算两个复数之积 (15 分)

/* 你的代码将被嵌在这里 */
struct complex multiply(struct complex x, struct complex y)
{
    struct complex result;
    result.real=x.real*y.real-x.imag*y.imag;
    result.imag=x.real*y.imag+x.imag*y.real;
    return result;
};

习题9-6 按等级统计学生成绩 (20 分)

/* 你的代码将被嵌在这里 */
int set_grade( struct student *p, int n )
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        if(p[i].score>=85)
            p[i].grade='A';
        else if(p[i].score>=70)
            p[i].grade='B';
        else if(p[i].score>=60)
            p[i].grade='C';
        else
        {
            p[i].grade='D';
            count++;
        }
    }
    return count;
}

练习10-1 使用递归函数计算1到n之和 (10 分)

/* 你的代码将被嵌在这里 */
int sum( int n )
{
    if(n<1)
        return 0;
    else if(n==0)
        return 1;
    else
        return n+sum(n-1);
}

习题10-1 判断满足条件的三位数 (15 分)


/* 你的代码将被嵌在这里 */
int search(int n)
{
    int count=0;
    for(int k=101;k<=n;k++)
    {
        int l=sqrt(k);
        if(l*l==k)
        {
            int a[3],num=k,i=0;
            while(num)
            {
                a[i++]=num%10;
                num/=10;
            }
            int c=0;
            for(i=0;i<2;i++)
            {
                for(int j=i+1;j<3;j++)
                {
                    if(a[i]==a[j])
                        c++;
                }
            }
            if(c==1)
                count++;
        }
    }
    return count;
}

习题10-2 递归求阶乘和 (15 分)

/* 你的代码将被嵌在这里 */
double fact( int n )
{
   if(n==0)
        return 1;
   else
    return n*fact(n-1);
}
double factsum( int n )
{
    double sum=0;
    for(int k=1;k<=n;k++)
    {
        sum+=fact(k);
    }
    return sum;
}

习题10-3 递归实现指数函数 (15 分)


/* 你的代码将被嵌在这里 */
double calc_pow( double x, int n )
{
    if(n==1)
        return x;
    else
        return x*calc_pow(x,n-1);
}

习题10-4 递归求简单交错幂级数的部分和 (15 分)

/* 你的代码将被嵌在这里 */
double fn( double x, int n )
{
    if(n==1)
        return x;
    else
        return x*(1-fn(x,n-1));
}

习题10-5 递归计算Ackermenn函数 (15 分)

/* 你的代码将被嵌在这里 */
int Ack( int m, int n )
{

    if(m==0)
        return n+1;
   else if(m>0&&n==0)
        return Ack(m-1,1);
    else if(m>0&&n>0)
        return Ack(m-1,Ack(m,n-1));
}

习题10-6 递归求Fabonacci数列 (10 分)

/* 你的代码将被嵌在这里 */
int f( int n )
{
    if(n==0)
    return 0;
    else if(n==1)
        return 1;
    else
        return f(n-1)+f(n-2);
}

习题10-7 十进制转换二进制 (15 分)

/* 你的代码将被嵌在这里 */
void dectobin( int n )
{
    if(n<2)
        printf("%d",n);
    else
    {
        dectobin(n/2);
        printf("%d",n%2);
    }
}

习题10-8 递归实现顺序输出整数 (15 分)

void printdigits( int n )
{
    if(n<10)
        printf("%d\n",n);
    else
    {
        printdigits(n/10);
        printf("%d\n",n%10);
    }
}

习题11-1 输出月份英文名 (15 分)

/* 你的代码将被嵌在这里 */
char *getmonth( int n )
{
    char *month[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    if(n>12)
        return NULL;
    else
        return month[n-1];
}

习题11-2 查找星期 (15 分)

/* 你的代码将被嵌在这里 */
int getindex( char *s )
{
    char *web[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
   for(int i=0;i<7;i++)
    {
        if(strcmp(s,web[i])==0)
            return i;
    }
    return -1;
}

习题11-3 计算最长的字符串长度 (15 分)

/* 你的代码将被嵌在这里 */
int max_len( char *s[], int n )
{
    int max=-121212;
    for(int i=0;i<n;i++)
    {
        int l=strlen(s[i]);
        if(l>max)
            max=l;
    }
    return max;
}

习题11-4 字符串的连接 (15 分)

/* 你的代码将被嵌在这里 */
char *str_cat( char *s, char *t )
{
    char *str;
    str=strcat(s,t);
    return str;
}

习题11-5 指定位置输出字符串 (20 分)


/* 你的代码将被嵌在这里 */
char *match( char *s, char ch1, char ch2 )
{
    char *p;
    int i=0;
    for(i=0;s[i]!='\0'&&s[i]!=ch1;i++);
    p=s+i;
    while(s[i]!='\0')
    {
        printf("%c",s[i]);
        if(s[i]==ch2)
            break;
        i++;
    }
    printf("\n");
    return p;
}

习题11-6 查找子串 (20 分)

/* 你的代码将被嵌在这里 */
char *search( char *s, char *t )
{
    int i=0,j=0;
    while(s[i]!='\0'&&t[j]!='\0')
    {
        if(s[i]==t[j])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+1;
            j=0;
        }
    }
    if(t[j]!='\0')
        return NULL;
    else
        return s+i-strlen(t);
}

习题11-7 奇数值结点链表 (20 分)

/* 你的代码将被嵌在这里 */
typedef struct ListNode *List;
struct ListNode *readlist()
{
        List Lhead=(List)malloc(sizeof(struct ListNode));
        Lhead->next=NULL;
        List rear=Lhead;
        int a;
        scanf("%d",&a);
        while(a!=-1)
        {
            List s=(List)malloc(sizeof(struct ListNode));
            s->next=NULL;
            s->data=a;
            rear->next=s;
            rear=s;
            scanf("%d",&a);
        }
        rear->next=NULL;
        return Lhead->next;
};
struct ListNode *getodd( struct ListNode **L )
{
    List OddHead=(List)malloc(sizeof(struct ListNode));
    List Lhead=(List)malloc(sizeof(struct ListNode));
    Lhead->next=*L;
    List Orear=OddHead;
    List pre=Lhead,p=*L;
    List q;
    while(p)
    {
        if(p->data%2!=0)
        {
            q=p;
            p=p->next;
           pre->next=p;

           Orear->next=q;
           Orear=q;
        }
        else
        {
            pre=p;
            p=p->next;
        }
    }
    *L=Lhead->next;
    Orear->next=NULL;
    return OddHead->next;
};

习题11-8 单链表结点删除 (20 分)

/* 你的代码将被嵌在这里 */
typedef struct ListNode *List;
struct ListNode *readlist()
{
    List Lhead=(List)malloc(sizeof(struct ListNode));
    Lhead->next=NULL;
    List rear=Lhead;
    int a;
    scanf("%d",&a);
    while(a!=-1)
    {
        List s=(List)malloc(sizeof(struct ListNode));
        s->data=a;
        s->next=NULL;
        rear->next=s;
        rear=s;
        scanf("%d",&a);
    }
    return Lhead->next;
};
struct ListNode *deletem( struct ListNode *L, int m )
{
    List Lhead=(List)malloc(sizeof(struct ListNode));
    Lhead->next=L;
    List pre=Lhead,p=Lhead->next,q;
    while(p)
    {
        if(p->data==m)
        {
            q=p;
            p=p->next;
            pre->next=p;
            free(q);
        }else
        {
            pre=p;
            p=p->next;
        }
    }
    return Lhead->next;
};

编程题

练习2-1 Programming in C is fun! (5 分)

#include<stdio.h>
int main()
{
    printf("Programming in C is fun!");
}

练习2-3 输出倒三角图案 (5 分)

#include<stdio.h>
int main(){
   printf("* * * *\n");
   printf(" * * *\n");
   printf("  * *\n");
   printf("   *\n");
}

练习2-4 温度转换 (5 分)

#include<stdio.h>
int main()
{
    int  c=5*(150-32)/9;
    printf("fahr = 150, celsius = %d",c);
}

练习2-6 计算物体自由下落的距离 (5 分)

#include<stdio.h>
int main()
{
    double height=0.5*10*9;
    printf("height = %.2lf",height);
}

练习2-8 计算摄氏温度 (10 分)

#include<stdio.h>
int main()
{
    int f;
    scanf("%d",&f);
    int c=5*(f-32)/9;
    printf("Celsius = %d",c);
}

练习2-9 整数四则运算 (10 分)

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d + %d = %d\n",a,b,a+b);
    printf("%d - %d = %d\n",a,b,a-b);
     printf("%d * %d = %d\n",a,b,a*b);
      printf("%d / %d = %d\n",a,b,a/b);
}

练习2-10 计算分段函数[1] (10 分)

#include<stdio.h>
int main()
{
    double x;
    scanf("%lf",&x);
    if(x==0)
        printf("f(%.1lf) = %.1lf",x,0);
    else
          printf("f(%.1lf) = %.1lf",x,1.0/x);
}

练习2-11 计算分段函数[2] (10 分)

#include<stdio.h>
#include<math.h>
int main()
{
  double x,res;
  scanf("%lf",&x);
  if(x>=0)
  {
      res=sqrt(x);
  }
  else
  {
      res=pow(x+1,2)+2*x+1/x;
  }
  printf("f(%.2lf) = %.2lf",x,res);
}

练习2-12 输出华氏-摄氏温度转换表 (15 分)

#include<stdio.h>
int main()
{
    int lower,upper;
    scanf("%d %d",&lower,&upper);
    if(lower>upper){
        printf("Invalid.");
    }else{
    printf("fahr celsius\n");
    for(int k=lower;k<=upper;k+=2)
    {
        double c=5*(k-32)/9;
        printf("%d%6.1lf\n",k,c);
    }
    }
}

练习2-13 求N分之一序列前N项和 (15 分)

#include<stdio.h>
int main()
{
    int N;
    double sum=0;
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
    {
        sum+=(1.0/i);
    }
    printf("sum = %.6lf",sum);
}

练习2-14 求奇数分之一序列前N项和 (15 分)

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    int c=1;
    double sum=0;
    for(int k=1;c<=N;k+=2)
    {
        sum+=(1.0/k);
        c++;
    }
    printf("sum = %.6lf",sum);
}

练习2-15 求简单交错序列前N项和 (15 分)

#include<stdio.h>
int main()
{
    int N,f=1;
    scanf("%d",&N);
    int c=1;
    double sum=0;
    for(int i=1;c<=N;i+=3)
    {
        sum+=(f*1.0/i);
        f*=-1;
        c++;
    }
    printf("sum = %.3lf",sum);
}

练习2-17 生成3的乘方表 (15 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
    {
        printf("pow(3,%d) = %.0lf\n",i,pow(3,i));
    }
}

练习2-18 求组合数 (15 分)

#include<stdio.h>
double fact(int);
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    double res=fact(n)/fact(m)/fact(n-m);
    printf("result = %.0lf",res);
}
double fact(int n)
{
    double sum=1;
    for(int i=1;i<=n;i++)
        sum*=i;
    return sum;
}

习题2-1 求整数均值 (10 分)

#include<stdio.h>
int main()
{
    int a;
    double sum=0;
    for(int i=0;i<4;i++)
    {
        scanf("%d",&a);
        sum+=a;
    }
    double ave=sum/4;
    printf("Sum = %.0lf; Average = %.1lf",sum,ave);
}

习题2-2 阶梯电价 (15 分)

#include<stdio.h>
int main()
{
        int d;
        double price;
        scanf("%d",&d);
        if(d<0)
        {
            printf("Invalid Value!");
            return 0;
        }
        else if(d<=50)
            price=d*0.53;
            else
                price=50*0.53+(d-50)*0.58;
        printf("cost = %.2lf",price);
}

习题2-3 求平方与倒数序列的部分和 (15 分)

#include<stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    double sum=0;
    for(int k=m;k<=n;k++)
    {
        sum+=(pow(k,2)+1.0/k);
    }
    printf("sum = %.6lf",sum);
}

习题2-4 求交错序列前N项和 (15 分)

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    double temp,f=1;
    double k=1,t=1,sum=0;
    while(k<=N)
    {
        temp=f*k/t;
        sum+=temp;
        f*=-1;
        k++;
        t+=2;
    }
    printf("%.3lf",sum);
}

习题2-5 求平方根序列前N项和 (15 分)

#include<stdio.h>
#include<math.h>
int main()
{
    int N;
    scanf("%d",&N);
    double sum=0;
    for(int k=1;k<=N;k++)
    {
        sum+=sqrt(k);
    }
    printf("sum = %.2lf",sum);
}

习题2-6 求阶乘序列前N项和 (15 分)

#include<stdio.h>
int fact(int n)
{
    int sum=1;
    for(int k=1;k<=n;k++)
        sum*=k;
    return sum;
}
int main()
{
    int N,sum=0;
    scanf("%d",&N);
    for(int k=1;k<=N;k++)
        sum+=fact(k);
    printf("%d",sum);
}

练习3-2 计算符号函数的值 (10 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n<0)
        printf("sign(%d) = -1",n);
    else if(n==0)
        printf("sign(%d) = 0",n);
    else
        printf("sign(%d) = 1",n);
}

练习3-3 统计学生平均成绩与及格人数 (15 分)

#include<stdio.h>
int main()
{
    int n,a;
    int count=0,average,sum=0;
    scanf("%d",&n);
    if(n==0)
    {
         printf("average = %.1lf\ncount = %d",0,count);
         return 0;
    }
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a);
        if(a>=60)
            count++;
        sum+=a;
    }
    printf("average = %.1lf\ncount = %d",sum*1.0/n,count);

}

练习3-4 统计字符 (15 分)

#include<stdio.h>
int main()
{
    char c;
    int letter=0,blank=0,digit=0,other=0;
    for(int i=0;i<10;i++)
    {
        c=getchar();
        if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
            letter++;
        else if(c==' '||c=='\n')
            blank++;
        else if(c>='0'&&c<='9')
            digit++;
        else
            other++;
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
}

练习3-5 输出闰年 (15 分)\

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n>2100||n<=2000)
    {
        printf("Invalid year!");
        return 0;
    }
    int c=0;
    for(int k=2001;k<=n;k++)
    {
        if((k%4==0&&k%100!=0)||(k%400==0))
           {
               printf("%d\n",k);
               c++;
           }
    }
    if(c==0)
        printf("None");
}

练习3-7 成绩转换 (15 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a=n/10;
    char c;
    switch(a)
    {
    case 10:
    case 9:
        c='A';
        break;
    case 8:
        c='B';
        break;
    case 7:
        c='C';
        break;
    case 6:
        c='D';
        break;
    default:
        c='E';
    }
    printf("%c",c);
}

练习3-8 查询水果价格 (15 分)

#include<stdio.h>
int main()
{
   printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
   int a;
   double price;
   for(int i=0;i<5;i++)
   {
       scanf("%d",&a);
       switch(a)
       {
       case 1:
           price=3;
        break;
       case 2:
           price=2.5;
        break;
       case 3:
        price=4.1;
        break;
       case 4:
        price=10.2;
        break;
        case 0:
        return 0;
        break;
        default:
            price=0;
       }
        printf("price = %.2lf\n",price);
   }
   return 0;
}

习题3-1 比较大小 (10 分)

#include<stdio.h>
int main()
{
    int a[3];
    for(int i=0;i<3;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<3;i++)
    {
        for(int j=0;j<3-i;j++)
        {
            if(a[j+1]<a[j])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    printf("%d",a[0]);
    for(int i=1;i<3;i++)
    {
        printf("->%d",a[i]);
    }
}

习题3-2 高速公路超速处罚 (15 分)

#include<stdio.h>
int main()
{
    int s,lims;
    scanf("%d %d",&s,&lims);
    double rate=(s-lims)*1.0/lims*100;
    if(rate<10)
    {
        printf("OK");
    }
    else if(rate<50)
    {
      printf("Exceed %.0lf%%. Ticket 200",rate);
    }
    else
        printf("Exceed %.0lf%%. License Revoked",rate);
}

习题3-3 出租车计价 (15 分)

#include<stdio.h>
int main()
{
    double d;int t;
    scanf("%lf %d",&d,&t);
    double tprice=0,dprice=0;
        tprice+=(t/5*2);
    double temp;
    if(d<=3)
    {
        temp=10;
    }
    else if(d<=10)
    {
        temp=10+(d-3)*2;
    }
    else
    {
        temp=10+7*2+(d-10)*3;
    }
    dprice+=temp;
    printf("%.0lf",dprice+tprice);

}

习题3-4 统计学生成绩 (15 分)

#include<stdio.h>
int main()
{
    int A=0,B=0,C=0,D=0,E=0;
    int N,a;
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
        scanf("%d",&a);
        switch(a/10)
        {
        case 10:
        case 9:
            A++;
            break;
        case 8:
            B++;
            break;
        case 7:
            C++;
            break;
        case 6:
            D++;
            break;
        default:
            E++;
        }
    }
printf("%d %d %d %d %d",A,B,C,D,E);
}

习题3-5 三角形判断 (15 分)

#include<stdio.h>
int main()
{
    double x1,y1,x2,y2,x3,y3;
    scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
    double a=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
    double b=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
    double c=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
    if(a+b>c&&a+c>b&&b+c>a)
    {
        double h=a+b+c;
        double l=h/2;
        double area=sqrt(l*(l-a)*(l-b)*(l-c));
        printf("L = %.2lf, A = %.2lf",h,area);
    }
    else
    {
        printf("Impossible");
    }
    return 0;
}

练习4-3 求给定精度的简单交错序列部分和 (15 分)

#include<stdio.h>
int main()
{
    double eps;
    int k=1,f=1;
    scanf("%lf",&eps);
    double sum=0,temp;
    do{
        temp=1.0/k;
        sum+=f*temp;
        f*=-1;
        k+=3;
    }while(temp>eps);
    printf("sum = %.6lf",sum);
}

练习4-6 猜数字游戏 (15 分)

#include<stdio.h>
int main()
{
    int ran,n;
    scanf("%d %d",&ran,&n);
    int a;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        if(a<0)
            break;
        else if(a>ran)
            printf("Too big\n");
        else if(a<ran)
            printf("Too small\n");
        else
        {
            if(i==1)
                printf("Bingo!");
            else if(i==2||i==3)
                printf("Lucky You!\n");
            else if(i<=n)
                printf("Good Guess!\n");
            return 0;
        }
    }
    printf("Game Over");
    return 0;
}

练习4-7 求e的近似值 (15 分)

#include<stdio.h>
double fact(int);
int main()
{
    int n;
    scanf("%d",&n);
    double sum=1;
    for(int k=1;k<=n;k++)
        sum+=1/fact(k);
    printf("%.8lf",sum);
}
double fact(int n)
{
    double sum=1;
    for(int i=1;i<=n;i++)
        sum*=i;
    return sum;
}

练习4-10 找出最小值 (20 分)

#include<stdio.h>
int main()
{
    int n,a;
    scanf("%d",&n);
    int min=121212;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a);
        if(a<min)
            min=a;
    }
    printf("min = %d",min);
}

练习4-11 统计素数并求和 (20 分)\

#include<stdio.h>
int prime(int);
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    int sum=0,count=0;
    for(int k=m;k<=n;k++)
    {
        if(prime(k)){
            sum+=k;
            count++;
        }
    }
    printf("%d %d",count,sum);

}
int prime(int n)
{
    if(n==1)
        return 0;
    else if(n==2)
        return 1;
    else
    {
        for(int i=2;i<=sqrt(n);i++)
        {
            if(n%i==0)
                return 0;
        }
        return 1;
    }
}

习题4-1 求奇数和 (15 分)

#include<stdio.h>
int main()
{
    int sum=0;
    int a;
    scanf("%d",&a);
    while(a>0)
    {
        if(a%2!=0){
        sum+=a;
        }
        scanf("%d",&a);
    }
    printf("%d",sum);
}

习题4-2 求幂级数展开的部分和 (20 分)

#include<stdio.h>
double fact(int);
int main()
{
    double x,temp;
    scanf("%lf",&x);
    int i=0;
    double sum=0;
    do{
        temp=pow(x,i)/fact(i);
        sum+=temp;
        i++;
    }while(temp>=0.0000110);
    printf("%.4lf",sum);
}
double fact(int n)
{
    if(n==0)
        return 1;
    else
    {
        double sum=1;
        for(int i=1;i<=n;i++)
            sum*=i;
        return sum;
    }
}

习题4-3 求分数序列前N项和 (15 分)

#include<stdio.h>
int main()
{
    int c=1,N;
    scanf("%d",&N);
    double x=2,y=1;
    double temp,sum=0;
    while(c<=N)
    {
        sum+=(x/y);
        temp=x;
        x+=y;
        y=temp;
        c++;
    }
    printf("%.2lf",sum);
}

习题4-4 特殊a串数列求和 (20 分)

#include<stdio.h>
int main()
{
    int a,n;
    scanf("%d %d",&a,&n);
    int sum=0;
    for(int k=1;k<=n;k++)
        sum+=fact(k,a);
    printf("s = %d",sum);

}
int fact(int n,int a)
{
    double sum=0;
    for(int i=0;i<n;i++)
        sum+=a*pow(10,i);
    return sum;
}

习题4-5 换硬币 (20 分)

#include<stdio.h>
int main()
{
    int n,count=0;
    scanf("%d",&n);
    for(int i=n/5;i>=1;i--)
        for(int j=n/2;j>=1;j--)
            for(int k=n;k>=1;k--)
                if(5*i+2*j+k==n)
                {
                    printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);
                    count++;
                    }
printf("count = %d",count);
}

习题4-6 水仙花数 (20 分)

#include<stdio.h>
int Judge(int ,int);
int power(int ,int);
int main()
{
    int n;
    scanf("%d",&n);
    int x=power(10,n-1);
    int s=power(10,n);
    for(int k=x;k<s;k++)
    {
        if(Judge(k,n))
            printf("%d\n",k);
    }
    return 0;
}
int Judge(int num,int b)
{
    double sum=0;
    int t,n=num;
    while(num)
    {
        t=num%10;
        sum+=power(t,b);
        num/=10;
    }
    if(sum==n)
        return 1;
    else
        return 0;
}
int power(int d,int z)
{
    int sum=1;
    for(int i=1;i<=z;i++)
        sum*=d;
    return sum;
}

习题4-7 最大公约数和最小公倍数 (15 分)

#include<stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    int x=m,y=n;
    while(y)
    {
        int temp=x%y;
        x=y;
        y=temp;
    }
    printf("%d %d",x,m*n/x);
}

习题4-8 高空坠球 (20 分)

#include<stdio.h>
int main()
{
    int height,n;
    scanf("%d %d",&height,&n);
    if(n==0)
    {
        printf("%.1lf %.1lf",0,0);
        return 0;
    }
    double sum=height,h=height;
    int i=1;
    while(i<n)
    {
        sum+=h;
        h/=2;
        i++;
    }
    printf("%.1lf %.1lf",sum,h/2);
}

习题4-9 打印菱形图案 (15 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=(n+1)/2;i++)
    {
        for(int l=1;l<=(n+1)/2-i;l++)
            printf("  ");
        for(int k=1;k<=2*i-1;k++)
            printf("* ");
        printf("\n");
    }

    for(int i=1;i<=n/2;i++)
    {
        for(int l=1;l<=i;l++)
            printf("  ");
        for(int k=1;k<=n-2*i;k++)
            printf("* ");
        printf("\n");
    }
    return 0;
}

习题4-10 猴子吃桃问题 (15 分)

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    printf("%d",sum(N));
}
int sum(int n)
{
    if(n==1)
        return 1;
    else
        return 2*(sum(n-1)+1);
}

习题4-11 兔子繁衍问题 (15 分)

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    if(N==1)
    {
        printf("1");
        return 0;
    }
    int x=1,y=1;
    int i=2;
    while(y<N)
    {
        int temp=y;
        y+=x;
        x=temp;
        i++;
    }
    printf("%d",i);
}

习题6-7 简单计算器 (20 分)

#include<stdio.h>
int main()
{
    int a,b;
    int sum=0;
    char c;
    scanf("%d",&a);
    sum=a;
    scanf("%c",&c);
    while(c!='=')
    {
        scanf("%d",&b);
        switch(c)
        {
        case '+':
            sum+=b;
            break;
        case '-':
            sum-=b;
            break;
        case '*':
            sum*=b;
            break;
        case '/':
            if(b==0)
            {
                printf("ERROR");
                return 0;
            }
            sum/=b;
            break;
        default:
            printf("ERROR");
            return 0;
        }
        scanf("%c",&c);
    }
    printf("%d",sum);
}

习题6-8 统计一行文本的单词个数 (15 分)

#include<stdio.h>
int main()
{
    char s[1000];
    gets(s);
    char c;
    int num=0,word=0;
    for(int i=0;(c=s[i])!='\0';i++)
    {
        if(c==' ')
            word=0;
        else if(word==0)
        {
            num++;
            word=1;
        }
    }
    printf("%d",num);
}

练习7-2 求最大值及其下标 (20 分)

#include<stdio.h>
int main()
{
    int l,n,a;
    scanf("%d",&n);
    int max=-121212;
    for( int i=0;i<n;i++)
    {
        scanf("%d",&a);
        if(a>max)
        {
            l=i;
            max=a;
        }
    }
    printf("%d %d",max,l);
}

练习7-3 将数组中的数逆序存放 (20 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[15];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(int i=0;i<n/2;i++)
    {
        int temp=a[i];
        a[i]=a[n-1-i];
        a[n-1-i]=temp;
    }
    printf("%d",a[0]);
    for(int i=1;i<n;i++)
        printf(" %d",a[i]);
}

练习7-4 找出不是两个数组共有的元素 (20 分)

#include<stdio.h>
int main()
{
    int al,bl;
    int a[30],b[30],c[30];
    scanf("%d",&al);
    for(int i=0;i<al;i++)
        scanf("%d",&a[i]);


    scanf("%d",&bl);
    for(int i=0;i<bl;i++)
        scanf("%d",&b[i]);


    int i,j,k=0;
    for(i=0;i<al;i++)
    {
        for(j=0;j<bl;j++)
        {
            if(a[i]==b[j])
                break;
        }
        if(j==bl)
            c[k++]=a[i];
    }

    for(j=0;j<bl;j++)
    {
        for(i=0;i<al;i++)
        {
            if(a[i]==b[j])
                break;
        }
        if(i==al)
            c[k++]=b[j];
    }

    //去重复元素
    printf("%d",c[0]);
    for(i=1;i<k;i++)
    {
        for(j=0;j<i;j++)
            {
                if(c[i]==c[j])
                    break;
            }
            if(j==i)
            {
                printf(" %d",c[i]);
            }
    }
}

练习7-7 矩阵运算 (20 分)

#include<stdio.h>
int main()
{
    int i,j,n;
    scanf("%d",&n);
    int a[20][20];
    int sum=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
            sum+=a[i][j];
        }
    }
    int fu=0,zl=0;
    for(i=0;i<n;i++)
    {
        fu+=a[i][n-1-i];
        zl+=a[i][n-1];
    }

    int zh=0;
    for(j=0;j<n;j++)
        zh+=a[n-1][j];

    sum=sum-fu-zl-zh+a[0][n-1]+a[n-1][0]+a[n-1][n-1];
    printf("%d",sum);
}

练习7-8 方阵循环右移 (20 分)

//思路:不用改变矩阵,只要改变矩阵的输出顺序就可以
#include<stdio.h>
int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    int a[6][6];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    }
    m%=n;//当m大于n时,移动3次恢复原位,所欲取余,相当于移动m%n步
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%d ",a[i][(n-m+j)%n]);//这里的(n-m+j)%n记住
        }
        printf("\n");
    }

}

练习7-9 计算天数 (15 分)

#include<stdio.h>
int main(){
    int year,month,day,flag=0;
    scanf("%d/%d/%d",&year,&month,&day);
    //判断是不是闰年
    if((year%4==0&&year%100!=0)||(year%400)==0){
        flag=1;
    }
    int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int sum=0;
    for(int i=0;i<month-1;i++){
            sum+=mon[i];
            if(i==1&&flag==1){
                sum+=1;
            }
    }
    printf("%d",sum+day);
}

练习7-10 查找指定字符 (15 分)

#include<stdio.h>
#include<string.h>
int main()
{
    char c=getchar();
    getchar();
    char s[81];
    gets(s);
    int i;
    for(i=strlen(s);i>=0;i--)
        if(s[i]==c)
        {
           printf("index = %d",i);
           return 0;
        }

    if(i==-1)
            printf("Not Found");
    return 0;
}

练习7-11 字符串逆序 (15 分)

#include<stdio.h>
int main()
{
    char s[1000];
    gets(s);
    int l=strlen(s);
    for(int i=0;i<l/2;i++)
    {
        char c=s[i];
        s[i]=s[l-1-i];
        s[l-1-i]=c;
    }
    puts(s);
}

习题7-1 选择法排序 (20 分)

#include<stdio.h>
int main()
{
    int n,a[15];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int k=0;k<n-1;k++)
    {
        int l=k;
        for(int j=k+1;j<n;j++)
        {
            if(a[j]>a[l])
                l=j;
        }
        if(k!=l)
        {
            int temp=a[k];
            a[k]=a[l];
            a[l]=temp;
        }
    }
    printf("%d",a[0]);
    for(int i=1;i<n;i++)
        printf(" %d",a[i]);
}

习题7-2 求一批整数中出现最多的个位数字 (20 分)

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    int a[10];
    for(int i=0;i<10;i++)
        a[i]=0;
        int num;
    for(int i=0;i<N;i++)
    {
        scanf("%d",&num);
        while(num)
        {
            a[num%10]++;
            num/=10;
        }
    }
    int max=-12312;
    for(int i=0;i<10;i++)
    {
        if(a[i]>max)
            max=a[i];
    }
    printf("%d:",max);
    for(int i=0;i<10;i++)
    {
        if(a[i]==max)
            printf(" %d",i);
    }
}

习题7-3 判断上三角矩阵 (15 分)

#include<stdio.h>
int main()
{
    int T;
    scanf("%d",&T);
    int a[15][15];
    for(int i=0;i<T;i++)
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        int flag=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i>j&&a[i][j]!=0){
                        flag=1;
                }
            }
        }
            if(flag)
                printf("NO\n");
            else
                printf("YES\n");
    }
}

习题7-4 求矩阵各行元素之和 (15 分)

#include<stdio.h>
int main()
{
    int m,n,i,j;
    int a[10][10];int b[10];
    int sum=0;
    scanf("%d %d",&m,&n);
    for(i=0;i<m;i++)
    {
        sum=0;
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
            sum+=a[i][j];
        }
            b[i]=sum;
    }
    for(int t=0;t<i;t++)
        printf("%d\n",b[t]);
    return 0;
}

习题7-5 找鞍点 (20 分)

#include<stdio.h>
int main()
{
    int n,a[100][100];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<n;i++)
    {
            int maxl,max=-12121;
            for(int j=0;j<n;j++)
            {
                if(a[i][j]>=max)
                {
                    max=a[i][j];
                    maxl=j;
                }
            }
            int minl,min=121122;
            for(int t=0;t<n;t++)
            {
                if(a[t][maxl]<=min)
                {
                    min=a[t][maxl];
                    minl=t;
                }
            }
            if(minl==i)
            {
                printf("%d %d",minl,maxl);
                return 0;
            }
    }
    printf("NONE");
}

习题7-6 统计大写辅音字母 (15 分)

#include<stdio.h>
int main()
{
    char s[100];
    int c=0;
    gets(s);
    for(int i=0;s[i]!='\0';i++)
    {
        if(s[i]>='A'&&s[i]<='Z')
        {
          if(s[i]!='A'&&s[i]!='E'&&s[i]!='I'&&s[i]!='O'&&s[i]!='U')
          {
              c++;
          }
        }
    }
    printf("%d",c);
}

习题7-7 字符串替换 (15 分)

#include<stdio.h>
int main()
{
    char s[100];
    gets(s);
    for(int i=0;s[i]!='\0';i++)
    {
        if(s[i]>='A'&&s[i]<='Z')
        {
            s[i]='A'+'Z'-s[i];
        }
    }
    puts(s);
}

习题7-8 字符串转换成十进制整数 (15 分)

#include<stdio.h>
int main()
{
    char a[100],b[100],c[100];
    gets(a);
    int i,j=0;
    for(i=0;a[i]!='\0';i++)
    {
        if((a[i]=='-')||(a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='f')||(a[i]>='A'&&a[i]<='F'))
            b[j++]=a[i];
    }
    b[j]='\0';
    int f=1;
    if(b[0]=='-')
        f=-1;
    int k,t=0;
    for(k=0;b[k]!='\0';k++)
    {
        if((b[k]>='0'&&b[k]<='9')||(b[k]>='a'&&b[k]<='f')||(b[k]>='A'&b[k]<='F'))
            c[t++]=b[k];
    }
    c[t]='\0';
    double sum=0;
    int temp;
    for(int h=0;c[h]!='\0';h++)
    {
        if(c[h]>='0'&&c[h]<='9')
            temp=c[h]-'0';
        else if(c[h]>='A'&&c[h]<='F')
            temp=c[h]-'A'+10;
        else if(c[h]>='a'&&c[h]<='f')
            temp=c[h]-'a'+10;
        sum+=temp*pow(16,--t);
    }
    if(sum==0)
        printf("%.0lf",sum);
    else
    printf("%.0lf",f*sum);
}

习题8-7 字符串排序 (20 分)

#include<stdio.h>
int main()
{
    char *s[5];
    char str[100];
    for(int i=0;i<5;i++)
    {
        scanf("%s",&str);
        s[i]=(char*)malloc(sizeof(char)*(strlen(str)+1));
        strcpy(s[i],str);
    }
    for(int i=1;i<5;i++)
    {
        for(int j=0;j<5-i;j++)
        {
            if(strcmp(s[j],s[j+1])>0)
            {
                char *temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    printf("After sorted:\n");
    for(int i=0;i<5;i++)
        printf("%s\n",s[i]);
}

习题8-10 输出学生成绩 (20 分)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    double a,sum=0,max=-1212,min=12121;
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&a);
        sum+=a;
        if(a>max)
            max=a;
        if(a<min)
            min=a;
    }
    double average=sum/n;
    printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",average,max,min);
}

习题9-1 时间换算 (15 分)

#include<stdio.h>
int main()
{
    int h,m,s,n;
    scanf("%d:%d:%d",&h,&m,&s);
    scanf("%d",&n);
    s+=n;
    if(s>59)
    {
        m+=(s/60);
        s=s%60;
        if(m>59)
        {
            h+=(m/60);
            m=m%60;
            if(h>23)
                h=0;
        }
    }
    printf("%02d:%02d:%02d",h,m,s);
}

习题9-3 平面向量加法 (15 分)

#include<stdio.h>
int main()
{
    double x1,y1,x2,y2;
    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
    double x=x1+x2;
    double y=y1+y2;
    if(fabs(x)<0.05)
        x=0;
    if(fabs(y)<0.05)
        y=0;
    printf("(%.1lf, %.1lf)",x,y);
}

习题9-4 查找书籍 (20 分)

struct book
{
    char name[50];
    double price;
};
int main()
{
    int n;
    scanf("%d",&n);
    struct book b[n];
    for(int i=0;i<n;i++)
    {
        getchar();
        gets(b[i].name);
        scanf("%lf",&b[i].price);
    }
    struct book t;
    for(int i=1;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            if(b[j].price>b[j+1].price)
            {
                t=b[j];
                b[j]=b[j+1];
                b[j+1]=t;
            }
        }
    }
    printf("%.2lf, %s\n",b[n-1].price,b[n-1].name);
    printf("%.2lf, %s\n",b[0].price,b[0].name);
}

习题9-5 通讯录排序 (20 分)

#include<stdio.h>
struct TNode
{
    char name[20];
    int birth;
    char phone[20];
};
int main()
{
    int N;
    struct TNode T[10];
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
        getchar();
        scanf("%s %d %s",T[i].name,&T[i].birth,T[i].phone);
    }
    for(int i=0;i<N-1;i++)
    {
        int k=i;
        for(int j=i+1;j<N;j++)
        {
            if(T[j].birth<T[k].birth)
                k=j;
        }
        if(k!=i)
        {
            struct TNode temp=T[k];
            T[k]=T[i];
            T[i]=temp;
        }
    }
    for(int i=0;i<N;i++)
        printf("%s %d %s\n",T[i].name,T[i].birth,T[i].phone);
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由谭浩强教授著、清华大学出社出的《C程序设计》是一本公认的学习C语言程序设计的经典教材。根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三)》的基础上进行了修订。本书按照C语言的新标准C 99进行介绍,所有程序都符合C 99的规定,使编写程序更加规范;对C语言程序设计的基本概念和要点讲解透彻,全面而深入;按照作者提出的“提出问题—解决问题—归纳分析”三部曲进行教学、组织教材;本书的每个例题都按以下几个步骤展开:提出任务—解题思路—编写程序—运行程序—程序分析—有关说明。符合读者认知规律,容易入门与提高。   本书内容先进,体系合理,概念清晰,讲解详尽,降低台阶,分散难点,例题丰富,深入浅出,文字流畅,通俗易懂,是初学者学习C程序设计的理想教材,可作为高等学校各专业的正式教材,也是一本自学的好教材。本书还配有辅助教材《C程序设计(第四)学习辅导》。 《C程序设计》累计发行逾1100万册,不仅创同类书的全国最高纪录,在世界上也是罕见的。 《C程序设计(第四)》保持了前三的写作风格和概念清晰、通俗易懂的特点,并在以下几个方面作了修改: (1) 按照C99标准进行介绍,以适应C语言的发展,使编写程序更加规范 (2)采用编译系统 (3)加强算法,以程序设计为中心把算法与语言工具紧密结合 (4)通俗易懂,容易学习 (5)根据需要重新组织教材内容

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白鼠666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值