C语言程序设计实验三答案
- 格式:doc
- 大小:49.50 KB
- 文档页数:6
一、实验目的1. 掌握简单的程序设计,能正确写出顺序结构的源程序。
2. 掌握数据的输入输出方法,能正确使用各种格式转换符。
二、实验内容(程序清单及运行结果)(一)阅读程序1.先读下列程序,写出程序运算结果,再将该程序输入并运行,观察运行结果与你所写的结果是否相同。
①int main(){ int x,y,z;x=y=2;z=3;y=x++-1; printf("%d\t%d\t",x,y);y=++x-1; printf("%d\t%d\t",x,y);y=z--+1; printf("%d\t%d\t",z,y);y=--z+1; printf("%d\t%d\n",z,y);return 0;}②int main(){ char c1='a',c2='b',c3='c',c4='\101',c5='\116';printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);printf("\tb%c%c",c4,c5);return 0;}2.以下各程序需要输入数据,请写出输入数据的格式和变量的值并上机验证。
①#include <stdio.h>int main(){ int a,b,c;printf("input a,b,c\n");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);return 0;}②main(){ int i, j;printf("i, j=?\n");scanf("%d, %d", &i, &j);}③scanf(“%d,%*d,%d”,&a,&b);若输入:3,4,5a=? b=?④scanf(“%3d%2d”,&a,&b);若输入:12345a=?b=?⑤按格式要求输入/输出数据#include "stdio.h"int main(){ int a,b;float x,y;char c1,c2;scanf(“a=%d,b=%d”,&a,&b);scanf(“%f, %e”,&x,&y);getchar();scanf(“%c %c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”,a,b,x,y,c1,c2);return 0;}运行该程序,必须按如下方式在键盘上输入数据a=3,b=7 ↙8.5,71.82 ↙a A ↙请同学们写出输出结果(二)完成程序要求:按照给定题目要求,参照出现的语句,填写程序空白处。
C语言程序设计》(江宝钏著)实验三答案(总7页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March实验三 选择结构程序设计一、实验目的与要求1. 理解C 语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。
2. 掌握利用if 结构实现选择结构的方法。
3. 掌握利用switch 结构实现多分支选择结构。
4. 结合程序掌握一些简单的算法,学习调试程序5. 实验4学时二、实验内容1.程序改错题改正下面程序中的错误。
输入实数x ,计算并输出下列分段函数f(x)的值(保留1位小数)。
)100(1=x x ==)(x f y)100(≠x x输入输出示例1(改正后程序的运行结果)Enter x :100f )= 输入输出示例2(改正后程序的运行结果)Enter x :23f )=源程序(有错误的程序)#include<>#include<>void main(void){double x;printf("Enter x: \n");scanf("=%f", x);if (x = 100) {y = 1/sqrt(x)}else (x != 100) {y = x;}printf("f(%.2f) = %.1f\n",x,y);}答:#include<>#include<>void main(void){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x=100)y = 1/sqrt(x);elsey= x;printf("f(%.2lf)=%.1lf\n",x,y);}2.一般编程题 编程题1输入任意三个整数a,b,c ,求3个数中的最大值和最小值。
综合实验三一、实验目的1.综合运用C语言的语法知识。
2.学会指针、结构体和文件的使用方法3.掌握结构化、模块化程序设计方法。
二、实验内容1.学生成绩管理。
具体功能模块包括:(1) 增加学生数据(2) 删除学生数据(3) 查找学生成绩(4) 显示学生名次(5) 显示不及格人员(6) 退出要求:(1)学生数据包括:学生的学号、姓名、成绩,其中学生成绩包括:英语、高数、计算机三门课。
学生数据文件名建议为:student.dat。
(2)按学号删除或查找学生的成绩。
(3)根据学生的平均分排名次。
(4)采用模块化程序程序设计方法,程序可读性强,界面友好。
提示:(1)可定义下面的结构体来表示学生的数据:struct student{ char name[9];int num;int english;int mathmatic;int computer;int average; };(2)建议五个功能模块各是一个独立的文件,文件名分别为:adddata.c 、deldata.c 、dispdata.c 、sortdata.c 、nopass.c,主函数所在文件的文件名为student.c ,最后可通过#include命令或建立工程文件的方式来组合各个文件。
*2.模拟第1题编写一个图书管理程序,功能自定,但自少要有三个功能(例如:图书数据录入、借书、还书等)。
*3.抽签分组:偶数签分到A组,奇数签分到B组,结果各存入相应的数据文件中。
请继续扩充本程序的功能,例如:各种查询等。
二、自测题1.程序改错下面程序中fun函数的功能是:判断两个指针所指存储单元中的值的符号是否相同,若相同函数返回1,否则返回0。
设这两个存储单元中的值都不为0。
请改正函数 fun 中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>fun ( double a, b ) /*改为: fun (double *a, double *b)*/{ if ( a * b > 0.0 ) /*改为:if( (*a)*(*b)>0.0)*/return 1;else return 0;}main( ){ double n , m;printf ("Enter n , m : "); scanf ("%lf%lf", &n, &m );printf( "\nThe value is: %d\n", fun ( &n, &m ) );}2.程序填空下面程序把从终端读入的文本(用@作为结束标志)输出到一个名为bi.dat中。
《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;}```实验四:阶乘实验题目描述:请编写一个程序,实现输入一个整数并输出其阶乘。
实验三循环结构程序设计(参考答案)1、设计程序sy3-1.c,计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数之和。
例如输入n 的值为20时,输出0.583333。
算法分析:穷举1~n(含n)之间的每一个整数,能否被5或者9整除。
如果能,则把它的倒数累加到累加器里去。
因为能被5整除的自然数,应该至少从5才可能,所以循环控制变量i可以5开始。
参考答案:#include<stdio.h>void main(){int n,i;double s=0; //累加器要赋初值为0,结果为小数,所以定义为实数类型printf("请输入n的值:");scanf("%d",&n);for(i=5;i<=n;i++) //穷举小于等于n的自然数if(i%5==0||i%9==0)s=s+1.0/i;// 因为i是整数类型,所以1/i的值为0printf("s=%f\n",s);}运行结果:2、设计程序sy3-2.c,计算并输出给定整数n的所有因子(不包括1与自身)之和。
例如,输入n的值是856时,应输出763。
算法分析:因子,就是能整除n的值。
所以从2到n-1穷举每个数是不是它的因子,是就累加到s中。
参考答案:#include<stdio.h>void main(){int s=0,n,i;printf("请输入n:");scanf("%d",&n);for(i=2;i<n;i++) //穷举所有可能为因子的整数if(n%i==0) //因子即是能整除n的数s=s+i;printf("%d的所有因子之和是:%d\n",n,s);}运行结果:3、设计程序sy3-3.c,输入一个整数,要求将该整数上各位数字是偶数的数取出,并按原来从高位到低位的顺序组成一个新数。
实验三循环控制实验课程名:高级语言程序设计(C)专业班级:学号:姓名:实验时间:实验地点:指导教师:一、实验目的和要求1. 熟练掌握用while语句、do while语句和for语句实现循环的方法。
2. 掌握在程序设计中用循的方法实现一些常用算法。
并进一步学习调试程序的方法。
二、实验内容1、任务名称程序c40101.c求1+…+100,填空,实现该功能。
(1、)源代码:#include<stdio.h>int main(){int s,i;s=0;for(i=1;i<=100;i++)s=s+i;printf("1+2+...+100=%d\n",s);return 0;}运行结果:(需要截图)(2、)源代码:#include<stdio.h>int main(){int s=0,i=1;while(i<=100){s+=i;i++;}printf("1+2+...+100=%d\n",s);return 0;}运行结果:运行结果分析:2、任务名称:分别运行这两个程序,若输入7,这两个程序的结果分别是多少?若输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区别?(1、)源代码:#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;while(i<=10){ sum+=i;i++;}printf("%d+...+10=%d\n",n,sum);}运行结果:(需要截图)(2、)源代码:#include <stdio.h>int main(){ int i,n,sum=0;scanf("%d",&i);n=i;do{ sum+=i;i++;} while(i<=10);printf("%d+...+10=%d\n",n,sum);return 0;}运行结果:运行结果分析:3、任务名称:下面程序,若输入12345,分析输出结果是多少?源代码:#include <stdio.h>void main( ){ long data;scanf("%ld",&data);while(data){ printf("%ld,",data%10);data=data/10;}}运行结果:(需要截图)运行结果分析:4、任务名称:程序c40104.c 实现求Fibonacci 数列的前n 个数。
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
3.2基础实验一、程序分析1.以下程序若输入’a’,则输入格式为:__c1=a____;运行结果为:___a,A↙_____。
#include<stdio.h>intmain( ){char c1,c2;scanf(“c1=%c”,&c1);c2=c1-32;printf(“%c,%c\n”,c1,c2);return 0;}2.以下程序如果使得a的值为2、b的值为3,则输入格式为:_a=2,b=3__;运行结果为:_2,3↙_。
#include<stdio.h>intmain( ){ int a,b;scanf(“a=%d,b=%d”,&a,&b);printf(“%d,%d\n”,a,b);return 0;}3.以下程序若输入12.3、7.6、1.1,则输入格式为:_12.3 7.6 1.1__;运行结果为:_aver=7.00___。
#include<stdio.h>intmain( ){ floata,b,c,d;scanf(“%f%f%f”,&a,&b,&c);d=(a+b+c)/3;printf(“aver=%.2f”,d);return 0;}二、程序填空1.输入一个四位整数,求各位数字之和(如1234,则结果为1+2+3+4=10)。
若输入3562,则运行结果为:___3+5+6+2=16↙____________。
#include <stdio.h>intmain( ){ int n,a,b,c,d,m;scanf(“%d”,&n);a=n%10;b=(n/10)%10;c=(n/100)%10;d=__n/1000________;m=__a+b+c+d________;printf(“%d+%d+%d+%d=%d\n ”, d,c,b,a,m);return 0;}2.给定一个华氏法表示的温度值,将其转换为摄氏法表示的温度,转换公式为则运行结果为:__f=64.00,c=17.78↙__。
实验三 选择结构程序设计一、实验目的与要求1. 理解C 语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。
2. 掌握利用if 结构实现选择结构的方法。
3. 掌握利用switch 结构实现多分支选择结构。
4. 结合程序掌握一些简单的算法,学习调试程序5. 实验4学时二、实验内容1.程序改错题改正下面程序中的错误。
输入实数x ,计算并输出下列分段函数f(x)的值(保留1位小数)。
)100(1=x x==)(x f y)100(≠x x输入输出示例1(改正后程序的运行结果)Enter x :100f )=输入输出示例2(改正后程序的运行结果)Enter x :23f )=源程序(有错误的程序)#include<>#include<>void main(void){double x;printf("Enter x: \n");scanf("=%f", x);if (x = 100) {y = 1/sqrt(x)}else (x != 100) {y = x;}printf("f(%.2f) = %.1f\n",x,y);}答:#include<>#include<>void main(void){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x=100)y = 1/sqrt(x);elsey= x;printf("f(%.2lf)=%.1lf\n",x,y);}2.一般编程题编程题1输入任意三个整数a,b,c ,求3个数中的最大值和最小值。
答:#include <>void main(){int a,b,c;printf("请输入三个整数:");scanf("%d %d %d",&a,&b,&c);if (a>=b)t=a,a=b,b=t;if (a>=c)t=a,a=c,c=t;if (b>=c)t=b,b=c,c=t;printf("最小值为:%d\n",a);printf("最大值为:%d\n",c);}编程题2输入x ,计算并输出下面分段函数f(x)的值(保留2位小数)。
请调用sqrt 函数求平方根,调用pow 函数求幂。
)0(12)1(2<+++x x x x=)(x fx( x)0输入输出示例(共运行3次)Enter x:10f =Enter x:-f(- = -Enter x:0f =成本答:#include<>#include<>void main(){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x<0)y=pow(1+x,2)+2*x+1/x;elsey=sqrt(x);printf("f(%.2f)=%.2f\n",x,y);}编程题3有一函数:x (-5<x<0)y= x-1 (x=0)x+1 (0<x<10)编写程序,要求用scanf函数输入x的值,输出y的值。
具体要求如下:(1)用if语句实现分支,自变量和函数值均用实数类型。
(2)自变量用scanf函数输入,给一些输入提示。
(3)运行程序,输入x的值(分别为-5<x<0,x=0,0<x<10)三种情况,检查输出的y值是否正确。
答:#include<>#include<>void main(){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x>0&&x<10)y=x+1;else if (x==0)y=x-1;else if (x>-5&&x<0)y=x;printf("f(%.2f)=%.2f\n",x,y);}编程题4某服装店经营成套服装的买卖,同时也允许单件销售。
若一次购买不少于70套,则每套90元;若不足70套,则每套110元;只买上衣每件70元;只买裤子每条60元。
请编写程序假设用户买入x件上衣和y条裤子,请编写程序计算相应的应付款是多少答:#include<>#include<>void main(){double x,y,z;printf("输入上衣x件,裤子y件:\n");scanf("%lf%lf",&x,&y);if (x>=y&&y>=70)z=90*y+70*(x-y);else if (y>=x&&x>=70)z=90*x+60*(y-x);else if (x>y&&y<70)z=110*y+70*(x-y);else if (y>x&&x<70)z=110*x+60*y-x;printf("应付:%.3f(元)\n",z);}编程题5编写程序实现:输入一个整数,判断它能否被3 、5 、7整除,同时输出如下信息。
(1)能同时被3 、5 、7整除;(2)能同时被其中的哪二个数整除;(3)能被其中的哪一个数整除;(4)不能被3 、5 、7任一个数整除。
答:#include<>void main(){int x,a,b,c,d;scanf("%d",&x);a=x%3;a=a/a*100;b=x%5;b=b/b*10;c=x%7;d=a+b+c;switch(d){case 100:printf("能被5,7整除\n");case 10 :printf("能被3,7整除\n");case 1 :printf("能被3,5整除\n");case 110:printf("能被7整除\n");case 101:printf("能被5整除\n");case 11 :printf("能被3整除\n");case 111:printf("不能被3,5,7整除\n");case 0 :printf("能被3,5,7整除\n");}}3.较难编程题编程题1请用switch语句编程计算员工每月的薪水。
已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与提成的关系如下(计量单位:元):profit≤1000 没有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。
分析:为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。
分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、……),如果将利润profit整除1000,则相邻两个区间的重叠。
为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:profit≤1000 对应01000<profit≤2000 对应12000<profit≤5000 对应2、3、45000<profit≤10000 对应5、6、7、8、910000<profit 对应10、11、12、……答:#include <>void main(){double p,m,t,q;int n;printf("某月所接工程利润为:");printf("\n\n");scanf("%lf",&p);m=p-1;n=(int)m/1000;switch (n){case 0 : printf("\n薪水为:500\n"); break;case 1 :q=500+p* ;printf("\n薪水为:%.2lf\n",q);break;case 2 :case 3 :case 4 :q=500+p*;printf("\n薪水为:%.2lf\n",q);break;case 5 :case 6 :case 7 :case 8 :case 9 :q=500+p* ;printf("\n薪水为:%.2lf\n",q);break;default:q=500+p*;printf("\n薪水为:%.2lf\n",q);}}编程题2编写程序实现如下功能:输入二个运算数(exp1,exp2)和一个运算符(op),计算表达式exp1 op exp2的值,其中OP可以为+、-、*、/、%五个符号中的任一种(提示:用switch 语句实现)。
答:#include <>void main(){float exp1,exp2,x;char op;printf("输入:");scanf("%f%c%f",&exp1,&op,&exp2);switch (op){case '+':x=exp1+exp2;break;case '-':x=exp1-exp2;break;case '*':x=exp1*exp2;break;case '/':x=exp1/exp2;break;}printf("\n\n\n%5.2f%c%5.2f=%5.2f\n\n\n",exp1,op,exp2,x);}+。