• C语言习题一


    第一道题
    题目:正数n的平方根可以通过一系列近似值来获得。每个近似值都比前一个更加接近准确值。第一个近似值是1,接下来的近似值则通过下面的公式来获得。
    ai+1=(ai+(n/ai))/2
    编写一个程序,读入一个值,计算并打印出它的平方根。如果你将所有的近似值都打印出来,你会发现这种方法获得准确结果的速度有多快、原则上,这种计算可以永远进行下去,它会不断产生更加准确的结果。但在实际中,由于浮点变量的精度限制,程序无法一直计算下去,当某个近似值与前一个近似值相等时,你就可以让程序停止计算了。 思路:定义两个变量,分别记录前一个值和后一个值。后一个值通过公式计算,并计算两个值的绝对值,通过循环,找到最接近的值。 代码如下:
     1 #include<stdio.h>
     2 #include<math.h>
     3 float CalaValue(int value)
     4 {
     5     float frontValue = 1.0;  //前一个值
     6     
     7     float lastValue = (1 + value) / 2.0;  //后一个值
     8     while ((fabs(lastValue - frontValue))>0.0000001)
     9     {
    10         frontValue = lastValue;
    11         lastValue = (frontValue + value / frontValue) / 2.0;        
    12     }
    13     return lastValue;
    14 }
    15 int  main()
    16 {
    17     int value = 0;
    18     printf("Input a number:");
    19     scanf("%d", &value);
    20     if (value>=0)
    21     {
    22         printf("%d的平方根为%f
    ", value, CalaValue(value));
    23     }
    24     else
    25     {
    26         printf("输入值不合法
    ");
    27     }
    28 }
    第二道题
    题目:一个整数如果只能被它本身和1整除,它就被称为质数。请编写一个程序,打印出1-100之间的质数
    思路:判断质数,使用平方根方法判断(数学原理)
    代码如下:
     1 #include<stdio.h>
     2 #include<math.h>
     3 int isPrime(int value)
     4 {
     5     if (value == 1)
     6     {
     7         return 0;
     8     }
     9     else if (value == 2)
    10     {
    11         return 1;
    12     }
    13     for (int i = 2; i <= (int)sqrt(value); i++)
    14     {
    15         if (value%i == 0)
    16         {
    17             return 0;
    18         }
    19     }
    20     return 1;
    21 }
    22 int main()
    23 {
    24     int i;
    25     for (i = 1; i < 100; i++)
    26     {
    27         if (isPrime(i))
    28         {
    29             printf("%d,",i);
    30         }
    31     }
    32     return 0;
    33 
    34 }
    第三道题
    题目:请编写一个函数,它从字符串中提取一个子字符串。函数的原型如下:
    	int substr(char dst[], char src[], int start, int len);
    	函数的任务是从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NUL字符到dst数组。在复制完毕之后,dst数组必须以NUL字节
    	结尾。函数的返回值是存储于dst数组中的字符串长度。
    	如果start 所指定的位置越过了src数组的尾部,或者start或len的值为负,那么复制到dst数组的是个空字符串。
    思路:动态为目标字符串申请空间并赋值
    代码如下:
     1 #include<stdio.h>
     2 #include<string.h>
     3 int substr(char dst[], char src[], int start, int len)
     4 {
     5     int i = 0;
     6     if (start < 0 || len < 0 || start>strlen(src))
     7     {
     8         return 0;
     9     }
    10     else
    11     {
    12         while (src[start] != '' &&i<len)
    13         {
    14             dst[i] = src[start];
    15             start++;
    16             i++;
    17         }
    18     }
    19     return i;
    20 }
    21 int main()
    22 {
    23     char *src = "hello";
    24     char *dst = (char *)malloc(sizeof(char) * 100);
    25     printf("存储于dst数组中的字符串长度为:%d
    ", substr(dst, src, 0, 9));
    26     free(dst);
    27     return 0;
    28 
    29 }
    总结:前面两道题比较简单,难度为一颗星。最后这道有点难度,主要用到了指针,动态分配内存知识,可能指针的操作自己忘记了,感觉还是有问题。然后今天自己捕捉到很多有关字符串,指针的错误,值得好好学习下。
    欢迎交流!
     
     
     
  • 相关阅读:
    第二章 金字塔内部的结构
    第一章 为什么要用金字塔结构
    考研级《计算机网络》知识梳理——第二期
    考研级《计算机网络》知识梳理——第一期
    leetcode常规算法题复盘(科普短文篇)——为何哈希表的容量一般是质数
    leetcode常规算法题复盘(第十六期)——数据流中的第 K 大元素
    leetcode常规算法题复盘(第十四期)——最后一块石头的重量
    leetcode常规算法题复盘(第十三期)——最大矩形&柱状图中最大的矩形
    leetcode常规算法题复盘(第十二期)——摆动序列&买卖股票的最佳时机含手续费
    leetcode常规算法题复盘(基础篇)——线性表java实现
  • 原文地址:https://www.cnblogs.com/3120931037cnk/p/7643031.html
Copyright © 2020-2023  润新知