实验四编程
① 36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次搬完,问男、女和小
这道题需要使用方程组来解。 设男数量为 x 人,女数量为 y 人。则小孩的数量为 (36 - x - y)。可以得到方程组: 4x + 3y + (36-x-y)/2 = 36 化简,得到: 4x + 3y - (x+y)/2 = 18 ① x + 3(x+y) - (x+y)/2 = 18 x + 2.5(x+y) = 18 因为 2.5(x+y) < 18 可以得到: (x+y) < 18/2.5 = 7.2 由 ① 式再次变换,可以得到: 4(x+y) - (x+y)/2 - y = 18 3.5(x+y) - y = 18 因为 3.5(x+y) > 18 可以得到:(x+y) > 18/3.5 = 5+1/7 即: 6≤ (x+y) ≤7 再由 ① 式还可以得到:(x+y)/2 必须为整数,那么 (x+y) 肯定为一偶数。 那么:x + y = 6 因此,x = 18 - 2.5(x+y) = 3,y = 3,36-(x+y) = 30 所以,正确的答案是: 男 3 人,女 3 人,小孩 30 人
② 求一份答案 C语言编程:实验四 数组
7. 编写程序打印出如下杨辉三角形。
解答: (1)源程序代码:(2)运行结果截图:(3)运行结果分析:
#include<stdio.h>
#define N 10
void main()
{
int s[N][N];
for(int i=0;i<N;i++)
{
S[i][0]=s[i][i]=1;
}
for(i=2;i<N;i++)
for(int j=1;j<I;j++)
s[i][j]=s[i-1][j-1]+s[i-1][j];
for(i=0;i<N;i++)
{ for(int j=0;j<=i;j++)
printf(“\t%d”,s[i][j]);
printf(“\n”);
}
}
8. 分析下列程序,查错并修改。
#include <stdio.h>
#include <string.h>
void main()
{ char a[10],b[10];
int c,d,k; char ch;
scanf("%s",&a);---à scanf("%s",a);
scanf("%s",&b); --à scanf("%s",b);
printf("a=%s,b=%s\n",a,b);
c=strlen(a);
d=strlen(b);
if(c>d)
for(k=0;k<d;k++)
{ch=a[k];a[k]=b[k];b[k]=ch;}
printf("a=%s\n",a);
printf("b=%s\n",b);
}
解答:(1) 源程序代码:(2)运行结果截图:(3)运行结果分析:
9.预习下面的程序的功能,写出预习结果。并上机验证。
#include <stdio.h>
#include <string.h>
void main( )
{ char s1[80], s2[40];
int i = 0, j = 0;
printf(" \n Please inputstring1:");
scanf("%s", s1);
printf(" \n Please inputstring2:");
scanf("%s", s2);
while (s1[i]!= '\0' )
i++;
while (s2[j]!= '\0' )
s1[i++]=s2[j ++];
s1[i]= '\0';
printf("\n New string: %s",s1);
}
解答:(1)运行结果截图:(2)运行结果分析:
S2附加到S1的最后
10. 补充以下程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:
#include <stdio.h>
void main ( )
{ char str1[100],str2[100];
int i,s;
printf("\n Input string1:\n");gets(str1);
printf(“\n Input string2:\n”);gets(str2);
i= 0 (1) ;
while((str1[i]==str2[i])&&(str1[i]!= ‘\0’ (2) ))
i++;
s= str1[i]=str2[i] (3) ;
printf("%d\n",s);
}
解答:(1) 源程序代码:(2)运行结果截图:(3)运行结果分析:
11. 补充以下程序,功能是统计从终端输入字符串中每个大写字母的个数。用#号作为输入结束标志。
#include <stdio.h>
#include <ctype.h>
void main ( )
{ int num[26],i; char c;
for (i=0;i<26;i++)num[i]=0;
while ( (c=getchar())(1) != '#') /* 统计从终端输入的大写字母个数*/
if (isupper(c))num[c-65]++ (2) ;
for (i=0;i<26;i++) /* 输出大写字母和该字母的个数*/
if (num[i])printf("%c:%d\n",i+65 (3) ,num[i]);
}
解答: (1)源程序代码:(2)运行结果截图:(3)运行结果分析:
12.编写程序,功能是输入若干个字符串,求出每个字符串的长度,并打印最长的字符串的内容。以“stop”作为输入的最后一个字符串。
解答:(1)源程序代码:(2)运行结果截图:(3)运行结果分析:
13.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入"BEIJING"、"123"和位置3,则输出:"BEI123JING"。解答: (1)源程序代码:(2)运行结果截图:(3)运行结果分析:
③ 汇编语言程序设计的一般步骤是什么
汇编语言程序设计的基本步骤 了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。一般来说,编制一个汇编语言程序的步骤如下:(1) 分析题意,确定算法或算法思想。算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。(2) 根据算法画出流程图,简单的情况也可不画。画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。(3) 分配存储空间和工作单元,合理地使用寄存器。分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。(4) 根据流程图编写程序。这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。(5) 上机调试运行程序。通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种操作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。
上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的操作。它有一个入口,两个出口,如下图(a)所示。
连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。
注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的操作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。
处理框反映做些什么样的操作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。
输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。