首页 > 编程语言 >C语言程序设计(第四版)谭浩强版 课后答案 第八章 指针

C语言程序设计(第四版)谭浩强版 课后答案 第八章 指针

时间:2023-05-20 09:12:27浏览次数:52  
标签:int void please C语言 谭浩强 课后 printf input include

1、输出3个整数,按由小到大的顺序输出,写的复杂了,加上分析会变得简单,像下面输出3个字符(从小到大)

#include<stdio.h>

int main(){
    void compare(int *a,int *b,int *c);
    int a,b,c;
    printf("please input three numbers:");
    scanf("%d%d%d",&a,&b,&c);
    compare(&a,&b,&c);
    printf("%d<%d<%d\n",a,b,c);
    return 0;
}
void compare(int *a,int *b,int *c){
    int max;
    if(*a<*b){
        if(*a>*c){
            max = *a;
            *a = *b;
            *b = max;
        }
     if(*a<*c&&*c<*b){
            max = *c;
            *c = *b;
            *b = max;
        }
        
    }
    if(*a>*b){
        if(*b>*c){
            max = *c;
            *c = *a;
            *a = max;
        }
        else if(*b<*c&&*c<*a){
            max = *a;
            *a = *b;
            *b = *c;
            *c = max;
        }
        else{
            max = *b;
            *b = *a;
            *a = max;
        }
    }
}

 2、为了代码简单,用了strcmp函数,也可以自己写一个strcmp函数

#include<stdio.h>
#include<string.h>
int main(){
    void compare(char *a,char *b,char *c);
    char a[10],b[10],c[10];
    printf("please input three string:");
    scanf("%s%s%s",a,b,c);
    compare(a,b,c);
    printf("%s<%s<%s\n",a,b,c);
    return 0;

}
void compare(char*a,char *b,char *c){
    char *p;
    if(strcmp(a,b)>0){
        p = a;
        a = b;
        b = p;
    }
    if(strcmp(a,c)>0){
        p = a;
        a = c;
        c = p;
    }
    if(strcmp(b,c)>0){
        p = b;
        b = c;
        c = p;
    }   

}

3、输入10个数,单独输入,单独输出,并且把最大的一个数和最后一个数进行交换,最小的一个数和第一个进行交换。需要特别注意的传入的数组指针,进行操作过,已经从第一个数据指向了最后一个数据,如果在想通过指指针对数组的一些值进行操作,就需要把它在赋值成首指针,在进行操作。容易忽略,程序也没有报错,但是没有结果

#include<stdio.h>
#define N 10
int main(){
    void scan(int *p,int n);
    void trans(int *p,int n);
    void print(int *p,int n);
    int a[N];
    scan(a,N);
    print(a,N);
    trans(a,N);
    print(a,N);
    return 0;
}
void scan(int *p,int n){
    for(int i=0;i<n;i++){
        scanf("%d",p++);
    }
}
void print(int *p,int n){
    for(int i=0;i<n;i++){
        printf("%d ",*p++);
    }
    printf("\n");
}
void trans(int *p,int n){
    int min=p[0],max=p[n-1];
    int i,t,l,h;
    int *q;
    q=p;
    for(i=0;i<n;i++){
        if(min>*q){
            min = *q;
            l = i;
        }
        if(max<*q){
            max = *q;
            h = i;
        }
        q++;
    }
    t = p[0];
    p[0] = p[l];
    p[l] = t;
    t = p[n-1];
    p[n-1] = p[h];
    p[h] = t;   
}

4、n个数,后面m个数放在前面,前面的n-m个数移到m个数的后面

#include<stdio.h>
#define N 20
int main(){
    void mhead(int *a,int n,int m);
    int a[N];
    int n,m;
    int i;
    printf("please input the number :");
    scanf("%d",&n);
    printf("please input numbers:");
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    printf("please input the number of behind :");
    scanf("%d",&m);
    mhead(a,n,m);
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}
void verse(int *a,int i,int j){
    int t;
    j=j-1;
    for(;i<j;i++,j--){
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
void mhead(int *a,int n,int m){
    verse(a,0,n);
    verse(a,0,m);
    verse(a,m,n);
}

5、一圈人,每次报到3出局,问最后一个留下来的人是第几号(循环结束条件很重要,想了超级久;也能用单向循环链表实现,但是写的不对,可能后期会加进来)

#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#define N 20
int main(){
    void delete3(int *p,int n);
    int n;
    int i;
    int a[N];
    printf("please input number of people:");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        a[i]=i+1;
    }  
    delete3(a,n);
    for(i=0;i<n;i++){
        if(a[i]!=0){
            printf("%d ",a[i]);
        }
    } 
    printf("\n");
    return 0;
}
void delete3(int *p,int n){
    int count=0;
    int i;
    int j=3;
    while(j>1){
        for(i=0;i<n;i++){
            if(p[i]!=0){
                count++;
            }
             if(count==3){
                count=0;
                 p[i]=0;
            }
        }
        j=0;
        for(i=0;i<n;i++){
            if(p[i]!=0)
            
                j++;
        }
     }     
}

 

标签:int,void,please,C语言,谭浩强,课后,printf,input,include
From: https://www.cnblogs.com/gunancheng/p/17416740.html

相关文章

  • C语言函数大全-- _w 开头的函数(4)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wstrtime1.1函数说明函数声明函数功能wchar_t*_wstrtime(wchar_t*buffer);用于获取当前系统时间并返回一个宽字符字符串表示,格式为"HH:MM:SS"(小时:分钟:秒)参数:buffer:一个指向wchar_t类型数组......
  • C语言函数大全-- _w 开头的函数(3)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wmkdir1.1函数说明函数声明函数功能int_wmkdir(constwchar_t*dirname);用于创建指定路径名的新目录参数:dirname:指向以null结尾的宽字符数组,该数组包含要创建的目录的路径1.2演示示例#in......
  • C语言--动态内存分配2
    realloc--追加动态内存空间relloc函数追加的两种形式:原动态内存空间后有足够空间进行追加时直接追加。返回原动态内存地址。原动态内存空间厚不够追加空间时,则重新开辟动态内存空间,复制原有内存空间大小、数据并在  其后追加空间。释放原动态内存,返回新的动态内存地址。动态内......
  • C语言编程—常量
    常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。常量可以直接在代码中使用,也可以通过定义常量来使用。整数......
  • 第四章课后练习
    习题4-14题目:定义一个Tree类,有成员树龄ages,成员函数grow对ages加上years,age()显示tree对象的ages对象的ages的值。代码部分:#include<iostream>usingnamespacestd;classTree{private:intages;public:Tree(inta){ages=a;}voidgrow......
  • 打卡 c语言趣味编程 求最小公倍数
    问题描述:求任意两个正整数的最小公倍数(LCM)。思路:输入两个正整数,假设为num1和num2。定义一个变量lcm并初始化为较大的那个数(即lcm=max(num1,num2))。进入一个循环,循环条件为lcm不能同时被num1和num2整除。在每次循环中,将lcm增加1。循环结束后,lcm的值就是最小......
  • [每天例题]蓝桥杯 C语言 次数差
    次数差题目  思路分析1.通过字符型数组接收字符串,通过整形数组确定字母出现的次数2.通过for—if寻找出现次数最多与最少的字母,注意,这里有个坑,出现次数最少的字母至少出现一次代码#include<stdio.h>intmain(){ chars[1000]; intnum[26]={0}; intmax=-1,min=10......
  • 总结:C语言条件编译
    条件编译指令选择哪些代码被编译,哪些代码不被编译。可以根据表达式的值或某个特定宏是否被定义来确定编译条件。#空指令#include包含一个源代码文件#define定义宏#undef取消已定义的宏#error停止编译并显示错误信息#if,如果给定条件为真,则编......
  • 编程打卡:C语言程序设计
    classmiband(Peripheral):_send_rnd_cmd=struct.pack('<2s',b'\x02\x00')_send_enc_key=struct.pack('<2s',b'\x03\x00')def__init__(self,mac_address,key=None,timeout=0.5,debug=False):......
  • 打卡 c语言趣味编程 爱因斯坦的数学问题
    问题描述:爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在1~N内,有多少个数能满足?思路:使用一个for循环来遍历从1到N的所有数,对于每......