你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解,还可以在线答题。

题目1:用筛选法求100 之内的素数。

解:

所谓"筛选法"指的是"埃拉托色尼(Eratosthenes)筛法"。埃拉托色尼是古希腊的著名数学家。他采取的方法是,在一张纸上写上1~1000 的全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数,见图6.1。

具体做法如下∶

(1)先将1挖掉(因为1不是素数)。

(2)用2除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

(3)用3除它后面各数,把3 的倍数挖掉。

(4)分别用4,5…各数作为除数除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如在图6.1中找1~50 的素数,要一直进行到除数为 47为止。事实上,可以简化,如果需要找1~n 的素数,只须进行到除数为 $ \sqrt{n} $(取其整数)即可,例如对1~50,只须进行到将 $ \sqrt{7} $ 作为除数即可。请读者思考为什么。

上面的算法可表示为∶

(1)挖去1;

(2)用下一个未被挖去的数 p 除 p 后面个数,把 p 的倍数挖掉;

(3)检查p是否小于 $ \sqrt{n} $ 的整数部分(如果 n=1000,则检查 p<31 是否成立),如果是,则返回(2)继续执行,否则就结束;

(4)剩下的数就是素数。

用计算机解此题,可以定义一个数组 a。a[1]~a[n] 分别代表1~n这 n 个数。如果检查出数组 a的某一元素的值是非素数,就使它变为 0,最后剩下不为 0 的就是素数。

程序如下:

#include <stdio.h>
#include <math.h> //程序中用到求平方根函数 sqrt
int main()
{int i, j, n, a[101];      //定义a数组包含101个元素for (i = 1; i <= 100; i++) // a[0]不用,只用a[1]~a[100]a[i] = i;            //使 a[1]~a[100]的值为1~100a[1] = 0;                //先"挖掉"a[1]for (i = 2; i < sqrt(100); i++)for (j = i + 1; j <= 100; j++){if (a[i] != 0 && a[j] != 0)if (a[j] % a[i] == 0)a[j] = 0; //把非素数“挖掉"}printf("\n");for (i = 2, n = 0; i <= 100; i++){if (a[i] != 0) //选出值不为0的数组元素,即素数{printf("%5d", a[i]); //输出素数,宽度为5列n++;              //累积本行已输出的数据个数}if (n == 10){printf("\n");n = 0;}}printf("\n");return 0;
}

运行结果:

题目2:用选择法对10个整数排序。

解:

选择排序的思路为:设有10个元素 a[1]~a[10],将 a[1] 与 a[2]~a[10] 比较,若 a[1] 比 a[2]~a[10] 都小,则不进行交换,即无任何操作。若 a[2]~a[10] 中有一个以上比 a[1] 小,则将其中最大的一个(假设为 a[i] )与 a[1] 交换,此时 a[1] 中存放了10 个中最小的数。第 2 轮将 a[2] 与 a[3]~a[10] 比较,将剩下 9 个数中的最小者 a[i] 与 a[2] 对换,此时a[2] 中存放的是10 个中第二小的数。依此类推,共进行 9 轮比较,a[1]~a[10] 就已按由小到大的顺序存放了。N-S图如图6.2 所示。

程序如下∶

#include <stdio.h>
int main()
{int i, j, min, temp, a[11];printf("enter data:\n");for (i = 1; i <= 10; i++){printf("a[%d]=", i);scanf("%d", &a[i]); //输人10个数}printf("\n");printf("The orginal numbers:\n");for (i = 1; i <= 10; i++)printf("%5d", a[i]); //输出这10个数printf("\n");for (i = 1; i <= 9; i++) //以下8行是对10个数排序{min = i;for (j = i + 1; j <= 10; j++)if (a[min] > a[j])min = j;temp = a[i]; //以下3行将a[i+ 1]~a[10]中的最小值与a[i]对换a[i] = a[min];a[min] = temp;}printf("\nThe sorted numbers:\n"); //输出已排好序的10个数!for (i = 1; i <= 10; i++)printf("%5d", a[i]);printf("\n");return 0;
}

运行结果:

输入10个数后,程序输出结果。

题目3:求一个 3×3 的整型矩阵对角线元素之和。

解:

答案代码:

#include <stdio.h>
int main()
{int a[3][3], sum = 0;int i, j;printf("enter data:\n");for (i = 0; i < 3; i++)for (j = 0; j < 3; j++)scanf("%3d", &a[i][j]);for (i = 0; i < 3; i++)sum = sum + a[i][i];printf("sum=%6d\n", sum);return 0;
}

运行结果:

关于输入数据方式的讨论:

在程序的 scanf 语句中用"%d"作为输入格式控制,上面输入数据的方式显然是可行的。其实也可以在一行中连续输入9个数据,如:

结果也一样。在输入完9个数据并按回车键后,这 9个数据被送到内存中的输入缓冲区中,然后逐个送到各个数组元素中。下面的输入方式也是正确的:

或者

都是可以的。

请考虑,如果将程序第7~9行改为

for (j=0;j<3;j++)
scanf(" %d %d %d" , &a[0][j], &a[1][j],&a[2][j]);

应如何输入,是否必须一行输入3个数据,如:

答案是可以按此方式输入,也可以不按此方式输入,而采用前面介绍的方式输入,不论分多少行、每行包括几个数据,只要求最后输入完9个数据即可。

程序中用的是整型数组,运行结果是正确的。如果用的是实型数组,只须将程序第4 行的 int 改为 float 或 double 即可,在输入数据时可输入单精度或双精度的数。

题目4:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

解:

假设数组 a有n个元素,而且已按升序排列,在插入一个数时按下面的方法处理:

(1)如果插入的数 num 比 a数组最后一个数大,则将插入的数放在 a数组末尾。

(2)如果插入的数 num不比a数组最后一个数大,则将它依次和 a[0]~a[n-1] 比较,直到出现 a[i] > num 为止,这时表示 a[0]~a[i-1] 各元素的值比 num 小,a[i] ~a[n-1] 各元素的值比 num 大。num理应插到 a[i-1] 之后、a[i] 之前。怎样才能实现此目的呢? 将 a[i]~a[n-1] 各元素向后移一个位置(即 a[i] 变成 a[i+1],…,a[n-1]变成 a[n] 。然后将 num 放在 a[i] 中。N-S图如图6.3所示。

答案代码:

#include <stdio.h>
int main()
{int a[11] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};int temp1, temp2, number, end, i, j;printf("array a:\n");for (i = 0; i < 10; i++)printf("%5d", a[i]);printf("\n");printf("insert data:");scanf("%d", &number);end = a[9];if (number > end)a[10] = number;else{for (i = 0; i < 10; i++){if (a[i] > number){temp1 = a[i];a[i] = number;for (j = i + 1; j < 11; j++){temp2 = a[j];a[j] = temp1;temp1 = temp2;}break;}}}printf("Now aray a:\n");for (i = 0; i < 11; i++)printf("%5d", a[i]);printf("\n");return 0;
}

运行结果:

题目5:将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。

解:

此题的思路是以中间的元素为中心,将其两侧对称的元素的值互换即可。 例如,将5和9互换,将8和6互换。N-S图见图6.4。

答案代码:

#include <stdio.h>
#define N 5
int main()
{int a[N], i, temp;printf("enter array a:\n");for (i = 0; i < N; i++)scanf("%d", &a[i]);printf("array a:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);for (i = 0; i < N / 2; i++) //循环的作用是将对称的元素的值互换{temp = a[i];a[i] = a[N - i - 1];a[N - i - 1] = temp;}printf("\nNow,array a:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);printf("\n");return 0;
}

运行结果:

题目6:输出以下的杨辉三角形(要求输出 10行)

1
1       1
1       2       1
1       3       3       1
1       4       6       4       1
1       5       10  10  5       1
...

解:

杨辉三角形是 $ (a+b)^n $ 展开后各项的系数。例如:

$ (a+b)^0 $ 展开后为 1,系数为1

$ (a+b)^1 $ 展开后为 $ a+b $ ,系数为1,1

$ (a+b)^2 $ 展开后为 $ (a2+2ab+b2) $ ,系数为1,2,1

$ (a+b)^3 $ 展开后为 $ (a3+3a2b+3ab2+b3) $ ,系数为1,3,3,1

$ (a+b)^4 $ 展开后为 $ (a4+4a3b+6a2b2+4ab3+b4) $ ,系数为1,4,6,4,1

以上就是杨辉三角形的前5 行。杨辉三角形各行的系数有以下的规律∶

(1)各行第1个数都是1。

(2)各行最后一个数都是1。

(3)从第3行起,除上面指出的第1个数和最后一个数外,其余各数是上一行同列和前一列两个数之和。例如,第4行第 2个数(3)是第3行第2个数(2)和第3行第1个数(1)之和。可以这样表示∶

a[i][j]=a[i-1][j]+a[i-1]ij-1]

其中,i为行数,,为列数。

答案代码如下∶

#include <stdio.h>
#define N 10
int main()
{int i, j, a[N][N]; //数组为10行10列for (i = 0; i < N; i++){a[i][i] = 1; //使对角线元素的值为1a[i][0] = 1; //使第1列元素的值为1}for (i = 2; i < N; i++) //从第3 行开始处理for (j = 1; j <= i - 1; j++)a[i][j] = a[i - 1][j - 1] + a[i - 1][j];for (i = 0; i < N; i++){for (j = 0; j <= i; j++)printf("%6d", a[i][j]); // 输出数组各元素的值printf("\n");}printf("\n");return 0;
}

说明:数组元素的序号是从 0 开始算的,因此数组中 0 行 0 列的元素实际上就是杨辉三角形中第 1 行第 1 列的数据,余类推。

运行结果:

题目7:输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为

8 1 6
3 5 7
4 9 2

要求输出 1~n2 的自然数构成的魔方阵。

解:魔方阵中各数的排列规律如下∶

(1)将 1 放在第 1 行中间一列。

(2)从 2 开始直到 n×n 止,各数依次按此规则存放:每一个数存放的行比前一个数的行数减 1 ,列数加 1(例如上面的三阶魔方阵,5 在 4的上一行后一列)。

(3)如果上一数的行数为 1,则下一个数的行数为 n(指最下一行)。例如,1 在第 1 行,则 2 应放在最下一行,列数同样加 1。

(4)当上一个数的列数为 n 时,下一个数的列数应为 1,行数减 1。例如,2 在第 3 行最后一列,则 3 应放在第 2 行第 1 列。

(5)如果按上面规则确定的位置上已有数,或上一个数是第 1 行第 n 列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4 应该放在第 1 行第 2 列,但该位置已被 1 占据,所以 4 就放在 3 的下面。由于 6 是第 1 行第 3 列(即最后一列),故 7 放在 6 下面。

按此方法可以得到任何阶的魔方阵。

N-S图如图6.5所示。

答案代码:

#include <stdio.h>
int main()
{int a[15][15], i, j, k, p, n;p = 1;while (p == 1){printf("enter n(n= 1--15) : "); //要求阶数为1~15 的奇数scanf("%d", &n);if ((n != 0) && (n <= 15) && (n % 2 != 0))p = 0;}//初始化for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)a[i][j] = 0;//建立魔方阵j = n / 2 + 1;a[1][j] = 1;for (k = 2; k <= n * n; k++){i = i - 1;j = j + 1;if ((i < 1) && (j > n)){i = i + 2;j = j - 1;}else{if (i < 1)i = n;if (j > n)j = 1;}if (a[i][j] == 0)a[i][j] = k;else{i = i + 2;j = j - 1;a[i][j] = k;}}//输出魔方阵for (i = 1; i <= n; i++){for (j = 1; j <= n; j++)printf("%5d", a[i][j]);printf("\n");}return 0;
}

说明:魔方阵的阶数应为奇数。

运行结果:

题目8:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

解:一个二维数组最多有一个鞍点,也可能没有。解题思路是∶先找出一行中值最大的元素,然后检查它是否为该列中的最小值,如果是,则是鞍点(不需要再找别的鞍点了),输出该鞍点; 如果不是,再找下一行的最大数……如果每一行的最大数都不是鞍点,则此数组无鞍点。

答案代码:

#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为0continue;}if (flag) //如果flagl为1表示是鞍点{printf("a[%d][%d]=%d\n", i, maxj, max); //输出鞍点的值和所在行列号break;}}if (!flag) //如果 flag 为0表示鞍点不存在printf("It is not exist!\n");return 0;
}

运行结果:

第 2~5行是输入的数据,最后一行是输出的结果。

(无鞍点)

题目9:有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。

解:从表列中查一个数最简单的方法是从第 1 个数开始顺序查找,将要找的数与表列中的数一一比较,直到找到为止(如果表列中无此数,则应找到最后一个数,然后判定"找不到")。

但这种"顺序查找法"效率低,如果表列中有 1000个数,且要找的数恰恰是第 1000 个数,则要进行 999 次比较才能得到结果。平均比较次数为500次。

折半查找法是效率较高的一种方法。基本思路如下:

假如有已按由小到大排好序的9个数,a[1]~a[9],其值分别为

1,3,5,7,9,11,13,15,17

若输入一个数 3,想查 3 是否在此数列中,先找出表列中居中的数,即 a[5],将要找的数 3 与a[5] 比较,今[a5] 的值是 9,发现 a[5]>3,显然 3 应当在 a[1]~a[5]这部分,而不会在a[6]~a[9]这部分。这样就可以缩小查找范围,甩掉 a[6]~a[9] 这部分,即将查找范围缩小为一半。再找a[1]~a[5]的居中的数,即 a[3],将要找的数 3 与 a[3]比较,a[3]的值是 5,发现 a[3]>3,显然3应当在 a[1]~a[3]这部分。这样又将查找范围缩小一半。再将 3 与 a[1]~a[3] 的居中的数 a[2]比较,发现要找的数 3 等于 a[2],查找结束。一共比较了3 次。如果表列中有 n 个数,则最多比较的次数为 $ int(log_2n) +1 $ 。

N-S图如图6.6所示。

答案代码:

#include <stdio.h>
#define N 15
int main()
{int i, number, top, bott, mid, loca, a[N], flag = 1, sign;char c;printf("enter data:\n");scanf("%d", &a[0]); //输入第1个数i = 1;while (i < N) //检查数是否已输入完毕{scanf("%d", &a[i]);     //输入下一个数if (a[i] >= a[i - 1]) //如果输人的数不小于前一个数i++;             //使数的序号加 1elseprintf("enter this data again:\n"); //要求重新输入此数}printf("\n");for (i = 0; i < N; i++)printf("%5d", a[i]); // 输出全部15个数printf("\n");while (flag){printf("input number to look for:");       //问你要查找哪个数scanf("%d", &number);                       //输入要查找的数sign = 0;                                 // sign为0表示尚未找到top = 0;                                    // top 是查找区间的起始位置bott = N - 1;                             // bott是查找区间的最末位置if ((number < a[0]) || (number > a[N - 1])) //要查的数不在查找区间内loca = -1;                             //表示找不到while ((!sign) && (top <= bott)){mid = (bott + top) / 2; //找出中间元素的下标if (number == a[mid])    //如果要查找的数正好等于中间元素{loca = mid;                                                     //记下该下标printf("Has found %d,its position is %d\n", number, loca + 1); //由于下标从0算起,而人们习惯从1算起,因此输出数的位置要加1sign = 1;                                                       //表示找到了}else if (number < a[mid]) //如果要查找的数小于中间元素的值bott = mid - 1;         //只须在下标为0~mid-1的元素中找else                     //如果要查找的数不小于中间元素的值top = mid + 1;}                                        //只须在下标为 mid+1~bott的元素中找if (!sign || loca == -1)              // sign为0或 loca等于—1,意味着找不到printf("cannot find %d.\n", number); //输出"找不到"printf("continue or not(Y/N)?");       //问你是否继续查找scanf("%c", &c);                        //不想继续查找输入'N'或'n'if (c == 'N' || c == 'n')flag = 0; // lag 为开关变量.控制程序是否结束运行}return 0;
}

运行结果:

以上运行情况是这样的∶开始输入3 个数,由于顺序不是由小到大,程序不接收,要求重新输入。再输入15个数,然后程序输出这 15 个数,供核对。程序询问要找哪个数,输入7,输出"找不到7"。问是否继续找数,回答y表示 yes,再问找哪个数,输入12,输出"找到了。它是第7个数"。

题目10:有一篇文章,共有3行文字,每行有 80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

解:N-S图如图6.7所示。

答案代码:

#include <stdio.h>
int main()
{int i, j, upp, low, dig, spa, oth;char text[3][80];upp = low = dig = spa = oth = 0;for (i = 0; i < 3; i++){printf("please input line %d:\n", i + 1);gets(text[i]);for (j = 0; j < 80 && text[i][j] != '\0'; j++){if (text[i][j] >= 'A' && text[i][j] <= 'Z')upp++;else if (text[i][j] >= 'a' && text[i][j] <= 'z')low++;else if (text[i][j] >= '0' && text[i][j] <= '9')dig++;else if (text[i][j] == ' ')spa++;elseoth++;}}printf("\n");printf("upper case :%d\n", upp);printf("lower case  :%d\n", low);printf("digit       :%d\n", dig);printf("space       :%d\n", spa);printf("other       :%d\n", oth);return 0;
}

运行结果:

先后输入了3行字符,程序统计出结果。

说明:数组 text 的行号为 0~2,但在提示用户输入各行数据时,要求用户输入第 1 行、第 2 行、第 3 行; 而不是第 0 行、第 1 行、第 2 行,这完全是照顾人们的习惯。为此,在程序第 6行中输出行数时用 i+1,而不用 i。这样并不影响程序对数组的处理,程序其他地方数组的第 1 个下标值仍然是 0~2。

题目11:输出以下图案

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

解:

答案代码:

#include <stdio.h>
int main()
{char a[5] = {'*', '*', '*', '*', '*'};int i, j, k;char space = ' ';for (i = 0; i < 5; i++){printf("\n");printf(" ");for (j = 1; j <= i; j++)printf("%c", space);for (k = 0; k < 5; k++)printf("%c", a[k]);}printf("\n");return 0;
}

运行结果:

题目12:有一行电文,已按下面规律译成密码∶

A→Z 
a→z

B→Y b→y

C→X

 c→x

即第1个字母变成第 26个字母,第 i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。

解:可以定义一个数组 ch,在其中存放电文。如果字符 ch[j] 是大写字母,则它是 26个字母中的第(ch[j]-64)个大写字母。例如,若 ch[j] 的值是大写字母 ‘B’,它的 ASCII 码为 66,它应是字母表中第(66-64)个大写字母,即第 2 个字母。按密码规定应将它转换为第(26-i+1)个大写字母,即第(26-2+1)= 25个大写字母。而 26-i+1=26 - (ch[j] - 64)+1=26+64-ch[j] + 1,即91-ch[j](如 ch[j] 等于 ‘B’,91-‘B’=91-66=25,ch[j] 应将它转换为第 25 个大写字母)。该字母的 ASCII 码为 91-ch[j] + 64,而91-ch[j] 的值
为 25,因此 91-ch[j]+64=25+64=89,89是 ‘Y’ 的 ASCII 码。表达式 91-ch[i]+64 可以直接表示为155-ch[j] 。小写字母情况与此相似,但由于小写字母 ‘a’ 的 ASCII 码为97,因此处理小写字母的公式应改为:26+96-ch[j]+1+96=123-ch[j]+96=219—ch[j] 。例如,若 ch[j] 的值为 ‘b’,则其交换对象为 219—‘b’=219—98=121,它是 ‘y’ 的 ASCII 码。

由于此密码的规律是对称转换,即第 1个字母转换为最后一个字母,最后一个字母转换为第 1个字母,因此从原文译为密码和从密码译为原文,都是用同一个公式。

N-S图如图6.8所示。

答案代码:

(1)用两个字符数组分别存放原文和密码

#include <stdio.h>
int main()
{int j, n;char ch[80], tran[80];printf("input cipher code:");gets(ch);printf("\ncipher code :%s", ch);j = 0;while (ch[j] != '\0'){if ((ch[j] >= 'A') && (ch[j] <= 'Z'))tran[j] = 155 - ch[j];else if ((ch[j] >= 'a') && (ch[j] <= 'z'))tran[j] = 219 - ch[j];elsetran[j] = ch[j];j++;}n = j;printf("\noriginal text:");for (j = 0; j < n; j++)putchar(tran[j]);printf("\n");return 0;
}

运行结果:

(2)只用一个字符数组

#include <stdio.h>
int main()
{int j, n;char ch[80];printf("input cipher code:\n");gets(ch);printf("\ncipher code:%s\n", ch);j = 0;while (ch[j] != '\0'){if ((ch[j] >= 'A') && (ch[j] <= 'Z'))ch[j] = 155 - ch[j];else if ((ch[j] >= 'a') && (ch[j] <= 'z'))ch[j] = 219 - ch[j];elsech[j] = ch[j];j++;}n = j;printf("original text:");for (j = 0; j < n; j++)putchar(ch[j]);printf("\n");return 0;
}

运行结果:

题目13:编一程序,将两个字符串连接起来,不要用strcat 函数。

解:

N-S图如图6.9所示。

答案代码:

#include <stdio.h>
int main()
{char s1[80], s2[40];int i = 0, j = 0;printf("input string1:");scanf("%s", s1);printf("input string2:");scanf("%s", s2);while (s1[i] != '\0')i++;while (s2[j] != '\0')s1[i++] = s2[j++];s1[i] = '\0';printf("\nThe new string is :%s\n", s1);return 0;
}

运行结果:

题目14:编一个程序,将两个字符串sl和s2 比较,若s1>s2,输出一个正数; 若s1=s2.输出0;若sl<s2,输出一个负数。不要用 strcpy 函数。两个字符串用gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的 ASCII码的差值。例如,“A"与"C"相比,由于"A”<“C”,应输出负数,同时由于’A’与’C’的 ASCII码差值为2,因此应输出"-2"。同理∶"And"和"Aid"比较,根据第2个字符比较结果,“n"比"i"大5,因此应输出"5”。

解:

#include <stdio.h>
int main()
{int i, resu;char s1[100], s2[100];printf("input string1:");gets(s1);printf("\ninput string2:");gets(s2);i = 0;while ((s1[i] == s2[i]) && (s1[i] != '\0'))i++;if (s1[i] == '\0' && s2[i] == '\0')resu = 0;elseresu = s1[i] - s2[i];printf("\nresult:%d.\n", resu);return 0;
}

运行结果:

题目15:编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1中。不用strcpy 函数。复制时,\0’也要复制过去。\0’后面的字符不复制。

解:

#include <stdio.h>
int main()
{char s1[80], s2[80];int i;printf("input s2:");scanf("%s", s2);for (i = 0; i <= strlen(s2); i++)s1[i] = s2[i];printf("s1:%s\n", s1);return 0;
}

运行结果:

《C语言程序设计》(谭浩强第五版) 第6章 利用数组处理批量数据 习题解析与答案相关推荐

  1. C语言程序设计谭浩强第五版复习梳理2

    第2章 算法--程序的灵魂 前言:前两章都是c语言基础知识,软考还有考研笔试可能会考,下一章开始学的才是真正的编程. 2.1程序=算法+数据结构 算法+数据结构=程序 数据结构: 对数据的描述.在程序 ...

  2. C程序设计谭浩强第五版课后答案 第三章习题答案

    C语言程序设计谭浩强第五版课后答案第三章 1.假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比.计算公式为p=(1+r)np = (1+r)^np=(1+r ...

  3. 《C语言程序设计》(谭浩强第五版) 第2章 算法——程序的灵魂

    <C语言程序设计>(谭浩强第五版) 第2章 算法--程序的灵魂 习题解析与答案 你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解 ...

  4. C程序设计(谭浩强第五版)总结

    C程序设计(谭浩强第五版)总结 本篇文章主要是总结谭浩强第五版C语言书上的重点和易漏点的知识点,其目的主要是给高校期末考试的同学们点参考.本文所参考的书籍是谭浩强的<C程序设计(第五版)> ...

  5. 《C语言程序设计》(谭浩强第五版) 第8章 善于利用指针 习题解析与答案

    你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解,还可以在线答题. 本章习题均要求用指针方法处理. 题目1:输入3个整数,按由小到大的顺序输 ...

  6. C语言程序设计(谭浩强第五版)——习题

    C语言程序设计(谭浩强第五版)--习题 第3章 最简单的C程序设计--顺序程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 利用数组处理批量数据 第3章 最简单的C程序设计--顺序 ...

  7. 《C语言程序设计》谭浩强 第五版 编程10题解答2

    <C语言程序设计>谭浩强 第五版 编程10题解答2 11.素数计算 编写程序计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔减.加之和,即第1个素数- ...

  8. c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...

    c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组 * 临沂大学汽车学院:韩晓翠 第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组 授课要点 数组的概念 一维 ...

  9. 自学c程序设计之路,谭浩强第五版,(一)程序设计与c语言

    由于本人提升技能需求,开始自学c语言程序设计,教材为<c程序设计>第五版谭浩强著.该系列为本人的学习笔记,记录的是知识点与例题,学到哪里,更到哪里.也希望能对正在学c程序设计的朋友有帮助. ...

最新文章

  1. gentoo下使能subversion自动补全
  2. 项目4---罗列并解释阿里云服务的存储产品
  3. 字符的用意_通达信某些字符的意义及用法
  4. 园区医保和其他地方的医保的区别
  5. (18)VHDL实现译码器
  6. vuex使用及自定义Vue指令vue-permission
  7. HTML 表格滚动锁定表头,实现固定行列
  8. Pascal基础教程
  9. Vue.use 写多个_支付宝为16个行业写的文案,据说价值30万
  10. Delta RPMs disabled because /usr/bin/applydeltarpm not installed解决办法
  11. 关于Google您的连接不是私密连接问题的解决方法 (Chrome 地址栏 Google 搜索错误处理 隐私设置错误)
  12. 智慧时代,如何让路口交通安全又高效?
  13. 软工实践(五)——获小黄衫有感
  14. 苹果CMS海螺模板V16魔改版2.0修复bug分享给大家
  15. 小程序webview嵌入h5兼容iphone安全区域
  16. DXP软件使用快捷键
  17. c++ 图的连通分量是什么_7.1 图的定义与基本术语
  18. 传奇3服务器数据修改,传奇3游戏架设技术之3.0服务器架设和设置攻略详细分享...
  19. 组合框里添加复选框的方法
  20. Spring Boot之Log4j2配置(总结)

热门文章

  1. 如何关闭Acrobat Reader DC自动更新
  2. Idea 启动play
  3. Kubernetes设计模式
  4. 2012移动开发者大会成都站
  5. Java 18发布:甲骨文公司已开始将Java纳入其软件许可审计
  6. win装机失败的一次记录
  7. 如何有效缩短汽车覆盖件模具的制造周期?
  8. 构造avl树_图解 AVL 自平衡二叉查找树及 java 实现
  9. python面试题整理
  10. 5G NR 下行调度算法流程