百分网上机题

  • 格式:wps
  • 大小:219.50 KB
  • 文档页数:30

2 第一套一、填空题fun函数的功能是判断一个数是否为回文数。

当字符串是回文时,函数返回字符串:yes!否则函数返回字符串:no!并在主函数中输出。

#include <string.h>char *fun(char *str){char *p1,*p2;int i,t=0; /* 定义i,t为整形变量,初值为0 */p1=str;p2=str+strlen(str)-1;for (i=0; __1__; i++) i<=strlen(str)/2或i<strlen(str)/2if( __2__ ) *p1++!=*p2--{t=1;break;}if( __3__ ) t==0return("yes!");elsereturn("no!");}main(){char str[50];printf("Input:");scanf("%s",str);printf("%s\n", fun(str));}解题思路:定义两个字符指针,分别指向字符串的首尾,比较两个指针所指的字符是否相等。

本题定义了一个int变量t,用于标记首尾字符是否相等。

二、改错计算n的阶乘#include <stdio.h>#include <conio.h>double fun(int n){double result=1.0;/********found********/if n==0 if(n==0)return 1.0;while(n>1&&n<170)/********found********/result =n--; result*=n--;return result;}main(){int n;printf("Input N:");scanf("%d",&n);printf("\n\n%d!=%1f\n\n",n,fun(n));}(1)If语句的条件表达式必须被放在()中,因此if n==0应改为if (n==0) (2)根据阶乘算法n!=n*(n-1)*(n-1)…2*1,result必须是各项的乘积。

三、编程题求出1到m之内(包括m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

#include <conio.h>#include <stdio.h>#define M 100void fun ( int m, int *a, int *n ){int i,j=0;*n=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0){a[j]=i;j++;}*n=j}main(){int aa[M], n, k;FILE *out;clrscr();fun ( 50, aa, &n );for ( k = 0; k < n; k++ )if((k+1)%20==0)printf("\n");elseprintf("%4d", aa[k]);printf("\n");out=fopen ("out.dat", "w");for (k=0; k<n; k++){if((k+1)%20==0)fprintf(out, "\n");elsefprintf (out, "%4d", aa[k]);}fclose (out );}思路:1、利用循环语句遍历1到m之间的整数;2、用if条件语句判断某数是否能被7或11整除,把满足条件的数保存在形参数组a中,并把其个数赋给指针n所指向的内存。

第二套一、填空题fun函数:判断一个数是否是素数。

(素数:指在一个大于1的自然数中,除了1和自身外,不能被其它自然数整除的数。

)#include <conio.h>#include <stdio.h>__1__ char *fun( int n ){int i, m;m=1;for(i= __2__ ;i<n;i++) 2if ( __3__ ) n%i==0{m=0;break;}if(m==1&&n>1)return("yes!");elsereturn("no!");}main(){int k=0;clrscr();printf("Input:");scanf("%d",&k);printf("%s\n", fun(k));}解题思路:判断一个数是否为素数时,只要有除了1和其本身能整除它的数外,还有一个数能整除它,就能断定此数不是素数。

二、改错题计算正整数num的各位上的数字之积。

算法是把整数num各位上的数分离出来,可用num对10求余得到次低位上的数,然后依次类推,最后把这些数字求积。

#include<stdio.h>#include<conio.h>long fun(long num){/********found********/long k; long k=1;do{k*=num%10;/********found********/num\=10; num/=10} while(num);return(k);}main(){long n;clrscr();printf("\please enter a number:");scanf("%ld",&n);printf("\n%ld\n",fun(n));}解题思路:1、k用来存储各个位上数字的乘积,当定义了一个变量以后,以定要赋初值,否则,变量初值是随机的。

2、除号操作符错了。

三、编程题按分数的高低排列学生的记录,高分在前。

#include <stdio.h>#define N 16typedef struct{char num[10];int s;} STREC;void fun ( STREC a[ ] ){int i, j;STREC t;for( i=0;i<N-1;i++)for( j=i; j<N;j++)if(a[i],s<a[j],s){t=a[i];a[i]=a[j];a[j]=t;}}main (){STREC s[N]= {{"GA005",85}, {"GA003",76}, {"GA002",69}, {"GA004",85},{"GA001",91}, {"GA007",72}, {"GA008",64}, {"GA006", 87},{"GA015",85}, {"GA013",91}, {"GA012",64}, {"GA014",91},{"GA011",66}, {"GA017",64}, {"GA018",64}, {"GA016",72}};int i; FILE *out;fun ( s );printf ("The data after sorted :\n");for (i=0; i<N; i++){if ( (i)%4==0 )printf ("\n");printf ("%s %4d ", s[i].num, s[i].s);}printf ("\n");out=fopen ("out.dat", "w");for (i=0; i<N; i++){if ( (i)%4==0 && i )fprintf (out, "\n" );fprintf (out, "%4d", s[i].s);}fprintf ( out, "\n" );fclose (out );}解题思路:fun函数的功能是按高分在前排列学生的记录。

选择排序法:把第二个及其以后的数组元素与第一个数组元素进行比较,如果第一个数组元素小于其后面的元素,则把第一个数族元素与比他大的进行交换,然后再把第2组元素与其后面的数组元素进行比较,以此类推直到第n-1个元素与第n个数组元素比较完毕。

对一维数组进行排序要用2个循环,注意内循环的循环变量的初始值为外循环变量,循环变量小于数组的长度。

第三套一、填空题(指针,字符串,循环语句,数据提取整理,全局变量)函数功能:只保留字符串中的大写字母,删除其它字符,结果仍保存在原字符串中,有全局变量m保存删除后字符串的长度。

#include <stdio.h>#include <conio.h>int m;void fun(char *s){int i=0,j=0;char *p=s;while(*(p+i)){if(*(p+i)>='A' && *(p+i)<='Z'){__1__ ; s[j++]=*(p+i)}__2__ ; i++}s[j]='\0';__3__ ; m=j}main(){char str[80];clrscr();printf("\nEnter a string :");gets(str);printf("\n\nThe string is : \%s\n",str);fun(str);printf("\n\nThe string of changing is : \%s\n",str);printf("\n\nThe length of changed string is : \%d\n",m);}ASCII码中,大小写字母及数字字符都是按小到大依次连续存放的,因此要判断一个字符是否为大写字母,只需看它是否在‘A’及‘Z’之间。