ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

21Winter\ C语言程序设计第六章

2021-12-23 13:00:20  阅读:126  来源: 互联网

标签:p2 p1 int 21Winter C语言 char num 第六章 include


C语言程序设计 第六章

expr 2.1

#include<stdlib.h>
#include<stdio.h>
int main(){
    int i,n;
    scanf("%d",&n);
    for(i = 2; i<=n;i++){
        while(n!=0){
            if(n%i==0){
                printf("%d*",i);
                n /= i;
            }
            else{
                break;
            }
        }
    }
    putchar('\b');
    return 0;
}

在这个代码之中,因为有for循环对于i变量进行着范围的约束,所以说只要是n!=0就可以了,可以不用考虑最后n=1,i一直累加进入死循环的情况。(可以与实验六之中的my_fun()函数进行比较)

因为在实验六之中,质因数的分解是在同一个while循环中完成的,所以说只用了一层的循环。而且并没有对i进行范围的限制,所以导致如果在“1”的情况之下不break会出现死循环。

void fun(int m){
    int i = 2;
    printf("%d = 1",m);
    while(m>1){			//在这里对1进行约束,防止出现1一直除不尽,所以一直i++的情况。
        if(m%i==0){
            m/=i;
            printf("*%d",i);
        }
        else i++; 
    }
}

expr 2.2

#include<stdio.h>
#include<stdlib.h>
int datoi(char str[]){
    int value = 0, i = 0;
    while(str[i]!='\0'){
        value = value*10 + str[i] - '0';
        i++;
    }
    return value;
}
int main(){
    char *str = "9999";
    printf("%d",datoi(str)*10+9);
    return 0;
}

注意,在做这个实验的时候不可以

#include<stdlib.h>

因为atoi这个函数在stdlib.h这个库之中已经存在了,相当于是对于这个函数进行复写,所以会导致报错。

expr 2.3

#include<stdio.h>
void maxval(int (*num)[4]){
    int i, j, max, row =0, col = 0;
    max = num[0][0];
    for(i=0; i<4; i++)
        for(j=0; j<4;j++)
            if(max<num[i][j]){
                max = num[i][j];
                row = i;
                col = j;
            }
    printf("the maxium value lies in %d row, %d column, equals to %d",row, col, max);
}
int main(){
    int num[4][4]= {1,2,3,4,4,3,2,1,9,8,7,6,6,7,8,9};
    maxval(num);
    return 0;
}

expr 2.9

注意插入排序!!

#include<stdio.h>
#include <stdlib.h>
void insert(float* num,float new){
    int i = 11;
    num[12] = new;
    while( i>=0 && num[i]<num[i+1]){	//这个是针对题目之中所给的条件“递减数列”得来的。
        new = num[i+1];
        num[i+1] = num[i];
        num[i] = new;
        i--;
    }
}
int main(){
    float *num = (float*)malloc(sizeof(float)*13);
    for(int i=0;i<12;i++)   num[i] = -i*i;
    float new;
    scanf("%f",&new);
    insert(num,new);
    for(int i=0;i<13;i++)   
        printf("%f\t",num[i]);
    return 0;
}

expr 2.10

#include<stdio.h>
#include <stdlib.h>
int mycmp(char *p1, char* p2){
    while(*p1 && *p2 && *p1 == *p2){
        p1++, p2++;
    }
    return *p1 - *p2;
}
int main(){
    char *p1, *p2;
    p1 = (char*)malloc(sizeof(char)*20);
    p2 = (char*)malloc(sizeof(char)*20);
    gets(p1);
    gets(p2);
    printf("%d",mycmp(p1,p2));
    return 0;
}

Equivalent Solution:

int mycmp(char *p1, char* p2){
    while(*p1 && *p2 && *p1++ == *p2++);
    return *(--p1) - *(--p2);
}

expr 3.3

#include<stdio.h>
#include <stdlib.h>
void ss(char*s, char t){
    while(*s){
        if(*s==t)
            *s = t -'a' +'A';
        s++;
    }

}
void main(void){
    char str1[100] = "abcddfefdbd", c = 'd';
    ss(str1,c);
    puts(str1);
}

The code in Line 6 search for a particular character that is equal to the input char t, and return a Capitalized character in the string.

expr 3.6

#include<stdio.h>
#include <stdlib.h>
void sort(int a[], int n){
    int i,j,t;
    for(i = 0; i<n-1; i++)
        for(j = i+1; j<n; j++)
            if(a[i]<a[j]){
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
}
void main(void){
    int aa[10] = {1,2,3,4,5,6,7,8,9,10},i;
    sort(&aa[3],5);
    for(i =0; i<10; i++){
        printf("%d\t",aa[i]);
    }
}

上述的代码的核心原理是,以输入的int型指针a为起点,以a+n-1指针为终点,进行降序的排序。

从a[3]开始,长度为5的子列进行一个降序的排序。

expr 3.7

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sort(char **str, int n){
    char * tmp;
    int i, j;
    for(i=0; i<n-1; i++)
        for(j=0; j<n-i-1;j++)
            if(strcmp(str[j],str[j+1])>0){
                tmp = str[j], str[j] = str[j+1], str[j+1] = tmp;
            }
}
int main(){
    char **ps, *str[3] ={"BOOK", "COMPUTER", "CHINA"};
    int i;
    ps = str;
    sort(str,3);
    for(i=0;i<3;i++)
        puts(str[i]);
    return 0;
}

expr 5.2

#include<stdio.h>
#include<stdlib.h>
int prime(int x){
    int flag = x;
    for(int i = 2;i<x;i++)
        if(x%i ==0){
            flag = 0;
            break;
        }
    return flag;
}
int main(){
    int n,sum=0;
    scanf("%d",&n);
    for(int i=2; i<=n; i++)
        sum+=prime(i);
    printf("%d",sum);
    return 0;
}

expr 5.10

#include<stdio.h>
#include<stdlib.h>
int sort(short *num, int n){
    int p;
    short temp;
    for(int i=0;i<n-1;i++){
        int p = i;
        for(int j = i+1;j<n;j++)
            if(num[p]<num[j])
               p = j;
        if(p!=i)
            temp = num[p],num[p] = num[i], num[i] = temp;
    }
    return 0;
}
int main(){
    short* num = (short*)malloc(sizeof(short)*30);
    for(int i=0;i<20;i++) 
         num[i]= (rand()%1000)/7; 
    sort(num,20);
    for(int i=0;i<20;i++)
        printf("%d\t",num[i]);
    return 0;
}

标签:p2,p1,int,21Winter,C语言,char,num,第六章,include
来源: https://blog.csdn.net/qq_42198383/article/details/122104515

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有