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);
----------持续更新-----------