第一道题
题目:正数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] != '