【急求:2010 南开100题 上机题 2级C语言
答案:1 悬赏:70 手机版
解决时间 2021-10-18 14:32
- 提问者网友:浪荡绅士
- 2021-10-17 21:18
【急求:2010 南开100题 上机题 2级C语言
最佳答案
- 五星知识达人网友:归鹤鸣
- 2021-10-17 21:28
南开二级C语言上机100题 1、 改错题1 下列给定程序的功能是:读入一个整数(2<=k《=10000》,打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <conio.h> #include <stdio.h> ******************************* IsPrime(int n); ——————去掉分号 {int i,m; m=1; for ( i=2; i<n; i++) ****************************** if !(n%i) ——————if (!(n%i)) { m=0; break; } return (m); } main() { int j,k; clrscr(); printf("nPlease enter an integer number between 2 and 10000:");scanf("%d",&k); printf("nnThe prime factor(s) of %d is (are):",k); for (j=2;j<=k;j++) if ((!(k%j))&&(IsPrime(j)) printf("n %4d",j); printf("n"); ) 2、 编程题1 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值行会,将低于平均分的分数放在below所指的数组中。 例如,但score数组的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该时4,below中的数据应为10、20、30、40。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include <conio.h> #include <stdio.h> #include <string.h> int fun (int score[],int m, int below[]) { ——————int i,k=0;float aver=0; for(i=0;i<m;i++) aver+=(score[i]); aver/=m; for (i=0;i<m;i++) if (score[i]<aver) {below[k]=score[i]; k++; retern(k);} } main() {int i, n, below[9]; int score [9]={10,20,30,40,50,60,70,80,90}; clrscr(); n=fun(score,9,below); printf("nBelow the average score are:"); for (i=0;i<n;i++) printf ("%d",below[i]); } 3、 改错2 下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为:aBcdeFgh。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <studio.h> #include <string.h> **************************************** void; fun(char *p,char *q,char *c)——去分号 *************************************** {int k=1; ——1改为0 *************************************** while(*p!=*q) —— != 改为 || *************************************** {if (*p<*q) c[k]=*q; ——小于号改为小于等于 else c[k]=*p; if (*p) p++; if (*q) q++; k++; } } main() {char a[10]="aBCDeFgh",b[10]="ABcd",c[80]={''}; fun(a,b,c); printf("The string a:"); puts(a); printf("The string b:"); puts (b); printf("The result:"); puts(c); } 4、 改错3 下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio.h> #include <conio.h> void fun (char *s) { int i,j; for (i=0,j=0;s[i]!='\0';i++) **************************************** if (s[i]>='0' && s[i]<='9') s[j]=s[i]; ——————j改为j++ *************************************** s[j]="\0"; ——————s[j]='\0' } main() {char item[80]; clrscr(); printf("\nEnter a string:");gets(item); printf("\n\nThe string is :\%s\n",item); fun (item); printf("\n\nThe string of changing is :\%s\n",item); } 5、 改错4 下列给定程序中,函数fun的功能是:分别铜级字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBb123CCccccd,则应该输出结果:upper=6,lower=8。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> ********************************** void fun (char *s,int a, int b) ————a应为*a,b应为*b { while(*s) { if (*s>='A' && *s<='Z') *********************************** a++; ————(*a)++; if (*s>='a' && *s<='z') ************************************ b++; ————(*b)++; s++; } } main() { char s[100];int upper=0,lower=0; clrscr(); printf("nPlease a string:");gets(s); fun(s,&upper, &lower); printf("n upper=%d lower=%dn",upper,lower); } 6、 改错5 假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio.h> #define N 20 fun (int *a,int n, int x) {int p=0,i; a[n]=x; while (x!=a[p]) p=p+1; if (p==n) return -1; else {for (i=p;i<n;i++) ****************************************** a[i+1]=a[i]; ————a[i]=a[i+1]; return n-1; } } main() {int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10; printf("The original data:n"); for (i=0;i<n;i++) printf("%5d",w[i]); printf("nInput x (to delete):");scanf("%d",&x); printf("Delete:%dn",x); n=fun(w,n,x); if (n==-1) printf("***Nor be found!***nn"); else {printf("The data after deleted:n"); for (i=0,i<n;i++) printf("%5d",w[i]);printf("nn"); } } 7、 改错6 下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。t=1-1/2×2-1/3×3-…-1/m×m 例如,若m中的值为5,则应输出:0.536389。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <conio.h> #include <stdio.h> double fun (int m) { double y=1.0; int i; *************************************** for (i=2;i<m;i++) ———— “<”改为“<=” *************************************** y-=1/(i*i); ————“1”改为“1.0” return(y); } main () {int n=5; clrscr(); printf("\nRhe result is %1f\n",fun(n)); } 8、 改错7 下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <stdio.h> #define N 20 void fun(int a[],int n) { int i,j,t,p; for (j=0;j<n-1;j++) *************************** {p=j ——加上“;” for (i=j;i,n;i++) ——j改为j+1 if (a[i]<a[p]) ********************************* p=j; ——j改为i t=a[p];a[p]=a[j];a[j]=t; } } main() { int a[N]={9,6,8,3,-1},i,m=5; printf("排序前的数据:"); for (i=0;i<m;i++) printf("%d",a[i]);printf("\n"); fun(a,m); printf("排序后的数据:"); for (i=0;i<m;i++) printf("%d",a[i]);printf("\n"); } 9、 改错8(2004.7.27) 下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <stdio.h> fun(char *p) { char max,*q;int i=0; max=p[i]; while(p[i]!=0) { if(max<p[i]) {max=p[i]; ******************************* p=q+i; ——改为q=p+i; } i++; } ****************************** while(q<p) ——q<p改为q>p {*q=*(q-1); q--; } p[0]=max; } main() {char str[80]; printf("Enter a string:");gets(Str); printf("\nThe original string: ");puts(Str); fun(str); printf("\nThe string agter moving:");puts (str);ptintf("\n\n"); } 10、 改错9(2004.7.27) 下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩: 80.5 60 72 90.5 98 51.5 88 64 则低于平均分的学生人数为4(平均分为:75.5625)。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <conio.h> #include <stdio.h> #define N 20 int fun (float *s,int n,float *aver) {float ave,t=0.0; int count=0,k,i; for (k=0;k<n;k++) ******************************* t=s[k]; ——t+=s[k]; ave=t/n; for (i=0;i<n;i++) if (s[i]<ave) count++; ****************************** *aver=&ave; ——去掉& return count; } main() {float s[30],aver; int m,i; clrscr(); printf("nPlease enter m:";scanf("%d",&m); printf("nPlease enter %d mark:n",m); for (i=0;i<m;i++) scanf("%f",s+i); printf("nThe number of students:%dn",fun(s,m,&aver)); printf("Ave=%fn",aver); ) 11、 改错10(2004.8.1) 下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符产中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在2 所指的数组中内容应为99cd99f99。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include<conio.h> #include<stdio.h> #include<string.h> int fun (char *s, char *t1,char*t2,char*w) { int i; char *p,*r,*a; strcpy(w,s); while(*w) {p=w;r=t1; ******************************************** while(r) ——r改为*r if(*r==*p) {r++;p++} else break; if(*r=='') {a=w;r=t2; ******************************************* while(*r){*a=*r;a++;r++} ——改为while(*r){*a=*r;a++;r++;} w+=strlen(t2); } else w++; } } main() { char s[100],t1[100],t2[100],w[100]; clrscr(); printf("nPlease enter string S:");scanf("%s",s); printf("nPlease enter string t1:");scanf("%s",t1); printf("nPlease enter string t2:");scanf("%s",t2); if (strlen(t1)==strlen(t2)) { printf("nThe result is :%sn",w); } else printf("Error:strlen(t1)!=strlen(t2)n"); } 12、 改错11(2004.8.1) 给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。 请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <stdio.h> int fun () { int a [3] [3], sum; int i, j; *********************************** _____; ——sum = 1; for (i=0;i<3;i++) { for (j=0;j<3;j++) ***************************************** scanf (〃%d〃 a [i] [j]); ——scanf("%d", &a[i][j]); } for (i=0; i<3; i++) sum=sum*a[i] [i]; printf (〃Sum=%dn〃, sum); } main () { fun (); } 13、 改错12(8.1) 下列程序的功能是:读入一个整数 k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include 〃conio.h〃 #include 〃stdio.h〃 ************************************************ IsPrime ( int n ); ——IsPrime(int n) { int i, m; m = 1; for ( i = 2; i < n/ i++ ) ********************************************* if !( n%i ) ——if(!(n%i)) { m=0; break ; } return ( m ); } main () { int j, k; clrscr (); printf (〃nPease enter an integer number between 2 and 10000:〃); scanf ( 〃%d〃,&k ); printf ( 〃nn The prime factor (s) of % d is ( are ):〃, k ); for ( j = 2; j <= k; j++ ) if ( ( ! k%j ) ) && ( IsPrime ( j ) ) } printf ( 〃n % 4d〃, j ); printf (〃n〃); } 14、 改错13(8.4) 下列程序中,fun函数的功能是:根据形参m,计算如下公式的值。 t=1+ 1/2 + 1/3 + 1/4 + … + 1/m 例如,若输入5,则应输出2.283333。 请改正程序中的语法错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include<conio.h> #include<stdio.h> double fun(int m) { double t=1.0; int i; for(i=2;i<=m;i++) ******************************************* t+=1.0/k; ——k改为i ********************************************* ____________; ——填return t; } main() { int m; clrscr(); printf(“nPlease enter 1 integer number:”); scanf(“%d”,&m); printf(“nThe result is %1fn”,fun(m)); } 15、 改错14(8.4) 下列程序中,fun和funx函数的功能是: 用二分法求方程2x×x×x-4x×x+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。 请改正程序中的语法错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include<stdio.h> #include<math.h> double funx(double x) { return(2*x*x*x-4*x*x+3*x-6); } double fun(double m, double n) { ************************************** int r;——改为double r; r=(m+n)/2; ********************************** while(fabs(n-m)<0.001) —— "<" 改为" >= " {if(funx(r)*funx(n)<0 m=r; else n=r; r=(m+n)/2; ) return r; ) main() { double m,n,root; printf("Enter m n:n");scanf("%1f%1f",&m,&n); root=fun(m,n); printf("root=%6.3fn",root); } 16、 改错15(8.5) 下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若相同,则什么也不做,若不同,则将器插在串的最后。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> #include <string.h> ********************************** void fun(char str, char ch)------------------------1 { while(*str && *str!=ch) str++; ********************************** if (*str==ch)------------------------------------2 { str[0]=ch; ********************************* str[1]='0';------------------------------------3 } } main() {char s[81],c; clrscr(); printf("nPlease enter a string:n");gets(s) printf("nPlease enter the character to search:"); c=getchar(); fun(s,c); printf("nThe result is %sn",s); } 15 题Answer: 1. void fun(char *str, char ch) 2. if (*str==' 17、 改错16(8.5) 下列给定程序中,函数Creatlink的功能是:创建带头结点的单项链表,并为各结点数据域赋0到m-1的值。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; }NODE; NODE *Creatlink(int n, int m) {NODE *h=Null, *p,*s; int i; s=(NODE *)malloc(sizeof(NODE)); ******************************************** h=p;-------------------------------------1 p->next=NULL; for (i=1;i<=n;i++) {s=(NODE *)malloc(sizeof(NODE)); ******************************************** s->data=rand()%m;-----------------------2 s->next=p->next; p->next=s; p=p->next; } ******************************************** return p;--------------------------------3 } outlink(NODE *h) {NODE *p; p=h->next; printf("nnTHE LIST:nn HEAD"); while(p) {printf("->%d",p->data); p=p->next; } printf("n"); } main() { NODE *head; clrscr(); head=Creatlink(8,22); outlink(head); } 16 题Answer: 1. h=p=s; 2. s->data=rand()%(m-1); 3. return h; 18、 改错17(8.5) 下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> int fun(int k) {int m=0, mc=0,j; while ((k>=2)&&(mc<10)) ********************************* {if ((k%13=0)||(k%17=0))-------------------1 {m=m+k;mc++;} k--; } return m; ********************************** _____________-------------------------------2 main() {clrscr(); printf("%dn",fun(500)); } 17 题Answer: 1. if ((k%13==0)||(k%17==0)) 2. } 19、 改错18(8.5) 下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> ******************************** void fun (int a,b)--------------------------1 {int t; ******************************* t=b;b=a;a=t;-------------------------------2 } main() {int a,b; clrscr(); printf("Enter a,b:");scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%d b=%dn",a,b); } 18 题Answer: 1. void fun (int *a,int *b) 2. t=*b;*b=*a;*a=t; 20、 改错19(8.5) 下列给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。例如,当s中的数为7654321时,t是的数为642。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> ******************************** void fun (long s, long t)--------------------------1 {long sl=10; s/=10; *t=s%10; **************************** while (s<0)--------------------------------------2 {s=s/100; *t=s%10*sl+*t; sl=sl*10; } } main() {long s,t; clrscr(); printf("nPlease enter s:");scanf("%ld",&s); fun(s,&t); printf("The result is : %ldn",t); } 19 题Answer: 1. void fun (long s, long *t) 2. while (s>0) 21、 改错20(8.5) N个有序整数数列已放在一堆数组中,下列给定程序中,函数fun的功能是:利用折半查找算法找整数m再数组中的位置。若找到,则返回其下标值;反之,则返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio.h> #define N 10 ************************************ void fun(int a[],int m)--------------------------1 {int low=0,high=N-1,mid; while(low<=high) {mid=(low+high)/2; if (m<a[mid]) high=mid-1; *************************************** else if (m>=a[mid])----------------------------2 low=mid+1; else return(mid); } return(-1); } main() {int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m; printf("a数组中的数据如下:"); for(i=0;i<N;i++) printf("%d",a[i]); printf("Enter m:");scanf("%d",&m); k=fun(a,m); if(k>=0) printf("m=%d,index=%d\n",m,k); else printf("Not be found!\n"); } 20 题Answer: 1. int fun(int a[],int m) 2. else if (m>a[mid])
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯