签到

05月08日
尚未签到

共有回帖数 0

    popy

    等级:
    /**************************************************************
    7.12 有一行电文,已经按下面规律译成密码:
            A=Z   a=z    B=Y   b=y    C=X  c=x  ......
            即第1个字母变成第26个字母、第i个字母变成
            第(26-i+1)个字母。非字母字符不变。编程将密
            码译回原文,并输出密码和原文。
    *****************************************************************/
    #includestdio.h
    void main()
    {
      int i,n;
      char ch[80],tr[80];
      n=0;
      printf("n请输入密码");
      gets(ch);
      for(i=0;ch!='';i++)
      {
         if(ch='a'&&ch='z')
    tr=219-ch;
         else if(ch='A'&&ch='Z')
    tr=155-ch;
         else tr=ch;
     }
     n=i;
     printf("n密码为:");
     for(i=0;in;i++)
     printf("%c",tr);
     printf("n");
    }
    /**********************************************************
    7.13 编一程序,把2个字符串连接起来,不要
    使用strcat()函数。
    **********************************************************/
    #includestdio.h
    void main()
    {
    char ch1[80],ch2[40];
    int i,j;
    printf("请输入字符串ch1:");
    scanf("%s",ch1);
    printf("请输入字符串ch2:");
    scanf("%s",ch2);
    for(i=0;ch1!='';i++)
    ;
    for(j=0;ch2[j]!='';j++)
    {
    ch1=ch2[j];
    i++;
    }
    printf("两个字符串合为:%s",ch1);
    }

    /*************************************************************************
    8.15 编写源程序,它包括下面几个模块:
    1、完成输入10个职工的姓名和职工号的函数input()。
    2、按职工号从小到大排序,姓名顺序也随之调整的函数sort()。
    3、输入一个职工号,用折半查找法找出该职工的姓名的函数search()
    4、主函数。主函数依次作下述工作:
    1)调用input(),输入职工工号和姓名。
    2)调用sort(),对工号和姓名排序。
    3)调用search(),输入一个工号,输出职工姓名。
    *************************************************************************/

    #includestdio.h
    #includestring.h
    #define N 10
    void main()
    {void input(int[],char name[][8] );
    void sort(int [],char name[][8]);
    void search(int ,int[],char name[][8]);
    int num[N],number,flag=1,c;
    char name[N][8];
    input(num,name);
    sort(num,name);
    while(flag==1)
    {printf("n input number to look for:");
    scanf("%d",&number);
    search(number,num,name);
    printf("continue or not (Y/N)?");
    getchar();
    c=getchar();
    if (c=='N'||c=='n')
    flag=0;
    }
    }
    void input(int num[], char name[N][8])
    { int i;
    for(i=0;iN;i++)
    {printf("n input No.:");
    scanf("%d",&num);
    printf("input name:");
    getchar();
    gets(name);
    }
    }

    void sort(int num [],char name[N][8])
    { int i,j ,min,templ;
    char temp2[8];
    for(i=0;i,N-1;i++)
    {min =i;
    for(j=i;jN;j++)
    if (num[min]num[j])
    min=j;
    templ=num;
    strcpy(temp2,name);
    num=num[min];

    strcpy(name,name[min]);
    num[min]=templ;
    strcpy(name[min] ,temp2) ;
    }
    printf("n result:n");
    for(i=0;iN;i++)
    printf("n %5d%10s",num,name);
    }


    void search(int n ,int num[],char name[N][8])

    { int top bott,mid,loca,sign;
    top=0;
    bott=N-1;
    loca=0;
    sign=1;
    if((nnum[0])||(nnum[N-1]))
    loca=-1;
    while((sign==1)&&(top=bott))
    { mid=(bott+top)/2;
    if (n==num[mid])
    {
    loca=mid;
    printf("No. %d,his name is %s.n",n,name[loca]);
    sign=-1;
    }
    else if (nnum[mid])
    bott=mid-1;
    else  
    top=mid+1;
    }
    if (sign==1||loca==-1)
    printf("can not find %d.n",n);
    }

    { int top bott,mid,loca,sign;  
    这里个逗号,应该为
    { int top,bott,mid,loca,sign;
    /***********************************************************************
    8.e1 编写程序,验证歌德巴赫猜想。
    歌德巴赫猜想:任何≥6的偶数都可以表示成2个素数之和。
    提示:编写一个函数prime(x),用来判断x是否素数。
    主函数接受用户输入的偶数n(n=6)
    对i=6~n,找出一对j、k,使得: j和k都是素数。并且 i 等于 j + k 。
    输出i、j、k。
    ************************************************************************/
    #include stdio.h  
    void main ()
    {  
    int n,i,j;  
    printf("请输入任何大于或等于6的偶数:");
    scanf ("%d",&n);
    printf ("%d=",n);  
    if (n&1)  
    {printf ("3+"); n-=3;}  
    for(i=2;in;i++)  
    {  
    for (j=2;j*j=i;j++)  
    if (i%j==0) break;  
    if (j*j=i) continue;  
    for (j=2;j*j=n-i;j++)  
    if ((n-i)%j==0) break;  
    if (j*j=n-i) continue;  
    break;  
    }  
    printf ("%d+%dn",i,n-i);  
    return 1;  
    }

    8.17、用递归法将一个整数n转换成字符串,例如输入483,应输出字符串"4,8,3,"。n的位数不确定、可以是任意位数的整数。 不要使用系统提供的sprintf()函数,输出屏幕只显示4,8,3,不显示双引号。

    输入整数 a
    a 是负数
    是 否
    输出负数
    使a变为整数
    递归调用f函数输出字符

    #includestdio.h
    void main()
    {
    void f(int n);
    int a;
    printf("请输入整数:");
    scanf("%d",&a);
    printf("输出:");
    if(a0)
    {
    putchar('-');
    a=-a;
    }
    f(a);
    putchar('n');
    }
    void f(int n)
    {
    int i;
    if((i=n/10)!=0)
    f(i);
    putchar(n%10+'0');
    }

    /*************************************************
    6.e1 编程解百文买百鸡问题。
    “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;
    百钱买百鸡,问翁、母、雏各几何?”
    *************************************************/
    #includestdio.h
    void main()
    {
    int x,y,z;
    for(x=0;x=100/5;x++)
    {
    for(y=0;y=100/3;y++)
    {
    z=100-x-y;
    if(5*x+3*y+z/(3.0)==100)
    printf("翁为%d,母为%d,雏为%dn",x,y,z);
    }
    }
    }

    /********************************************
    6.14 编程输出以下图形:

    *
    ***
    *****
    *******
    *****
    ***
    *
    ********************************************/
    #includestdio.h
    void main()
    {
    int a,b,i,j;
    for(i=1;i=4;i++)
    {
    a=2*i-1;
    b=(7-a)/2;
    for(;b=1;b--)
    {
    printf(" ");
    }
    for(j=1;j=a;j++)
    {
    printf("*");
    }  
    printf("n");
    }
    for(i=3;i=1;i--)
    {
    a=2*i-1;
    b=(7-a)/2;
    for(;b=1;b--)
    {
    printf(" ");
    }
    for(j=1;j=a;j++)
    {
    printf("*");
    }  
    printf("n");
    }
    }
    6.12、用牛顿迭代法求下面方程2x3 - 4x2 + 3x - 6 = 0在1.5附近的根。
    问题分析:
    ① 根据题意,设根的初始近似值x=1.5,过x作y轴平行线与曲线F(x)相交于j,交点j的坐标为(x,y)。
    ② 过交点j作F(x)的切线交x轴于x1,则x、j、x1组成一个直角三角形。由几何知识可知、(x-x1)*tgα=y。所以,x1= x - y/tgα。由解析几何知识可知,tgα等于曲线F(x)在j的切线的斜率、即等于F(x)的导函数F '(x)在x点的函数值, F '(x)= tgα=6*x^2-8*x+3。
    ③ 把x1作为x,重复执行①②可获得离实际交点X更近的交点x2。再把x2作为x0,重复执行①②又可获得离实际交点X更近的交点x3。……
    ④ 当前后2次交点的距离d=|x-x1|足够小时,x1就是所求的方程近似根。
    N-S流程图:
    float x,y,x1,tg,d,i; x=1.5;d=1;
    For fabs(d)=1e-5
    y=2*x*x*x-4*x*x+3*x-6;
    tg=6*x*x-8*x1+3;
    x1= x - y/tg;
    d=x-x1; x=x1;
    输出 x
    源程序:
    #includestdio.h
    #includemath.h
    void main()
    {
    float x,y,x1,tg,d,i;
    x=1.5;d=1;
    for(i=1;fabs(d)=1e-5;i++)
    {
    y=2*x*x*x-4*x*x+3*x-6;
    tg=6*x*x-8*x1+3;
    x1= x - y/tg;
    d=x-x1;
    x=x1;
    }
    printf("n%f",x);
    }

    /************************************************************
    7.2 用选择法对10个整数按从小到大的顺序排序。
    ************************************************************/
    #includestdio.h
    void main()
    {
    int a[11],i,j,t,min;
    printf("请输入a[0]到a[9]的值n");
    for(i=1;i=10;i++)
    {
    printf("a[%d]=",i);
    scanf("%d",&a);
    }
    for(i=1;i=9;i++)
    {
    min=i;
    for(j=i+1;j=10;j++)
    if(a[min]a[j])min=j;
    t=a[min];
    a[min]=a;
    a=t;
    }
    for(i=1;i=10;i++)
    printf("na[%d]=%d",i,a);
    }
    7.4、有一个一维数组a,其长度为10。a中只存有9个数据,并且a0到a8已经按升序排好序(即a0a1a2a3a4a5a6a7a8)。编程实现下述功能:从键盘输入一个数据,把它插入到a中的适当位置,使得a中的数据仍然保持升序排列。

    问题分析:
    假设一个已排好的数组a[11]={1,7,10,25,36,48,67,88,94,100}
    如果插入一个数n比a数组最后一个数大,刚将插入的数放在a数组的末尾。
    否则,将它依次和a[0]到a[9]比较,直到出现an为止,p 这表示a[i-1]na,然后要把n插入a[i-1]与a之间,
    #includestdio.h
    void main()
    {
    int i,j,n;
    int a[11]={1,7,10,25,36,48,67,88,94,100};
    for(i=0;i=9;i++)
    printf("na[%d]=%d",i,a);
    printf("n请输入n的值");
    scanf("%d",&n);
    if(na[9]) a[10]=n;
    else
    {
    for(i=0;i=9;i++)
    {
    if(a=n)
    {
    for(j=10;ji;j--)
    a[j]=a[j-1];
    a=n;
    break;
    }
    }
    }
    printf("n结果为a= ");
    for(i=0;i=10;i++)
    printf("%d ",a);
    printf("n");
    }

    7.6、从键盘输入一个整数n(5n11),编程显示如下的n行杨辉三角形
    问题分析:
    各行第一个数和最后一个数都是1,其余各数是数是上一行同列和前一列两个数的和。设数组为a[j],a[j]=a[i-1][j]+ a[i-1][j-1],其中i为行,j为列
    #includestdio.h
    void main()
    {
    int i,j,a[11][11];
    for(i=1;i=11;i++)
    {
    a=1;
    a[1]=1;
    }
    for(i=3;i11;i++)
    {
    for(j=2;j=i-1;j++)
    a[j]=a[i-1][j]+ a[i-1][j-1];
    }
    for(i=1;i11;i++)
    {
    for(j=1;j=i;j++)
    printf("%4d",a[j]);
    printf("n");
    }
    printf("n");
    }

    /***************************************************************
    7.9 有15个数已经按由小到大的顺序存放在一个
    数组中,输入1个数,用折半查找法找出该数
    是数组中的第几个元素的值,如果该数不在
    数组中,则输出“无此数”。
    ***************************************************************/
    #includestdio.h
    void main()
    {
    int x,i,max,min,mid;
    int a[15]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29};
    printf("请输入要查找的数");
    scanf("%d",&x);
    max=14;min=0;
    for(i=1;i=7;i++)
    {
    mid=(max+min)/2;
    if(xa[mid]) min=mid;
    else if(xa[mid]) max=mid;
    else break;
    }
    printf("该数组为:");
    for(i=0;i=14;i++)
    printf("%4d",a);
    printf("n");
    if(a[mid]==x)
    printf("该数是数组中的第%d个元素n",mid+1);
    else printf("无此数n");
    }


    楼主 2016-01-28 13:52 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知