实验五-参考答案--计算机C语言汇编
- 格式:doc
- 大小:72.00 KB
- 文档页数:7
实验一(第1章实验)实验目的:1.掌握运行C语言程序的全过程。
2.熟悉编译环境。
3.初步熟悉C语言程序的语法规定。
4.了解简单函数的使用方法。
实验内容:1.编程且上机运行:求3个整数的和。
2.编程且上机运行:求2个数的和、差、积和商。
3.编程且上机运行:输入3个数,求最大值。
4.编程且上机运行:输入圆的半径,求圆的面积和周长。
5.在屏幕上输出:“hello world!”实验结果:实验二(第3章实验)1.实验目的:理解C语言的类型系统。
实验内容:写程序测试数据-2在类型char,int,unsigned int,long int,unsigned long int 中存储情况。
实验过程:实验结果:参见各种类型的存储实现描述。
2.实验目的:了解混合类型计算中类型的转换规则。
实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。
注意unsigned int和int数据运算时类型转换的方向。
实验过程:/** 类型转换问题* 试问下面两个表达式等价吗?*/#include <stdio.h>#include <stdlib.h>int main() {unsigned int ui,uj;ui = 1;uj = 2;if (ui < uj)printf("\n%u < %u is true !\n", ui, uj);elseprintf("\n%u < %u is false !\n", ui, uj);if (ui - uj < 0)printf("\n%u - %u <0 is true !\n", ui, uj);elseprintf("\n%u - %u <0 is false !\n", ui, uj);system("pause");return 0;}实验结果:参见类型转换规则。
实验2答案五.程序改错#include<stdi o.h>int main(void){int x=3,y;y = x*x;printf("%d = %d * %d\n",y,x,x); /* 输出*/printf("%d * %d = %d\n",x,x,y);return 0;}六、一般编程题6.1#include<stdio.h>int main(void){int x,y;printf("Input x: ");scanf("%d",&x);printf("Input y: ");scanf("%d",&y);printf("%d + %d = %d\n",x,y,x+y);printf("%d - %d = %d\n",x,y,x-y);printf("%d * %d = %d\n",x,y,x*y);printf("%d / %d = %d\n",x,y,x/y);printf("%d %% %d = %d\n",x,y,x%y);return 0;}6.2#include<stdio.h>int main(void){ float x; double y;printf("Input x: ");scanf("%f",&x);printf("Input y: ");scanf("%lf",&y);printf("%f + %f = %f\n",x,y,x+y);printf("%f - %f = %f\n",x,y,x-y);printf("%f * %f = %f\n",x,y,x*y);printf("%f / %f = %f\n",x,y,x/y);return 0;}6.3#include<stdio.h>int main(void){ char c;printf("Input c: ");scanf("%c",&c);printf("%c\n",c+32);return 0;}6.4#include<stdio.h>int main(void){int celsius,fahr;fahr = 150;celsius = 5*fahr/9 - 5*32/9;printf("fahr = %d, celsius = %d\n", fahr, celsius);return 0;} 如果使用公式9)32(5-⨯=f c 计算结果不一样,celsius = 65。
《C语言程序设计》实验设计习题答案C语言程序设计是计算机专业的一门基础课程,通过实验设计习题可以帮助学生巩固所学的C语言知识,并提升编程能力。
本文将为您提供《C语言程序设计》实验设计习题的答案,以帮助您更好地理解和掌握相关知识。
实验一:基本输入输出实验题目描述:请编写一个程序,实现输入两个整数并输出其和与积。
```c#include<stdio.h>int main(){int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);int sum = num1 + num2;int product = num1 * num2;printf("和:%d\n", sum);printf("积:%d\n", product);return 0;```实验二:判断奇偶数实验题目描述:请编写一个程序,实现判断输入整数是奇数还是偶数的功能,并输出结果。
```c#include<stdio.h>int main(){int num;printf("请输入一个整数:");scanf("%d", &num);if(num % 2 == 0){printf("%d为偶数\n", num);}else{printf("%d为奇数\n", num);return 0;}```实验三:求和实验题目描述:请编写一个程序,实现输入n个整数并输出其和。
```c#include<stdio.h>int main(){int n, num;int sum = 0;printf("请输入整数的个数:");scanf("%d", &n);for(int i = 0; i < n; i++){printf("请输入第%d个整数:", i+1);scanf("%d", &num);sum += num;printf("和:%d\n", sum);return 0;}```实验四:阶乘实验题目描述:请编写一个程序,实现输入一个整数并输出其阶乘。
C语言实验参考答案实验一5、输入并运行自已编写的程序(教材第一章P14 三编程题)。
实验二1、编写一个程序,从键盘接收3个实数(分别为10.0、20.0、5.0),输出这3个数的和s、乘积t和平均值a。
#include <stdio.h>main(){float x,y,z,s,t,a;printf(“x,y,z=”);scanf(“%f,%f,%f”,&x,&y,&z);s=x+y+z;t=x*y*z;a=s/3;printf(“s=%f,t=%f,a=%f\n”,s,t,a);}2、编程。
要求用户输入两个整数a、b(分别为20、10),读取用户从键盘输入的值,然后:1)用整数输出这两个数的和、差;2)用长整型输出这两个数的积,用float输出商;3)用整数输出这两个数的余数,用float输出平均值。
#include <stdio.h>main(){int a,b,he,cha,yu;long ji;float shang,aver;printf(“a,b=”);scanf(“%d,%d”,&a,&b);he=a+b;cha=a-b;ji=(long)a*b;shang=1.0*a/b;yu=a%b;aver=(a+b)/2.0;printf(“a+b=%d,a-b=%d,a*b=%ld\n”,he,cha,ji);printf(“a/b=%f,a%%b=%d,aver=%f\n”,shang,yu,aver);}实验三1、编写一个程序,从键盘接收一个一位的整型数,经转换,用字符函数putchar输出。
例如,输入整数5,程序运行后输出字符5。
#include <stdio.h>main(){int a;char c;printf(“a=”);scanf(“%d”,&a);c=a+48;putchar(c);}2、编程。
C语言实验五实验报告——数组实验五:数组实验目的:1.掌握数组的定义和使用;2.熟悉数组在函数中的传递;3.练习编写使用数组的程序。
实验原理:数组是一组相同类型的变量的集合,这些变量称为数组的元素。
数组的名字是一个指针常量,它存放的是数组首个元素的地址。
数组元素在内存中是连续存放的,可以通过下标访问每一个元素。
数组的定义:数组的定义格式为:数据类型数组名[数组长度];数组的初始化:数组可以在定义时进行初始化,也可以在定义之后通过赋值进行初始化。
数组作为函数参数:数组可以作为函数的形参进行传递,可以通过指针传递整个数组,也可以传递数组的部分元素。
实验步骤:1.编写一个程序,实现对学生成绩的管理。
要求如下:-使用一个数组保存学生的成绩;-能够动态添加学生的成绩,并显示添加成功的信息;-能够计算学生的平均成绩,并显示;-能够根据用户输入的学号查找对应学生的成绩,并显示。
2.编写一个程序,实现对一组整数进行排序。
要求如下:-首先自定义一个整数数组,数组元素个数为用户输入;-编写一个函数,实现对数组进行排序,要求使用选择排序算法;-在主函数中调用该函数,对数组进行排序后显示。
实验结果与分析:1.学生成绩管理程序运行结果如下:```-------学生成绩管理系统-------[1]添加学生成绩[2]计算平均成绩[3]查找学生成绩[4]退出系统请输入选项:1请输入成绩:90添加成功![1]添加学生成绩[2]计算平均成绩[3]查找学生成绩[4]退出系统请输入选项:1请输入成绩:85添加成功![1]添加学生成绩[2]计算平均成绩[3]查找学生成绩[4]退出系统请输入选项:2平均成绩为:87.5[1]添加学生成绩[2]计算平均成绩[3]查找学生成绩[4]退出系统请输入选项:3 [1]添加学生成绩[2]计算平均成绩[3]查找学生成绩[4]退出系统请输入选项:4退出系统。
```2.整数排序程序运行结果如下:```-------整数排序-------请输入待排序的整数个数:6请输入第1个整数:5请输入第2个整数:3请输入第3个整数:9请输入第4个整数:2请输入第5个整数:7请输入第6个整数:1排序前的整数序列为:539271排序后的整数序列为:123579 ```实验总结:通过本次实验,我深入理解了数组的原理和用法,并且掌握了数组在函数中的传递。
【2008春上机编程题_C07】【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”形式、一行五个数据将满足条件的数据输出到屏幕:【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。
(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。
(参考教科书P134)(参考上机指导书P54例7.5、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k个整数从大到小排序。
排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。
”P50例7.2)【软件第七章】选择:1,下列一维数组的声明中,正确的是____(22)_____。
A. int a[];B. int n=10,a[n];C. int a[10+1]={0};D. int a[3]={1,2,3,4};5.以下程序运行后的输出结果是_____(25)___。
main(){ char a[7]="a0\0a0\0";int i,j;i=sizeof(a);j=strlen(a);printf("%d %d",i,j);}A.2 2B.7 2C.7 5D.6 28.以下声明中错误的是_____(27)_____。
《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验5 循环结构程序设计一、实验目的1.掌握循环结构程序设计的3种控制语句——while 语句、do ···while 语句、for 语句的使用方法。
2.了解用循环的方法实现常用的算法设计。
二、实验内容1(1)下列程序的功能为:求1~100之和(和值为5050)并输出。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy5_1.c 保存。
#include <stdio.h>main(){int i,sum=0; i=1;while(i<100) while(i<=100) sum=sum+i; { sum=sum+i; i++; i++;} printf(“The sum from 1 to 100 is %d\n ”,sum); }(2)下列程序的功能为:倒序打印26个英文字母。
纠正程序中存在的错误,以实现其功能,程序以文件名sy5_2.c 保存。
#include <stdio.h> main() {char x; x='z';while(x!='a') while(x!='a'-1)或while(x >='a') {printf("%3d",x); printf("%3c ",x); x++;x - -; }}(3)下列程序的功能为:输入一个大写字母,打印出一个菱形。
该菱形中间一行由此字母组成,其相邻的上下两行由它前面的一个字母组成,按此规律,直到字母A 出现在第一行和最末行为止。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy5_3.c 保存。
例如,输入字母D ,打印出如下图形:#include <stdlib.h> main() { int i,j,k; char ch; scanf("%c",&ch); k=ch-'A'+1; for (i=1;i<=k;i++) {for (j=20;j>=i;j--)printf("%c",' ');for (j=1;j<=i-1;j++) for (j=1;j<=2*i-1;j++) printf("%c",'A'+i-1); printf("\n"); }k=ch-'A';for (i=k;i>=1;i--){ for (i=20;i>=i;i--) for (j =20;j >=i;j --) printf("%c",' ');for (j=1;j<2*i-1;j++) for (j=1;j <=2*i-1;j++) printf("%c",'A'+i-1); printf("\n"); }}2.程序填空题(1)用辗转相除法求两个正整数的最大公约数和最小公倍数。
C语⾔实验五最简单的C语⾔程序设计实验5:最简单的C语⾔程序设计⼀、实验⽬的:(1)掌握C语⾔中使⽤最多的⼀种语句——赋值语句的使⽤⽅法。
(2)掌握各种类型数据的输⼊输出的⽅法,能正确使⽤各种格式转换符。
(3)进⼀步掌握编写程序和调试程序的⽅法。
⼆、实验内容和步骤:1、通过下⾯的程序掌握各种格式转换符的正确使⽤⽅法。
(1)输⼊以下程序:/* Note:Your choice is C IDE */# includeint main( ){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61,b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3157.890121;g=0.123456789;m=50000;n=-60000;p=32768;q=40000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d\np=%u,q=%u\n",f,g,m,n,p,q);显⽰结果:(2)运⾏此程序并分析结果。
(3)在此基础上,将程序第10~14⾏改为c1=a,c2=b;f=3157.890121;g=0.123456789;d=f;e=g;运⾏程序,分析结果。
/* Note:Your choice is C IDE */#include"stdio.h"int main(){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61;b=62;c1=a;c2=b;f=3157.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q);}显⽰结果:(4)⽤sizeof运算符分别检测程序中各类型的数据占多少字节。
高级语言程序设计(C语言)实验报告。
………………………………………………………………………………………………一、实验题目: 语句与顺序结构控制程序设计1)编写程序, 已知圆半径radius=1.25,求圆周长和面积。
源代码: 运行结果:#include <stdio.h> d=7.853981#define PI 3.1415926 s=4.908735void main(){float r=1.25,d,s;d=2.0*PI*r;s=PI*r*r;printf("d=%f\n",d);printf("s=%f\n",s);}2)编写程序完成大写字母的小写转换。
源代码: 运行结果:#include <stdio.h> 请输入一个大写字母:H void main() H h{char ch1,ch2;printf("请输入一个大写字母:");ch1=getchar();ch2=ch1+32;printf("%c %c\n",ch1,ch2);}3)任意从键盘输入一个三位整数, 要求正确分离出它的个位、十位和百位数, 并分别在屏幕上显示。
源代码: 运行结果:#include <stdio.h> 请输入一个整数 :123 void main() b=1,s=2,g=3{int a,g,s,b;printf("请输入一个整数: ");scanf("%d",&a);b=a/100;s=(a%100)/10;g=a%10;printf("b=%d,s=%d,g=%d\n",b,s,g);}二、实验题目: 选择结构程序设计程序设计1)设变量a、b、c分别存放从键盘输入的3个整数。
编写程序, 按从大到小的顺序排列这3个整数, 使a成为最大的, c成为最小的, 并且按序输出这3个整数。
第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。
#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。
#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。
实验四参考答案(参考答案)(1) 设计程序sy5-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。
算法分析:对角线上的元素,1维和2维下标相同,反对角线元素,如果行下标为i,列下标就为2-i;参考答案:#include<stdio.h>int main(){int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j,sum=0;for(i=0;i<3;i++)sum=sum+a[i][i]+a[i][2-i]; //a[i][i]当前行的主对角线元素//a[i][2-i]当前行的反对角线元素printf("矩阵的正、反对角线元素之和为:%d\n",sum);return 0;}运行结果:(2) 设计程序sy5-2.c,找出一个3×4的矩阵中的最小值及其位置。
算法分析:首先把二维数组中的第一个数即a[0][0]看成最小值,然后逐行逐列的去遍历每个元素,逐一判断每一个元素是否比最小值还好小,如果是,就改写最小值,并记录他的下标。
参考答案:#include<stdio.h>#include<math.h>int main(){int a[3][4]={{10,21,41,5},{12,15,46,35},{40,21,26,30}};int i,j,row,colum,min;printf("数组a:\n");for(i=0;i<3;i++){ for(j=0;j<4;j++)printf("%5d",a[i][j]);printf("\n");}min=a[0][0];row=0;colum=0; //首先把第一个数a[0][0]看成最小数for(i=0;i<3;i++) //双重循环逐一遍历每个元素a[i][j]for(j=0;j<4;j++)if(min>a[i][j]) //如果当前值a[i][j]比最小值还要小{min=a[i][j];row=i;colum=j;} //用a[i][j]改写最小值,并记下他们的下标printf("矩阵中最小元素是:%d,行下标是:%d,列下标是%d\n",min,row,colum);return 0;}运行结果:(3) 设计程序sy5-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。
然后输入一个整数n,使数组左下三角(含对角线元素)元素中的值乘以n 。
例如:若n的值为3,a 数组中的值为| 1 9 7 |则程序运行后a数组中的值应为| 3 9 7 || 2 3 8 | | 6 9 8 || 4 5 6 | | 12 15 18 |算法分析:主要理解到对角线即以下元素包含哪些元素,即他们的下标变化。
对每一行i来说,对角线以下的元素,他们的列下标是0,1,2,---,i;所以用外循环i遍历行,内循环j(从0到i),逐一遍历每一个a[i][j],并给a[i][j]赋值为他的n倍。
最后输出矩阵。
参考答案:#include<stdio.h>#include<math.h>int main(){int a[3][3];int i,j,n;printf("原来a的值:");for(i=0;i<3;i++) //生成数组元素,并按矩阵形式输出{ for(j=0;j<3;j++){a[i][j]=rand()%20; //rand()参看教材385页//rand()%20 产生一个20以内的整数printf("%5d",a[i][j]);}printf("\n");}printf("请输入n :");scanf("%d",&n);for(i=0;i<3;i++) //i 表示每一行for(j=0;j<=i;j++) //j 从0到i ,即每行的对角线及前面的数的列下标a[i][j]=a[i][j]*n;printf("\n 数组左下三角元素乘以n 后值为:");for(i=0;i<3;i++){for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}return 0;}运行结果:(4) 设计程序sy5-4.c ,输入一个整数m (2≤m ≤9〕,在m 行m 列的二维数组中存放如下所示规律的数据。
例如,若输入2,则输出:⎪⎪⎭⎫ ⎝⎛4221,若输入4,则输出: ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛1612841296386424321 算法分析:分析:m 的值是不定的,所以可以申明一个二维数组int a[10][10],当m=2时,只用前两行两列,当m=4时,就只用前四行四列;元素a[i][j]的值和他的行列下标可找到规律如下:每行的第0列元素a[i][0]=i+1;除第0列元素其它元素a[i][j]=a[i][0]*(j+1)。
参考答案:#include<stdio.h>{int a[10][10],i,j,m;printf("Input m:");scanf("%d",&m);for(i=0;i<m;i++) /*初始化第一列元素*/a[i][0]=i+1;for(i=0;i<m;i++) /*处理其余元素:为第0列元素*(j+1)*/for(j=1;j<m;j++)a[i][j]=a[i][0]*(j+1);for(i=0;i<m;i++) /*输出矩阵*/{ for(j=0;j<m;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:(5) 设计程序sy5-5.c,将3×3矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。
例如,有下列矩阵1 2 34 5 67 8 9计算结果为3 1 26 4 59 7 8算法分析:二维数组的移动,类似于一维数组的元素移动;只是在一维数组移动的外面加上外循环。
即:对每一行元素(i行),首先把最后一列即a[i][2]用中间变量t保存;然后就从第1列到第0列,每个元素向后移动一列(a[i][j]=a[i][j-1]);最后再给a[i][0]赋值为t(以前的a[i][2])。
#include<stdio.h>#include<math.h>int main(){int a[3][3];int i,j,t;printf("原来数组a的值:\n");for(i=0;i<3;i++) //生成数组元素,并按矩阵形式输出{ for(j=0;j<3;j++){a[i][j]=rand()%20; //rand()参看教材385页//rand()%20 产生一个20以内的整数printf("%5d",a[i][j]);}printf("\n");}for(i=0;i<3;i++) //i--每一行{ t=a[i][2]; //每一行的最后列元素用t保存for(j=2;j>0;j--) //从最后一列到第1列逐次向后移动一列a[i][j]=a[i][j-1];a[i][0]=t; //给第一列赋值t,即以前行的最后一列}printf("矩阵变换后:\n");for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("\n");}return 0;}运行结果:5、设计程序sy4-5.c,从键盘输入m的值(2<=m<=9),并用双重循环给数组赋值,在m行m 列的二维数组中存放如下所示的数据,并将结果输出在显示上。
例如:输入3 输入5则输出: 则输出:1 2 3 1 2 3 4 52 4 6 2 4 6 8 103 6 9 3 6 9 12 154 8 12 16 205 10 15 20 25算法分析:分析:m的值是不定的,所以可以申明一个二维数组int a[10][10],当m=3时,只用前三行三列,当m=5时,就只用前五行五列;元素a[i][j]的值和他的行列下标可找到规律如下:每行的第0列元素a[i][0]=i+1;除第0列元素其它元素a[i][j]=a[i][0]*(j+1)。
参考答案:#include<stdio.h>void main(){int a[10][10],i,j,m;printf("Input m:");scanf("%d",&m);for(i=0;i<m;i++) /*初始化第一列元素*/a[i][0]=i+1;for(i=0;i<m;i++) /*处理其余元素:为第0列元素*(j+1)*/for(j=1;j<m;j++)a[i][j]=a[i][0]*(j+1);for(i=0;i<m;i++) /*输出矩阵*/{ for(j=0;j<m;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:。