c语言上机程序.docx
- 文档编号:28479669
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:231
- 大小:75.36KB
c语言上机程序.docx
《c语言上机程序.docx》由会员分享,可在线阅读,更多相关《c语言上机程序.docx(231页珍藏版)》请在冰豆网上搜索。
c语言上机程序
1.调用函数rwdata(),从IN.dat文件中读取10组数据(m和k值),并嵌套调用primenum函数分别得出array[]数组。
请编写函数primenum(intm,intk,intarray[]),该函数的功能是:
将紧靠m的k个素数存入数组array并在屏幕上显示。
最后把结果输出到文件OUT.dat中。
例如,若输入39,则应输出5711131719232931。
注意:
部分程序已经给出。
请勿改动主函数main()和输出数据函数rwdata()的内容。
#include
#include
voidrwdata();
voidprimenum(intm,intk,intarray[])
{
}
main()
{intm,n,array[1000];
printf("\nPleaseentertwointegers:
");
scanf("%d%d",&m,&n);
primenum(m,n,array);
for(m=0;m printf("%d",array[m]); printf("\n"); rwdata(); } voidrwdata() {intm,n,array[1000],i; FILE*readfile,*writefile; readfile=fopen("in.dat","r"); writefile=fopen("out.dat","w"); for(i=0;i<10;i++) {fscanf(readfile,"%d%d",&m,&n); primenum(m,n,array); for(m=0;m fprintf(writefile,"%d",array[m]); fprintf(writefile,"\n"); } fclose(readfile); fclose(writefile); } 【答案】 voidprimenum(intm,intk,intarray[]) {intvalue=m+1; inthalf,n=0,i; while (1) {half=value/2; for(i=2;i<=half;i++) if(value%i==0) break; if(i>half) {array[n]=value; n++; } if(n>=k) break; value++; } } 2.在文件IN.dat中有200个正整数,且每个数均在1000~9999之间。 函数RData()读取这200个数存放到数组original中。 请编写函数numAscend(),其功能是: 要求按每个数的后3位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行降序排列。 最后调用函数WData(),把结果result输出到文件OUT.dat中。 例如,处理前: 60125099901270258088 处理后: 90126012702580885099 注意: 部分程序已给出。 请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。 #include #include #include intoriginal[200],result[10]; voidnumascend() { } voidRData() {FILE*in; inti; in=fopen("IN.dat","r"); for(i=0;i<200;i++) fscanf(in,"%d,",&original[i]); fclose(in); } voidWData() {FILE*out; inti; out=fopen("OUT.dat","w"); for(i=0;i<10;i++) {printf("%d",result[i]); fprintf(out,"%d\n",result[i]); } fclose(out); } voidmain() {RData(); numascend(); WData(); } 【答案】 voidnumascend() {inti,j,data; for(i=0;i<199;i++) for(j=i+1;j<200;j++) {if(original[i]%1000>original[j]%1000) {data=original[i]; original[i]=original[j]; original[j]=data; } elseif(original[i]%1000==original[j]%1000) {if(original[i] {data=original[i]; original[i]=original[j]; original[j]=data; } } } for(i=0;i<10;i++) result[i]=original[i]; } 3.已知文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。 其中: 金额=单价×数量。 函数RData()读取这100个销售记录并存入结构数组sell中。 请编写函数DescSort(),其功能要求: 按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WData(),把结果输出到文件OUT.dat中。 注意: 部分程序已给出。 请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。 #include #include #include #include #defineMAX100 typedefstruct {charcode[5];/*产品代码*/ charname[11];/*产品名称*/ intuprice;/*单价*/ intamount;/*数量*/ longsum;/*金额*/ }PRO; PROsell[MAX]; voidRData(); voidWData(); voidDescSort() { } voidmain() {memset(sell,0,sizeof(sell)); RData(); DescSort(); WData(); } voidRData() {FILE*fp; charstr[80],ch[11]; inti; fp=fopen("IN.dat","r"); for(i=0;i<100;i++) {fgets(str,80,fp); memcpy(sell[i].code,str,4); memcpy(sell[i].name,str+4,10); memcpy(ch,str+14,4); ch[4]=0; sell[i].uprice=atoi(ch); memcpy(ch,str+18,5); ch[5]=0; sell[i].amount=atoi(ch); sell[i].sum=(long)sell[i].uprice*sell[i].amount; } fclose(fp); } voidWData(void) {FILE*fp; inti; fp=fopen("OUT.dat","w"); for(i=0;i<100;i++) {printf("%s%s%4d%5d%5d\n", sell[i].code,sell[i].name,sell[i].uprice,sell[i].amount,sell[i].sum); fprintf(fp,"%s%s%4d%5d%5d\n", sell[i].code,sell[i].name,sell[i].uprice,sell[i].amount,sell[i].sum); } fclose(fp); } 【答案】 voidDescSort() {inti,j; PROtemp; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(strcmp(sell[i].code,sell[j].code)<0) {temp=sell[i]; sell[i]=sell[j]; sell[j]=temp; } elseif(strcmp(sell[i].code,sell[j].code)==0) {if(sell[i].sum {temp=sell[i]; sell[i]=sell[j]; sell[j]=temp; } } } 4.函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组str中;请编写encryptChar()函数,其功能是: 按给定的替代关系对数组str中的所有字符进行替代,仍存入数组str对应的位置上,最后调用函数WData(),把结果str输出到文件OUT.dat中。 替代关系: f(p)=p*11mod256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于1等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是: 每行的宽度均小于80个字符。 注意: 部分程序已给出。 请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。 #include #include #include #include unsignedcharstr[50][80]; intmaxline=0;/*文章的总行数*/ intRData(void); voidWData(void); voidencryptChar() { } voidmain() {if(RData()) {printf("数据文件IN.dat不能打开! \n\007"); return; } encryptChar(); WData(); } intRData(void) {FILE*fp; inti=0; unsignedchar*p; if((fp=fopen("IN.dat","r"))==NULL) return1; while(fgets(str[i],80,fp)! =NULL) {p=strchr(str[i],'\n'); if(p) *p=0; i++; } maxline=i; fclose(fp); return0; } voidWData(void) {FILE*fp; inti; fp=fopen("OUT.dat","w"); for(i=0;i {printf("%s\n",str[i]); fprintf(fp,"%s\n",str[i]); } fclose(fp); } 【答案】 voidencryptChar() {inti; char*pf; for(i=0;i {pf=str[i]; while(*pf! =0) {if(*pf*11%256<=130&&*pf*11%256>32) *pf=*pf*11%256; pf++; } } } 5.函数RData()实现从文件IN.dat中读取一篇英文文章存入到字符串数组str中,请编写函数DescSort(),其功能是: 以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组str中,最后调用函数WData(),把结果str输出到文件OUT.dat中。 原始数据文件存放的格式是: 每行的宽度均小于80个字符(含标点符号和空格)。 例如,原文: dAeBfC. CcbbAA 结果: fedCBA. cbbCAA 注意: 部分程序已给出。 请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。 #include #include #include charstr[50][80]; intmaxline=0;/*文章的总行数*/ intRData(void); voidWData(void); voidDescSort(void) { } voidmain() {if(RData()) {printf("数据文件IN.dat不能打开! \n\007"); return; } DescSort(); WData(); } intRData(void) {FILE*fp; inti=0; char*p; if((fp=fopen("IN.dat","r"))==NULL) return1; while(fgets(str[i],80,fp)! =NULL) {p=strchr(str[i],'\n'); if(p) *p=0; i++; } maxline=i; fclose(fp); return0; } voidWData(void) {FILE*fp; inti; fp=fopen("OUT.dat","w"); for(i=0;i {printf("%s\n",str[i]); fprintf(fp,"%s\n",str[i]); } fclose(fp); } 【答案】 voidDescSort(void) {inti,j,k,strl; charch; for(i=0;i {strl=strlen(str[i]); for(j=0;j for(k=j+1;k if(str[i][j] {ch=str[i][j]; str[i][j]=str[i][k]; str[i][k]=ch; } } } 6函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组original中,请编写StrCharMove()函数,其功能是: 以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。 最后把已处理的字符串仍按行重新存入字符串数组original中。 最后调用函数WData(),把结果original输出到文件OUT.dat中。 原始数据文件存放的格式是: 每行的宽度均小于80个字符(含标点符号和空格)。 注意: 部分程序已给出。 请勿改动主函数main()、读数据函数RData()和输出数据函数WData()的内容。 #include #include #include charoriginal[50][80]; intmaxline=0;/*文章的总行数*/ intRData(void); voidWData(void); voidStrCharMove(void) { } voidmain() {if(RData()) {printf("数据文件IN.dat不能打开! \n\007"); return; } StrCharMove(); WData(); } intRData(void) {FILE*fp; inti=0; char*p; if((fp=fopen("IN.dat","r"))==NULL) return1; while(fgets(original[i],80,fp)! =NULL) {p=strchr(original[i],'\n'); if(p) *p=0; i++; } maxline=i; fclose(fp); return0; } voidWData(void) {FILE*fp; inti; fp=fopen("OUT.dat","w"); for(i=0;i {printf("%s\n",original[i]); fprintf(fp,"%s\n",original[i]); } fclose(fp); } 【答案】 voidStrCharMove(void) {inti,j,strl; for(i=0;i {strl=strlen(original[i]); for(j=0;j original[i][j]+=original[i][j]>>4; } } 7.编写函数findStr(),其功能是: 统计一个长度为2的子字符串在另一个字符串中出现的次数。 例如,假定输入的字符串为"asdasasdfgasdaszx67asdmklo",子字符串为"as",函数返回值是6。 函数ReadWrite()实现从文件IN.dat中读取两个字符串,并调用函数findStr(),最后,把结果输出到文件OUT.dat中。 注意: 部分程序已经给出。 请勿改动主函数main()和其他函数中的任何内容,仅在函数findStr()的花括号中填入编写的若干语句。 #include #include #include intfindStr(char*str,char*substr) { } voidReadWrite() {charstr[81],substr[10],ch; intn,len,i=0; FILE*rf,*wf; rf=fopen("IN.dat","r"); wf=fopen("OUT.dat","w"); while(i<25) {fgets(str,81,rf); fgets(substr,10,rf); len=strlen(substr)-1; ch=substr[len]; if(ch=='\n'||ch==0x1a) substr[len]=0; n=findStr(str,substr); fprintf(wf,"%d\n",n); i++; } fclose(rf); fclose(wf); } main() {charstr[81],substr[10]; intn; printf("输入原字符串: "); gets(str); printf("输入子字符串: "); gets(substr); puts(str); puts(substr); n=findStr(str,substr); printf("n=%d\n",n); ReadWrite(); } 【答案】 intfindStr(char*str,char*substr) {intn; char*p,*r; n=0; while(*str) {p=str; r=substr; while(*r) if(*r==*p) {r++; p++; } else {break; } if(*r=='\0') n++; str++; } returnn; } 8.请编写函数CountValue(),它的功能是: 求n以内(不包括n),同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。 主函数最后调用函数progReadWrite()从IN.dat文件中读取10组数据,分别得出结果,且把结果输出到文件OUT.dat中。 例如,若n为1000时,函数值应为: s=153.909064。 注意: 部分程序已经给出。 请勿改动主函数main()和输入输出数据函数progReadWrite()的内容。 #include #include #include doubleCountValue(intn) { } voidprogReadWrite() {FILE*fp,*wf; inti,n; floats; fp=fopen("in.dat","r"); if(fp==NULL) {printf("数据文件in.dat不存在! "); return; } wf=fope
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 程序