大一计算机上机题目及答案西电专用.docx
- 文档编号:6600074
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:32
- 大小:366.57KB
大一计算机上机题目及答案西电专用.docx
《大一计算机上机题目及答案西电专用.docx》由会员分享,可在线阅读,更多相关《大一计算机上机题目及答案西电专用.docx(32页珍藏版)》请在冰点文库上搜索。
大一计算机上机题目及答案西电专用
《《程序设计实践》上机报告
要求
:
五次上机(每次8机时)正确完成8~10题。
最终提交:
(1)电子版文档。
格式模板参见《程序设计基础实验报告》(注意文档最后一部分包含课程设计小结)。
(2)打印电子版文档。
(3)源程序,打包成压缩文件提交。
注意:
(1)压缩文件格式:
学号.zip(或rar)。
例如:
********.zip(或********.rar)
(2)各源程序命名方式:
no题号.c。
例如:
no3.c(3)源程序压缩包内只包含各题目的源程序和程序运行过程中需要的相关文件,不包含编译后的可执行文件和运行结果。
(4)课程设计小结写本次课设的收获和体会。
备选题目如下:
算法类
1、已知2000年1月1日为星期六,输入任一年的年份后,打印该年的年历。
2、假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,实际的长整数m表示为:
m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]
其中a[0]保存该长整数的位数。
完成(任选一题):
(1)长整数乘普通整数。
(2)长整数除普通整数。
3、假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,实际的长整数m表示为:
m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]
其中a[0]保存该长整数的位数。
完成(任选一题):
(1)转换成16进制数输出。
(2)转换成8进制数输出。
文件类
1、用文件保存一段英文文本。
(1)统计各字母在文本中出现的次数(忽略大小写)。
(2)查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
2、编写文件拷贝命令行程序,命令行格式为:
HCOPYfilename1filename2。
3、现有两个文本文件file1.txt和file2.txt。
file1中第一列为姓名,第二列为英语成绩;file2中第一列为姓名,第二列为数学成绩。
通过程序关联file2中与file1对应的姓名生成file3.txt文件。
file3.txt文件第一列为姓名,第二列为英语成绩,第三列为数学成绩,第四列为平均成绩。
file1.txtfile2.txtfile3.txt
Bob90
David80
George84
Jack64
Jim95
George74
David82
Paul70
Jack70
Bob86
Bob908688
David808281
George847479
Jack647067
字符串类
1、用字符数组保存一个英文句子。
(1)删除该英文句子的前导空格、后导空格、句中多余空格(单词之间只留一个空格)。
(2)统计句中某单词出现的次数。
(3)查找并替换某单词。
2、不使用库函数,编写函数strcpy和strcmp。
综合类
1、通讯录管理软件。
通讯者信息包括:
姓名、性别、手机、Email、地址。
软件功能:
添加、查询、删除、全部输出。
2、图书管理系统设计
图书信息包括:
书名、ISBN号、单价、作者、存在状态、借书人姓名、性别、学号等。
软件功能:
图书输入、查询、删除、为借书人办理注册、办理借书手续、办理还书手续。
其他类
1、编写小学生数学测试软件。
(1)可选择题型加,减,乘。
(2)可选择每次答题的个数。
(3)随机生成两个数进行运算。
(4)每次输入答案后判断对错,若答案错误,给出正确答案。
(5)最后给出做对题目的总个数。
2、用面向对象的思想模拟简单的mp3播放器功能。
功能键有:
播放(Play)、停止(Stop)、快进(Fast-forward)、快退(Rewind)、音量调节(volume)、显示歌曲属性(Property)。
歌曲属性包括:
曲目名称(Title)、曲目长度(Duration)、艺术家(Artist)。
当功能键有效时,按下功能键后显示功能名称等相关信息;当功能键无效时,按下功能键后应给出无效提示。
假设目前mp3中只有一首歌曲,歌曲属性如下:
(注意:
1.显示歌曲属性键随时可用。
2.其他键的使用应结合实际情况。
)
Property
Title:
Yesterday
Duration:
02:
09
Artist:
Beatles
算法类:
题目一:
算法描述:
首先要根据2000年1月1日为星期六判断出某年一月一号为星期几(注意要年份大于2000与小与2000有区别)。
其次根据该年是否为闰年等,确定各月的天数。
从一月一号开始一次往后排。
源代码:
#include
#include
#include
intisleayear(intyear){
returnyear%4==0&&year%100!
=0||year%400==0;
}
intNUM(intyear,intk){
intx;
if(k==0||k==2||k==4||k==7||k==9||k==11)x=31;
if(k==3||k==5||k==6||k==8||k==10)x=30;
if(isleayear(year)&&k==1)x=29;
if(isleayear(year)==0&&k==1)x=28;
returnx;
}
intmain(){
intn,k,year,m,i,j;
charmon[12][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Set","Oct","Nov","Dec"};
printf("输入年year\n");
scanf("%d",&year);
if(isleayear(year)==1||year<2000)
n=(int)(fabs(year-2000)*365+(int)fabs(year-2000)/4)%7;//判断某年一月一号为星期几
else
n=(int)(fabs(year-2000)*365+(int)fabs(year-2000)/4+1)%7;
if(year<2000)n=7-n;//当年份小于2000是一月一号星期几
for(k=0;k<12;++k){
printf("%s\n日一二三四五六\n",mon[k]);
if(n==0)n=n+7;
else
if(n==8)
n=1;
m=1;
for(j=0;j printf(""); for(j=n-1;j<7;++j){ printf("%2d%c",m,j==6? '\n': ''); m=m+1; } for(i=1;i<=5;++i){ for(j=0;j<7&&m<=NUM(year,k);++j){ printf("%2d%c",m,j==6? '\n': ''); m=m+1; if(m-1==NUM(year,k)){n=j+2;printf("\n");break;} } } } return0; } 输入输出: 题目二: 算法描述: 将长整数以数组的形式输进去,每位数字乘以要乘的普通整数即可 源代码: #include intmain(){ inti,m,n,b[1024]; printf("注意: 请用数组表示一个长整数(只用输入数字长度n,以及个位数即可)\n"); printf("输入长整数的长度n\n");scanf("%d",&n); printf("请输入各位数字\n"); for(i=n;i>=1;--i) scanf("%d",&b[i]); b[0]=n; printf("请输入要乘的整数\n"); scanf("%d",&m); for(i=n;i>=2;--i) printf("%d*10^%d+",b[i]*m,i-1); printf("%d\n",b[1]*m); return0; } 输入输出 题目三: 算法描述: 以数组形式输入一个长整数,从高到低数组的每两个数结合组成一个整数,用这个整数除以8,求得余数(需用数组记下)和商,如果商大于8,则继续用此数除8,直至商为小于8的数,在用此数和原数组的下一个数组成一个整数,重复上述操作,最后将每次求得的余数从后往前输出即为该长整数的八进制表示。 源代码: #include inta[1024]; voidzhuanhua(intn){ inti,k,b[1024]; for(i=0;n>=8;++i){ b[i]=n%8; n=n/8; } printf("%d",n); for(k=i-1;k>=0;--k) printf("%d",b[k]); } intmain(){ intm,i,x,k,n,d,c[1024]; printf("输入一个长整数的长度m\n"); scanf("%d",&m); printf("输入长整数的个位数字\n"); for(i=m;i>=1;--i)scanf("%d",&a[i]); a[0]=m; for(i=0,x=a[0];x>=2;--x,++i){ c[i]=a[x]; for(n=x;n>=2;--n){ d=c[i]; c[i]=(d*10+a[n-1])%8; a[n-1]=(d*10+a[n-1])/8; } } if(a[1]<8)printf("%d",a[1]); elsezhuanhua(a[1]); for(k=i-1;k>=0;--k) printf("%d",c[k]); printf("\n"); return0; } 输入输出: 文件类: 题目一: 算法描述: 每次从文件中读入一个字符,利用其ASCII值和字符a的ASCII之差与数组的下标相对应,可以统计出个字母的数量(++A[c-'a'])。 输入要查找的字符串,测出其长度n,利用fseek函数使得文件指针每次移动一个单位,并用fgets函数一次读入n+1个字符与要查找的字符串相比较,如果相符,则将该字符串替换,并写入另一个文件,否则只将读入的第一个字符写入文件。 源代码: #include #include #include #include intmain(){ FILE*fp,*np; intn,i,j=0; charc,str[1024],a[1024],b[1024],A[26]; if((fp=fopen("English.txt","rb"))==NULL){ printf("wrong\n"); exit(0); } if((np=fopen("1.txt","w"))==NULL){ printf("wrong\n"); exit(0); } for(i=0;i<26;++i)A[i]=0; while(! feof(fp)){ if(isalpha(c=fgetc(fp))){ c=tolower(c); ++A[c-'a']; } } printf("各字母数量\n"); for(i=0;i<26;++i) printf("%c--%d",'a'+i,A[i]); printf("\n请继续输入要查找的字符串\n"); rewind(fp); gets(a); printf("请继续输入需要将其替换为: \n"); gets(b); n=strlen(a); while(! feof(fp)){ fseek(fp,j*sizeof(char),0);++j; fgets(str,n+1,fp); if(strcmp(str,a)==0){ strcpy(str,b); fputs(str,np); j=j-1+n; } elsefputc(str[0],np); } printf("操作成功,请到1.txt文件查看\n"); fclose(fp); fclose(np); return0; } 输入输出: 操作前: 操作后: 题目二: 算法描述: 该程序需要在命令提示符窗口下输入可执行程序名,以及读入读出文件名。 程序部分只需按照简单方法,从文件中读入一个字符,并写入另一个文件中即可。 源代码: #include #include #include voidmain(intargc,char*argv[]){ FILE*fp1,*fp2; charc; if(argc! =3&&strcmp("filename1.txt",argv[1])! =0){ printf("error\n"); exit(0);} fp1=fopen(argv[1],"r"); fp2=fopen(argv[2],"w"); c=fgetc(fp1); while(! feof(fp1)){ fputc(c,fp2); c=fgetc(fp1); } fclose(fp1); fclose(fp2); } 输入输出: filename1.txt: filename2: 题目三: 算法描述: 首先需要有一个结构体类型,该结构体包含名字以及double类型的x、y、z(分别为英语、数学、平均成绩)。 定义该结构体类型的数组stu1、stu2、stu3,stu1、stu2分别存放从file1.txt、file2.txt文件中读取的信息。 利用strcmp函数分别依次比较stu1.name、stu2.name,若相等则将该组信息合并到stu3中。 最后写入到file3.txt中。 源代码: #include #include #include typedefstruct{ charname[20]; doublex,y,z; }IN; intmain(){ inti=0,k=0,j=0,n,m; INstu1[1024],stu2[1024],stu3[1024]; FILE*np,*fp,*ip; if((np=fopen("file1.txt","r"))==NULL){ printf("wrong\n");exit(0); } if((fp=fopen("file2.txt","r"))==NULL){ printf("wrong\n");exit(0); } if((ip=fopen("file3.txt","w"))==NULL){ printf("wrong\n");exit(0); } while(! feof(np)){ fscanf(np,"%s%lf",stu1[i].name,&(stu1[i].x)); ++i; } while(! feof(fp)){ fscanf(fp,"%s%lf",stu2[k].name,&(stu2[k].y)); ++k; } for(n=0;n for(m=0;m if(strcmp(stu1[n].name,stu2[m].name)==0){ strcpy(stu3[j].name,stu1[n].name); stu3[j].x=stu1[n].x; stu3[j].y=stu2[m].y; ++j; } } for(i=0;i fprintf(ip,"%s%.1f%.1f%.1f\n",stu3[i].name,stu3[i].x,stu3[i].y,(stu3[i].x+stu3[i].y)/2); fclose(fp);fclose(np);fclose(ip); return0; } 输入输出: File1.txt: File2.txt: File3.txt: 字符串类: 题目一: 算法描述: 首先将读入的每一个单词存入一个数组里面,然后对数组进行操作即可。 源代码: #include #include #include #include enum{IN=1,OUT=0}; typedefstruct{ charword[100]; intcount; }KEY; voidsum(KEYp[],intm){ inti,n; for(i=0;i p[i].count=1; for(i=0;i for(n=i+1;n if(strcmp(p[i].word,p[n].word)==0){ ++(p[i].count); p[n].word[0]='\0'; } } printf("单词数量统计\n"); for(i=0;i if(p[i].word[0]! ='\0')printf("%s--%d\n",p[i].word,p[i].count); } voidchati(KEYp[],intm,chara[],charb[]){ inti,found=0; for(i=0;i if(strcmp(p[i].word,a)==0){ strcpy(p[i].word,b);found=1;} if(found==0)printf("nofind\n"); } intmain(){ FILE*fp; KEYkeytable[1024]; intn,i=0,j=0,state=OUT; charc,str[1024],a[1024],b[1024]; if((fp=fopen("English.txt","r"))==NULL){ printf("wrong\n"); exit(0); } while(! feof(fp)){ c=fgetc(fp); if(isspace(c)||c==-1){ if(state==IN){state=OUT;str[i]='\0';i=0;strcpy(keytable[j].word,str);++j;} } else{state=IN;str[i]=c;++i;} } for(n=0;n printf("%s%c",keytable[n].word,n==j-1? '\n': ''); printf("输入要查找的单词\n");gets(a); printf("输入要将其替换为\n");gets(b); chati(keytable,j,a,b); for(n=0;n printf("%s%c",keytable[n].word,n==j-1? '\n': ''); sum(keytable,j); return0; } 输入输出: 原文件: 题目二: 算法描述: 字符串复制函数: 设两个char类型的指针,一个用于接收输入的字符,并将其赋给另一个。 字符串比较函数: 依次比较两个字符串元素的ASCII值即可。 源代码: #include #include voidstrcpy1(char*s,char*t){ while(*s++=*t++) ; } intstrcmp1(char*s,char*t){ inti; for(i=0;s[i]! ='\0'||t[i]! ='\0';++i){ if(s[i]>t[i])return1; if(s[i] } return0; } intmain(){ charstr[1024],str1[1024],a[1024],b[1024]; printf("字符串复制\n"); gets(str1); strcpy1(str,str1); puts(str); printf("复制成功\n字符串比较函数输入两个字符串a,b\n"); gets(a);gets(b); printf("比较结果\n"); if(strcmp1(a,b)>0)printf("a>b\n"); if(strcmp1(a,b)<0)printf("a if(strcmp1(a,b)==0)printf("a=b\n"); return0; } 输入输出: 综合类 题目一: 算法描述: 该软件需要分为八个模块,需要分别编写八个函数实现其功能。 首先需要的是文件的读入(Listnode*read_file())和读写函数(voidwrite_file(Linklisthead)),接着是框架函数,即菜单函数(intmenu()和intslect_menu()),该函数帮助操作者使用该程序。 后面的函数是功能函数,以实现该程序的基本功能。 分别为查询函数(voidprintf_file())即将文件内容显示在屏幕上;删除函数(voiddelet_file())(可以选择删除文件中的某些信息);添加函数(voidadd_file())(可以向文件添加信息);信息修改函数(voidmodify_file())(可以修改文件中的某些信息) 源代码: #include #include #include typedefstructnode{//定义结构体 charname[20],sex[4],phone[20],email[20],address[30]; intid; structnode*next; }Listnode; typedefListnode*Linklist; voidprintf_title();//函数原型的声名 intmenu(); intslect_menu(); Listnode*read_file(); voidwrite_file(Linklisthead); voidprintf_fil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大一 计算机 上机 题目 答案 专用