试题程序: #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的花括号中填入所编写的若干语句。
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};
试题程序 #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。
试题程序: #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() { 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() {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的值。