C程序设计 第四版(谭浩强)-学习笔记-第四天

/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:给一个不多于五位数的正整数,1.求它是几位数2.分别输出每一位数字3.按逆序输出各位数字 
    位置:C程序设计(第四版)2010年6月第四版 113页习题9
*/
#include<stdio.h>
int main()
{   
    int num,indiv,ten,hundred,thousand,ten_thousand,place;
    printf("请输入一个整数(0-99999)");
    scanf("%d",&num);
    if(num>9999)
        place=5;
    else if(num>999)
        place=4;
    else if(num>99)
        place=3;
    else if(num>9)
        place=2;
    else
        place=1;
    printf("位数:%d",place);
    printf("每位数字为:");
    ten_thousand=num/10000;
    thousand=(int)(num-ten_thousand*10000)/1000;//利用整型变量只能存储整数的特点 
    hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;//为什么要强制转换类型?(前面定义了整型变量) 
    ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
    indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
    switch(place)
    {
        case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);//不能用不同类型的输出符 
               printf("\n反序数字为:");
               printf("%d%d%d%d%d",indiv,ten,hundred,thousand,ten_thousand);    
               break;
        case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
               printf("\n反序数字为:");
               printf("%d%d%d%d",indiv,ten,hundred,thousand);   
               break;
        case 3:printf("%d,%d,%d",hundred,ten,indiv);
               printf("\n反序数字为:");
               printf("%d%d%d",indiv,ten,hundred);  
               break;
        case 2:printf("%d,%d",ten,indiv);
               printf("\n反序数字为:");
               printf("%d%d%",indiv,ten);   
               break;
        case 1:printf("%d,",indiv);
               printf("\n反序数字为:");
               printf("%d",indiv);   
    }
    return 0;
}
/*Dev-c++输出结果: 
    请输入一个整数(0-99999)98765
    位数:5每位数字为:9,8,7,6,5
    反序数字为:56789
*/
/*Dev-c++输出结果: 
    请输入一个整数(0-99999)1234
    位数:4每位数字为:1,2,3,4
    反序数字为:4321
*/
/*Dev-c++输出结果: 
    请输入一个整数(0-99999)321
    位数:3每位数字为:3,2,1
    反序数字为:123
*/
/*Dev-c++输出结果: 
    请输入一个整数(0-99999)98
    位数:2每位数字为:9,8
    反序数字为:89
*/
/*Dev-c++输出结果: 
    请输入一个整数(0-99999)5
    位数:1每位数字为:5,
    反序数字为:5
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 利润的分段计算 
    位置:C程序设计(第四版)2010年6月第四版 113页习题10
*/
#include<stdio.h>
int main()
{   
//if编写 
//  int i;
//  double bonus,bon1,bon2,bon4,bon6,bon10;
//  bon1=100000*0.1;
//  bon2=bon1+100000*0.075;
//  bon4=bon2+200000*0.05;
//  bon6=bon4+200000*0.03;
//  bon10=bon6+400000*0.015;
//  printf("请输入利润i:");
//  scanf("%d",&i);
//  if(i<100000)
//      bonus=i*0.1;
//  else if(i<=200000)
//      bonus=bon1+(i-100000)*0.075;
//  else if(i<=400000)
//      bonus=bon2+(i-200000)*0.05;
//  else if(i<=600000)
//      bonus=bon4+(i-400000)*0.03;
//  else if(i<1000000)
//      bonus=bon6+(i-600000)*0.015;
//  else
//      bonus=bon10+(i-1000000)*0.01;
//  printf("奖金是:%10.2f\n",bonus);   
//  return 0;

//switch编写
    int i; 
    double bonus,bon1,bon2,bon4,bon6,bon10;
    int branch;
    bon1=100000*0.1;
    bon2=bon1+100000*0.075;
    bon4=bon2+200000*0.05;
    bon6=bon4+200000*0.03;
    bon10=bon6+400000*0.015;
    printf("请输入利润i:");
    scanf("%d",&i);
    branch=i/100000;
    if(branch>10)
        branch=10;
    switch(branch)
    {
        case 0:bonus=i*0.1;
            break;
        case 1:bonus=bon1+(i-100000)*0.075;
            break;
        case 2:
        case 3:bonus=bon2+(i-200000)*0.05;
            break;
        case 4:
        case 5:bonus=bon4+(i-400000)*0.03;
            break;
        case 6:
        case 7:
        case 8:
        case 9:bonus=bon6+(i-600000)*0.015;
            break;
        case 10:bonus=bon10+(i-1000000)*0.01;
    }
    printf("奖金是:%10.2f\n",bonus);   
    return 0;
}
/*Dev-c++输出结果: 
    请输入利润i:100000
    奖金是:   10000.00
*/
/*Dev-c++输出结果: 
    请输入利润i:200000
    奖金是:  17500.00
*/
/*Dev-c++输出结果: 
    请输入利润i:400000
    奖金是:  27500.00
*/
/*Dev-c++输出结果: 
    请输入利润i:600000
    奖金是:  33500.00
*/
/*Dev-c++输出结果: 
    请输入利润i:1000000
    奖金是:  39500.00
*/
/*Dev-c++输出结果: 
    请输入利润i:234000
    奖金是:  19200.00
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 输入4个整数,要求按有小到大的顺序输出 
    位置:C程序设计(第四版)2010年6月第四版 113页习题11
*/
#include<stdio.h>
int main()
{   
    int t,a,b,c,d;
    printf("请输入4个整数a,b,c,d:");
    scanf("%d,%d,%d,%d",&a,&b,&c,&d);
    printf("输入的内容为:a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    if(a>c)
    {
        t=a;
        a=c;
        c=t;
    }
    if(a>d)
    {
        t=a;
        a=d;
        d=t;
    }
    if(b>c)
    {
        t=b;
        b=c;
        c=t;
    }
    if(b>d)
    {
        t=b;
        b=d;
        d=t;
    }
    if(c>d)
    {
        t=c;
        c=d;
        d=t;
    }
    printf("排序结果如下:\n");
    printf("%d\t%d\t%d\t%d\n",a,b,c,d);
    return 0;
}
/*Dev-c++输出结果: 
    请输入4个整数a,b,c,d:12,58,01,2
    输入的内容为:a=12,b=58,c=1,d=2
    排序结果如下:
    1       2       12      58
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 求建筑高度 
    位置:C程序设计(第四版)2010年6月第四版 113页习题12
*/
#include<stdio.h>
int main()
{   
    int h=10;
    float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
    printf("请输入一个点(x,y):");
    scanf("%f,%f",&x,&y);
    d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);//两点之间的距离公式:|AB|=sqrt(x1-x2)^2+(y1-y2)^2);因为半径为1平方后还是1,所以这里省略开根号 
    d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);
    d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);
    d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);
    if(d1>1 && d2>1 && d3>1 && d4>1)
        h=0;
    printf("该点高度为:%d\n",h);
    return 0;
}
/*Dev-c++输出结果: 
    请输入一个点(x,y):2,2
    该点高度为:10
*/
/*Dev-c++输出结果: 
    请输入一个点(x,y):0.5,0.7
    该点高度为:0
*/
/*Dev-c++输出结果: 
    请输入一个点(x,y):2,1.7
    该点高度为:10
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 累加 
    位置:C程序设计(第四版)2010年6月第四版 115页例5.1 
*/
#include<stdio.h>
int main()
{   
    int i=1,sum=0;
    while(i<=100)
    {
        sum=sum+i;
        i++;    
    }
    printf("sum=%d\n",sum);
    return 0;
}
/*Dev-c++输出结果: 
    sum=5050
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: break;
    位置:C程序设计(第四版)2010年6月第四版 126页例5.4 
*/
#include<stdio.h>
#define SUM 100000
int main()
{   
    float amount,aver,total;
    int i;
    for(i=1,total=0;i<=1000;i++)
    {
        printf("please enter amount:");
        scanf("%f",&amount);
        total+=amount;
        if(total>=SUM)
            break;//使流程调到循环体之外,接着执行循环体下面的语句 
    }
    aver=total/i;
    printf("num=%d\naver=%10.2f\n",i,aver);
    return 0;
}
/*Dev-c++输出结果: 
    please enter amount:12000
    please enter amount:24600
    please enter amount:3200
    please enter amount:5643
    please enter amount:21900
    please enter amount:12345
    please enter amount:2300
    please enter amount:23000
    num=8
    aver=  13123.50
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 要求输出100~200之间的不能被3整除的数 continue;
    位置:C程序设计(第四版)2010年6月第四版 126页例5.4 
*/
#include<stdio.h>
int main()
{   
    int n;
    for(n=100;n<=200;n++)
    {
        if(n%3==0)
            continue;//结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的表达式3(n++),然后进行下一次是否执行循环的判定 
        printf("%d\t",n);   
    }
    printf("\n");
    return 0;
}
/*Dev-c++输出结果: 
    100     101     103     104     106     107     109     110     112     113     115     116     118     119     121
    122     124     125     127     128     130     131     133     134     136     137     139     140     142     143
    145     146     148     149     151     152     154     155     157     158     160     161     163     164     166
    167     169     170     172     173     175     176     178     179     181     182     184     185     187     188
    190     191     193     194     196     197     199     200
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 输出以下4*5矩阵 
    位置:C程序设计(第四版)2010年6月第四版 128页例5.6 
*/
#include<stdio.h>
int main()
{   
    int i,j,n=0;
    for(i=1;i<=4;i++)
        for(j=1;j<=5;j++,n++)
        {
            if(n%5==0)
                printf("\n");
            printf("%d\t",i*j);
        }
    printf("\n");
    return 0;
}
/*Dev-c++输出结果: 

    1       2       3       4       5
    2       4       6       8       10
    3       6       9       12      15
    4       8       12      16      20
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 求π近似值(公式:π/4~~1-1/3+1/5-1/7+···) 
    位置:C程序设计(第四版)2010年6月第四版 131页例5.7
*/
#include<stdio.h>
#include<math.h>
int main()
{   
    int sign=1;
    double pi=0.0,n=1.0,term=1.0;
    while(fabs(term)>=1e-6) 
    {
        pi=pi+term;
        n=n+2;
        sign=-sign;
        term=sign/n;
    }
    pi=pi*4;
    printf("pi=%10.8f\n",pi);
    return 0;
}
/*Dev-c++输出结果: 
    pi=3.14159065
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 兔子问题(Fibonacci数列) 
    位置:C程序设计(第四版)2010年6月第四版 131页例5.8
*/
#include<stdio.h>
int main()
{
//方法一:  
//  int f1=1,f2=1,f3;
//  int i;
//  printf("%12d\n%12d\n",f1,f2);
//  for(i=1;i<=38;i++)
//  {
//      f3=f1+f2;
//      printf("%12d\n",f3);
//      f1=f2;
//      f2=f3;
//  } 
//  return 0;
//方法二:
    int f1=1,f2=1,f3;
    int i;
    for(i=1;i<=20;i++)
    {
        printf("%12d %12d",f1,f2);
        if(i%4==0)
            printf("\n");
        f1=f1+f2;
        f2=f2+f1;
    }
    return 0;
}
/*Dev-c++输出结果: 
               1
               1
               2
               3
               5
               8
              13
              21
              34
              55
              89
             144
             233
             377
             610
             987
            1597
            2584
            4181
            6765
           10946
           17711
           28657
           46368
           75025
          121393
          196418
          317811
          514229
          832040
         1346269
         2178309
         3524578
         5702887
         9227465
        14930352
        24157817
        39088169
        63245986
       102334155
*/
/*Dev-c++输出结果: 
               1            1           2            3           5            8          13           21
              34           55          89          144         233          377         610          987
            1597         2584        4181         6765       10946        17711       28657        46368
           75025       121393      196418       317811      514229       832040     1346269      2178309
         3524578      5702887     9227465     14930352    24157817     39088169    63245986    102334155
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:输入一个大于3的整数n,判定它是否为素数 
    位置:C程序设计(第四版)2010年6月第四版 131页例5.9
*/
#include<stdio.h>
#include<math.h>
int main()
{
//方法一: 
//  int n,i;
//  printf("please enter a integer number,n=?");
//  scanf("%d",&n);
//  for(i=2;i<=n-1;i++)
//      if(n%i==0)
//          break;
//  if(i<n)
//      printf("%d is not a prime number.\n",n);
//  else 
//      printf("%d is a prime number.\n",n);
//  return 0;
//方法二: 
    int n,i,k;
    printf("please enter a integer number,n=?");
    scanf("%d",&n);
    k=sqrt(n);
    for(i=2;i<=k;i++)
        if(n%i==0)
            break;
    if(i<k)
        printf("%d is not a prime number.\n",n);
    else 
        printf("%d is a prime number.\n",n);
    return 0;
}
/*Dev-c++输出结果: 
    please enter a integer number,n=?50
    50 is not a prime number.
*/
/*Dev-c++输出结果: 
    please enter a integer number,n=?327
    327 is not a prime number.
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:求100~200间的全部素数 
    位置:C程序设计(第四版)2010年6月第四版 131页例5.10
*/
#include<stdio.h>
#include<math.h>
int main()
{
    int n,k,i,m=0;
    for(n=101;n<=200;n=n+2)
    {
        k=sqrt(n);
        for(i=2;i<=k;i++)
            if(n%i==0)
                break;
        if(i>=k+1)
        {
            printf("%d ",n);
            m=m+1;
        }
        if(m%10==0)
            printf("\n");       
    }
    printf("\n");
    return 0;
}
/*Dev-c++输出结果: 
    101 103 107 109 113 127 131 137 139 149
    151 157 163 167 173 179 181 191 193 197
    199
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:密码转换问题 
    位置:C程序设计(第四版)2010年6月第四版 131页例5.11
*/
#include<stdio.h>
int main()
{
//方法一: 
//  char c;
//  c=getchar();
//  while(c!='\n')
//  {
//      if((c>='a' && c<='z') || (c>='A' && c<='Z'))
//      {
//          if((c>='W' && c<='Z') || (c>='w' && c<='z'))
//              c=c-22;//c=c+4-26
//          else
//              c=c+4; 
//      }
//      printf("%c",c);
//      c=getchar();    
//  }
//  printf("\n");
//  return 0;

//方法二:
    char c;
    while((c=getchar())!='\n')
    {
        if((c>='a' && c<='z') || (c>='A' && c<='Z'))
        {
            c=c+4;
            if(c>'Z' && c<='Z'+4 || c>'z') //大写字母不能等于,谭浩强书里面错误了 
                c=c-26;
        }
        printf("%c",c);
    }
    printf("\n");
    return 0; 
}
/*Dev-c++输出结果: 
    Y
    C
*/
/*Dev-c++输出结果: 
    abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    efghijklmnopqrstuvwxyzbcdEFGHIJKLMNOPQRSTUVWXYZABCD
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能: 求fabs(t)>=1e-6和fabs(t)>=1e-8的执行循环体次数 
    位置:C程序设计(第四版)2010年6月第四版 140页习题2 
*/
#include<stdio.h>
#include<math.h>
int main()
{   
    int sign=1,count=0;
    double pi=0.0,n=1.0,term=1.0;
    while(fabs(term)>=1e-10)
    {
        pi=pi+term;
        n=n+2;
        sign=-sign;
        term=sign/n;
        count++;
    }
    pi=pi*4;
    printf("pi=%10.8f\n",pi);
    printf("count=%d\n",count);
    return 0;
}
/*Dev-c++输出结果: 
    pi=3.14159065
    count=500000
*/
/*Dev-c++输出结果: 
    pi=3.14159263
    count=5000000
*/
/*Dev-c++输出结果: 
    pi=3.14159263
    count=50000000
*/
/*Dev-c++输出结果: 
    pi=3.14159265
    count=705032704
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:输入正整数m和n,求其最大公约数和最小公倍数 
    位置:C程序设计(第四版)2010年6月第四版 140习题3 
*/
#include<stdio.h>
int main()
{   
    int p,r,n,m,temp;
    printf("请输入两个正整数n,m:");
    scanf("%d,%d",&n,&m);
    if(n<m)
    {
        temp=n;
        n=m;
        m=temp;
    }
    p=n*m;
    while(m!=0)
    {
        printf("变化前:n=%d,m=%d,r=%d\n",n,m,r);
        r=n%m;//求余数 
        n=m;
        m=r;
        printf("变化后:n=%d,m=%d,r=%d\n",n,m,r);   
    }
    printf("它们的最大公约数为:%d",n);
    printf("它们的最小公倍数为:%d",p/n);
    return 0;
}
/*Dev-c++输出结果: 
    请输入两个正整数n,m:35,49
    它们的最大公约数为:7它们的最小公倍数为:245
*/
/*Dev-c++输出结果: 
    请输入两个正整数n,m:35,49
    变化前:n=49,m=35,r=0
    变化后:n=35,m=14,r=14
    变化前:n=35,m=14,r=14
    变化后:n=14,m=7,r=7
    变化前:n=14,m=7,r=7
    变化后:n=7,m=0,r=0
    它们的最大公约数为:7它们的最小公倍数为:245
*/


/*  创建时间:20171223
    创建人:fangweijun(773714759@qq.com)
    功能:输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数 
    位置:C程序设计(第四版)2010年6月第四版 140习题4 
*/
#include<stdio.h>
int main()
{   
    char c;
    int letters=0,space=0,digit=0,other=0;
    printf("请输入一行字符:\n");
    while((c=getchar())!='\n')
    {
        if(c>='a' && c<='z' || c>='A' && c<='Z')
            letters++;
        else if(c==' ')
            space++;
        else if(c>='0' && c<='9')
            digit++;
        else
            other++;
    }
    printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
    return 0;
}
/*Dev-c++输出结果: 
    请输入一行字符:
    454f5dg5 4-=-=g22a2g1ag./a,g;alaga
    字母数:15
    空格数:1
    数字数:10
    其他字符数:8
*/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值