【代码编程】C语言程序设计难点解析

1、设整型变量m、n、a、b、c、d初始值均为1,执行(m=a>b)&&(n=c<d)后,m和n的值是____

答案:0、 1

解析:a=1,b=1,a>b 为假,m=0

(表达式1)&&(表达式2),当表达式1值为假时,整个表达式的值一定为假,所以就不会再计算表达式2的值
所以 n=c<d不会被计算,所以n=1

 

2、int k = 2, m = 4, n = 6;
    int *p1 = &k, *p2 = &m, *p3 = &n;
    *p1 = *p3;*p3 = *p1;
    if (p1 == p3) p1 = p2;
    printf("p1=%d p2=%d p3=%d\n",*p1,*p2,*p3);

正确输出结果:6,4,6

错误答案:4,4,6

解析:刚开始已经分配好*p1和*p3的内存地址,当执行 *p1 = *p3;*p3 = *p1;并没有改变p1和p3的内存地址,知识改变了p1和p3所指变量k,m所存储单元中的值,p1和p3中存的依旧是原来刚分配的地址,所以p1!=p3

 

3、从键盘输入4个学生语文和数学课程的成绩,求每个学生两门课的总分,并按总分从高到低的顺序输出每个学生两门课程的成绩和总分。

算法分析:

(1)定义数组int score[4][2]存储4个学生两门课程的成绩,数组int sum[4]存储4个学生的总分。

(2)用for循环从键盘按行输入每个学生语文和数学课的成绩。

(3)用for循环计算出每个学生的总分并存入数组sum中。

(4)用简单选择排序按照总分从高到低的顺序进行排序,交换时应注意除了总分交换除外,对应学生的两门课程成绩也需要进行交换。

(5)按要求输出。

代码实现如下:

#include <iostream>
#include <stdio.h>
#include<stdlib.h>
void main()
{
    int i, j, k, m, score[4][2];
    int t, sum[4];
    printf("Input 4student's scores(Chinses and Math):\n");
    for (i = 0;i < 4;i++)
        scanf_s("%d,%d", &score[i][0], &score[i][1]);
    //求总成绩
    for (i = 0;i < 4;i++)
        sum[i] = score[i][0] + score[i][1];
    //选择排序
    for (i = 0;i < 3;i++)
    {
        k = i;
        for (j = i + 1;j < 4;j++)
            if (sum[j] > sum[k])
                k = j;
        if (k != i)
        {
            //交换总成绩
            t = sum[k];
            sum[k] = sum[i];
            sum[i] = t;
            //交换各科成绩
            for (j = 0;j < 2;j++)
            {
                m = score[k][j];
                score[k][j] = score[i][j];
                score[i][j] = m;

            }
        }
    }
    printf("the sorted scores:\n");
    printf("chinese math sum:\n");
    for (i = 0;i < 4;i++)
    {
        printf("%6d%6d%6d\n", score[i][0], score[i][1], sum[i]);
    }
    system("pause");
}

 

4、编写一个揭秘藏尾诗的程序,输入一首藏尾诗(假设只有4句),输出其藏尾诗的真实含义。例如输入:

悠悠田园风,然而心难平

兰花轻涌浪,兰香愈幽静

输出:风平浪静

代码如下:

    char p[16];
    char s[4][20];
    int i, len;
    for (i = 0;i < 4;i++)
    {
        scanf("%s", s[i]);
    }
        len = strlen(s[0]);//如果输入:悠悠田园风,然而心难平,兰花轻涌浪,兰香愈幽静,则len=10
    printf("%d", len);
    for (i = 0;i < 4;i++)
    {
        p[i * 2] = s[i][len - 2];
        p[i * 2 + 1] = s[i][len - 1];
        //注意汉字占两个字符的位置   1B=8bit
    }
    p[i * 2] = '\0';
    puts("诗中藏意为:");
    puts(p);

----------持续更新-----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值