C 语言教程 在线

1790c-exercise-example36

参考方案:

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/time.h>

//素数判定 筛选法
int main(){
    int num = 100;
    int i, j;
    //scanf("%d", &num);
    //getchar();
    bool *b;
    b=(bool *)calloc(num + 1, sizeof(bool));
    b[0] = false;
    for(i = 1; i <= num; i++){
        if(i % 2 == 0){
           b[i] = false;
        }else{
           b[i] = true;
        }
    }

    for(int i = 3; i <= sqrt(num); i+=2){
        if(b[i]){
            for(j=i+i; j <= num; j+=i)
                b[j] = false;
        }
    }

    
    //输出素数
    printf("2,");    
    for(i = 3; i <= num; i+=2){
       if(b[i]){
           printf("%d,", i);
       }
    }

    free(b);
    b=NULL;
    return 0;
}

1789c-exercise-example35

利用指针实现:

#include <stdio.h>

//题目:字符串反转,如将字符串 "www.facesho.com" 反转为"moc.boonur.www"。

void reverse(char *str);

int main()
{
    char str[100];
    printf("输入字符串:");
    fgets(str, sizeof str, stdin);
    reverse(str);
    printf("逆序后:%s\n",str);
    return 0;
}

void reverse(char *str)
{
    char *p = str, strNew[100];
    int i = 0;
    while (str[i] != '\n') {
        strNew[i] = str[i];
        ++i;
     }
    strNew[i] = '\0';//把原字符串末尾置'\0'
    while (*p != '\n') *(p++) = strNew[--i];//把原字符逆序
    *p = '\0';//逆序后末尾置'\0'
}

1788c-exercise-example35

参考方法:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void reverse(char *p,int n);
int main()
{
    char *a;
    a=(char *)malloc(sizeof(char));
    printf("请输入字符串:");
    //gets(a);
    fgets(a, (sizeof a / sizeof a[0]), stdin);
    reverse(a,strlen(a));
}

void reverse(char *p,int n)
{
    while(n)
    {
        printf("%c",*(p+n-1));
        n--;
    }
}

1787c-exercise-example35

参考方法:

#include<stdio.h>
#include<string.h>
void reverse(char str[], int lenth)
{
        int i = 1, tmp = lenth;
        for(i = 1; i <= lenth / 2; i++)
        {   
                *str ^= *(str + tmp - 1); 
                *(str + tmp - 1) ^= *str;
                *str ^= *(str + tmp - 1); 
                str++;
                tmp -= 2;
        }
}
int main()
{
        char str[100] = {0};
        printf("请输入一个字符串:");
        //fgets(str, 100, stdin);
        scanf("%s", str);
        reverse(str, strlen(str));
        printf("%s\n",str);
        return 0;
}

1786c-exercise-example35

参考方法:

#include<stdio.h>
#include<string.h>
#define N 80
void reverse(char *str)
{
    int j = strlen(str);
    int i = 0;
    j--;
    while(i < j)
    {
        char temp;
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
}

int main(void)
{
    char str[N];
    memset(str,'\0',sizeof(str));
    gets(str);
    reverse(str);
    puts(str);
    return 0;
}