骤,直至筛中为空时,工作结束,求得2至10中的全部素数。
程序中用数组sieve表示筛子,数组元素sieve[i]的值为1时,表示数i在筛子中,值为-1时表示数i已被取走。 #include
{ int i, leftin, range, factor, multiple; int sieve[MAX];
printf(\
scanf(\指出在多大的范围内寻找素数 */ for ( i = 2; i <= range; i++) /* 筛子初始化 */
(1) ;
leftin = range – 1; /* 筛中的个数置初值 */ factor = 1;
while(leftin > 0) {
factor = factor + 1;
if( sieve[factor] == 1) { /* 筛中最小数是素数 */ printf(“%d\\t“, factor); (2) ;
while (factor * multiple <= range) { if(sieve[factor * multiple] == 1) { (3) ; /* 移走素数的倍数 */ (4) ; /* 筛中的个数减一 */ }
(5) ; /* 倍数值增1 */ } }
} }
五、改错题
5.1函数sum(x, k)是求数组x的前k个整数的和。 /* 1 */ void sum(int x, int k) /* 2 */ { int i;
/* 3 */ for (i = 0; i <= k; i++) /* 4 */ s += *x; /* 5 */ return s; /* 6 */ }
5.2下函数writelink(head)是输出首指针为head的链表中各结点的数据。
struct node { int val;
struct node *next; };
/* 1 */ void plink(struct node head) /* 2 */ { for ( ; head != NULL; head++) /* 3 */ printf(“?”, head.val); /* 4*/ }
26--34 注:解答写在答卷纸上,试卷中的解答不评分
5.3. 函数sortTwo()的功能是使与函数的两个参数所对应的两个变量的值满足前一个不比后一个小的顺序。在函数发现它们不是要求的顺序时,函数就应该交换这两个变量的值,使它们变成满足要求的顺序。
/* 1 */ void sortTwo(int x, int y) /* 2 */ { int t;
/* 3 */ if (x > y) { t = x; x = y; y = t; } /* 4 */ }
5.4.函数inputx是输入k个整数到数组x中。 /* 1 */ void inputx(int x, int k) /* 2 */ { int i;
/* 3 */ for (i = 0; i 5.5.函数enters是将字符串s中的大写英文字母转换成小写英文字母,并返回字符串s; /* 1 */ char *enters(char *s) /* 2 */ { char *t = s; /* 3 */ while (*t) /* 4 */ { if (*t >= ‘A‘ | | *t <= ‘Z‘ ) /* 5 */ *t = *t – ?A‘ + ‘a‘; /* 6 */ t++; /* 7 */ } /* 8 */ return *s; /* 9 */ } 5.7以下程序的目的是交换数据a、b。 /* 1*/ #include /* 2*/ void swap(int *x, int *y) { /* 3*/ int tmp; /* 4*/ tmp = x; x = y; y = tmp; /* 5*/ } /* 6*/ void main() { /* 7*/ int a, b; /* 8*/ scanf(\/* 9*/ swap(a, b); /*10*/ printf(\/*11*/ } 5.8以下是一个将d盘根目录的data.txt文件内容输出到显示屏上的程序。输出时,将 其中的小写字母转换成大写字母输出。 /*1*/ #include /*3*/ FILE *fp; char ch; 27--34 注:解答写在答卷纸上,试卷中的解答不评分 /*4*/ if(!(fp=fopen(\/*5*/ printf(\/*6*/ return; /*7*/ } /*8*/ while((ch = fgetc(fp)) != EOF) { /*9*/ if(ch >= 'a' && ch <= 'z') /*10*/ ch += 'A'; /*11*/ putchar(ch); /*12*/ } /*13*/ fclose(fp); /*14*/ } 5.9以下程序将字符串中的小写字母删除,并输出删除小写字母后的字符串结果。 /*1*/ #include /*2*/ void main() { /*3*/ char *str=\/*4*/ p=s=str; /*5*/ while(*s) { /*6*/ if(*s >= 'a' && *s <= 'z') /*7*/ for(p=s; *p; p++) *p = *(p+1); /*8*/ else s++; /*9*/ } /*10*/ while(*p; p++) /*11*/ printf(\/*12*/ } 5.10以下函数inputx是输入k个整数到数组x中。 /* 1 */ void inputx(int x, int k) /* 2 */ { int i; /* 3 */ for (i = 0; i < k; i++) /* 4 */ scanf(“%d”, &x++); /* 5 */ } 5.11.以下函数plink是输出首指针为head的链表中各结点的数据。 /* 1 */ struct node { int val; /* 2 */ struct node *next; /* 3 */ } /* 4 */ void plink(struct node head) /* 5 */ { for ( ; head != NULL; head++) /* 6 */ printf(“?”, head.val); /* 7 */ } 5.12 函数sortTwo()的功能是使与函数的两个参数所对应的两个变量的值满足前一个不比后一个小的顺序。在函数发现它们不是要求的顺序时,函数就应该交换这两个变量的值,使 28--34 注:解答写在答卷纸上,试卷中的解答不评分 它们变成满足要求的顺序。 /* 1 */ void sortTwo(int x, int y) /* 2 */ { int t; /* 3 */ if (x > y) { /* 4 */ t = x; x = y; y = t; /* 5 */ } /* 6 */ } 5.13函数enters是将字符串s中的大写英文字母转换成小写英文字母,并返回字符串s; /* 1 */ char *enters(char *s) /* 2 */ { char *t = s; /* 3 */ while ( t ) /* 4 */ { if (*t >= ‘A‘ | | *t <= ‘Z‘ ) /* 5 */ *t = *t + ‘a‘; /* 6 */ t++; /* 7 */ } /* 8 */ return *s; /* 9 */ } 5.14 以下为采用“冒泡法”对数组进行升序排序的程序。 /* 1*/ #include /* 2*/ #define N 6 /* 3*/ void main() /* 4*/ int a[] = {0, 3, 1, 5, 4, 2}, i, j, t; /* 5*/ for(i=0; i /* 6*/ for(j=0; j /* 8*/ t = a[j]; a[j] = a[j+1]; a[j+1] = t; /* 9*/ } /* 10*/ printf(“%d ”, a[i]); /* 11*/ } /* 12*/ } 5.15 以下语句定义了一个结构类型struct node和结构变量p,并赋值。 /*0*/ struct node { /*1*/ char s[10]; int k; /*2*/ /*3*/ /*4*/ /*5*/ 5.16 函数strUpToLow()把一个字符串中的大写字母变为小写字母,并返回结果。 /*1*/ char *strUpToLow(char *str) { /*2*/ char *p = str; 29--34 注:解答写在答卷纸上,试卷中的解答不评分 } struct node p; p.s = “abc”; p.k = 2; /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ }; while(*str) { if(*str>='A' || *str<='Z') *str = *str - 'A' + 'a'; str ++ ; } return *str; /*8*/ 5.17函数digits(char *s)统计给定字符串s中数字字符的个数。 /* 1 */ void digits(char *s) /* 2 */ { int c = 0; /* 3 */ while(s){ /* 4 */ if(*s >= 0 || *s <= 9) c++; /* 5 */ s++; /* 6 */ } /* 7 */ return c; /* 8 */ } 5.18函数readArray(int a[ ], int n)为指定的数组输入n个数据。 /* 1 */ void readArray(int a[ ] int n) /* 2 */ { int k; /* 3 */ printf(\ \/* 4 */ for(k = 0; k <= n; k++) /* 5 */ scanf(\/* 6 */ } 六、程序设计题 6.1输入正整数n,输出由n行2n-1列的等腰三角形图案,以下是n等于4的图案。 * * * * * * * * * * * * * * * * 6.2输入正整数n,输出由n行2n-1列的等腰三角形图案,以下是n等于4的图案。 * * * * * * * * * * * * * * * * 6.3试编写按以下公式计算π的函数:double pi(double epsilon)(直到最后一项小于由形参指定的epsilon为止)。 π 1 1 2 1 2 3 1 2 3 4 — = 1 + — + — * — + — * — * — + — * — * — * — + ?? 2 3 3 5 3 5 7 3 5 7 9 30--34 注:解答写在答卷纸上,试卷中的解答不评分