C语言程序设计实验报告怎么写?
通过本试验初步培养计算机逻辑解题能力。熟练掌握赋值语句和if语句的应用;掌握switch多路分支语句和if嵌套语句的使用
实验原理和设计方案:
1、函数头的选则,while循环语句,switch(case)语句,条件表达式,if else条件语句,自增运算符,设置复杂变量,输出随机操作数。
2、变量要有分数变量和等级变量,要有选择算法题数的变量和计算正确与否的变量,要有随机输出的两个操作数变量和自己按运算符号输入结果的变量,最后还有判断是否要进行的变量字符。中间结果有选择运算符的switch()和分数等级的switch()和错题对题的自增和选择运算符计算的自增。
3、问题的分析方法:先考虑设置整形变量和字符变量,考虑到要不断循环计算,选择用while语句来循环。在循环体中,将前面的输出提示运算符,和自行选择运算符、答案及输出随机操作数完成。再用switch语句对选择的运算符进行判断,并用变量进行自增运算,计算出错题于对题个数和选择了那种运算符号。在循环体最后用if else语句来判断是否继续执行还是跳出循环。最后根据自增计算的结果和公式进行分数计算,并用switch语句来是想等级的制定。
#include<stdio.h>
void exchange(int *px,int *py)
int main(void){
int x,y
scanf("%d%d",&x,&y)
exchange(&x,&y)
printf("x=%d\ny=%d",x,y)
}
void exchange(int *px,int *py){
int temp
temp=*px
*px=*py
*py=temp
}
void main()
{ float f=555.5678,ff
int a[10]={ 0,1,2,3,4,5,6,7,8,9 },b[10],i
FILE *fp
if ( fp=fopen("TEXT.dat","wb+") )
{ fwrite(&f,sizeof(float),1,fp)
for ( i=0i<10i++ ) fwrite(&a[i],sizeof(int),1,fp)
fclose(fp)
} else printf("无法建立文件。\n")goto ERROREND
if ( fp=fopen("TEXT.dat","rb") )
{ fread(&ff,sizeof(float),1,fp)
for ( i=0i<10i++ ) fread(&b[i],sizeof(int),1,fp)
fclose(fp)
} else printf("无法打开文件。\n")goto ERROREND
printf("%.2f ",ff)for ( i=0i<10i++ ) printf("%d ",b[i])printf("\n")
ERROREND:
}
计算机是通过执行指令(由操作码字段和操作数字段组成)序列来解决问题的,因而每种计算机都有一组指令集(指令系统)供给用户使用,寻址就是其中之一(如为了找到操作数)。
寻址方式:1)与数据有关的寻址方式 :
a 立即寻址方式:操作数(立即数)直接存放在指令中,紧跟在操作码,作为指令的一部分,这中寻址方式用来表示常数,它经常用于给寄存器赋初值,且只能用于源操作数字段,不能用于目的操作字段,且源操作数长度与目的操作数长度一致。
b 寄存器寻址方式:操作数在寄存器中,指令用来指定寄存器号,不需要访问存储器来取得操作数,速度较快。
c 直接寻址方式:操作数的有效地址(在8086里把操作数的偏移地址叫做有效地址)只包含位移量一种成分,其值就存放在代码段中指令的操作码之后,位移量的指即操作数的有效地址。适用于处理单个变量。
d 寄存器间接寻址方式:操作数的有效地址只包含基址寄存器内容或变址寄存器内容一种成分,因此有效地址就在某个寄存器中,而操作数就在存储器中。适用与表格处理,执行完一条指令后,只需修改寄存器的内容就可以取出表格下一项。
e 寄存器相对寻址方式:操作数的有效地址即为基址或变址寄存器和指令中指定的位移量之和。
f 基址变址寻址方式:操作数的有效地址是一个基址寄存器和一个变址寄存器之和。
g 相对基址变址寻址方式 h 比例变址寻址方式 等等。
2)与转移地址有关的寻址方式。
a 段内直接寻址:转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。
b 段内间接寻址:转向有效地址是一个寄存器或是一个存储单元的内容 。(常用)
c 段间直接寻址 d 段间间接寻址
此外 还介绍一些寄存器 如通用寄存器 AX BX CX DX 也可叫做数据寄存器,可以以字或字节的形式访问, 另外 SP BP SI DI 四个16位寄存器可以像数据寄存器一样在运算时存放操作数,但他们只能以字(16位)为单位使用,此外它们更经常的用途是在存储器寻址时,提供偏移地址,再者有四个专门提供段地址的寄存器,称为段寄存器 有代码段CS 数据段DS 堆栈段SS 附加段ES。
你可以把我这个程序的输出部分修改一下(不修改也可以)
程序如下:
#include <stdio.h>
#define STU_NUM 10//学生数目
#define SCORE_NUM 3//课程数目
typedef struct
{
char num[20]
char name[20]
float score[SCORE_NUM]
float total//总分
float average//平均分
} Student
Student stu[STU_NUM]
//输入学生信息
void input()
{
int i,j
printf("请输入%d个学生的信息:\n",STU_NUM)
for(i=0i<STU_NUMi++)
{
printf("学号:")
scanf("%s",stu[i].num)
printf("姓名:")
scanf("%s",stu[i].name)
for(j=0j<SCORE_NUMj++)
{
printf("科目%d的成绩:",j+1)
scanf("%f",&stu[i].score[j])
}
}
}
//输出学生信息
void output(void)
{
int i,j
for(i=0i<STU_NUMi++)
{
printf("学生的信息如下:\n")
printf("学号:%s\n",stu[i].num)
printf("姓名:%s\n",stu[i].name)
for(j=0j<SCORE_NUMj++)
{
printf("科目%d的成绩:%f\n",j+1,stu[i].score[j])
}
printf("总分:%f\n",stu[i].total)
printf("平均分:%f\n",stu[i].average)
}
}
//计算总分和平均分
void process()
{
int i,j
for(i=0i<STU_NUMi++)
{
stu[i].total=0
for(j=0j<SCORE_NUMj++)
{
stu[i].total+=stu[i].score[j]
}
stu[i].average=stu[i].total/SCORE_NUM
}
}
//按总分进行排序(冒泡法)
void sort()
{
Student tStu
int i,j
for(i=0i<STU_NUMi++)
{
for(j=STU_NUM-1j>ij--)
{
if(stu[j].total>stu[j-1].total)
{
tStu=stu[j]
stu[j]=stu[i]
stu[i]=tStu
}
}
}
}
main()
{
input()
process()
sort()
output()
}
scanf("%lf", x) 改为scanf("%lf", &x)
y = 1 / x 没加分号
二、if( a + b >c || b + c >a || a + c >b)改成if( !(a + b >c || b + c >a || a + c >b) )
#include<stdio.h>
#include<stdlib.h>
#define BufLen 20
#define KeChengCount 3
typedef struct tagStuInfor
{
char xh[BufLen]//学号
char xm[BufLen]//姓名
char kchm[KeChengCount][BufLen]//课程名
float pshchj[KeChengCount]//平时成绩
float kshchj[KeChengCount]//考试成绩
float zpchj[KeChengCount]//总评成绩
float zf
}StudentInformation
typedef struct tagBookInfor
{
char shm[BufLen]//书名
float dj//单价
}BookInformation
void shurustu()
void zongfen()
void shuchumaxmin()
void sortbook()
void freeall()
//学生数,书数
int xshsh,shsh
StudentInformation *ptstu=NULL
BookInformation *ptbook=NULL
int main()
{
char in[]="data.txt",out[]="T_data.txt"
int i
float chjs[6],zf
FILE *fin,*fout
printf("250这个数字太不好了,能换成350吗?\n\n")
shurustu()
zongfen()
shuchumaxmin()
printf("请输入书数:")
scanf("%d",&shsh)
ptbook=(BookInformation*)calloc(shsh,sizeof(BookInformation))
for(i=0i<shshi++)
{
printf("请输入第%d本书的书名:",i+1)
scanf("%s",ptbook[i].shm)
printf("请输入第%d本书的单价:",i+1)
scanf("%f",&ptbook[i].dj)
}
printf("\n")
sortbook()
printf("按书的单价升序排序后的结果:\n书名\t单价\n")
for(i=0i<shshi++)
{
printf("%s\t%.2f\n",ptbook[i].shm,ptbook[i].dj)
}
fin=fopen(in,"r")
fout=fopen(out,"w")
while(!feof(fin))
{
for(i=0i<6i++)
{
fscanf(fin,"%f",&chjs[i])
}
zf=0.2*(chjs[0]+chjs[1]+chjs[2])+0.8*(chjs[3]+chjs[4]+chjs[5])
printf("%.2f\n",zf)
fprintf(fout,"%.2f\r\n",zf)
}
printf("\n")
fclose(fin)
fclose(fout)
freeall()
system("PAUSE")
return EXIT_SUCCESS
}
void shurustu()
{
int i
printf("请输入学生的个数:")
scanf("%d",&xshsh)
ptstu=(StudentInformation*)calloc(xshsh,sizeof(StudentInformation))
for(i=0i<xshshi++)
{
strcpy(ptstu[i].kchm[0],"C语言")
strcpy(ptstu[i].kchm[1],"高等数学")
strcpy(ptstu[i].kchm[2],"英语")
printf("请输入第%d个学生的学号:",i+1)
scanf("%s",ptstu[i].xh)
printf("请输入第%d个学生的姓名:",i+1)
scanf("%s",ptstu[i].xm)
printf("请输入第%d个学生的C语言课程的平时成绩和考试成绩:",i+1)
scanf("%f %f",&ptstu[i].pshchj[0],&ptstu[i].kshchj[0])
printf("请输入第%d个学生的高等数学课程的平时成绩和考试成绩:",i+1)
scanf("%f %f",&ptstu[i].pshchj[1],&ptstu[i].kshchj[1])
printf("请输入第%d个学生的英语课程的平时成绩和考试成绩:",i+1)
scanf("%f %f",&ptstu[i].pshchj[2],&ptstu[i].kshchj[2])
}
printf("\n")
}
void zongfen()
{
int i
for(i=0i<xshshi++)
{
ptstu[i].zpchj[0]=0.2*ptstu[i].pshchj[0]+0.8*ptstu[i].kshchj[0]
ptstu[i].zpchj[1]=0.2*ptstu[i].pshchj[1]+0.8*ptstu[i].kshchj[1]
ptstu[i].zpchj[2]=0.2*ptstu[i].pshchj[2]+0.8*ptstu[i].kshchj[2]
ptstu[i].zf=ptstu[i].zpchj[0]+ptstu[i].zpchj[1]+ptstu[i].zpchj[2]
printf("%s的%s,%s,%s的总评成绩是:",ptstu[i].xm,ptstu[i].kchm[0],ptstu[i].kchm[1],ptstu[i].kchm[2])
printf("%.2f,%.2f,%.2f\n",ptstu[i].zpchj[0],ptstu[i].zpchj[1],ptstu[i].zpchj[2])
printf("%s的总分是:%.2f\n",ptstu[i].xm,ptstu[i].zf)
}
printf("\n")
}
void shuchumaxmin()
{
int i,min,max
min=max=0
for(i=1i<xshshi++)
{
if(ptstu[i].zf<ptstu[min].zf)
{
min=i
}
if(ptstu[i].zf>ptstu[max].zf)
{
max=i
}
}
printf("总分最高的学生的信息:\n学号\t姓名\t")
printf("%s(平时)\t%s(平时)\t%s(平时)",ptstu[max].kchm[0],ptstu[max].kchm[1],ptstu[max].kchm[2])
printf("\t%s(考试)\t%s(考试)\t%s(考试)\t总分\n",ptstu[max].kchm[0],ptstu[max].kchm[1],ptstu[max].kchm[2])
printf("%s\t%s\t",ptstu[max].xh,ptstu[max].xm)
printf("%.2f\t%.2f\t%.2f\t",ptstu[max].pshchj[0],ptstu[max].pshchj[1],ptstu[max].pshchj[2])
printf("%.2f\t%.2f\t%.2f\t%.2f\n\n",ptstu[max].kshchj[0],ptstu[max].kshchj[1],ptstu[max].kshchj[2],ptstu[max].zf)
printf("总分最低的学生的信息:\n学号\t姓名\t")
printf("%s(平时)\t%s(平时)\t%s(平时)",ptstu[min].kchm[0],ptstu[min].kchm[1],ptstu[min].kchm[2])
printf("\t%s(考试)\t%s(考试)\t%s(考试)\t总分\n",ptstu[min].kchm[0],ptstu[min].kchm[1],ptstu[min].kchm[2])
printf("%s\t%s\t",ptstu[min].xh,ptstu[min].xm)
printf("%.2f\t%.2f\t%.2f\t",ptstu[min].pshchj[0],ptstu[min].pshchj[1],ptstu[min].pshchj[2])
printf("%.2f\t%.2f\t%.2f\t%.2f\n\n",ptstu[min].kshchj[0],ptstu[min].kshchj[1],ptstu[min].kshchj[2],ptstu[min].zf)
}
void sortbook()
{
int i,j,min
BookInformation t
for(i=0i<shsh-1i++)
{
min=i
for(j=i+1j<shshj++)
{
if(ptbook[j].dj<ptbook[min].dj)
{
min=j
}
}
t=ptbook[i]
ptbook[i]=ptbook[min]
ptbook[min]=t
}
}
void freeall()
{
if(NULL!=ptstu)
{
free(ptstu)
}
if(NULL!=ptbook)
{
free(ptbook)
}
}
//data.txt文件
50 65 70 88 97 80
66 87 95 46 88 97
77 82 65 58 91 58
78 87 91 48 66 70
#include <string.h>
#include <ctype.h>
#define MAXSIZE 36
struct Word {
char word[MAXSIZE]
unsigned size
}words[10000]
int n = 0
void Sort() {
// 没有时间写了
}
void Additive(char word[]) {
int i,flag = 1
for(i = 0 i < n && flag ++i) {
if(strcmp(words[i].word,word) == 0) {
++words[i].size
flag = 0
}
}
if(flag) {
strcpy(words[n].word,word)
words[n].size = 1
++n
}
}
int main() {
int i,ch
char word[MAXSIZE]
FILE *fin = fopen("case1.in","rt")
if(fin == NULL) {
printf("无法打开数据文件!\n")
return 1
}
i = 0
while((ch = fgetc(fin)) != EOF) {
if(isalpha(ch)) word[i++] = tolower(ch)
else if(i) {
word[i] = '\0'
i = 0
Additive(word)
}
}
if(i) {
word[i] = '\0'
Additive(word)
}
fclose(fin)
Sort()
return 0
}
第一节 C语言的发展历史与特点
第二节 程序与程序设计
第三节 算法与算法的描述
第四节 C语言的上机操作
思考题与习题
第二章 C语言程序设计基础
第一节 C语言的程序结构
第二节 数据类型
第三节 运算符与表达式
思考题与习题
第三章 C程序控制结构
第一节 C程序的三种基本控制结构
第二节 顺序结构
第三节 选择结构
第四节 循环结构
思考题与习题
第四章 数组
第一节 数组与数组元素的概念
第二节 一维数组
第三节 二维数组及多维数组
第四节 字符串与字符数组
思考题与习题
第五章 指针
第一节 指针与指针变量的概念
第二节 指针变量的定义和引用
第三节 指针变量与数组
思考题与习题
第六章 函数
第一节 函数的定义
第二节 函数的嵌套调用
第三节 数组作为函数参数
第四节 指针与函数
第五节 变量的使用范围与存储类别
第六节 不同文件中的函数使用
思考题与习题
第七章 编译预处理
第一节 宏定义
第二节 文件包含
第三节 条件编译
思考题与题
第八章 结构体与共用体
第一节 结构体基础
第二节 结构体数组
第三节 结构体指针
第四节 链表
第五节 位段
第六节 共用体
第七节 枚举类型与自定义类型
思考题与习题
第九章 文件
第一节 文件概述
第二节 文件的打开与关闭
第三节 文件的读/写
第四节 文件的定位
思考题与习题
第十章 程序设计方法
第一节 程序设计的基本概念
第二节 结构化程序设计方法
第三节 程序效率
第四节 程序设计风格
思考题与习题
附录
附录A C语言实验
附录B 标准ABSII码表
附录C C语言中的关键字
附录D 运算符的优先级与结合性