C语言重点上机题目积累.docx
- 文档编号:24558032
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:52
- 大小:29.44KB
C语言重点上机题目积累.docx
《C语言重点上机题目积累.docx》由会员分享,可在线阅读,更多相关《C语言重点上机题目积累.docx(52页珍藏版)》请在冰豆网上搜索。
C语言重点上机题目积累
一.求两数的最大公约数和最小公倍数。
#include
#include
voidmain()
{
inta,b,n,m,t;
system("CLS");
printf("\nInputtwonumbers:
\n");
scanf("%d,%d",&n,&m);
if(n { a=m; b=n; } else { a=n; b=m; } while(b! =0) { t=a%b; a=b; b=t; } printf("greatestcommondivisor: %d\n",a); printf("leastcommonmultiple: %d\n",m*n/a); } /*求解最大公约数的思路是,将a对b求余,如果余数为0,则b即为两数的最大公约数,如果余数不为0,则将b赋给a,余数赋给b,继续将a对b求余,如此循环,直到余数为0。 最小公倍数等于两数的乘积除以最大公倍数*/ 二.统计输入的字符串中有多少个单词,用空格作为间隔符。 #include voidmain() { inti=0,num=0; charstr[100]; gets(str); do{ while(str[i]=='')i++; if(str[i]! ='\0')num++; while(str[i]! =''&&str[i]! ='\0')i++;/*注意要用&&,而不是||*/ }while(str[i]! ='\0'); printf("munberofwordsis%d\n",num); } 三.编程序,实现strcat函数功能。 #include voidmain() { chara[100],b[100]; inti=0,j=0; printf("输入两个字符串"); gets(a); gets(b); while(a[i]! ='\0')i++; while((a[i++]=b[j++])! ='\0');printf("连接后的字符串为%s",a);/*注意while循环后的分号*/ } 四.输入十名学生的姓名和成绩,把姓名和成绩按照从大到小的顺序输出。 #include #include voidmain() { charname[10][15],zjl[15]; floatscore[10],zhong; inti,j; printf("请输入名字和成绩\n"); for(i=0;i<10;i++)scanf("%s%f",name[i],&score[i]); for(i=0;i<10;i++) for(j=0;j<=8-i;j++) if(score[j+1]>score[j]) { zhong=score[j+1]; score[j+1]=score[j]; score[j]=zhong; strcpy(zjl,name[j+1]);/*注意用strcpy函数,而不是直接赋值*/ strcpy(name[j+1],name[j]); strcpy(name[j],zjl); } for(i=0;i<10;i++)printf("%s%f\n",name[i],score[i]); } 五.改错题 下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。 y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m) 例如: m中的值为5,则应输出0.838611。 请改正程序中的错误,使它能得到正确结果。 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include doublefun(intm) {doubley=1.0; /**********************found***********/ intj=1; inti; for(i=2;i<=m;i++) { j=-1*j; /**********************found***********/ y+=1/(i*i); } return(y); } voidmain() { intn=5; system("CLS"); printf("\nTheresultis%lf\n",fun(n)); } (1)错误: intj=1; 正确: doublej=1.0; (2)错误: y+=1/(i*i); 正确: y+=j/(i*i); 【解析】错误1: 为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。 错误2: 题中公式是加减相间的运算,通过j来实现。 六.把从主函数中输入的字符串str2倒置后接在字符串str1后面。 例如: str1="Howdo",str2="? oduoy",结果输出: "Howdoyoudo? "。 #include #include #include #defineN40 voidfun(char*str1,char*str2) { intI=0,j=0,k=0,n; charch; char*p1=str1; char*p2=str2; while(*(p1+I)) I++; while(*(p2+j)) j++; n=j--; for(;k<=j/2;k++,j--) { ch=*(p2+k); *(p2+k)=*(p2+j); *(p2+j)=ch; } *(p2+n)='\0'; for(;*p2;I++) *(p1+I)=*p2++; *(p1+I)='\0'; } voidmain() { charstr1[N],str2[N]; system("CLS"); printf("*******Inputthestringstr1&str2*******\n"); printf("\nstr1: "); gets(str1); printf("\nstr2: "); gets(str2); printf("*******Thestringstr1&str2*******\n"); puts(str1); puts(str2); fun(str1,str2); printf("*******Thenewstring******\n"); puts(str1); } 七.编程题 请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是: 将大于整数m且紧靠m的k个非素数存入所指的数组中。 例如,若输入15,5,则应输出16,18,20,21,22。 #include #include #include voidfun(intm,intk,intxx[]) { inti,j,n; for(i=m+1,n=0;n /*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/ for(j=2;j /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数,放入数组xx中*/ break; /*并跳出本层循环,判断下一个数*/ } } voidmain() { FILE*wf; intm,n,zz[1000]; system("CLS"); printf("\nPleaseentertwointegers: "); scanf("%d%d",&m,&n); fun(m,n,zz); for(m=0;m printf("%d",zz[m]); printf("\n"); /******************************/ wf=fopen("out.dat","w"); fun(15,5,zz); for(m=0;m<5;m++) fprintf(wf,"%d",zz[m]); fclose(wf); /*****************************/ } 八.编程题 N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。 请编写函数fun(),它的功能是: 找出学生的最低分,由函数值返回。 #include #include #defineN8 structslist {doubles; structslist*next; }; typedefstructslistSTREC; doublefun(STREC*h) { doublemin=h->s; while(h->next! =NULL) /*通过循环找到最低分数*/ {if(min>h->s) min=h->s; h=h->next; } returnmin; } STREC*creat(double*s) { STREC*h,*p,*q; inti=0; h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(i {q=(STREC*)malloc(sizeof(STREC)); p->s=s[i];i++;p->next=q;p=q; } p->next=NULL; returnh;/*返回链表的首地址*/ } outlist(STREC*h) { STREC*p; p=h; printf("head"); do {printf("->%2.0f",p->s);p=p->next;}/*输出各分数*/ while(p->next! =NULL); printf("\n\n"); } voidmain() { FILE*wf; doubles[N]={56,89,76,95,91,68,75,85},min; STREC*h; h=creat(s); outlist(h); min=fun(h); printf("min=%6.1f\n",min); /******************************/ wf=fopen("out.dat","w"); fprintf(wf,"%6.1f",min); fclose(wf); /*****************************/ } 九.一个函数,统计字符串p中字母的个数,不分大小写。 while(*p) { if(*p>='A'&&*p<='Z') *p+=32;/*先把大写转换为小写*/ if(*p>='a'&&*p<='z') alf[*p-'a']++; p++; } 十.1.填空题 请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。 例如: 当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0, 10.0,16.0},结果为: avg=15.030000(注意这也叫保留两位小数) #include #include #include doublefun(doublex[10]) { intI; longt; doubleavg=0.0; doublesum=0.0; for(I=0;I<10;I++) sum+=x[I]; avg=sum/10; avg=avg*1000; t=(avg+5)/10;/*把第三位小数后的数全部截去*/ avg=(double)t/100; returnavg; } voidmain() { doubleavg,x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0}; inti; system("CLS"); printf("\nTheoriginaldatais: \n"); for(i=0;i<10;i++) printf("%6.1f",x[i]); printf("\n\n"); avg=fun(x); printf("average=%f\n\n",avg); } 十一.把从主函数中输入的字符串str2接在字符串str1的后面。 #include #include #include #defineN40 voidfun(char*str1,char*str2) { intI=0; char*p1=str1; char*p2=str2; while(*(p1+I))/*思考,*p1++可不可以*/ I++; for(;*p2;I++) *(p1+I)=*p2++; *(p1+I)='\0'; } voidmain() { charstr1[N],str2[N]; system("CLS"); printf("*****Inputthestringstr1&str2*****\n"); printf("\nstr1: "); gets(str1); printf("\nstr2: "); gets(str2); printf("*****Thestringstr1&str2*****\n"); puts(str1); puts(str2); fun(str1,str2); printf("*****Thenewstring*****\n"); puts(str1); } 十二.填空题 请补充函数fun(),该函数的功能是: 把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。 结果由函数返回。 例如,输入: 123456,结果输出: 654321。 #include #include #include #include unsignedlongfun(char*s) { unsignedlongt=0; intk; intI=0; I=strlen(s); for(--I;I>=0;I--) { k=s[I]-'0'; t=t*10+k; } returnt; } voidmain() { charstr[8]; system("CLS"); printf("Enterastringmadeupof'0'to'9'digitalcharacter: \n"); gets(str); printf("Thestringis: %s\n",str); if(strlen(str)>8) printf("Thestringistoolong! "); else printf("Theresult: %lu\n",fun(str)); } 十三.下列给定程序中函数fun()的功能是: 将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。 高位在低位,低位在高位。 例如当s中的数为25846513时,t中的数为6482。 #include #include #include voidfun(longs,long*t) { intd; longs1=1,i=1; *t=0; while(s/i>0) i=i*10; i=i/10; while(s>0) { d=s/i; /*******************found**************/ if(d%2==0) { /*******************found**************/ *t=d*s1+*t;/*注意此处和十二题的区别*/ s1*=10; } s=s%i; i=i/10; } } voidmain() { longs,t; system("CLS"); printf("\nPleaseenters: "); scanf("%ld",&s); fun(s,&t); printf("Theresultis: %ld\n",t); } 十四.找出大于1小于整数m的素数 for(i=2;i { t=1; for(j=2;j if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } 十五.字符串str由数字字符组成(长度不超过5个字符),可看作任意进制的数,请补充函数fun(),该函数的功能是: 把str字符串转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组xx的实际长度。 其中x表示str原来的进制,y表示要转换成的进制。 例如,输入str="1111",x=2,y=10,结果输出: 15。 如果输入str="15",x=10,y=2,结果输出: 1111。 #include #include #include #defineN8 intxx[N]; intfun(char*str,intx,inty) { intsum; inti=0; char*p=str; for(i=0;i xx[i]=0; sum=*p-'0'; p++; while(*p) { sum=sum*x+*p-'0'; p++; } i=0; while(sum! =0) { xx[i]=sum%y; sum=sum/y; i++; } returni; } voidmain() { charstr[6]; inti; intn; intx; inty; printf("Enterastringmadeupof'0'to'9'digitscharacter: "); gets(str); if(strlen(str)>5) { printf("Error: stringtoolonger! pleaseinputagain! \n\n"); exit(0); } for(i=0;str[i];i++) if(str[i]<'0'||str[i]>'9') { printf("Error: %cnotis'0'to'9'digitscharacter! \n\n",str[i]); exit(0); } printf("Theoriginalstring: "); puts(str); printf("\nINPUTx="); scanf("%d",&x); printf("\nINPUTy="); scanf("%d",&y); n=fun(str,x,y); printf("\n%sisconveredto",str); for(i=n-1;i>=0;i--) printf("%d",xx[i]); } 十六.字符串str由数字字符'0'和'1'组成(长度不超过8个字符),可看作二进制数,请补充函数fun(),该函数的功能是: 把str字符串转换成十进制数,结果由函数返回。 例如,输入"1001",结果输出: 9。 #include #include #include intfun(char*str) { intn; char*p=str; n=*p-'0'; p++; while(*p) { n=2*n+*p-'0';/*以1001为例,对应的十进制1*23+0*22+0*2+1=2*(2*(2*1+0)+0)+1=9*/ p++; } returnn; } voidmain() { charstr[9]; inti; intn; printf("Enterastringmadeupof'0'and'1'digitalcharacter: "); gets(str); if(strlen(str)>8) { printf("Error: stringtoolonger! pleaseinputagain! \n\n"); exit(0); } for(i=0;str[i];i++) if(str[i]<'0'||str[i]>'1') { printf("Error: %cnotis'0'and'1'digitalcharacter! \n\n",str[i]); exit(0); } printf("Theoriginalstring: "); puts(str); n=fun(str); printf("\n%sisconveredtodecimalnumbr: %d\n\n",str,n); } 十七.str为一个字符序列,序列由字符0和1组成。 请补充函数fun(),该函数的功能是: 查找该字符序列中0字符连续出现的最长长度(即0字符的个数),如果有几个0字符串长度相同,只记录最后一个0字符串的相关信息。 通过m和k返回最长0字符串的长度和最后0字符的下标。 例如,如果输入"01001000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 重点 上机 题目 积累