C语言程序相关练习题

选择结构

  1. 输入一行字符,分别统计出其中中英文字母、空格、数字和其他字符的个数:
#include <stdio.h>
int main () {
    char c;
    int letter = 0,space = 0,num = 0,other = 0;
    while ((c = getchar()) != '\n')
    {
        if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
        {
            letter++;
            /* code */
        }else if (c == ' ')
        {
            space++;
            /* code */
        }else if (c >= '0' && c <= '9')
        {
            num++;
            /* code */
        }else {
            other++;
        }
    }
    printf("字母:%d,数字:%d,空格:%d,其他:%d",letter,num,space,other);
    return 0;
}
  1. 任意输入 3 个整数,编程实现对这 3 个整数由小到大进行排序。
#include <stdio.h>  
   
int main()  
{  
    int a,b,c,t;  
    printf("请输入三个数:");  
    scanf("%d%d%d",&a,&b,&c);  
    if(a > b)  
    {  
        t = a;  
        a = b;  
        b = t;  
    }  
    if(a > c)  
    {  
        t = a;  
        a = c;  
        c = t;  
    }  
    if(b > c)  
    {  
        t = b;  
        b = c;  
        c = t;  
    }  
    printf("从小到大的顺序是:%d  %d  %d\n",a,b,c);  
    return 0;  
}

3.输入三个整数a,b,c,输出最大的数

#include <stdio.h>  
   
int main()  
{  
    int a,b,c,max;  
    printf("请输入三个数:");  
    scanf("%d%d%d",&a,&b,&c);  
    max = a;
    if (b > max)
    {
        max = b;
    }
    if (c > max)
    {
        max = c;
    }
    printf("%d",max);  
    return 0;  
}

循环结构

  1. 输入两个正整数m、n,求最大公约数和最小公倍数
#include <stdio.h>
int main () {
    int i,m,n;
    int t;
    printf("输入m:");
    scanf("%d",&m);
    printf("输入n:");
    scanf("%d",&n);
    if (m < n)  //把大数给m,小数给n
    {
        t = m;
        m = n;
        n = t;
    }
    for ( i = n; i > 0 ; i--)   //不超过n,从n开始往下找
    {
        if (m % i == 0 && n % i == 0)
        {
            printf("最大公约数为:%d\n",i);             //公约数:可以同时整除m n的最大值
            printf("最小公倍数为:%d",(m * n) / i);     //公倍数:(两数乘积)/公约数
            break;
        }
    }
    return 0;
}
  1. 求S = a+aa+aaa+…+aaaaa的值,其中a是一个数字,n是a的位数,例如:n=3——a+aa+aaa,n由键盘输入:
#include <stdio.h>
int main () {
    int a = 2,n,i;
    printf("输入n:");
    scanf("%d",&n);
    int sum = 0,num = a;    //sum累计num的和,num记录每一次a增加一个单位的值
    for ( i = 0; i < n; i++)
    {
        sum += num;		//总和
        num = num*10+a;    //num每次自乘10再加上个位数a
    }
    printf("%d",sum);
    
    return 0;
}
  1. 20以内的阶乘(1!+2!+3!+····+20!)的和,阶乘(5! = 1x2x3x4x5),其他题目:求n的阶乘,n由键盘输入(解法类似):
#include <stdio.h>
int main () {
    int i;
    long long sum = 1,end = 0;  //int、long会溢出,存不了
    for ( i = 1; i <= 20; i++)
    {
        sum *= i;   //计算单个的阶乘
        end += sum; //计算总和
        /* code */
    }
    printf("%lld",end);	//2561327494111820313
    return 0;
}
  1. 求(1+2+3+···+100)+(1平方+2的平方+····+50的平方)+(1/1+1/2+1/3+···+1/10)的值:
#include <stdio.h>
int main () {
    int i;
    int sum1 = 0, sum2 = 0;
    float sum3 = 0;
    for ( i = 1; i <= 100; i++)
    {
        sum1 += i;                  //1-100求和
        if (i <= 50)
        {
            sum2 += i * i;          //1-50求平方
            /* code */
        }
        if (i <= 10)
        {
            sum3 += 1.0 / i;        //1-10求 1/i 的和
            /* code */
        }
        
        
        /* code */
    }
    
    printf("%f",sum1 + sum2 + sum3);	//47977.929688
    return 0;
}
  1. 输出1000以内所有水仙花数:

153是一个水仙花数,因为153=1x1x1+5x5x5+3x3x3

#include <stdio.h>
int main () {
    int i, a, b, c;
    for ( i = 100; i < 1000; i++)
    {
        a = i / 100;            //求百位
        b = (i / 10) % 10;      //十位
        c = i % 10;             //个位
        if (a*a*a + b*b*b + c*c*c == i)
        {
            printf("%d\t",i);   //153     370     371     407
            /* code */
        }
        
        /* code */
    }
    
    return 0;
}
  1. 找出1000以内所有完数:

完数:一个数等于它的因子之和,例如:6的因子为:1,2,3,而1+2+3=6,所以6是完数

#include <stdio.h>
int main () {
    int i, j, sum;
    for ( i = 2; i <= 1000; i++)
    {
        sum = 0;                        //每次判断完重制sum
        for ( j = 1; j < i; j++)        //从1开始找 i 的因子
        {
            if (i % j == 0)             //如果能被整除,代表是因子,则叠加到sum中
            {
                sum += j;
            }
            
        }
        if (sum == i)                   //如果因子的和与这个数一致,它就是完数
        {
            printf("%d\t",i);           //6       28      496
        }
    }
    
    
    return 0;
}
  1. 求此分数序列(2/1,3/2,5/3,8/5···)前20项的和:

在这里插入图片描述

#include <stdio.h>
int main () {
    int i;
    float a = 2, b = 1, sum = 0, t;
    for ( i = 0; i < 20; i++)
    {
        sum += a / b;   //是分子 a / 分母 b 的累加和,而下一项的分子 a 是此项 a+b 的和,分母是此项的 分子a
        t = a;          //将分子 a 提取出来
        a = a + b;      //下一项分母为此项的 a+b
        b = t;          //赋值给分母
        /* code */
    }
    printf("%f",sum);   //32.660263
    return 0;
}
  1. 一个球从100m高度落下,落地后反弹回原高度的一半,再落下再反弹,第10次落地时,共经过了多少米?第10次反弹多高?
 #include <stdio.h>
int main () {
    int i;
    float sum = 0, a = 100;
    for ( i = 1; i <= 10; i++)
    {
        sum += a;       //总计1-10次落下的距离
        a = a / 2;      //弹起距离 = 上次落下距离 / 2
        if (i <= 9)
        {
            sum += a;   //总计1-9次弹起的距离,在弹起的距离等于下一次落下的距离,持续循环累加到下一次sum里
        }
        
    }
    printf("共经过:%f米\n",sum);   //共经过:299.609375米
    printf("第十次反弹%f米",a);     //第十次反弹0.097656米
    return 0;
}
---------写法2---------------
int main()
{
    int i;
    float sum = 100, drop, jump;
    for ( i = 0; i < 10; i++)
    {
        drop += sum;	//10次落下的总和
        sum = sum/2;	//每次落下后弹起距离减半
        jump += sum;	//10次弹起的总和(包括第10次落下后弹起)
    }
    printf("%f %f",drop+jump-sum,sum);	//10次落下的总和不包括第10次弹起,所以减去sum,sum为每次弹起/落下的距离
    
    return 0;
}
  1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子
#include <stdio.h>
int main () {
    int i, sum, rest;
    rest = 1;                      //第10天余剩的个数
    for ( i = 9; i > 0; i--)       //执行9次
    {
        sum = (rest + 1) * 2;      //推算前一天桃子的总数是(今日余剩个数 + 1) * 2 个
        rest = sum;                //前一天的余剩个数

        /* code */
    }
    printf("%d",sum);//1534
    return 0;
}

在这里插入图片描述

  1. 输出星星菱形

在这里插入图片描述

#include <stdio.h>
int main () {
    int i, j, k, xx = 1;    //初始星星 = 1
    for ( i = 0; i < 7; i++)
    {
        for ( j = 0; j < (7 - xx) / 2; j++)     //空格数量 = (最宽/长的星星数 - 当前星数)/ 2
        {
            printf(" ");
        }
        for ( k = 0; k < xx; k++)   //输出星星
        {
            printf("*");
        }
        printf("\n");   
        if (i < 3)                  //当x < 3时,前3行(i = 2)为每次星星数递增 2;第4行时(i = 3)每次递减 2
        {
            xx += 2;
        }else {
            xx -= 2;
        }
        
    }
    
    return 0;
}
  1. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main()  
{  
    char i,j,k;
    for ( i = 'x'; i <= 'z'; i++)
    {
        for ( j = 'x'; j <= 'z'; j++)
        {
            for ( k = 'x'; k <= 'z'; k++)
            {
                if (i != j && i != k && j != k)
                {
                    if (i != 'x'&& k != 'x' && k != 'z')
                    {
                        printf("a--%c,b--%c,c--%c",i,j,k); 	//a--z,b--x,c--y
                    }
                    
                }
                
            }
        }
    }
    return 0;
} 

  1. 求100-200之间全部素数(类似题:输入一个大于3的整数n,判断它是否为素数)

素数:只能被1和它本身整除的数

#include <stdio.h>
int main () {
    int i, j, mark;
    for ( i = 100; i <= 200; i++)
    {
        mark = 1;   //进入循环时全部打上标记
        for ( j = 2; j < i; j++)    //从2 - i-1的范围循环
        {
            if (i % j == 0)     //如果能被任意j整除的数就不是素数,标记变为0
            {
                mark = 0;
            }
        }
        if (mark == 1)      //经过循环后标记还是1的就是素数
        {
            printf("%d\t",i);
        }
        
    }
    
    return 0;
}

数组

  1. 用数组求Fibonacci数列前20项(每行显示5个):

Fibonacci(斐波那契):第1,2项的值为1,往后每一项的值的都是前两项相加的和,例如:1,1,2,3,5····

#include <stdio.h>  
int main()  
{  
    int a[20], i;
    a[0] = 1,a[1] = 1;  //第一二项为1
    for ( i = 2; i < 20; i++)   //从第3三项开始
    {
        a[i] = a[i-1] + a[i-2];
    }
    for ( i = 0; i < 20; i++)
    {
        if (i % 5 == 0)     //到第五个换行
        {
            printf("\n");
        }
        printf("%10d",a[i]);
    }
    return 0;  
}
  1. 输入10个数的数组,从小到大使用冒泡排序:
#include <stdio.h>  
   
int main()  
{  
    int a[10], i ,j ,t;
    for ( i = 0; i < 10; i++)
    {
        scanf("%d",&a[i]);
    }
    for ( i = 0; i < 9; i++)            //从第一个元素到最后一位走9趟
    {
        for ( j = 0; j < 9 - i; j++)    //比较9-j次,已比较的不需要再比较
        {
            if (a[j] > a[j+1])          //如果第j项大于第j+1项,则互换位置
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
            
        }
    }
    for ( i = 0; i < 10; i++)
    {
        printf("%d\t",a[i]);
    }
    
    
    return 0;  
}
  1. 输入一行字符,统计一共有多少个单词,单词间用空格隔开
#include <stdio.h>  
#include <string.h>
int main()  
{  
    char str[100];
    char c;
    int i, num = 0, word = 0;
    gets(str);
    for ( i = 0; (c = str[i]) != '\0'; i++)     //获取str的每一个字符
    {
        if (c == ' ')               //当字符是空格时word记为0
        {
            word = 0;
        }else if (word == 0)        //当字符不是空格并且前一个字符是空格时表示新单词出现,word标记1,num累加
        {
            word = 1;
            num++;
        }
    }
    printf("共:%d个单词",num);
------------------一行秒杀写法---------------
    char str[100];
    char c;
    gets(str);
    int num = 0;
    for (int i = 0; (c = str[i]) != '\0'; i++)
    {   
        if (str[i] == ' ' && str[i-1] != ' ') num++;
		//若本字符是空格且前一个字符不为空格则代表新单词
    }
    printf("%d", num);
    return 0;
}

  1. 利用筛选法求100以内的素数
#include <stdio.h>  
#include <string.h>
int main()  
{  
    int a[100];
    int i, j;
    for ( i = 0; i < 100; i++)      //写入数组
    {
        a[i] = i + 1;               //从1开始
    }
    a[0] = 0;       //1不是素数所以直接为0
    
    for ( i = 1; i < 100; i++)      //从2开始往后遍历
    {
        for ( j = i + 1; j < 100; j++)  //如果2往后的数能被2整除,则不是素数,设为0
        {
            if (a[i] != 0 && a[j] != 0){    //排除往后已经被设为0的数
                if (a[j] % a[i] == 0)
                {
                    a[j] = 0;
                }
            }
        }
    }
    for ( i = 0; i < 100; i++)
    {
        if (a[i] != 0)      //剩下不是0的数就是素数
        {
            printf("%d ",a[i]);
        }
    }
    return 0;
}
  1. 用选择法对10个整数排序
#include <stdio.h>
int main()  
{  
    int a[11];
    int i, j, t;
    for ( i = 0; i < 10; i++) 
    {
        scanf("%d",&a[i]); 
    }
    
    for ( i = 0; i < 9; i++)    //从第1项到第9项遍历
    {
        for ( j = i + 1; j < 10; j++)       //从第2项到第10项遍历
        {
            if (a[i] > a[j]){       //如果i大于j(i+1)的值则互换位置,然后用现在的i(原j的值)与下一个j(i+1的再下一项)对比
                t = a[i];           //用第一项与余剩全部项比较,找到最小的值放在数组第一位,再继续第二项比较
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    for ( i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

在这里插入图片描述

  1. 输入一个数,按照排序规律将他插入到一个已排好序的数组中:
#include <stdio.h>
int main()  
{  
    int arr[11]={1,4,6,9,13,16,19,28,40,100};
    int i, j, a;
    scanf("%d",&a);
    if (a > arr[9])     //如果a大于数组的最大值就直接插到尾部
    {
        arr[10] = a;
    }else {
        for ( i = 0; i < 10; i++)    
        {
            if (arr[i] > a){        //遍历数组找到第一项大于a的值,从那一项到数组最后一项往后挪一位,再把a插入到那一项的位置中并退出循环
                for ( j = 9; j >= i; j--)     
                {
                    arr[j + 1] = arr[j];
                }
                arr[i] = a;
                break;			//插入完一定要结束循环!!
            }
        }
    }
    
    for ( i = 0; i < 11; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
  1. 将一个数组中的值按逆序重新存放,例如原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。(没说不能用新数组吧):
#include <stdio.h>
int main()
{
    int i, arr[9] = {5,9,6,2,4,61,71,6,81};
    int newArr[9];	//新数组
    int k = 8;		//数组长度
    for ( i = 0; i < 9; i++)
    {
        newArr[i] = arr[k];		//把旧数组最后一项[k]赋值给新数组第一项[i]
        k--;	//k随i增加减少
    }
    for ( i = 0; i < 9; i++)
    {
        printf("%d ",newArr[i]);
    }
    return 0;
    /*-----------正常同一个数组翻转--------------*/
    int i, arr[9] = {15,61,71,6,81,45,138,44,8};
    int t, arrlen = 8;		
    int a = arrlen % 2 == 0 ? arrlen/2 : arrlen/2+1;	//如果数组长度为单数则多执行一次
    for ( i = 0; i < a; i++)	//只执行数组长度的一半次数
    {
        t = arr[i];
        arr[i] = arr[arrlen-i];
        arr[arrlen-i] = t;		//与数组对应位置的元素交换
    }

    for ( i = 0; i < 9; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

    /*考试建议用这个*/ /*考试建议用这个*/ /*考试建议用这个*/
#include <stdio.h>
void exChange(int *x,int n) {	//n为数组长度
    int *i, *j, *p, t, m = (n-1)/2;
    i = x, j = x+n-1, p = x+m;      //i指向数组第一个值,j指向数组最后一个值,p指向数组中间的值(向下取整)
    for ( ; i <= p; i++,j--)        //交换 i 和 j 的值,同时向中间p ++和--
    {
        t = *i;
        *i = *j;
        *j = t;
    }
}
int main()
{
    int a[10] = {15,61,71,6,81,45,138,44,8,99};
    exChange(a,10);
    for (int i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

  1. 杨辉三角
#include <stdio.h>
int main()  
{  
    int len;
    scanf("%d",&len);
    int i, j;
    int arr[len][len];	//建立一个等宽二维数组
    for ( i = 0; i < len; i++)
    {
        arr[i][0] = 1;	//每一行的第一项和最后一项都为1
        arr[i][i] = 1;
        for ( j = 1; j < i; j++)	//从第二项开始循环
        {
            arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
            //第J项等于上一行的J-1和J项的和
        }
    }
    
    for ( i = 0; i < len; i++)
    {
        for ( j = 0; j < len-i-1; j++)	//等腰三角形,直角可去
        {
            printf("  ");
            /* code */
        }
        
        for ( j = 0; j <= i; j++)	//输出每一项的值
        {
            printf("%4d",arr[i][j]);
            
        }
        printf("\n");
    }
    return 0;
}

在这里插入图片描述

函数

  1. 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,整数在键盘输入:
#include <stdio.h>
int big(int n1,int n2) {
    int i, t;
    if (n1 < n2)
    {
        t = n2;
        n2 = n1;
        n1 = t;
    }
    
    for ( i = n2; i > 0; i--)
    {
        if (n1 % i == 0 && n2 % i == 0)
        {
            return i;
        }
    }
} 
int small(int n1,int n2,int n3) {
    return (n1 * n2) / n3;
}

int main()  
{  
    int n1,n2;
    scanf("%d%d",&n1,&n2);
    int num = big(n1,n2);
    printf("最大公约数为:%d\n",num);
    printf("最小公倍数为:%d",small(n1,n2,num));
    return 0;
}
  1. 写一个判断素数的函数,输入一个素数,输出是否素数的信息:
#include <stdio.h>

int prime(int n) {
    int i, j;
    for ( i = 2; i < n; i++)
    {
        if (n % i == 0)
        {
            printf("不是素数");
            return 0;
        }
    }
    printf("%d是素数",n);
}

int main()  
{  
    int n;
    scanf("%d",&n);
    prime(n);
    return 0;
}
  1. 写一个函数,翻转输入的字符串:
#include <stdio.h>
#include <string.h>
void reveStr(char str[]) {
    int i, len = strlen(str), n = len - 1;
    char newStr[len];
    for ( i = 0; i <= len; i++)		//i <= len因为要把'\0'也拿过来
    {
        newStr[i] = str[i + n];		//最后一项给新字符串第一项赋值,依次到倒数第二项···
        n -= 2;
    }
    puts(newStr);
    -------------与数组翻转相同--------------------
    int i, len, a, t;
    len = strlen(str)-1;
    a = len%2==0 ? len/2 : len/2+1;
    for ( i = 0; i < a; i++)
    {
        t = str[i]; str[i] = str[len-i]; str[len-i] = t;
    }
    puts(str);
}

int main()  
{  
    char str[100];
    gets(str);
    reveStr(str);
    return 0;
}
  1. 一个连接两个字符串的函数:
#include <stdio.h>
#include <string.h>
void strCat(char str[],char str2[]) {
    int len = strlen(str);
    int len2 = strlen(str2);
    char newStr[len + len2];
    int i;
    for ( i = 0; i < len+len2; i++)
    {
        if (i < len)
        {
            newStr[i] = str[i];
        }else if(i >= len){
            newStr[i] = str2[i-len];
        }
    }
    newStr[i] = '\0';
    puts(newStr);
}
int main()  
{  
    char str[100];
    gets(str);
    char str2[100];
    gets(str2);
    strCat(str,str2);
    return 0;
} 
//------------------老赖做法
#include <stdio.h>
#include <string.h>
void connect(char str1[],char str2[]) {
    strcat(str1,str2);
    puts(str1);
}

int main()  
{  
    char str1[100];
    char str2[100];
    gets(str1);
    gets(str2);
    connect(str1,str2);
    return 0;
}
  1. 写一个函数,输入一个4位数字,要求每两个数字中间有一个空格,例如输入1234,输出1 2 3 4。
#include <stdio.h>
#include <string.h>
void space(char str[]) 
{
	int i;
	for(i=strlen(str);i>0;i--)      //从数组最后一个元素开始,到第二个元素结束,也就是'\0'- 输入的第一个数
	{
		str[2*i]=str[i];            //因为加每个数中加空格 = 数组长度*2是最后一项,把数组最后一项'\0'放在数组长度*2 位置上
		str[2*i-1]=' ';             //并在前一个位置加空格,继续循环倒数第二项,然后加空格····
	}
	printf("\nOutput:\n%s",str);
}

int main()  
{  
    char str[100];
    gets(str);
    space(str);
    return 0;
}
//-----------------------老赖做法
#include <stdio.h>
#include <string.h>
#define MaxSize 100
void space(char str[]){
    int i;
    for ( i = 0; i < strlen(str); i++)
    {
        printf("%c ",str[i]);
    }
    
}
int main()
{
    char str[MaxSize];
    gets(str);
    space(str);
    return 0;
}
  1. 写一个函数,传入一个字符串,统计其中字母、数字、空格和其他字符的个数:
#include <stdio.h>
#include <string.h>
void Statistics(char str[]) {
    int len = strlen(str);
    int i, letter = 0, num = 0, space = 0, other = 0;
    for ( i = 0; i < len; i++)
    {
        if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
        {
            letter++;
        }else if (str[i] >= '0' && str[i] <= '9')
        {
            num++;
        }else if (str[i] == ' ')
        {
            space++;
        }else {
            other++;
        }
    }
    printf("字母:%d,数字:%d,空格:%d,其他:%d",letter,num,space,other);
    
}

int main()  
{  
    char str[100];
    gets(str);
    Statistics(str);
    return 0;
}
  1. 写一个函数,用冒泡排序对输入的10个字符排序:
#include <stdio.h>
int maopao(int num[]) {
    int i, j, t = 0;
    for ( i = 0; i < 9; i++)
    {
        for ( j = 0; j < 9 - i; j++)
        {   
            if (num[j] > num[j+1])
            {
                t = num[j];
                num[j] = num[j+1];
                num[j+1] = t;
            }
        }
    }
    for ( i = 0; i < 10; i++)
    {
        printf("%d ",num[i]);
    }
}

int main()  
{  
    int num[100];
    int i;
    for ( i = 0; i < 10; i++)
    {
        scanf("%d",&num[i]);
    }
    
    maopao(num);
    return 0;
}
  1. 输入一个整数n,求斐波那契数列的第n项:

斐波那契数列:每一项等于前二项的和,例如1,1,2,3,5,8,13·····

#include <stdio.h>
long Fibonacci(int n) {
    long s;
    if (n == 1 || n == 2)
    {
        return 1;
    }else {
        s = Fibonacci(n-1) + Fibonacci(n-2);
    }
    return s;
}
int main()  
{  
    int n;
    scanf("%d",&n);
    if (n < 0)
    {
        printf("不能为0");
    }else {
        printf("第%d项的值为:%ld",n,Fibonacci(n));
    }
    return 0;
} 
  1. 输入10个整数,将最小的数与第一个数对换,最大的数与最后一个对换
#include <stdio.h>
void change(int a[10]) {
    int max = a[0],min = a[0],t,i,imax = 0,imin = 0;
    for ( i = 0; i < 10; i++)
    {
        if (a[i] > max)
        {
            max = a[i];
            imax = i;
        }
        if (a[i] < min)
        {
            min = a[i];
            imin = i;
        }
    }
    t = a[0];
    a[0] = a[imin];
    a[imin] = t;
    t = a[9];
    a[9] = a[imax];
    a[imax] = t;
}
int main()  
{  
    int a[10],i;
    for ( i = 0; i < 10; i++)
    {
        scanf("%d",&a[i]);
    }
    change(a);
    for ( i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
} 

指针

  1. 输入三个整数,要求从大到小排序输出,用函数实现:
#include <stdio.h>
void swap(int *pt,int *pt1) {
    int t;
    t = *pt;
    *pt = *pt1;
    *pt1 = t;
}
void Big(int *q,int *q1,int *q2) {
    if (*q < *q1)
    {
        swap(q,q1);
    } 
    if (*q < *q2)
    {
        swap(q,q2);
    }
    if (*q1 < *q2)
    {
        swap(q1,q2);
    }
}
int main()  
{  
    int a, b, c, *p, *p1, *p2;
    scanf("%d%d%d",&a,&b,&c);
    p = &a;
    p1 = &b;
    p2 = &c;
    Big(p,p1,p2);
    printf("%d %d %d",a,b,c);
    return 0;
}
  1. 输入三个字符串,从小到大排序:
#include <stdio.h>
#include <string.h>
void change(char *q,char *q1) {
    char str[20];
    strcpy(str,q);
    strcpy(q,q1);
    strcpy(q1,str);
}
void Big(char *pt,char *pt1,char *pt2) {
    if (strcmp(pt,pt1) > 0)
    {
        change(pt,pt1);
    }
    if (strcmp(pt,pt2) > 0)
    {
        change(pt,pt2);
    }
    if (strcmp(pt1,pt2) > 0)
    {
        change(pt1,pt2);
    }
}
int main()  
{  
    char a[100], b[100], c[100];
    gets(a);
    gets(b);
    gets(c);
    char *p ,*p1 ,*p2;
    p = a;p1 = b;p2 = c;
    Big(p,p1,p2);
    printf("%s %s %s",a,b,c);
    return 0;
} 
  1. 输入10个整数,将最小的数与第一个数对换,最大的数与最后一个对换:
#include <stdio.h>
#include <string.h>
void change(int a[10]) {
    int i ,t;
    int *p,*max,*min;
    p = max = min = a;
    for ( i = 0; i < 10; i++,p++)
    {
        if (*p > *max)
        {
            max = p;
        }  
        if (*p < *min)
        {
            min = p;
        }
    }
    t = a[0];
    a[0] = *min;
    *min = t;
    t = a[9];
    a[9] = *max;
    *max = a[9];
    
}
int prin(int a[10]) {
    int i;
    for ( i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }  
}
int main()  
{  
    int i, a[10];
    for ( i = 0; i < 10; i++)
    {
        scanf("%d",&a[i]);
    }  
    change(a); 
    prin(a);
    return 0;
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值