c语言常见代码题

1)
C语言输入一个整数,截取它对应的二进制位中从右到左的第8-11(最右边为第0).


//2997  璇疯緭鍏ヤ竴涓暣鏁?2997
0000-0000 0000-0000 0000-1011 1011-0101
瀹冪殑浠庡彸寮€濮嬬殑绗?1-8浣嶄负:
1011
1011  注意从右是从0开始算的
#include <stdio.h>

void bin32bdis(int data)
{
    int i=32;
    while(i--) //32---1
    {
        if(data & (1<<i)) //31--0
            printf("1");
        else
            printf("0");
        if(i%4==0)
        {
            if(i%8==0)
                printf(" ");
            else
                printf("-");
        }
    }
    putchar(10);
}
int main(void)
{
    int i,x;
    printf("请输入一个整数:");
    scanf("%d",&x);
    bin32bdis(x);
    printf("它的从右开始的第11-8位为:\n");
    for(i=11;i>7;i--)
        printf("%d",(x&(1<<i))>0)//注意要加一个>0,要不然出来就会是一个很大的数;这是因为int包括符号,加了unsigned后,就可以不用加括号()
    printf("\n");

}对无符号数和有符号中的正数补 0;有符号数中的负数,取决于所使用的
系 统: 补 0 的称为"逻辑右移",补 1 的称为"算术右移"。

(294、打印出杨辉三角形(要求打印出10行如下图)。
	【参考答案】#include <stdio.h>


int main()
{
    int i,j;
    int a[10][10];
    printf("\n");
    for(i=0;i<10;i++)
    {
        a[i][0] = 1;
        a[i][i] = 1;
    }
    for(i=2;i<10;i++)
    {
        for(j=1;j<i;j++)//注意是j<i j=1,因为i下标的值是j下标的值加的
        {
            a[i][j] = a[i-1][j-1]+a[i-1][j];//注意下标
        }
    }


    for(i=0;i<10;i++)
    {
        for(j=0;j<=i;j++)
            printf("%5d",a[i][j]);
            printf("\n");

    }
    return 0;

}3)mystrcmp的自实现
int mystrcmp(const char *s1,const char *s2)
{
    for(;*s1&&*s2;s1++,s2++)
    {
        if(*s1 == *s2)
            continue ;
    else
            return *s1 - *s2;
    }
    return *s1 - *s2;

}4)计算字符串中子串出现的次数

#include <stdio.h>

char * myStrstr(char *s1,char *s2)
{
    int n;
    if(*s2) //查找的数据为空
    {
        while(*s1)
        {
            for( n=0;*(s1+n) == *(s2+n); n++)
            {
                if(*(s2+n+1) == '\0')
                    return s1;
            }
                    s1++;
        }
                return NULL;
    }
            else
            return NULL; //return s1;??
}
int main()
{
    char *s1 = "chikn123123";char *s2 = "123";
    int count = 0;
    int len = strlen(s2);
    while(s1 = myStrstr(s1,s2))
    {
        count++;
        s1 += len;
    }
printf("%d",count);
}5)最低级:,
逗号运算符也称为顺序求值运算符,在C语言中,运算级别最低。


(6)一个数+100是完全平方数,在加168也是一个完全平方书数
#include <stdio.h>
void mySwap(int *i, int *j)
{
    int t = *i;
    *i = *j;
    *j = t;
}
int main(void)
{
    int flag = 0;
    int i,j,k;
    for(i=00;i<10000;i++)
    {
        for(j=0;j<400;j++)//因为300*300=900400*400=11600所以就在这个范围
        {
            if(j*j == i+100)
            {
                for(k=0;k<400;k++)
                {
                    if(k*k == i+268)//和上面一起相当于两个if语句
                    {
                        flag = 1;
                        printf("%d\n",i);
                        break;
                    }
                }
            }
            if(flag)
                break;
        }

        if(flag)
            break;
    }
    return 0;
}
(8)求年份是平年还是润年


#include <stdio.h>
int main()
{
    int year,leap;
    printf("enter year");
    scanf("%d",&year);
    if((year%100!=0 && year%4==0) || (year%400==0))
        leap = 1;
    else
        leap = 0;
    if(leap)
        printf("%d is",year);
    else
        printf("%d is not",year);
    return 0;
}9)求解方程a*x*x+b*c+c=0方程的解
a=0,不是二次fangc
b*b-4*a*c=0,有两个相当的根
b*b-4*a*c>0,有两个不相当的根
b*b-4*a*c<0,有两个共轭复根

#include <stdio.h>
#include<math.h>

int main()
{
    double a,b,c,disc,x1,x2,realpart,imagepart;
    scanf("%lf,%lf,%lf",&a,&b,&c);
    printf("The equation ");
    if(fabs(a) <= 1e-6)//注意等于的要<来辨别
        printf("is not a equation");
    else
    {
        disc = b*b-4*a*c;
        if(fabs(disc <= 1e-6))
        {
            printf("has two equal roots:%8.4f\n",-b/(2*a));
        }
        else if(disc > 1e-6)
        {
            x1 = (-b+sqrt(disc)/(2*a));
            x2 = (-b+sqrt(disc)/(2*a));
            printf("has two  root %8.4f %8.4f",x1,x2);
        }
        else
        {
            realpart = -b/(2*a);
            imagepart = sqrt(-disc)/(2*a);//注意这里是要为负号的
            printf("has complex root\n");
            printf("%8.4f+%8.4if\n",realpart,imagepart);//输出另一个复数
            printf("%8.4f-%8.4if\n",realpart,imagepart);//输出另外一个复数
         }
    }
    return 0;
}10)求三个数里面最大的那个数

#include <stdio.h>
#include<math.h>

int main()
{
    int a,b,c;
    int max,temp;
    scanf("%d,%d,%d",&a,&b,&c);
    temp=a>b?a:b;
    max=temp>c?temp:c;
    printf("%d\n",max);
    return 0;
}10)一百分制的成绩,分为A B C D E

#include <stdio.h>
#include<math.h>

int main()
{
    double score;
    char grade;
    scanf("%lf",&score);
    while(score>100 || score<0)
    {
        printf("fault please repart");
        scanf("%lf",&score);
    }

    switch((int)(score/10))注意这里的int
    {
    case 10:
    case 9:grade = 'A';break;//注分号的位置,有两个;
    case 8:grade = 'B';break;
    case 7:grade = 'C';break;
    case 6:grade = 'D';break;
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:grade = 'E';break;
    }
    printf("%c %lf",grade,score);
    return 0;
}11)手动输入4个值,按照由小到大输入
#include <stdio.h>
#include <string.h>
#include <time.h>

void swap(int *p,int *q)
{
    *p ^= *q;
    *q ^= *p;
    *p ^= *q;
}
void popsort(int *p,int n)
{
    int i,j;
    int flag;
    for(i=0;i<n-1;i++)
    {
        flag=1;
        for(j=0;j<n-i-1;j++)
        {
            if(p[j]>p[j+1])
            {
                swap(&p[j],&p[j+1]);
                flag=0;
            }
        }
        if(!flag)
            break;
    }
}
int main(void)
{
    int arr[4];
    int i;
    srand(time(NULL));
    for(i=0;i<4;i++) scanf("%d",&arr[i]);
    
    for(i=0;i<4;i++)
    {
        arr[i] = rand()%10;
    }
    
    for(i=0;i<4;i++)
    {
        printf("%d",arr[i]);
    }
    putchar(10);
    popsort(arr,4);
    for(i=0;i<4;i++)
    {
        printf("%d",arr[i]);
    }
    return 0;
}124个圆塔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("please scanf point(x,y):");
    scanf("%f,%f",&x,&y);
    d1 = (x-x4)*(x-x4)+(y-y4)*(y-y4);/*求该点到各中心点距离*/
    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("hop%d\n",h);
    return 0;

}13)输出如下的代码

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

#include<stdio.h>
int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
        for(j=1;j<=5;j++,n++)1开始的
        {
            if(n%5==0)putchar(10);//注意是n
            printf("%d\t",i*j);//要加\t
        }
    putchar(10);
    return 0;
}14)pi/4 = 1-1/3+1/5-1/7……利用这个来求pi的大小

#include<stdio.h>
#include<math.h>

int main()
{
    int sign = 1;
    double pi = 0.0,n = 1.0,term = 1.0;//注意要有double
    while (fabs(term)>=1e-6)//1*10-6)一个很小的数
    {
        pi = pi+term;
        sign = -sign;
        n = n+2;
        term = sign/n;
    }
    pi = pi*4;
    printf("pi=%10.8f\n",pi);
}15)f1 = 1(n=1),f2 = 1(n=1),f(n)=f(n-)+f(n-2);,求前面40个数的大小


#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;
}16)求一个数的是否为素数
#include<stdio.h>
#include<math.h>

int main()
{
    int n,i;
    printf("输入数:");
    scanf("%d",&n);
    int k = sqrt(n);//让一个数开平方
    for(i=1;i<k;i++)
        if(n%i==0)break;
    if(i<=k)printf( "not shi ");//注意i范围
    else
        printf("is");
     return 0;

}17)求100-200间的全部素数
#include<stdio.h>
#include<math.h>

int main()
{
    int n,k,i,m=0;
    for(n=101;n<=200;n++)
    {
        k=sqrt(n);
        for(i=2;i<=k;i++)
            if(n%i==0)
                break;
        if(i>=k+1)//注意i范围
        {
            printf("%d  ",n);//注意加空格
            m=m+1;
        }
        if(m%10==0)printf("\n");//10个数空一行
    }
 printf("\n");
     return 0;

}18)译密码:把26个字母一次往后移动4个(138页,谭浩强)
#include<stdio.h>
#include<math.h>

int main()
{
    char c;
    c = getchar();//注意这个用来输入一个字符的,但可以先把要输入得字符一次性输入,
    while (c!='\n')//因为他会把这些数据保存在缓存区中
    {//注意它的条件是不能输出\n
     if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))//输入的必须是字母
     {
         if((c>='W'&&c<='Z')||(c>='w'&&c<='z'))//输入的w x y x时
             c=c-22;
         else
             c=c+4;//其他的往后面减4个数
     }
     printf("%c",c);
     c = getchar();
    }
    printf("\n");

     return 0;
}

//手动输入跳多少个字节
#include <stdio.h>//求方程的根用二分法去逼近
#include <string.h>
int fun(char *str1)
{
    if(*str1>='A' && *str1<='Z')
        return 1;
    else
        return 0;
}
int main()
{
    char str1[200];
    gets(str1);
    int len = strlen(str1);
    int n,i;
    scanf("%d",&n);
    for(i=0;i<len;i++)
    {
        if(fun(&str1[i]))//这里是一个一个的传
        {
            if(str1[i]+n>'Z')//按照数值来比较
                str1[i] = str1[i]-26+n;
            else
                str1[i] = str1[i]+n;//注意这里是加
        }

    }
    printf("%s",str1);

}19)输入两个正整数,求其最大公约数和最小公倍数

提示:采用辗转取余算法。m除以n的余数为零,则n为最大公约数;余数不为零,则将n付给m,余数赋给n,在重复上述操作,直到余数为零为止···
#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) //注意它得是while
    {
        r=n%m;
        n=m;
        m=r;

    }
    printf("它们的最大公约数为:%d\n",n);
    printf("它们的最小公约数为:%d\n",p/n);///*两数相乘除最大公约数就是最小公倍数*///注意这里是除以公约数
    return 0;

}20)s(n)=a+aa+aaa+aaa…n为a的位数,类如2+22+222+2222(此时n=4#include<stdio.h>

int main( )

{
    int a,n;
    int tn = 0;
    int sum = 0;
    printf("输入你要输入的数(a,n)");
    scanf("%d,%d",&a,&n);
    int i=1;
    while(i<=n)
    {
        tn = tn+a;//这一步不能够省略,为哪几个数
        sum = sum+tn;//几个数相加
        a=a*10;
        i++;
    }
    printf("%d",sum);
    return 0;
    
}20)求1+2+3+4!……
#include<stdio.h>
int main( )

{
    int i=1,j,n=4;//注意n的值
    int sum = 1;
    int sum1 = 0;
  for(i=1;i<=n;i++)
  {
    for(j=1;j<=i;j++)//这里是<=i
    {
        sum *=j;//单个数
    }
    sum1 += sum;//总的数
    sum = 1;//注意sum的值要初始化为1
  }
  printf("%d",sum1);
    return 0;

}21)求三位数的水仙花数
#include<stdio.h>
#include<math.h>

int main( )

{
   int i,bai,shi,ge;
   for(i=100;i<1000;i++)
   {
       bai = i/100;
       shi = i/10%10;
       ge = i%10;
       if(i == (pow(ge,3)+pow(bai,3)+pow(shi,3)))
           printf("%d\n",i);
   }
   return 0;

}22)看一个数是不是回文

#include <stdio.h>
int main()
{
    int num, temp;
    int sum=0;
    printf("Please input a number:");
    scanf("%d", &num);
    temp=num;
    while(num)
    {
        sum = sum*10 + num%10;//注意找一个相反的数
        num /= 10;
    }
    if(temp == sum)
        printf("yes\n");
    else
        printf("no\n");
    return 0;
}22)打印以下的图案

   *
  ***
 *****
*******
 *****
  ***
   *

#include<stdio.h>
//注意一中间的那个作为标准
//找与i的关系
int main()

{int i,j,k;

    for(i=0;i<=3;i++)
    {
        for(j=0;j<=2-i;j++)
            printf(" ");
        for(k=0;k<=2*i;k++)
            printf("*");
        printf("\n");//不要忘记

    }
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=i;j++) //上下两个相反,注意这里的表达
            printf(" ");
        for (k=0;k<=4-2*i;k++)
            printf("*");
        printf("\n");//不要忘记
    }
    return 0;
}23)输出1000内的所有的完数:例如 6的因子为1 2 3.  1+2+3==6
#include <stdio.h>

int main( )

{int m,s,i;
    for(m=2;m<10000;m++)
    {
        s=0;
        for(i=1;i<m;i++)//注意是<不是等于
            if((m%i)==0)s=s+i;
        if(s==m)
        {
            printf("%d,its factors are\n",m);
            for(i=1;i<m;i++)//用来输出它的因子
            {
                if(m%i==0)
                    printf("%d,",i);
            }
        printf("\n");
        }
    }

    return 0;
}24)有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,……
求出这个数的前20#include <stdio.h>

int main( )
{
    int n = 20;
    double a=2,b=1,s,t,i;
    for(i=1;i<=n;i++)
    {
        s = s+a/b;
        t = a;
        a = a+b;//分子+分母等于下一个分子
        b = t;
    }
    printf("%lf",s);
    return 0;
}24)猴子吃桃(谭浩强 141#include <stdio.h>

int peachcount(int n)
{
    if(n == 10)
        return 1;
    else
        return (peachcount(n+1)+1)*2;
}

int main( )
{
   int count = peachcount(1);
   printf("%d",count);
    return 0;
}25)x sqrt (a)  x(n+1)=1/2(x(n)+a/(x(n)),前后两次x的绝对值小于10-2)谭浩强 141#include<math.h>
#include<stdio.h>
int main( )

{
    float a,x0,x1;//为浮点型
    printf("enter a positive number.");
    scanf("%f",&a);
    x0=sqrt(a);
    x1=(x0+a/x0)/2;
    do
    {
        x0=x1;
        x1=(x0+a/x0)/2;//注意这里面的转化方法
    }while(fabs(x0-x1)>=1e-5);//理解这里

           printf("The square root of %5.2f is %8.5f\n",a,x1);

           return 0;

}

#include<stdio.h>
#include<math.h>

int main( )
{
    float x1,x2,a;
    printf("enter a positive number.");
    scanf("%f",&a);
    x1 = sqrt(a);
    x2 = (x1+a/x1)*(1.0/2);//注意这里必须要有加个.0才行,是浮点型
    do
    {
        x1 = x2;
         x2 = (x1+a/x1)*(1.0/2);
    }while(fabs(x1-x2)>=1e-5);

   printf("The square root of %5.2f is %8.5f\n",a,x2);

    return 0;
}26)用二分法求2*(x*x*x)-4*(x*x)+3*x-6=0



#include <stdio.h>//求方程的根用二分法去逼近
double sgn(double x){//模拟绝对值函数
    if(x > 0)
        return x;
    else
        return -1 * x;
}
double power(double x,int n){//模拟幂函数
    double k = 1.0;int i;
    if(n > 0){//增长型幂函数
        for( i = 0; i < n; i ++){
            k = k * x; //特别注意

        }
    }
    else{//衰减性幂函数
        for(i = 0; i > n; i --){
            k = k / x;//特别注意
        }
    }
    return k;
}
double root(){
    double start = 0;//根据题目所要求的根的范围确定起止点
    double end = 3.0;
    double average = 1.5;//中点
    while(1){
        double result = 2 * power(average, 3) - 4 * power(average, 2) + 3 * average - 6;
        //记录函数结果
        if(result > 0)//这个边界的缩小要根据函数变化来判断,result大于零,可能是end缩,也可能是start缩
            end = average;
        if(result < 0)
            start = average;
        average = (start + end) / 2.0;
        if(result == 0)
            return average;
        if(sgn(result - 0) < power(10,-3))//确定误差范围
            return average;
    }
}
int main(){
    printf("%.5lf\n", root());
}27)求三个字符串中的最大的
#include<stdio.h>
#include<string.h>

int main()
{
    char str[3][20];
    char string[20];

    int i;
    for(i=0;i<3;i++)
    {
        gets(str[i]);
    }
    if(strcmp(str[0],str[1])>0)
    {
        strcpy(string,str[0]);//注意通过拷贝
    }
    else
    {
         strcpy(string,str[1]);
    }

    if(strcmp(str[2],string)>0)
    {
        strcpy(string,str[2]);
    }
    printf("%s\n",string);

    return 0;

}28)找出一个二维数组,在该行上最大,在该列上最小

#include<stdio.h>
#define N 4
#define M 5   /*数组为4行5列*/


//通过先找出一行中最大的数,再找那个最大数的列里的最小值,
int main( )

{
    int i,j,k,a[N][M],max,maxj,flag;
    printf("please input matrix:\n'");
    for (i=0;i<N;i++)                            /*输入数组*/
        for(j=0;j<M;j++)
            scanf("%d",&a[i][j]);
        for (i=0;i<N;i++)
    {
        max=a[i][0];                              /*开始时假设a[i][0]最大*/
        maxj=0;                                  /*将列号0赋给maxj保存*/
        for(j=0;j<M;j++)                             /*找出第i行中的最大数*/
            if(a[i][j]>max)
            {
                max=a[i][j];                              /*将本行的最大数存放在max*/
                 maxj=j;                            /*将最大数所在的列号存放在maxj中*/
            }
        flag=1;                               /*先假设是鞍点,以flag为1代表*/
        for(k=0;k<N;k++)
            if(max>a[k][maxj])                 /*将最大数和其同列元素相比*/
            {
                flag=0;              /*如果max不是同列最小,表示不是鞍点令flag1为0*/
                continue;
            }
        if (flag)                        /*如果flag1为1表示是鞍点*/
        {
            printf("a[%d][%d]=%d\n",i,maxj,max);     /*输出鞍点的值和所在行列号*/
            break;
        }
    }
    if(!flag)                        /*如果flag为0表示载点不存在*/
        printf("It is not exist!\n");
    return 0;

}29)编写如下图形的函数
  * * * *
   * * * *
    * * * *
     * * * *
      * * * *

#include<stdio.h>

//通过先找出一行中最大的数,再找那个最大数的列里的最小值,
int main( )

{
    int i,j;
    for(i=0;i<5;i++)
    {
        for(j=0;j<i+5;j++)
        {
            if(j>=0&&j<i+1)//为了每一行前面能够有空格
                printf(" ");
            else
                printf(" *");//注意加空格
        }
        putchar(10);
    }
    return 0;

}30#include <stdio.h>
int main()
{
   int a[5]={2,4,6,8,10},*p,**k;
   p=a;k=&p;
   printf("%d",*(p++));
   printf("%d\n",**k);
    return 0;
}

2 4(注意p会后面再+1(30)将一个整数转化为字符串

#include <stdio.h>




void fun(int  p)
{
    int i = p/10;
    if(i != 0)
    {
        fun(i);
    }
    printf("%c",p%10+2*'0');//如果不*2注意这里将只会加到数字的地方,要加96
}

int main(void)
{
    int zhenshu = 0;

    scanf("%d",&zhenshu);
    if(zhenshu < 0)
    {
        printf("-");
        zhenshu = -zhenshu;
    }
    fun(zhenshu);
    return 0;
}31)求a*x+b*c+c=0的解(109谭浩强)
a=0,不是二次方程
b*b-4*a*c=0,有两个相当的实根
b*b-4*a*c>0,有两个不相当是根
b*b-4*a*c<0,有两个共轭复根
#include <stdio.h>
#include <math.h>

int main()
{
    double a,b,c,disc,x1,x2,realpart,imagepart;
    scanf("%lf,%lf,%lf",&a,&b,&c);
    getchar();
    printf("the equation");
    if(fabs(a) <= 1e-6)
    {
        printf("is not a ");
    }
    else
    {
        disc = b*b-4*a*c;

        if(fabs(disc <= 1e-6))
            printf("has two equal roots:%8.4f\n",-b/(2*a));
        else
            if(disc > 1e-6)
            {
                x1 = (-b+sqrt(disc)/(2*a));
                x2 = (-b-sqrt(disc)/(2*a));
                printf("has two root%8.4f and %8.4f\n",x1,x2);
            }
            else
            {
                realpart = -b/(2*a);
                imagepart = sqrt(-disc)/(2*a);
                printf("two \n");
                printf("%8.4f+%8.4if\n",realpart,imagepart);
                printf("%8.4f-%8.4if\n",realpart,imagepart);
            }
    }

    return 0;
}32)求a,b,c三个数的大小

#include <stdio.h>
#include <math.h>

int main()
{
    int temp,max;
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    temp = a>b?a:b;//注意这种表方法
    max = temp>c?temp:c;
    printf("%d\n",max);
    return 0;
}


(33)11312#include <stdio.h>
#include <math.h>

int main()
{
    double x,y;
    scanf("%lf %lf",&x,&y);
    int height = 10;
    double d1,d2,d3,d4;

    d1 = (x-2)*(x-2)+(y-2)*(y-2);
    d2 = (x+2)*(x+2)+(y-2)*(y-2);
    d3 = (x+2)*(x+2)+(y+2)*(y+2);
    d4 = (x-2)*(x-2)+(y+2)*(y+2);

    if(d1>1.0 && d2>1.0 && d3>1.0 && d4>1.0)height = 0;
    printf("%d\n",height);

    return 0;
}33)求pi的大小pi/4 = 1-1/3+1/5-1/7……

#include <stdio.h>
#include <math.h>

int main()
{
    double term=1.0,sum=0.0,pi,n=1.0;
    int sign = 1;

    while (fabs(term)>=1e-6)//注意这里是10-6)的写法
    {
        sum = sum + term;
        n = n+2;
        sign = -sign;
        term = sign/n;
    }
    pi = sum*4;
    printf("%lf",pi);

return 0;

(34)求Fibonacci数列

#include <stdio.h>
#include <math.h>


int Fib(int n)
{
    int F1=1,F2=1,F3,i;
    if(n==1)
        return F1;
    else if(n==2)
        return F2;
    else
    {
        for(i=3;i<=n;i++)
        {
            F3 =F1 + F2;
            F1 = F2;
            F2  = F3;
        }
    }
    return F3;
}

int main()
{
    int n,sum;
    scanf("%d",&n);
    sum = Fib(n);
    printf("%d",sum);


    return 0;
}35)求(1+2+3!……n!),n为输入的值  谭浩强140 6#include<stdio.h>

int main( )
{
    int n;
    int i,j,sum = 1,sum1=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        sum = 1;
        for(j=1;j<=i;j++)
        {
            sum = sum*j;
        }
        sum1 = sum1+sum;
    }
    printf("%d",sum1);

    return 0;

}36)一个球从100m高度自由下落,每次返回一半,在落下,求他在第10次落地时,高度多少,共经过多少米,求第十次返回多高

#include<stdio.h>

int main( )
{
    double height = 100;
    int i = 1;double sum = 100;
    while(height>0.0)
    {
        i++;//注意这里要从2开始,到后面的来回要*2,前面的不用
        height = height/2;
        sum = sum+height*2;
        if(i>10)
            break;
    }
    printf("sum=%lf,height=%lf\n",sum,height);
    return 0;
}37)
用递归求n阶勒让多项式(219)谭浩强
#include <stdio.h>

double PN(double x,int n)
{
    if(n==0)
        return 1;
    else if(n==1)
        return x;
    else
        return ((2*n-1)*x-PN(x,n-1)-(n-1)*PN(x,n-2))/n;//注意这种n的表达方式
}

int main()
{
    int n;
    double x;
    scanf("%lf %d",&x,&n);
    printf("%.2f\n",PN(x,n));
    return  0;
}
(38) stdlib 头文件   常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容你自己可以打开编译器的include目录里面的stdlib.h头文件看看。
(39)写一个函数,输入一行字符,将字符串中中最长的单词输出
#include <stdio.h>
#include <string.h>
void longword(char s[], char t[]);                 //定义最长单词函数
int main()
{
    char str[30], lg[20];
    gets(str);                                     //输入一行字符
    longword(str, lg);                             //调用最长单词函数
    puts(lg);                                      //输出最长单词
    return 0;
}
//最长单词函数
void longword(char s[], char t[])
{
    int i, j, n, k, m, word;
    char p[20];
    n=strlen(s);
    m=0;
    word=0;
    for (i=0, j=0, k=0; i<=n; i++)//注意,这里的k要放在这里
    {
        if ((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
        {
            word=1;
            p[j++]=s[i];
        }
        else if (word==1)//上一次的单词满了结束了,word=1说明了是单词,把这次记录的与上一次作比较
        {
            if (j>k)
            {
                for (m=0; m<j; m++)
                    t[m]=p[m];
                t[m]='\0';//不要忘记
                k=j;//记录上一次的最长字母的记录
            }
            word=0;//如果不是单词,就不需要比较,直接在这里初试化
            j=0;
        }
    }
}40)习题 7.12 用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。

根据牛顿迭代法的公式:
xn+1=xn​−f′(xn​)f(xn​)​

f(xn​)=ax3+bx2+cx+d
f′(xn​)=3ax2+2bx+c
代码块:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double root(double n, double p, double q, double r, double t);  //定义求根函数
int main()
{
    double x, a, b, c, d;
    printf("Please enter coefficient of equation: ");           //输入方程系数和附近值
    scanf("%lf %lf %lf %lf %lf", &x, &a, &b, &c, &d);
    printf("Root=%lf\n", root(x, a, b, c, d));                  //输出方程近似根
    system("pause");
    return 0;
}
//求根函数
double root(double n, double p, double q, double r, double t)
{
    double f;
    int i;
    f=(p*pow(n, 3)+q*pow(n, 2)+r*n+t)/(3*p*pow(n, 2)+2*q*n+r);
    for (i=0; fabs(f)>1e-5; i++){
        f=(p*pow(n, 3)+q*pow(n, 2)+r*n+t)/(3*p*pow(n, 2)+2*q*n+r);
        n-=f;
    }
    return n;
}


(41) 用递归的办法把一个整数转化成字符串

#include<stdio.h>

void convert(int n)
{
    int i;
    if ((i = n / 10) != 0)
        convert(i);
    putchar(n % 10 + '0');
}
int main() {
    int num;
    scanf("%d", &num);
    if (num < 0) {
        printf("-");
        num = -num;
    }
    convert(num);
    printf("\n");
    return 0;
}42)c语言中16进制转换为十进制


#include <stdio.h>
#include <string.h>


int hexToDec(char *source);
long getIndexOfSigns(char ch);

int main()
{
    char* hex = "75BCD15";

    printf("16进制数:\t%s\n",hex);
    printf("10进制数\t%d\n",hexToDec(hex));
    return 0;
}

int hexToDec(char *source)
{
    long sum=0;//初始化特别重要
    long t=1;
    int i,len = strlen(source);//注意这里就这么穿=传,因为从某种意义来说他就是个字符串常量
    for(i=len-1; i>=0; i--)
        {
            sum += t * getIndexOfSigns(*(source + i));
            t *= 16;
        }
    return sum;
}

long getIndexOfSigns(char ch) //把要传的数转化
{
    if(ch>='0' && ch<='9')
        return ch-'0';
    if(ch>='A' && ch<='F')
        return ch-'A'+10;
    if(ch>='a' && ch<='f')
        return ch-'a'+10;
    return -1;
}43)输入一行文字,找出其中的大写字母。小写字母,空格,数字以及其他字符各有多少?

#include<stdio.h>
int main()
{
    char a[30];//注意这种表示方法,用指针
    char *p;
    int i=0,j=0,m=0,n=0,k=0;
    p=a;
    printf("请输入一段文字:\n");
    gets(a);
    while(*p!='\0') //当字符不为结束符时,执行操作
    {
        if(*p>='A'&&*p<='Z')
        {i++;}
        else if(*p>='a'&&*p<='z')
        {j++;}
        else if(*p>='0'&&*p<='9')
        {m++;}
        else if(*p==' ')
        {n++;}
        else
        {k++;}
        p++;  //执行完一轮后,将指针的地址指向下一个字符,继续检查
    }
    printf("大写字母:%d\n小写字母:%d\n数字:%d\n空格:%d\n其他字符:%d\n",i,j,m,n,k);
    return 0;
}


自己写的

#include<stdio.h>

int main()
{
    char str[1024]={0};
    printf("请输入一段文字\n");
    gets(str);//这里用scanf的话不行
    int i=0,len=strlen(str);
    int count1,count2,count3,count4,count5;
    count1=count2=count3=count4=count5=0;
    for(i=0;i<len;i++)
    {
        if(str[i]>='A' && str[i]<='Z')
            count1++;
        if(str[i]>='a' && str[i]<='z')
            count2++;
        if(str[i]>='0' && str[i]<='9')
            count3++;
        if(str[i]=='32')
            count4++;
        else
            count5++;
    }
    printf("大写字母:%d 小写字母:%d 数字:%d 空格%d 其他的字母:%d\n",count1,count2,count3,count4,count5);
    return 0;
}








  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值