实验九结构体、共用体和文件
(验证性实验、设计性实验 2学时)
(一)、实验目的:
1.掌握结构体类型和共用体类型变量
2.结构体类型数组和结构体类型指针的定义
3.掌握链表的定义及操作
4.掌握文件的打开、关闭和文件的读写操作
(二)、实验内容
1.写出程序的运行结果
(1)以下程序的输出结果是:
#include
union
{
int num;
struct
{char c1,c2;} sc;
}un;
void main()
{
un.sc.cl=65;un.sc.c2=97; un.num=0;
printf("%d\n",un.sc.c2);
}
运行结果及分析:运行结果为:
共用体所有变量使用同一个存储空间,所以当un.num被赋值后un.sc.c2的值就被覆盖了。这个输出是错误的。
(2)以下程序的输出结果是:
#include
typedef union
{
long i;
int k[5];
char c;
}DATE;
struct date
{
int cat;
DATE cow;
double dog;
}too;
DATE max:
void main()
{
printf(″%d\n″,sizeof(struct date)+sizeof(max)); }
运行结果及分析:运行结果为:
DATA:4*5=20;
struct date : 4+20+8=32;
32+20=52;
2.填空题
(1)下面程序建立一个单向链表。
#include
void main()
{
struct stud
{
long num;
float score;
struct stud _______;
}stud1,stud2,stud3,*head;
stud1.num = 1;stud1.score = 89.5;
stud2.num = 2;stud2.score = 90.5;
stud3.num = 3;stud3.score = 94.5;
head = &stud1;
stud1.next = &stud2;
stud2.next = &stud3;
stud3.next = NULL;
}
填空并运行分析:*next
(2)以下程序把a数组中的数据输出到fp所指的二进制文件中。#include
#define N 10
void main()
{
float a[N];
int i;
FILE *fp;
for(i=0;i scanf(“%f”,a+i); fp=fopen(“file.dat”,“wb”); fwrite(a,4*N,1,fp); ______________________; } 填空并运行分析:fclose(fp); 分析:将a中前4*N个字符,即全部数据写入到文件中。 (3)下面程序把一个名为f1.doc的文件拷贝到一个名为f2.doc的文件中,请在__处添入适当命令行,使之正确运行。 #include void main( ) { char c; FILE *fp1, *fp2; fp1=fopen(“f1.doc”,“r”); fp2= c=fgetc(fp1); while(c!=EOF) { fputc(c,fp2); c=fgetc(fp1); } fclose(fp1); fclose(fp2); } 填空并运行分析:fopen(“f2.doc”,”w”); 3.改错题 (1)定义一个结构体变量a,输出a变量中每一个成员的值。 ①#include ②void main() { ③struct { ④char flag; ⑤float t; ⑥} STC; ⑦STC a={‘a’,46}; ⑧printf(“%c,%f\n”,a.flag,a.t); ⑨} 错误语句的行号:③⑥⑦ 改正后的语句全行:③struct STC ⑥} ; ⑦struct STC a= {'a',46}; 错误分析:符号大小写就不改了。。。 (2)从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”号为止。 ① #include ② void main() { ③file *fp; ④char ch,filename[10]; ⑤scanf(“%s”,filename); ⑥if((fp=fopen(filename,”w”))==NULL) { ⑦printf(“cannot open file\n”); ⑧exit(0); ⑨} ⑩ch = getchar(); ⑾while(ch!=’#’) { ⑿fputc(ch,fp); ⒀putchar(ch); ⒁ch=getchar(); ⒂} ⒃ fclose(fp); } 错误语句的行号:③ 改正后的语句全行:③FILE *fp; 错误分析:大小写 4.编程题(选做) (1)有10名学生,每名学生有语文、数学、外语三门课程的成绩,计算每名学生的总成绩,然后按总成绩由高到低排序,若总成绩相同,再按外语成绩由高到低排序。 要求:①利用结构体数组存放数据。 ②通过函数调用方式。 程序清单: #include #define STUDENTS 10 struct student { char stu_name[8]; char roll_num[10]; int yuwen; int math; int english; int total; } stu[STUDENTS]; void sort(struct student *ptr); void input(); void print(); int i; struct student *ptr; main() { ptr = stu; for(i=0; i input(); sort(ptr); printf("姓名\t学号\t\t语文\t数学\t英语\t总分\t排名\n"); for(i=0; i print(); } void input() { printf("请输入\n学生姓名,学号,语文,数学,英语成绩\n"); scanf("%s%s%d%d%d", (ptr+i)->stu_name, (ptr+i)->roll_num, &(ptr+i)->yuwen, &(ptr+i)->math, &(ptr+i)->english); (ptr+i)->total = (ptr+i)->yuwen + (ptr+i)->math + (ptr+i)->english; } void print() { printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",(ptr+i)->stu_name, (ptr+i)->roll_num, (ptr+i)->yuwen, (ptr+i)->math, (ptr+i)->english, (ptr+i)->total, i+1); } void sort(struct student *ptr) { int i,j,k; struct student temp; for(i=0; i { k=i; for(j=i+1; j { if((ptr+k)->total < (ptr+j)->total) k = j; else if((ptr+k)->total == (ptr+j)->total) if((ptr+k)->english < (ptr+j)->english) k = j; } if(k!=i) { temp = *(ptr+i); *(ptr+i) = *(ptr+k); *(ptr+k) = temp; } } } 编写程序注意事项: (2)编写一个程序,它使用sizeof运算符来确定计算机系统上不同数据类型的字节数。将结果写入到文件“datasize.dat”中,这样您可以稍后输出结果。文件中的结果格式如下: 程序清单: #include int main() { int size[11]; FILE *f1,*f2; size[0] = sizeof(char); size[1] = sizeof(unsigned char); size[2] = sizeof(short int); size[3] = sizeof(unsigned short int); size[4] = sizeof(int); size[5] = sizeof(unsigned int); size[6] = sizeof(long int); size[7] = sizeof(unsigned long int); size[8] = sizeof(float); size[9] = sizeof(double); size[10] = sizeof(long double); f1 = fopen("datasize.dat","w"); fprintf(f1,"%-20s%s\n","Data type","Size"); fprintf(f1,"%-20s%d\n","Char",size[0]); fprintf(f1,"%-20s%d\n","Unsigned char",size[1]); fprintf(f1,"%-20s%d\n","Short int",size[2]); fprintf(f1,"%-20s%d\n","Unsigned short int",size[3]); fprintf(f1,"%-20s%d\n","Int",size[4]); fprintf(f1,"%-20s%d\n","Unsigned int",size[5]); fprintf(f1,"%-20s%d\n","Long int",size[6]); fprintf(f1,"%-20s%d\n","Unsigned long int",size[7]); fprintf(f1,"%-20s%d\n","Float",size[8]); fprintf(f1,"%-20s%d\n","Double",size[9]); fprintf(f1,"%-20s%d\n","Long double",size[10]); } 编写程序注意事项: 实验七数组(二) (验证性实验 2学时) (一)、实验目的 1.掌握字符数组的定义、赋值和引用 2.字符串函数的使用。 (二)、预习内容 1.预习数组的定义、赋值及输入输出方法,以及典型的算法。 2.熟练循环语句与数组处理语句结合的方法。 (三)、实验内容 1.写出下列程序的运行结果 (1)#include void main() { char a[10]= "abcdefg",b[ ]="abcdefg"; a[3]=’\0’; b[3]=0; printf("%d,%d",sizeof(a),strlen(a)); printf("%d,%d",sizeof(b),strlen(b)); } 运行结果及分析:运行结果为: sizeof(),输出变量占存储空间大小,a为10;b为8;程序中两个赋值语句将a,b的第四位都变为了空字符,故字符串长度都为3。 (2)#include void main() { char ch[2][5]={"6937","8254"}; int i,j,s=0; for(i=0;i<2;i++) for(j=0;ch[i][j]>'\0'&&ch[i][j]<='9';j+=2) s=10*s+ch[i][j]-'0'; printf("%d\n",s); } 运行结果及分析:运行结果为: S的值变化:6,63,638,6385. (3)下列程序的输出结果是: #include void main( ) { char p1[20]="abcd",p2[20]="ABCD",str[50]="xyz"; strcpy(str+2,strcat(p1+2,p2+1)); } 运行结果及分析:运行结果为 对数组名算术运算其实是对内存地址的计算,中间函数的意思是,把p1数组开始后移两个位置的字符和p2向后移1个位置的字符串连起来,再和str字符串向后移两个位置的字符串连接起来。 2.程序填空 (1)将一个字符串按逆序重新存放,并输出。 #include void main() { char a[20]; int n,i,t; gets(a); ① ; for(i=0;i {_ ②_ _____} puts(a); } 填空①:n = strlen(a) 填空②:t = a[i]; a[i] = a[n - i - 1]; a[n - i - 1] = t; 程序分析:把字符串中对应位置互换。 (2)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出.(所谓回文即正向与反向的拼写都一样,例如:adgda).请填空. #include "string.h" #include int huiwen(charstr[]) { int p,i,j; p=strlen(str); for(i=0,j=p-1;i if( ① ) return 0; return 1; } void main() { char str[50]; printf("Input:"); scanf("%s",str); if( ② ) else printf("no!"); } 填空①:str[i] != str[j] 填空②:huiwen(str) 程序分析:for循环中少了控制变量的自增自减。 3.程序改错 写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的内容) (1)以下scpy( )函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。 ①#include ②void scpy(char s[ ],char t[ ]) { ③int i; ④while(t[i]) ⑤s[i++]=t[i++]; ⑥t[i]=‘\0’; } ⑦void main( ) { ⑧char str1[ ],str2[ ]="abcdefgh"; ⑨scpy(str1,str2); ⑩printf("%s ",str1); } 错误语句的行号:⑤⑧ 改正后的语句全行:⑤: { s[i] = t[i];i++;} ⑧:char str1[100],str2[ ]="abcdefgh"; 错误分析: (2)比较两个字符串的大小,如果相等输出equal,如果不相等输出unequal. ①#include ②void main() { ③char s1[10],s2[10]; ④gets(s1);get2(s2); ⑤if(s1=s2) printf(“equal”); ⑥else printf(“unequal”); } 错误语句的行号:④⑤ 改正后的语句全行:④gets(s1);gets(s2); ⑤if( ! strcmp(s1,s2)) 错误分析: 4.编写程序 (1)将一个字符串首尾倒置,重新存放。 程序清单: #include void main() { char a[20]; int n,i,t; gets(a); n = strlen(a); for(i=0; i { t = a[i]; a[i] = a[n - i - 1]; a[n - i - 1] = t; } puts(a); } 程序编写注意事项: (2)(飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。总裁要求您为新系统编制程序。需要分配该航空公司的唯一一架飞机每个航班的座位(容量:10个座位)。 程序应该轮流显示下列菜单: Please type 1 for “first class” Please type 2 for “economy” 如果输入1,则程序应该分配头等舱内的座位(座位1 ~ 5)。如果输入2 ,则程序应该分配经济舱的座位(座位 6 ~ 10)。然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱,还是经济舱内。 使用一个数组来代表飞机的座位安排。将数组的所有元素初始化为0,以说明所有座位都是空的。当分配每个座位时,将数组的对应元素设置为1,以说明不能再次使用那个座位号。当然,程序不应该分配已经分配过的座位。当头等舱满员时,程序应询问是否可以安排在经济舱内(等等)。如果可以,则进行适当的座位分配。如果不可以,则输出信息“Next Flight leaves in 3 hours”. 程序清单: #include void input(); void print(); void assign(); int seat[11] = {0},i,ch; char clas[10]; main() { input(); while(ch != 'Q') { assign(); print(); input(); } } void input() { printf("Please type 1 for “first class”\nPlease type 2 for “economy”\n"); printf("Please type Q to exit\n"); scanf("%d",&ch); } void assign() { if(ch==1) i=1; else i=6; while(seat[i] && i<10) i++; if(i<=5) { strcpy(clas,"First"); seat[i] = 1; } else { strcpy(clas,"Economy"); seat[i] = 1; } if(ch == 1 && i<=5) return; else if(ch == 2 && i<10) return; else { printf("The %s is full,do you want a another class seat?1 for yes/2 for no\n",clas); scanf("%d",&ch); if(ch == 1) input(); else { printf("Next Flight leaves in 3 hours\n\n"); input(); } } } void print() { printf("Your seat number is %d located in %s\n\n\n",i,clas); } 程序编写注意事项: (3)(输出数组)编写一个递归函数printArray,它以数组和数组大小作为参数,并且不返回任何值。当数组大小为0时,函数应该停止处理并返回。 程序清单: void printArray(int *ptr,int n) { if(n == 0) return; printf("%d ",*(ptr + n - 1)); printArray(ptr,n-1); } 程序编写注意事项: 长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include 一、单选题 1. (4分)若调用fputc函数输出字符成功,则其返回值是( )。? A. EOF ? B. 1 ? C. 0 ? D. 输出的字符 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 2. (4分)若以下程序段: struct dent { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() { struct dent *p; p=s; ….. } 则以下表达中值为2的是()。 ? A. (p++)->m ? B. *(P++)->m ? C. (*p).m ? D. *(++p)->m 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 3. (4分)在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ). ? A. extern ? B. register ? C. auto ? D. static 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 4. (4分)若二维数组a有m列,则在a[i][j]前面的元素个数为()。? A. j*m+i ? B. i*m+j ? C. i*m+j-1 ? D. i*m+j+1 得分:0知识点:C语言程序设计作业题收起解析 答案B 解析 5. (4分)下面程序的运行结果是(). main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d ”,cnum[0].y/cnum[0].x*cnum[1].x); } ? A. 0 ? B. 1 ? C. 3 2.程序填空 (1)以下程序的功能是计算1~50之间能被7整除的整数之和。 #include #include C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。 3算法描述流程图 4源程序 #include for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。 封面 此页统一购买注意本页以下两项的填写 指导老师:李筠虞闯 完成日期:2016-6-5 成绩评定表 课程设计任务书 目录 1、内容及要求 ................................................ 错误!未定义书签。 2、功能分析 .................................................... 错误!未定义书签。 3、设计 ............................................................ 错误!未定义书签。 4、运行与测试 ................................................ 错误!未定义书签。 5、总结 ............................................................ 错误!未定义书签。参考文献 .......................................................... 错误!未定义书签。 1、内容及要求 1.1内容: 人事档案管理:建立数据文件(职工、部门、职称)完成:①数据录入②查询③插入、删除、修改④排序等功能。 1.2要求: 1.程序代码完成,编译运行成功。 2.数据输入首选采用文件的方式,其次键盘输入。 3.分析采用哪种合适的存储结构来储存数据 4.设计一定的用户界面,简洁。 2、功能分析 2.1. 程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在人事管理过程中,由于预计记录对于一个单位的人事数来说太大,操作除了能够增加、删除、修改、保存等外,更多的情况是查询,且能够实现快速查询。特别是当需要动态变化时利用指针,例如插入和删除数据等操作时,为方便插入和删除人事记录,通过数据的自动的移动数据,实现动态管理。 2.2本系统涉及的模块主要有:开始、系统管理、人事管理、信息查询等四大模块。 (1)开始界面主要包括: 各个功能的选择。 (1)人事管理主要包括: (编号、姓名等)基本内容的录入,增加等。 (2) 系统管理主要包括:员工信息的修改,排序等。 (3) 信息查询主要包括:员工信息的查找、删除等。 2.3功能模块图 实验一熟悉C程序运行环境 班级学号姓名成绩 一、实验目的 1. 熟悉C语言Visual C++调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include <> int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include <> int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果: 项目3. 调试并运行下面程序,并写出运行结果: #include <> int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果: 文档从网络中收集,已重新整理排版.word版本可编辑.欢迎下载支持. 《C语言程序设计》 实验报告 2013~2014学年第二学期 班级 姓名 学号 指导教师 实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入并运行下面的程序: #include 2. (1) 改正后的源程序: #include -前言- /*非常感谢度娘以及各位网上C语言高手的支持,才能让敝人完成此文档的整理。 本文档集合了本人、度娘、众网友的力量,其中代码的正确率约为90%(不正确的有标注)。为回报度娘及众网友的帮助,本文档免费下载。 */ /*配“电子科技大学出版社(周信东主编)”的C语言程序设计实验*/ /*努力吧,骚年以及学妹们!*/ /*整理ed by 口玉刀一of GUET.*/ ===================== 实验一C语言程序初步 ===================== 1.---------------------------- 已知a=5,b=4,c=6,求出s并换行 #include"stdio.h" main() { int a,b,c,s; a=5;b=4;c=6; s=(a+b+c)/3; printf("a=%d,b=%d,c=%d\n,s=%d",a,b,c,s); } 2.------------------------------- 输入一个数字求他的平方 #include { int v; int a,b,c; //a,b,c aer sides,v is volume of cube a=3;b=3;c=5; v=a*b*c; printf("v=%d\n",v); } ================================= 实验二数据类型、运算符和表达式 ================================= 1. (1)-------------------------------------------------- //总觉得打印结果怪怪的,DO YOU THINK SO? main() { char s1='3',s2='4',s3='5'; int c1=101,c2=102; printf("3%c\t4%c\t5%c\n",s1,s2,s3); //3%c为输出3和%c printf("s1=%d\ts2=%d\ts3=%d\n",s1,s2,s3);//注意哦,s1,s2,s3是char!而%d:输入输出为整形%ld 长整型%hd 短整型%hu无符号整形%u %lu%s:输入输出为字符串%c字符%f:输入输出为浮点型%lf双精度浮点型printf("c1=%d\t~%c\n",c1,c1); //换码符'\t',表示水平制表位(horizeontal tab),它的作用是将光标移到最接近8的倍数的位置 printf("c2=%d\t~%c\n",c2,c2); //注意c1,c2的类型 } (2) //运行结果为8.300000 %是求余数先运算x-y,把结果转换为int型的有利于四则运算 main() { float x=8.3,y=4.2,s; int a=7; s=x+a%5*(int)(x-y)%2/3; printf("s=%f",s); } 《C语言程序设计a》期末复习题 一、单选题 1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( A )。 A. main B. MAIN C. name D. function 2.每个C语言程序文件的编译错误分为( B )类。 A.1 B.2 C.3 D.4 3. 字符串"a+b=12\n"的长度为( B )。 A. 6 B. 7 C. 8 D. 9 4. 在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( B )语句。 A. for B. if C. do D. while 5. 在下面的do-while循环语句中,其循环体语句被执行的次数为( D )。 int i=0; do i++; while(i<10); A. 4 B. 3 C. 5 D. 10 6. 将两个字符串连接起来组成一个字符串时,选用的函数为( C )。 A. strlen() B. strcap() C. strcat() D. strcmp() 7. 若用数组名作为函数调用的实参,传递给形参的是( A )。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组中全部元素的值 D. 数组元素的个数 8. 假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大( C )个字节。 A. 4 B. 8 C. 16 D. 32 9. 假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s 所指向的字符串,则p应定义为( A )。 A. char *p=s; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s; 10. 从一个数据文件中读入以换行符结束的一行字符串的函数为( B )。 A. gets() B. fgets() C. getc() D. fgetc() 11. 由C语言目标文件连接而成的可执行文件的缺省扩展名为( B )。 A. cpp B. exe C. obj D. c 12. 设有两条语句为“int a=12; a+=a*a;”,则执行结束后,a的值为( C )。 A. 12 B. 144 C. 156 D. 288 13. 带有随机函数调用的表达式rand()%20的值在( C )区间内。 C语言程序设计实验报告(实验名称:函数) 1实验目的 (1)掌握函数的定义方法、调用方法、参数说明以及返回值; (2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式; (3)掌握函数的嵌套调用及递归调用的用的设计方法; (4)在编程过程中加深理解函数调用的程序设计思想。 2实验内容 (1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。 要求: ①在主函数中输入一个整数x(直接赋值或从键盘输入); ②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是 否为素数的信息,输出格式为“x is a prime number”或”x is not a prime number”; ③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查 结果是否正确。 (2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。 要求: ①在主函数中从键盘输入一对整型数据a和b; ②调用函数后,根据返回值对a和b的关系进行说明。例如,在主函数中输 入:10,5,则输出“10 is a multiple of 5”; ③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6 与4,20与4,37与9。 3算法描述流程图 (1)primeNum(int x)(判别一个数是否是素数)函数流程图 ①主函数流程图: ②判断素数函数流程图: (2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图 ①主函数流程图: C语言程序设计实验报告 实验名称计算出1000以内10个素数之和 实验目的 1、熟练掌握if、if…else、if…else if语句和witch 语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。 2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。 3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。 实验内容 计算并输出1000以内的10个素数以及它们的和。 要求: 在程序内部加必要的注释。 由于偶数不是素数,可以不考虑对偶数的处理。 虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。 输出形式为:素数1+素数2+素数3+…+素数10=总和值。 算法描述流程图 Main函数: 判断素数: 源程序 #include #include int sushu(int n)/* 判断素数的函数 */ { int t,i; t=sqrt(n); for(i=2;i1;i-=2)/* x为奇数时,做函数计算 */ { n=sushu(i); /* 做判断素数的函数调用 */ ( 励志天下 ) if(n!=0)/* 对素数的处理 */ { a[j]=n;/* 把素数由大至小存入数组a[ ]中 */ j++; if(j<11) m+=n; /* 统计前10个素数之和 */ } } if(j<10)/* 当素数个数小于10个时,结果输出 */ 程序报告设计 题目:加密解密处理 程序设计报告的电子文档(B10080128—程序设计.doc ) 一.老师对作业要求。 1:对学生课程设计两周的纪律及提交内容的要求: (1)规定上机的时间内不得无故缺勤,有事需要向指导老师书面请假; (2)上机时禁止玩游戏,屡教不改者,实习成绩可为不及格;(3)每人手头准备一至两本C/C++的有关工具书,上机前作好充分的准备,包括事先写好主要算法的程序 代码以保证充分利用上机的时间调试程序; (4)同组可以讨论思路,但是程序要自己完成,不可抄袭,若完全抄袭别人的,实习成绩可为不及格; (5)实习的最后阶段认真完成实习报告的电子文档。报告内容不得少于15页。 (6)每个学生最后提交的材料: 压缩文件一个,起名为:学号名_题目名.rar(如:B06020127_学生管理系统.rar)。该压缩文件中包含下列 几个文件:程序设计报告的电子文档(起名为:学号_程序设计.doc)、源程序文件(起名为:学号名_题目 名.cpp,如:B06020127_学生管理系统.cpp)、原始数据文件(如:stud.dat)、编译链接后得到的可执行 文件(起名为:学号名_题目名.exe) (7)请同学独立完成报告,若发现两份报告一模一样,则两人都按不及格论处,请各位同学珍惜自己的版权 ,也请指导老师严格把关。 附2:上机时间:每天上午8:00——11:20 附3:成绩的评定 根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况 、验收答辩时的表现等综合打分。等级为:优秀、良好、中等、及格、不及格。 附4:课程设计报告具体内容要求 学生管理系统 (题目格式:宋体,3号,加粗,居中对齐) 一、课题内容和要求(格式:宋体,4号,加粗,两端对齐) 该部分可参考前面给出的问题描述再加以细化一些 (正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距) 第一章 【随堂练习1-2】 1.下面哪些标识符属于合法的用户自定义标识符: Main、void、_num、my$、a*、N4、3m、a-2 答:合法的用户自定义标识符是:Main、_num、N4 2.结合【例1.2】指出程序代码中所用到的标识符哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。 答:关键字:void、int 预定义标识符:include、main、printf、scanf 用户自定义标识符:a、b、c 3.分析【例1.2】中函数的结构,包括函数首部(函数返回值类型、函数名、形式参数)、函数体语句(说明语句、可执行语句)。 答:函数首部:void main( ),其中函数返回值类型为void、函数名为main、形式参数无; 函数体语句:{}内的语句为函数体,其中:说明语句为int a,b,c;,其余为可执行语句。 3.标识符是用来标识程序中的某个对象名字的字符序列。C语言把标识符分为三类,即关键字、预定义标识符、用户自定义标识符。对于用户自定义标识符的命名C语言规定: (1)所有的用户标识符必须先定义后使用; (2)用户标识符由字母(A~Z,a~z)、数字(0~9)、下划线“_”组成,并且首字符不能是数字; (3)区分大小写; (4)不能用关键字作为用户自定义标识符,通常不使用预定义标识符作为用户自定义标识符。 4.理论上讲,程序开发过程分为四个步骤,分别为: (1)编辑源程序 (2)编译源程序,生成目标程序 (3)连接目标程序及其相关模块,生成可执行文件 (4)运行可执行文件 一.单元练习 一.选择题 1.构成C语言程序的基本单位是()。 A.框架B.预处理C.函数D.语句 2.在程序开发过程中,把文本文件格式源程序转化为二进制格式的目标程序的过程称之为()。 A.编辑B.编译C.连接D.运行 3.关于主函数,下列说法不正确的是()。 A.一个完整的C语言应用程序有唯一的主函数 B.主函数的名称只能是main C.主函数可以被其他自定义函数调用 D.C语言程序的运行从主函数开始,以主函数为核心展开 4.关于标识符,下列说法不正确的是()。 A.库函数名称为预定义标识符,不建议用作用户自定义标识符 B. 关键字不能作为用户自定义标识符 C.用户自定义标识符中不区分大小写字母 D.标识符中可以出现下划线,且可以出现在标识符的任意位置 5.以下可用作用户自定义标识符的一组是()。 A.void、return、if B.printf、include、fabs C.Max、_abc、Main D.2abc、pay$、sum-10 二.填空题 1.C语言程序一般由若干个函数构成,程序中应至少包含一个_________,其名称只能为_________。 2.C语言程序中每条语句必须以_________结束。 3.C语言程序的注释是以_________开头,以________结束的,在VC++6.0编程环境中,可使用_________作为注释的起始标识,注释对程序的执行不起任何作用。 4.最初编写的C语言程序称为_________,其扩展名为_________,编译后生成的文件为_________,其扩展名是_________,连接后生成的文件是_________,其扩展名是_________。5.C语言规定,标识符只能由_________、_________和_________三种字符组成,而且,首字符只能是_________或_________。 凯里学院 C 语言程序设计 实验报告 ××××× 专业×× 年级×× 班,学号×××××× 姓名××成绩 合作者 实验日期 年 月 日 指导教师 评阅日期 年 月 日 实验二 数据类型、运算符和表达式 一、实验目的: (1)掌握C 语言数据类型,熟悉如何定义一个整型、字符型、实型变量、以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。 (2)学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。 (3)掌握C 语言的输入和输出函数的使用 (4)进一步熟悉C 程序的编辑、编译、连接和运行的过程,学会使用step by step 功能。 (5)认真阅读教材数据类型,算术运算符和表达式,赋值运算符和表达式部分内容。 二、实验内容: (1)输人并运行下面的程序 #include 《C语言程序设计-文件》习题 9.1 填空题 1.C语言中根据数据的ń= 52;织形式,把文件分为= 【= 】和【= 】两种。 2.C语言中文件的格式?= 70;输入输出函数对是 【= = 】;文件的数据块?= 55;入输出函数对是【<= span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt'> = 】;文件的字符串?= 55;入输出函数对是【<= span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt'> = 】。 9.2 选择题 1.当已存在一个= abc.txt文件时,= 25191;行函数fopen= (“abc.txt”, “r+”)的功能是( )。 A.打开abc.txt文件,清= 38500;原有内容 B.打开abc.txt文件,只= 33021;写入新的内容 C.打开abc.txt文件,只= 33021;读取原有内容 D.打开abc.txt文件,可= 20197;读取和写入新的内ê= 81; 2.fopen()函数的mode取值”r”和”w”时,它们之间的= 差别是( )。 A.”r”可向文件写入,= ”w”不可向文= 20214;写入 B.”r”不可向文件写入= ,”w”可向文件= 20889;入 C.”r”不可由文件读出= ,”w”可由文件= 35835;出 D.文件不= 23384;在时,”r”建立新文= 20214;,”w”出错3.以下程序的的= 功能是( )。 #include C语言程序设计 Prepared on 22 November 2020 一、单选题1. (4分)若调用fputc函数输出字符成功,则其返回值是( )。 ? ? ? ? D.输出的字符 得分:0知识点:C语言程序设计作业题 D 2. (4分)若以下程序段: struct dent? { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() { struct dent *p; ….. }? 则以下表达中值为2的是()。 ? A.(p++)->m ? B.*(P++)->m ? C.(*p).m ? D.*(++p)->m 得分:0知识点:C语言程序设计作业题 D 3. (4分)在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ). ? ? ? ? 得分:0知识点:C语言程序设计作业题 D (4分)若二维数组a有m列,则在a[i][j]前面的元素个数为()。 ?*m+i ?*m+j ?*m+j-1 ?*m+j+1 得分:0知识点:C语言程序设计作业题 B 5. (4分)下面程序的运行结果是( ). main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d ”,cnum[0].y/cnum[0].x*cnum[1].x); } ? ? ? ? 得分:4知识点:C语言程序设计作业题 6. (4分)下面程序段的运行结果是( ). for(x=3,x<6;x++) printf((x%2)(“##%d ”),x); ? A.**3 ?##4 ?**5 ? B.##3 ?**4 ?##5 ? C.##3 ?**4##5 ? D.**3##4 ?**5 得分:0知识点:C语言程序设计作业题 D 7. (4分)若I为整型变量,则以下循环执行次数是( ). c语言程序设计实验报告模板 篇一:C语言程序设计实验报告 一、实验目的: 1、掌握C语言的数据类型和变量的声明。 2、掌握不同类型数据之间赋值的规律。 3、掌握C语言的运算符和表达式的使用。 4、熟悉C程序的编辑、编译、连接和运行的过程。 二、实验内容: ①输人程序:#includevoid 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 c1=%c,c2=%c d=%6.2f,e=%6.2f ",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.6f m=%ld,n=%ld p=%u,q=%u ",f,g,m,n,p,q); } ②运行此程序并分析结果(2)按习题4. 8要求编写程序题目为: 设圆半径r=l. 5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输人数据,输出计算结果口输出时要有文字说明,取小数点后两位数字。 程序: 三、实验步骤: ①输人程序: #include void 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 c1=%c,c2=%c d=%6.2f,e=%6.2f ",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.6f m=%ld,n=%ld p=%u,q=%u ",f,g,m,n,p,q); } ②运行此程序并分析结果。 预计结果: a=61,b=62 c1=a,c2=b d=``3.56,e=`-6.87 f=````3157.890121,g=```````0.123456 m=50000,n=-60000 p=32768,q=40000(`代表空格) 结果: g的输出看来是四舍五入了。 ③在此基础上,将程序第9~14行改为: 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; 运行程序,分析结果。 p=a=m=50000;q=b=n=-60000;这两条语句将p、a、m的值和q、b、 是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。显然,在HLL平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。 HLL中又因C语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。μ’nSP?指令结构的设计就着重考虑了对C语言的支持。GCC是一种针对μ’nSP?操作平台的ANSI-C编译器, 1 μ’nSP?支持的C语言算逻操作符(#) 在μ’nSP?的指令系统算逻操作符与ANSI-C算符大同小异,见表4.6。 2 C语言支持的数据类型 μ’nSP?支持ANSI-C中使用的基本数据类型如表4.7所示。 3 程序调用协议 由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线( _ )为前缀。 模块代码间的调用,是遵循μ’nSP?体系的调用协议(Calling Convention)。所谓调用协议,是指用于标准子程序之间一个模块与另一模块的通讯约定;即使两个模块是以不同的语言编写而成,亦是如此。 调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则。 调用协议包括以下一些相关要素: 1) 调用子程序间的参数传递; 2) 子程序返回值; 3) 调用子程序过程中所用堆栈; 4) 用于暂存数据的中间寄存器。 μ’nSP?体系的调用协议的内容如下: 1. 参数传递 参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中被声明过的数据类型。但如果函数的调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据类型转换的。 2. 堆栈维护及排列 函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。 各参数和局部变量在堆栈中的排列如图4.22所示。 3. 返回值 16位的返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。若要返回结构则需在R1中存放一个指向结构的指针。 4. 寄存器数据暂存方式 编译器会产生prolog/epilog过程动作来暂存或恢复PC、SR及BP寄存器。汇编器则通过‘CALL’指令可将PC和SR自动压入栈中,而通过‘RETF’或‘RETI’指令将其自动弹出栈来。 C语言程序设计课程设计报告 学期: 2014-2015(1) 班级:计科14-1 学号:1060314014039 1060314014041 组员姓名:张浩刘润龙 指导教师:李竹林 完成日期: 2014 年 12 月 文件加密与解密 一、设计目的: 通过对文件的加密保护与解密,使我们能更好的掌握好高级语言程序,从而了解对程序设计的基本概念和方法,进而学会利用C语言解决一般应用问题,并为后续的专业学习奠定基础。同时增强同学们之间的团队合作精神,使我们更好的融入社会,将来成为社会有用之才! 二、设计内容: 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对 应字符进行移位操作即可,解密时移动相反。 例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可 得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前 移动5位(注a后接z),可得到原文abcdef。 三、设计安排: 第一阶段:选择课程设计的题目 第二阶段:搜寻有关课程设计的资料,查阅相关的书籍 第三阶段:开始编写C语言程序 第四阶段:完成C语言程序的编写,开始撰写C语言课程设计报告 第五阶段:完成C语言课程设计报告的撰写 四、组员分工: 文件的加密、解密程序部分由张浩同学负责。课程设计报告,资料查询和程序调试修改由刘润龙同学负责,最后共同总结学习体会与心得。 五、总体方案的设计思想及说明: 1.主要思想: 为由总到分,由上到下的逐级分配任务的思想。通过主函数调用各个被调用的函数,再由被调用函数通过多个循环嵌套的使用实现各自的功能,最终达到程序的要求。 2.程序说明: (1)主函数其中包括:输入函数input(),加密函数jiami(),解密函数jiemi(),显示函数 show(),。 (2)输入函数中:while((c=getchar())!=EOF)的使用能提示使用者结束的命令,并且通过fputc(c,fp)把一个字符c写到由文件指针fp指定的磁盘文件上。 (3)加密函数中:先定义两个指针,将输入的文件内容通过fputc(c+1,fp1);进行加密并保存到fp1所指定的文件上。 (4)解密函数中:在进入解密系统时,需先输入解密密码,然后在打开文件进行文件里内容解密。根据加密时对每个文件内容的加密操作,所以解密时只需按照相同方法反操作即可。 六、源程序: #includeC语言程序设计实验报告参考答案
C语言程序设计
C语言程序设计实验与习题答案
C语言程序设计实验报告(数组)
c语言程序设计文档格式
C语言程序设计实验实验指导书及答案
C语言程序设计实验报告(实验1-12)
C语言程序设计实验-答案
《C语言程序设计A》
C语言程序设计实验报告(函数)
C语言程序设计实验报告.doc
c语言程序设计文件加密解密
《C语言程序设计》复习 参考答案
C语言程序设计实验报告——实验2 数据类型、运算符和表达式
《C语言程序设计-文件》习题
C语言程序设计
c语言程序设计实验报告模板
C语言程序设计 文档
C语言程序设计-文件加密