1.该代码输出为xiyoulinux
解释:
1.每两位16进制数字组成一个Ascil码,表示出一个字符。该计算机存储数据的模式为小端模式,数据的高位存放在高地址上。
2.((char*)&num+i)说明每次对相对与num首地址偏移量为i*1的地址进行间接访问读取。
等所有数据都被读取后,ch取到'\0',退出for循环。
2.方法1:给return 0;语句前加上这样一段代码
int *pb=&b;
*pb=5;
3. a[1][1]的值变为100
解释:
struct node大小为12,struct n大小为8,为node类型数组a的首地址加上2*8,便到了a[1][1]这个位置。
4.输出结果为:
hello world
8
11
12
11
解释:
1,字符数组传到函数中后,编译器将a当作指针处理,所以a所占字节数变成了8,但字符长度仍可通过指针正确地读取到,即为11.
2.在主函数中字符串的字节数即为它的长度加1,即12.
5.输出结果为
12
f(1,2)
解释:
1.##表示间接两侧的符号,所以f(1,2)运行结果为12。,#的作用是将操作对象变为字符串,即将其原样输出,得到输出结果12.
2.宏函数本应该是先分析内部函数再分析外部函数,但是在外部函数的实现中存在’#‘运算符,那么就先执行外部函数,在此例中,将f(1,2)转化为了字符串直接输出。
6.废话不多说,直接上代码。
#include <stdio.h>
#include <stdlib.h>
int cmp(int* p1,int* p2)
{
return *p1-*p2;
}
int main(void)
{
int dg[100]={1,2,3,1,4,5,645,75,75,87,5678,785,76,76,4};
int sum=0,i=0,p1,p2,p3,j,judge=0;
while(dg[i])
{
sum+=dg[i];
i++;
}//i is sum_count
qsort(dg,i,4,cmp);
if(sum%2==1)
{
printf("No");
return 0;
}
sum=sum/2;
for(p1=0;p1<i-2;p1++)
{
p2=p1;
p3=i-1;
while(p2<p3)
{
int sum1=0;
for(j=p2;j<=p3;j++)
sum1+=dg[j];
if(sum==sum1)
{
judge=1;
goto here;
}
else if(sum1<sum)
p2++;
else
p3--;
}
}here:
if(judge)
printf("Yes");
else
printf("No");
return 0;
}
7.
#include "stdio.h"
#include "string.h"
//字符串单词逆序并输出
void wordnixu(char *start,char *end);
char* setence(char *str);
int main()
{
char str[100];
printf("输入字符串:");
gets(str);
printf("%s\n",str);
char* p=setence(str);
int sign=0;
for(int i=0;i<strlen(str);i++)
{
if(*(p+i)!=' '||(*(p+i+1)!=' '&&sign==1))
{
sign=1;
printf("%c",*(p+i));
}
}
return 0;
}
void wordnixu(char *start,char *end)//一个单词字符逆序,不包括空格字符
{
char jiaohuan;
while(start<end)
{
jiaohuan=*start;
*start++=*end;
*end--=jiaohuan;
}
}
char* setence(char *str)//1、句子的单词先内部逆序/2、之后再把句子看做单词整体逆序即可得到逆序单词输出
{
char *start=str;//指向串内部单词首字符
char *p=str;//指向串的首地址,作为整体逆序的首地址
while(*str!='\0')
{
if(*str==' ')
{
wordnixu(start,str-1);//串内单词内部逆序
start=++str;//指向下一个单词的首地址,需要特别注意地址的操作++,与--
}
else
str++;
}
wordnixu(start,str-1);//把最后一个单词逆序逆序
wordnixu(p,str-1);//以整个串为单词逆序
return p;//返回首地址
}
8.func(s)应改为func(&s),给函数传递指针的地址,这样才能让指针重新指向其他的地方。
9.逆置单链表
void reverse(data*head)
{//传入的是指向头节点的指针
data*temp=NULL,*q=NULL;
temp=head->pnext;//temp指向第一个节点
head->pnext=NULL;
while(temp)
{
q=temp;
temp=temp->pnext;
q->pnext=head->pnext;
//循环第一次中head->pnext为NULL
//(表示逆置后的链表最后一个节点的下一个节点为空)
head->pnext=q;//head一直做p的头指针
}
}
10.输出为
ffffffff
ff
255
unsigned表明只能表示非负数,原本的负数首先转化为二进制补码形式,再将最高位(即符号位)变为0,这样,一个负数便在unsigned的加持下变成了非负数。