《C及C++程序设计》实验报告
2. 改错题
[题目] 以下程序中函数encode完成一个字符串的加密功能,将s1字符串中的字符经过变换后保存到s2指向的字符数组中。二维数组cs保存了一个明码密码对照表,第一行是明码字符,第二行是对应的密码字符。加密方法:从s1字符串中每取一个字符,均在cs表第一行中查找有无该明码字符,若找到则将对应的密码字符放入s2中,否则将s1中原来的字符放入s2中。 #include
char cs[2][10]={\void encode(char *s1,char *s2) { int n,i,j;
for(n=0;s1[n]!='\\0';n++)
{ for(i=0;i<10 && s1[n]!=cs[0][i]; i++ ); if(i<10) s2[n]=s1[n] ; /* i>=10 */ else s2[n]=cs[1][i]; }
s2[n]='\\0'; }
main()
{ char ts[80]=\ encode(ts,td); puts(td); }
3. 程序设计题
(1)[题目] 用牛顿迭代法求方程3x3-3x2+x-1=0在x0=2附近的实根。要求: ① 用函数float newtoon(float x)求方程在x附近的根;
② 用函数float F(float x)求x处的函数值,用函数float F1(float x)求f(x)在x处的导数; ③ 在主函数中输入x0,并输出结果。 [算法提示]
牛顿迭代法又被称3x3-3x2+x-1,若要求方时x的值。我们需要知附近求实根。在曲线上切线,切线的斜率为的交点为x,切线的斜
f(x0)x0?xf(x0) 为切线法。设f(x)= 程的根,即求f(x)=0道x0的值,表示在x0f(x0)点处作该点的f?(x0);切线与x轴率又为
f(x0)x0?xx x0 ,所以
f'(x0)?,可得交点x的值为x0?f(x0)f'(x0)。如果|x-x0|>1e-5,则把x当作新的
x0,重复上述过程,直到|x-x0|<=1e-5为止。
23
《C及C++程序设计》实验报告
[源程序] float F(float x)
{
return x*(3*x*(x-1)+1)-1; }
float F1(float x) {
return __9*x*x-6*x+1________________; }
float newtoon(float x) {
float f,f1,x0;
do { _xo=x_____________; f=F(x0); f1=F1(x0);
x=___x0-f/f1___________;
}while(___fabs(x-x0)>=1e-5____________); return x; } main() { float x0;
scanf(“%f”,&x0);
printf(“The result =%.2f\\n”,____newtoon(x0)_____________); }
[运行结果]
(2)[题目] 两个等长的二进制数之间的海明距离是指对应位数字不同的位数。如100101和001110之间的海明距离为4。设计算机系统使用16个二进制位表示一个十进制整数,试按下列要求编写程序:
① 编写函数void DecToBin(char str[], int n),其功能是将非负整数n转换成16位二进制数字字符串,按由低位向高位存入数组str中;
② 编写函数int Hymin(char *x , char *y),其功能是统计x、y指向的两个16位二进制数字字符串对应位数字不同的位数,并返回统计结果; ③ 在主函数中输入两个十进制正整数39和15,分别调用函数DecToBin将它们转换为二
24
《C及C++程序设计》实验报告
进制数字字符串,再调用函数Hymin计算它们之间的海明距离。将这两个十进制数转换后的二进制字符串及其海明距离输出。 请验证结果是否为:distance of 39 and 15 = 2 [源程序]
void DecToBin(char str[] , int n) {int i=0,j; while(n!=0)
{ str[i++]=___n%2+?0?________; n=___n/2____; }
for(j=i ; j<16 ; j++) str[j]=?0?; }
int Hymin(char *x , char *y)
{int count=0, i ; for(i=0; i<16 ; i++)
if(__x[i]!=y[i] (或 *x++!=*y++_)_________) count++; return count; } main()
{ int m,n,t;
char a[17],b[17];
scanf(“%d%d”,&m,&n);
__DecToBin( a, m)_____________; ___ DecToBin( b, n)____________;
printf(“distance of %d and %d = %d\\n”,m,n,___Hymin(a,b)________); }
[测试数据及结果]
四、实验总结
25
《C及C++程序设计》实验报告
实验名称: 链 表 实验时间: 年 月 日 第 周 星期
实验属性:验证性
一、 实验目的
1. 掌握结构体的基本概念及应用; 2. 了解动态存储分配的基本概念; 3. 进一步掌握C语言中指针的运用;
4. 掌握链表的建立、插入、删除、归并等基本操作。
二、 实验预备工作
1. 复习结构体的基本概念;
2. 复习指向结构体数组的指针的应用。
三、 实验内容
1.填空题
(1)有如下说明:
struct link { int data; struct link *next;}*p; 设p已申请到一个结点空间,要求将p串接到头结点head上,写出建立如图所示的存储结构和赋值所需的语句。
20 NULL head data next
head = _____p_________;
____p->data___________ = 20; ____p->next___________ = NULL;
(2) 下列程序的运行结果是_____51,60,21________________
struct stu { int x;int *y; } *p;
int dt[4]={10,20,30,40};
sturct stu a[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=a;
printf(\ printf(\ printf(\ } 2.改错题
[题目] 下列程序用来建立一个带头结点的单向链表,新产生的结点总插在链首。程
26
相关推荐: