#include<stdio.h>
int i;
int main()
{i--;if (i > sizeof(i)){printf(">");}else{printf("<");}return 0;
}
(1)这道题目,定义i作为全局变量,不初始化的时候,默认是0;
(2)i--之后i的值是-1,sizeof的单位是字节,-1是整数,占4个字节,显然-1<4,貌似结果是小于
(3)输出的结果是大于,这是因为i是int类型,sizeof是size_t类型,是无符号的,两者进行比较大
小的时候,-1也要转化成为无符号的数进行比较,-1的二进制序列是32个1,看作无符号的数,将
会变得无穷大,所以也就肯定大于4了,打印的也就是大于了。
2.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
(1)这个是先比较大小,把小的放到arr3这个数组里面,当某一个数组遍历完成以后,把另外一个没有遍历完的数组追加到arr3里面,最后输出打印arr3;
#include <stdio.h>
int main()
{int n=0;int m=0;scanf("%d",&n);scanf("%d",&m);int arr1[n];int arr2[m];int i=0;for(i=0;i<n;i++){scanf("%d",&arr1[i]);}int j=0;for(j=0;j<m;j++){scanf("%d",&arr2[j]);}i=0;j=0;int k=0;int arr3[n+m];while((i<n)&&(j<m)){if(arr1[i]<arr2[j]){arr3[k]=arr1[i];i++;k++;}else{arr3[k]=arr2[j];j++;k++;}}if(i==n){while(j<m){arr3[k]=arr2[j];j++;k++;}}else{while(i<n){arr3[k]=arr1[i];i++;k++;}}for(i=0;i<n+m;i++){printf("%d ",arr3[i]);}return 0;
}
(2)我们也可以不用定义新的数组arr3,每次比较之后就直接输出较小的数,
最后再使用while循环把数字多的数组里面剩下的数字直接打印;
因为这两个数组都是升序排列的;
#include <stdio.h>
int main()
{int n=0;int m=0;scanf("%d",&n);scanf("%d",&m);int arr1[n];int arr2[m];int i=0;for(i=0;i<n;i++){scanf("%d",&arr1[i]);}int j=0;for(j=0;j<m;j++){scanf("%d",&arr2[j]);}i=0;j=0;int arr3[n+m];while((i<n)&&(j<m)){if(arr1[i]<arr2[j]){printf("%d ",arr1[i]);i++;}else{printf("%d ",arr2[j]);j++;}}if(i==n){while(j<m){printf("%d ",arr2[j++]);}}else{while(i<n){printf("%d ",arr1[i++]);}}return 0;
}