第14周——结构设计的艺术
练兵区——编程题——不计入总分
1 略
2字符串中的字符排序(4分)
题目内容:
编写一个函数,对一个字符串中的字符进行升序排序,并输出字符排序后的字符串,字符串长度小于20。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
void sortString(char *str);
void swap(char *str, int i, int j);
int main(void) {
char str[N];
printf("Input a string:\n");
gets(str);
sortString(str);
printf("%s", str);
return 0;
}
void sortString(char *str) {
int len = strlen(str);
for(int i = len - 1; i > 0; i--) {
for(int j = 0; j < i; j++) {
if(*(str + j) > *(str + j + 1)) {
swap(str, j, j+1);
}
}
}
}
void swap(char *str, int i, int j) {
char temp = *(str + i);
*(str + i) = *(str + j);
*(str + j) = temp;
}
3纯数字字符串检验(4分)
题目内容:
按给定函数原型编程检查一个字符串是否全由数字组成。
int IsAllDigit(char p[]);/*若全由数字组成,则函数返回1,否则返回0*/
在主函数中,从键盘输入一个字符串(假设字符串的最大长度为20个字符),调用函数IsAllDigit(),检查该字符串是否全由数字组成,然后在主函数中根据函数IsAllDigit()的返回值输出相应的提示信息。
#include<stdio.h>
#include<string.h>
#define STR_LEN 20
int IsAllDigit(char p[]);
int main(){
char str[STR_LEN];
printf("Please input a string:\n");
gets(str);
int res = IsAllDigit(str);
if(res == 0) printf("The string is digit string.");
else if(res == -1) printf("The string is not digit string.");
return 0;
}
int IsAllDigit(char p[]){
while(*p){
if(*p > '9'||*p < '0'){
return -1;
}
p++;
}
return 0;
}
4孪生素数(4分)
题目内容:
相差为2的两个素数称为孪生素数。例如,3与5,41与43等都是孪生素数。设计程序求出指定区间上的所有孪生素数对。区间上限和下限由键盘获取。
#include<stdio.h>
#include<math.h>
void findIsPrinme(long start, long end);
int isPrime(long num);
int main() {
long start, end;
printf("please input c,d(c>2):\n");
scanf("%ld,%ld", &start, &end);
findIsPrinme(start, end);
return 0;
}
void findIsPrinme(long start, long end){
long frontPrime = -1;
long count = 0;
for(long i = start; i <= end; i++){
if(isPrime(i) == 0){
if(frontPrime > 1&& i - frontPrime == 2){
printf("(%ld,%ld)\n", frontPrime, i);
count++;
}
frontPrime = i;
}
}
printf("total=%d\n", count);
}
int isPrime(long num){
// -1 no 0 yes
if(num==1) return -1;
long max = sqrt(num);
for(long i = 2; i <= max; i++){
if(num % i == 0){
return -1;
}
}
return 0;
}
5求解不等式(4分)
题目内容:
对指定正实数n(采用双精度浮点型表示),试求满足下面平方根不等式的最小整数m,并输出不等式左边的值。程序中浮点数的数据类型均为double。
#include<stdio.h>
#include<math.h>
double findMinM(double n, int *res);
double getSum(int m,int hasSum);
int main(){
double n;
int m;
printf("Input n:\n");
scanf("%lf", &n);
double res = findMinM(n, &m);
printf("Result:m>=%d\n", m);
printf("s=%.2f\n", res);
return 0;
}
double findMinM(double n, int *res){
*res = 0;
double sum = 0;
while(sum <= n){
sum = getSum(*res, 0);
(*res)++;
}
(*res)--;
return sum;
}
double getSum(int m, int hasSum){
if(m < hasSum){
return 0;
}
return sqrt(m + hasSum) + getSum(m, hasSum + 1);
}