2014湖南大学c语言实验题目及其答案 (3)
- 格式:doc
- 大小:74.00 KB
- 文档页数:11
一、写出下列程序段的运行结果(40分)1.(4分)char a= 'F'-'E',b= '\12',c=12,d;c = a<b<c;d =--a&& b++;printf("%d,%d,%d,%d",a,b,c,d);2.(4分)int a=2, b=5;printf("a=%%d,b=\\d,");b/=a;a+=a-b;printf("%d,%d",a,b);3.(4分)char a=256;printf("%d,",a++);a=(int)(13/5+1.4);printf("%d",a);4.(4分)int p[8]={11,12,13,14,15,16,17}; int i=0,j=0;while (i++<7) (第一次循环i=1)if (p[i]%2) j+=p[i];printf("%d\n",j);5.(4分)int a=3,b=5;void exchange(int a, int b){int t;t=a; a=b; b=t;printf("%d,%d\n", a, b);} int main(){exchange(a,b);printf("%d,%d\n",a,b);return 0;}6.(4分)void f(char ch){if (ch>'A'){f(ch-1);}putchar(ch);}int main(){f('D');return 0;}7.(4分)char str[10]="123456789"; int i;for (i=9; i>0; i/=2){str[i]=0;printf("%s\n",str);}8.(4分)struct {int x; int y; int z;}a[3] ={1,2,3,4,5,6,7,8,9};printf("%d,%d\n", a[1].x+a[2].y, a[1].y+a[2].z);9.(4分)int a[8]={1,2,3,4,5,6,7,8};int i=1, *p = a;while (p<a+8){p rintf("%d ",*p);p = p+i;i*=2;} 10.(4分)FILE *fp;int d=20150111;char c1,c2;char str[4];fp=fopen("a.tmp","w");fprintf(fp,"%d", d);fclose(fp);fp=fopen("a.tmp","r");c1=fgetc(fp);fgets(str, 4, fp);c2=fgetc(fp);fscanf(fp, "%d", &d);printf("%c,%s,%c,%d",c1,str,c 2,d);二、改错题(20分)以下程序实现:从键盘输入20个学生的成绩数据,将这些数据存到磁盘文件“stu.dat”上,并求这些学生的最差成绩。
c语言实验报告(附答案版)实验一、这个实验需要4学时才能完成。
2、目标1。
阅读程序问题1简单确定性问题解决(1)掌握c语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法;(2)掌握不同类型数据之间的分配规律;(3)掌握存储器中数据的存储方式;(4)学会输入、输出函数的基本格式和使用方法;(5)学习使用算术运算符、逻辑运算符、关系运算符以及包含这些运算符的表达式。
2、编程题(1)如何使用if-else决策结构进行编程;(2)如何使用开关决策结构进行编程。
3.调整试题(1)熟悉c程序的编辑、编译、连接和运行的过程。
三、实验指导为了达到最佳的实验效果,以下提供了几种适合编程的指南供参考。
1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。
2.编程问题必须先画流程图,反复思考,判断程序设计的正确性,完成程序设计。
应注意简单确定性问题的结构选择。
3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。
对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。
-1-四、实验内容1、阅读程序题(1)main(){/*定义字符变量*/charc1,C2;/*为字符变量分配整数*/C1=97;C2=98;printf(\/*以字符形式输出*/printf(\/*以整数形式输出*/}该程序的输出结果是ab(换行)9798。
思考:可以改成intc1、C2吗;输出是什么?完全相同的(2)main(){inta=7,b=5;printf(\}该程序的输出结果是0。
思考:如果将printf语句中的%d更改为%F,可以输出分数的值吗?当然(3)main(){inta=9;a+=a-=a+a;/*包含复合赋值运算符*/printf(\}该程序的输出结果是-18。
《C程序设计实验》实验一C程序开发环境(2学时)1.实验目的熟悉C语言的集成开发环境,了解菜单的使用方法;掌握C语言程序上机的编辑、编译、连接、运行的基本步骤;了解C语言程序的结构。
2.实验内容(1)熟悉C语言程序上机的编辑、编译、连接、运行的基本步骤;(2)输入并调试、运行下面的程序。
#include <stdio.h>int main( ){printf ("This is a C program.\n");return 0;}(3)输入并调试、运行下面的程序。
#include <stdio.h>int main( ){int max(int x,int y);int a,b,c;scanf("%d,%d",&a,&b);c = max(a,b);printf("max=%d\n",c);return 0;}int max(int x,int y){int z;if (x > y) z = x;else z = y;return(z);}3.实验仪器设备微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论将printf函数改为print,调试并分析结果。
实验二数据类型、运算符与表达式(2学时)1.实验目的掌握整型、字符型和实型变量的定义和使用;掌握算术运算符的使用;掌握C语言表达式的运算规则。
2.实验内容(1)输入并调试、运行下面的程序。
#include <stdio.h>int main(){char c1,c2;c1=97;c2=98;printf("%c %c\n",c1,c2);printf("%d %d\n",c1,c2);return 0;}(2)输入并调试、运行下面的程序。
#include <stdio.h>int main(){int i,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d\n",i,j,m,n);return 0;}3.实验仪器设备微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
实验三循环控制实验课程名:高级语言程序设计(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 个数。
C语⾔课后实验设计题⽬及答案C语⾔实验题⽬及答案1、实验项⽬⼀ C程序的编辑、编译、连接和运⾏题⽬:编写程序,要求屏幕上显⽰如下信息:***********************This is a C program .***********************程序:#includevoid main(){printf(“***********************\n”);printf(“This is a C programn .\n”);printf(“***********************\n”);}实验项⽬⼆数据类型、运算符、表达式题⽬(1)程序填空:输⼊1 个实数x,计算并输出其平⽅根(保留1 位⼩数)。
填空1.double x,root;2.root=sqrt(x);(2)输⼊⼀个⼤写英⽂字母,输出相应的⼩写字母。
填空1.ch=ch+32;1、#include "stdafx.h"#include "stdio.h"#include "math.h"int main(int argc, char* argv[]){printf("This is a Cprogram\n");return 0;}#include "math.h"int main(int argc, char* argv[]) {double x;printf("x=");scanf("%lf",&x);printf("%lf\n",sqrt(x));return 0;}2、实验项⽬三顺序结构程序设计题⽬(1)编写程序,输⼊三⾓形的三边长a、b、c,求三⾓形⾯积area。
(2)设圆半径r=1.5,圆柱⾼h=3,求圆周长、圆⾯积、圆球表⾯积、圆球体积、圆柱体积。
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)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 所指的一维数组中。
第五章文件一.目的和要求1、掌握文件的基本概念,如:文件的输入/输出的基本概念、文件的两种组织形式、文件操作的一般步骤等等。
2、学习文件操作的基本算法,如:读/写、追加等。
3、了解文件的读写方式,如:顺序读写文件、随机读写文件。
4、了解如何将不同的数据(如:数组数据、结构体数据)存入或读出文件的方法。
二.相关知识1、文件概述⑪文件的组织形式C把文件看作是字符(字节)的序列,即由一个一个字符数据顺序组成的。
根据数据的组织形式,可分为ASCII文件和二进制文件。
①ASCII文件又称文本文件。
它的每一个字节放一个ASCII代码(代表一个字符)。
因而便于对字符进行逐个处理,也便于输出字符。
但一般占存储空间较多,而且化费转换时间。
②二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
但一个字节并不对应一个字符。
不能直接输出字符形式。
⑫文件的处理方法①缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。
从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。
如果从磁盘向内存读入数据,则从磁盘文件中将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。
用缓冲文件系统进行的输入输出又称为高级(高层)磁盘输入输出。
②非缓冲文件系统:系统不自动开辟缓冲区,系统直接对磁盘写或读数据。
用非缓冲文件系统进行的输入输出又称为低级(低层)磁盘输入输出系统。
⑬文件的存取方式C语言对文件的操作都是通过文件处理函数实现的。
用文件处理函数存取文件的方式有两种,一种是顺序存取(顺序文件),另一种是随机存取(随机文件)。
⑭设备文件由于计算机中的输入/输出设备的作用也是输入输出数据,所以把输入/输出设备也看成文件,称为设备文件。
微机上配备的常用输入设备是键盘,称标准输入设备;常用输出设备是显示器,称标准输出设备;还有一个专用于输出错误信息的标准错误输出设备,也是显示器。
第3章指针一.目的和要求1、掌握指针的概念和定义方法。
2、掌握指针的操作符和指针的运算。
3、了解指针与数组的关系。
4、了解指针与字符串的关系。
5、学习指针在函数中的应用。
二.相关知识1、指针变量的定义和初始化指针变量是用来存放其它变量地址的变量。
其定义格式如下:存储类型数据类型*指针变量名1[=初值1],…说明:①相同类型的指针变量和普通变量可以放在一起说明。
②指针变量和普通变量完全一样,由它的定义位置决定指针的作用域和生命期。
③要使一个指针变量指向一个确定的变量,必须将该变量的地址赋给指针变量。
④一个指针只能指向同一个类型的变量。
2、&运算符和*运算符在C语言中提供了两个有关指针的运算符:① &运算符称为“取地址运算符”。
②运算符称为“指针运算符”,也称为“间接运算符”,如:*p代表p所指向的变量。
3、使用指针运算符应注意的问题①指针变量定义中的“*”与“*”运算符的区别。
指针变量定义中的“*”不是运算符,它只是表示其后的变量是一个指针类型的变量。
而对于语句“*p=5;”,其中的“*”是指针运算符“*”,“*p”代表p指向的变量。
②&运算符与*运算符是互逆的。
如:y=x; y=*&x; 两个语句是等效的。
4、对指针变量的操作在定义了一个指针变量之后,如:int *p, a; 就可以对该指针进行各种操作。
①给一个指针变量赋予一个地址值,如:p=&a;。
②输出一个指针变量的值,printf(“%o”,p);。
③访问指针变量所指向的变量,如:printf(“%d”,*p);。
5、指向数组的指针变量的使用数组名本身可以看成是该数组的指针,但它的位置是固定的。
如果定义一个指针变量,并把这个指针指向该数组的起始地址,那么通过对指针的运算,就可以完成对数组的访问。
如,引用一维数组元素(int a[10], *p=a;)的方法有:①下标法,如:a[i], p[i]。
②地址法,如:*(a+i), *(p+i)。
6、指针数组和多级指针①一个数组,如果每个元素都是指针类型的,则它是指针数组。
指针数组是用来存放一批地址的。
②当定义的某个指针变量专门用来存放其它指针变量的地址时,这样的指针变量就称为指针的指针,也称二级指针。
7、指针型函数及函数指针①指针型函数,是指函数的返回值是指针型的,即这类函数的返回值是地址数据。
指针型函数调用与一般函数的调用方法完全相同,唯一需要注意的是只能用指针变量或指针型数组元素来接受指针型函数的返回值。
②指向函数的指针称为函数指针,当把函数名赋给指针变量时,该指针变量的内容就是函数的存储地址。
函数指针的作用主要是把指针作为参数传送到其它函数。
如果使指针变量指向不同的函数,将它的值传给被调用函数中的形参时,能调用不同的函数。
三.实验练习实验练习1:输入3个整数,按从大到小的次序输出(使用指针)。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的2.问题描述3.事例输出4.程序模板5.问题解答提示6.后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析事例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/* */注释。
编译并执行程序,并将输出结果与提供的事例输出进行比较。
然后回答强化练习。
实验目的本实验旨在巩固学生对指针这种数据结构的理解,增强程序设计能力。
在这个实验中,学生将练习:•定义一个指针变量并使它指向一个一维数组,它有三个数组元素。
•在循环语句中使指针下移,依次输入三个整数存入数组中。
•使指针上移,指向第三个数组元素。
•第三个数与第一个数进行比较,若小于第一个数则交换。
•第三个数与第二个数进行比较,若小于第二个数则交换。
•第二个数与第一个数进行比较,若小于第一个数则交换。
•利用循环语句,按反序输出数组,即输出第一个数、第二个数、第三个数。
在强化练习中,学生将练习:•按从小到大的次序输出三个整数。
•在循环语句中,不使用循环控制变量i,就用指针p进行输入输出。
•不用数组,使用三个指针变量完成该题。
问题描述编写程序,从键盘输入三个整数存入数组中,使指针p指向该数组,操作指针使数组中的数按从大到小的次序输出。
示例输出程序模板#include "stdio.h"void main(){ int a[3],*p=a;int i,temp;printf("请输入三个整数:");for(i=0;i<3;i++,p++)/*利用指针变量输入撒播个整数*//*指针变量自减1*/;if(*p<*(p-2))/* *p与*(p-2)交换*//*如果*p小于*(p-1)*/{ temp=*p; *p=*(p-1); *(p-1)=temp; }/*第2个数与第1个数比较,若第2个数小于第1个数,则交换*/for(i=2;i>=0;i--,p--)printf("%d\n",*p);}问题解答提示1.指针是一种特殊的变量,它的值是地址值,说明它时前面冠以*号。
2.将指针指向数组的起始地址,只要把数组名赋给指针变量。
3.利用循环每输入一个数据,指针就下移一个数据。
4.输入完数据后,指针指向最后一个数组元素之后。
应使指针上移指向最后一个数据。
P—实现指针上移。
5.利用条件判断语句if和中间变量temp,将最大的数存放在数组的第一个数组元素中,最小的数存放在第三个数组元素中。
6.在循环语句for中,若初值大于终值,则步长要为负数,循环控制变量的值依次递减直到小于终值才退出循环。
7.如果在实验中碰到任何问题,请向实验老师寻求帮助。
强化练习1.根据程序模板,按从小到大的次序输出三个整数。
2.修改程序,在循环语句中,不使用循环控制变量i,就用指针p进行输入输出。
3.不用数组,使用三个指针变量完成同样的任务,请修改程序。
,实验练习2:编写函数,交换两变量的值。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的2.问题描述3.事例输出4.程序模板5.问题解答提示6.后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析事例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/* */注释。
编译并执行程序,并将输出结果与提供的事例输出进行比较。
然后回答强化练习。
实验目的本实验旨在巩固学生对指针这种数据结构的理解,增强程序设计能力。
在这个实验中,学生将练习:•说明交换函数swap( ),它是无值类型的,它有两个参数且都是指针型的。
•用scanf( )输入两个整数。
• printf( )输出交换前的两个数。
•调用交换swap( )函数,实参是取两变量的地址,将它们传给形参,即形参指针指向实参变量•使用临时变量,交换两形参变量的值。
•返回主函数后,调用printf( )输出交换的两个数。
在强化练习中,学生将练习:•使用两个全局变量重编该程序。
•实参和形参都用变量名,重编该程序。
问题描述编写程序,在主函数中输入两个整数存入变量,调用交换函数交换两变量的值。
示例输出程序模板#include "stdio.h"void main( ){ int a,b;/*交换函数的说明*//*提示输入两个变量*//*使用scanf( )函数输入两个整数*/printf("交换前a=%d b=%d\n", a, b);/*调用交换函数*//*输出交换后两变量的值*/}/*交换函数的头部*/{ int temp;/* *p与*q交换*/}问题解答提示1.交换函数的调用在前,而实现在后。
所以要预先说明,说明时只要指出函数的类型及参数的个数、类型即可。
2.可以使用临时变量交换两变量的值。
也可以不用临时变量来交换两变量的值。
若变量a与b交换,算法为:a=a+b; b=a-b; a=a-b;3.我们研究的都是单值函数,任何函数无法返回两个值,所以交换函数swap( )的类型是无值(void)类型。
通过参数传递传回被交换了的两个变量的值。
4.由于交换函数是无值函数,所以调用时直接写成调用语句。
5.如果在实验中碰到任何问题,请向实验老师寻求帮助。
强化练习1.根据程序模板,使用两个全局变量重编该程序。
2.在程序中,若实参和形参都用变量名,会出现什么情况?实验练习3:编写函数*match,在一个整型数组中查找输入的一个整数,找到后把该数置换为0。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的2.问题描述3.事例输出4.程序模板5.问题解答提示6.后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析事例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/* */注释。
编译并执行程序,并将输出结果与提供的事例输出进行比较。
然后回答强化练习。
实验目的本实验旨在巩固学生对指针这种数据结构的理解,增强程序设计能力。
在这个实验中,学生将练习:•定义一个一维数组,含有11个数组元素并且赋予10个初值。
•利用循环语句,进行替换前的输出。
•使用scanf()函数,输入待替换的数。
•以实参为数组名、数组的大小及待替换的数调用匹配函数。
•在匹配函数中,查找待替换的数。
•从替换函数返回一个地址,将0送入该地址所指单元。
•利用循环语句,进行替换后的输出。
在强化练习中,学生将练习:•在该程序中,若将数组定义为”int a[10]”,当在数组中找不到待查找数时会产生什么后果?•若数组中有两个相同的待查找数据,编程查看是哪个待查找数据被置换。
•将指定位置的数据置换为0。
问题描述编写程序,在一个整型数组中查找输入的一个整数,找到后把该数置换为0,没找到数组不变。
示例输出程序模板#include "stdio.h"/*匹配函数的说明*/void main( ){ int a[11]={1,2,3,4,5,6,7,8,9,10};int b, i;/*提示替换前的输出*/for(i=0;i<10;i++)printf("%d ",a[i]);/*输出回车换行*/printf("输入待替换的数:");/*用scanf()输入待替换的数*//*调用匹配函数并将数字0存入该函数的返回值中*/printf("替换后的输出:");for(i=0;i<10;i++)/*输出数组a的数组元素的值,并且每两个值之间空一格*/printf("\n");}int *match(int *p, int n, int b){ int i;/*循环语句,循环条件是数组的下标没超过10并且还没找到相匹配的数*//*返回待查找数据的单元地址或数组最后一个数组元素的地址*/ }问题解答提示1.match()函数是指针型函数,在说明和定义它时要在其函数名前写上“*”。