aa《C程序设计》课程期末上机考试
考试时间:50分钟
考试方式:从下面的20题中随机抽取一题,再附加一题,共需完成2道题。附加题不事
先给定
分值分配:第一题60分,第二题40分,共100分
考试时间:第十七周周二与周三,2014年6月24、25号
1. 编写函数long fun(long x),它的功能是:将长整型参数x中每一位上为偶数的数依次取出,构成
一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输
出:24802. #include
printf(\ scanf(\
b=fun(a);
printf(\
2. 编写函数void fun(int k,int *p),功能是:将参数k(2≤k≤32767)所有的不相同质因子升序
写入p所指的一维数组中,以-1作为所有质因子的结束标志。例如:下面程序运行时若输入200,
输出:2 5;若输入27720,输出:2 3 5 7 11;若输入101,输出101。 #include
{ if (k%j==0) { p[n]=j; n++; }
while(k%j==0) { k=k/j; } j++; }
while (j<=k); p[n]=-1; } int main() { int x,a[17],i; do
{ printf(\scanf (\while(x<2); fun(x,a);
1
for(i=0;a[i]!=-1;i++) printf(\printf(\
3. 编写函数void fun(int *x,int n),功能是:求出长度为n的数组x中的最大数与次最大数,并把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变。下面程序运行时若输入:2 4 6 1 3 9 7 0 5 8,则输出:9 8 6 1 3 2 7 0 5 4。 #define N 10 void fun(int *x,int n) {int i,j,k,temp; for(i=0;i<2;i++) {k=i;
for(j=i+1;j if(k!=i) {temp=*(x+k);*(x+k)=*(x+i);*(x+i)=temp;}}} int main() {int a[N],i; for(i=0;i printf(\ return 0; } 4. 数组x中保存有n个整数, 编写函数int fun(int *x,int n,float *w),对数组x进行如下操作:从第0个元素起对每5个元素求一个平均埴,并将这些均值依次存放在w所指的数组中。函数返回平均值的个数。例如:若输入n为14,14个数据为:11 21 35 24 55 16 27 58 18 0 11 12 13 14,则只为前10个求均值,输出结果为:29.20 23.80 #include int fun(int *x,int n,float *w) { int i,j,s; for(i=0;i<(n/5);i++) {s=0;for(j=i*5;j<(i*5+5);j++) s=s+*(x+j); *(w+i)=s/5.0;} return (n/5);} void main() {int a[30],i,n,m; float b[6]; printf(\scanf(\for(i=0;i 2 printf(\printf(\ 5. 编写函数int fun(int x,long int y),功能:计算满足表达式x 0 +x1+x2+...+xn n并作为函数返回值带回。例如,当x=2,y=1000时,程序输出8。 #include if(s return(i-2); } void main() {int x; long y; scanf(\ printf(\ 6. 编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个m行N列的二维字 符数组,每行存放一个字符串。求出最长的字符串,复制到s所指的字符数组中,然后返回此最长字符串的长度。 #include #include int fun(char (*ss)[N],int m,char *s) {int i,j,k; s=ss[0]; for(i=0;i {if(strlen(s) printf(\return j;} void main() {char a[8][N],b[N]; int i,len; for(i=0;i<8;i++) gets(a[i]); len=fun(a,8,b);printf(\ 7. 编写函数int countw(char *str),统计字符串str中单词的个数。单词之间以空格,逗号,句号 3 作分隔,数字也看做单词。单词之间可能不止一个分隔符。如输入: It's 10:10 o'clock ,I am late.屏幕上输出\ #include int i=0,num=0,word=0; while((c=str[i])!='\\0') {if(c==' ') {word=0;} else if(word==0) {word=1; num++;} i++;} return num;} void main() { char s[200]; gets(s); printf(\ 8. 编写函数void fun(char *str),功能:字符串str中单词以空格作分隔,如果单词之间不止一个 空格,则删除多余的空格,使单词之间只保留一个空格。字符串开始的空格也只保留一个。例如, 程序运行时若输入: It's 10:10 o'clock , I am late. 输出: It's 10:10 o'clock , I am late. #include for(i=0;str[i]!='\\0';i++) if(str[i]==' '&&str[i+1]==' ') {for(t=i+1;str[t]!='\\0';t++) str[t]=str[t+1]; str[t+1]='\\0'; i--; } } void main() {char s[100]; puts(\ gets(s); fun(s); puts(s);} 9. 函数void fun(int x,int k,int *p)的功能是:求出比x大的最初k(k<1000)个素数,放入p所指数组中。例如:程序运行时输入:10 10,输出:11 13 17 19 23 29 31 37 41 43 #include #include void fun(int x,int k,int *p) {int i,m=0,n;x=x+1; n=sqrt(x); 4 while(m {for(i=2;i<=n;i++) {if(x%i==0) break; if(i>=n) {p[m]=x; m++;}} x++; n=sqrt(x);}} void main() {int a,b,n[1000]={0},i; scanf(\fun(a,b,n); for(i=0;i 10. 编写函数int fun(int a,int b),在[a,b]范围内统计满足下面条件的数的个数。条件:该数是素 数,且该数逆序后形成的数也是素数。例如,在[100,150]范围内101 107 113 131 149 满足条件,则下面程序运行时输入100 150,输出:num=5。 #include int fun(int a,int b) { int c[100]={0},i,t,j=0,l,m,d=0,x,s; long int k; for(m=a;m<=b;m++) { k=sqrt(m); for(i=2;i<=k;i++) { if(m%i==0) break;} if(i>=k+1) {c[j++]=m;} } putchar('\\n'); for(i=0;i for(k=0;;) {m=m/10;if(m==0) break;k++;} t=k;l=k; for(s=0,k=0;k<=t;k++) { x=c[i]; c[i]=c[i]/10; s=s+x*pow(10,l--); } c[i]=s; } for(i=0;c[i]!=0;i++) { k=sqrt(c[i]); for(j=2;j<=k;j++) {if(c[i]%j==0) break;} 5