该题选择 A
解析:略
该题选择 D
解析:A选项,自增运算符显然不能用于常量3。B选项,C语言中%运算只能用于整数,例如1.5%0.3是不符合规定的。C选项,在C语言中,八进制的表示方法是0+八进制,而C选项中是019,出现9,显然不符合八进制规定。D选项,优先运算表达式(7-2==5),表达式成立所以结果是1,再将1赋值给x4,显然是一个合理的赋值语句。
解析:在C语言中,通过e或E来表示科学计数法,其规则是:数字+e(E)+指数。如1.98e10就是1.98x10^10,0.98e-5为0.98x10^(-5)。需要注意指数必须为整数。对于B,C选项,指数都为浮点数,不符合规定。A显然是个很正常普通的常量。
该题选择 D
解析:此题偏难,在该表达式中,&&的优先级较||高,所以--x与--y紧密结合,把--x&&--y看作一个整体,于是该表达式等价为(--x&&--y)||(--z)。因为--x为0,所以出现&&的短路,--y不被执行,(--x&&--y)的结果为0,于是表达式等价于0||(--z)。再执行--z,最后,答案为0,1,0。
解析:如果是前者这种“ ”的赋值方式,编译器会在其后默认加上'\0',s1实际上应该是"xyz\0",而后者这种每个元素一个个赋值的,编译器不会默认加上'\0',s2实际上就是“xyz”,而无\0,所以,s1的长度大于s2.
该题选择 D
解析:该题考查函数指针的定义以及使用。A选项,直接调用函数,当然没有问题。B选项,标准的函数指针使用。C选项,因为f = test,相当于test(3.2),没有问题。D选项,*f应该用括号括起来,*的优先级比较低。关于函数指针的知识,在下方补充知识内。
该题选择 D
解析:该题考查逗号运算符的知识。逗号运算符中,最后一个表达式作为整个表达式的值。
该题选择 D
解析:该题考查指针与二维数组的关系,*(*(a+i)+j);代表第i行第j个元素,我们来分析这个表达式,a表示二维数组的第一行,a+1表示第二行,*(a+1)表示第二行首地址,*(a+1)+1表示第二行第二个元素的地址,最后解引用得到该值。
该题选择 D
解析:该题考查指针的运算。从题目中我们知道,显然存在关系q=p+3,因此n=-3。
该题选择 B
解析:该题考查指针和一维数组的关系。p指向一维数组首地址,*++p先进行++操作,p指向第二个元素,然后解引用得到元素值为1,再通过s[1]索引得到F。
1.C语言中,表示二进制需要在二进制数前加上0b或0B,八进制需要在八进制数前加上0,十六进制需要在十六进制数前加上0x或0X。
2.科学计数法,ae(E)b的形式,计算方法为a x 10^(b),b必须为整数。
3.优先级记忆C语言运算符优先级_c语言运算符的优先级顺序-CSDN博客
4.指针函数和函数指针_指针函数 函数指针-CSDN博客
5.C语言中的逗号运算符_c语言逗号运算符-CSDN博客
6.二维数组与指针(详解)_二维数组指针-CSDN博客
该题选择: B
解析:由循环条件j<1而j初始化的值为0,且每次循环后j++可得,循环执行一次后,以字符形式输出’b’-1,由于字符存储的方式是ASCII码,可知’b’-1为98-1=97,即’a’的ASCII码,所以以%c形式的输出,为一个字符’a’
该题选择: B
解析:首先这是一个匿名结构体,同时构造出了结构体数组s,s里存放了两个结构体.由于->优先级比++大,故++p->m可以转化为++(p->m),p表示数组首地址,所以p->m就是1,故答案为2.对于后式,先执行++p,即数组下标为一的元素,所以(++p)->n就是4
该题选择: B
解析:f1第一个参数为int型的变量,第二个参数为指向long型的指针变量.v1为int型,&v2为指向long型的指针变量
该题选择: D
解析:A选项,数组有5个元素,元素类型为double型故正确.B选项,数组元素类型为char型,三个元素都是十六进制(0-9,a-f)的字符变量,故B正确.C选项,前五个元素为字符1,字符2,字符3,字符4,字符5,后五个元素均为’\0’,故正确.D选项,仅能存放8个int型数据,但存入了9个整形,故错误
该题选择: B
解析:本题牵扯到两个知识点,一个是位运算符,一个是优先级.由优先级可知>>大于&,故本题转化为3&(4>>1).其中>>表示将左边的数先转化为2进制,然后整体向右偏移右边个数位,正数用0补充首位,负数用1补充首位.4的二进制0000 0000 0000 0000 0000 0000 0000 0100,右移1位后就是0000 0000 0000 0000 0000 0000 0000 0010,即为2.同时对于右移运算符的性质可知,右移1位,整除一次2,也可知4>>1==2.所以转化为3&2,其中&表示,先将左右的数转化为二进制,然后每一位对齐,如果都为1则为1,其余情况都为0.
3的二进制为11
2的二进制为10
所以结果为10,转化成10进制后就是2
该题选择: D
解析:fread()的参数为void*_Buffer, size_t _ElementSize,size_t _ElementCount, FILE* _Stream.即存储读入元素的指针变量,每个元素的大小,元素个数,文件指针,共四个变量.
feek()的参数为FILE *_stream, long _Offset, int _Origin,即文件指针,偏移量,起始位置,共三个参数
该题选择: C
解析:p指向数组中下标为1的元素,由于*的优先级大于+,所以本题转化为(*p)+3,*p就是B,B+3以%c形式输出就是E
该题选择: A
解析:strcpy表示的含义是将第二个参数赋值给第一个参数,故A正确,由于不能对数组直接赋值,故BD错误
该题选择: C
解析:本题主要考察转义字符
\\表示'\' \123表示123代表的八进制数字符 \t表示制表符,故字符串中字符为’\’,’2’,’0’,’1’,’7’,’\123’,’A’,’B’,’C’,’ ’,’\0’,共11个
该题选择: B
解析:g是一个函数指针并非函数名,指向的函数有一个参数,参数类型为int,函数返回值为int,故ACD错误
1.让你不再害怕指针——C指针详解(经典,非常详细)-CSDN博客
2.位运算全面总结,关于位运算看这篇就够了-CSDN博客
3.C语言:行指针和列指针_行指针有哪些-CSDN博客
4.字符串函数讲解(C语言笔记,建议收藏!!!)_strlwr函数的用法-CSDN博客
阅读程序题
该题答案为: 10,2
解析:结构体st包含两个内容,int型的x和y,data是含有2个结构体类型元素的数组,结构体data[0]的x y分别为1 10,data[1]x y 分别为2 20。结构体指针指向data数组第一个,p->y则为data[0]的y为10,++p后指针指向下一个元素data[1] 的x为2(注意第一个printf里面有个逗号)
该题答案为: 17 8
解析:s+=i++可以看成s+=i,i++;
第一次循环s=3+1=4,i++=2(s=4不是7的倍数,if语句不成立执行else)i++=3
第二次循环s=4+3=7,i++=4(s=7是7的倍数,if语句成立执行if语句)continue直接跳过后面的重新执行do循环
第三次循环s=7+4=11,i++=5(s=11不是7的倍数,if语句不成立执行else)i++=6
第四次循环s=11+6=17,i++=7(s=17不是7的倍数,if语句不成立执行else)i++=8
此时不满足s<15循环条件,循环中断,所以s=17 i=8
该题答案为: 16 8
解析:M替换成N=1,N替换成5,f(x)替换成x*N+1即x*5+1(因为没有括号,所以是先*后+)
代入3,3*5+1=16
代入2+1,2+1*5+1=2+5+1=8
Define是简单的替换,如果想实现乘的话应该加上括号,不加就是直接替换
该题答案为: Result=6
解析:简单的一层递归,函数为如果输入的x为0或者1则输出3,可以理解为f(0)=f(1)=3,再看到main函数,带入f(3),不满足if,执行下面的y=3*3-f(1)已知 f(1)=3,所以y=3*3-3=6
该题答案为: 9999,Wonderful
解析:函数大概是想改变结构体内成员的值,但是不是指针的形式输入函数中,而且新开了一个结构体类型的t,和man函数里的t没有任何关系
类比 通过函数改变变量的值的时候需要用指针指向变量
1.c语言基础语法六——结构体(完结)-CSDN博客
2.C语言——宏定义_printf 宏定义-CSDN博客
3.【C语言】函数递归的简单理解 &画图理解递归过程_[初阶篇 _学习专用]_c语言递归-CSDN博客
答案:5,11
解析:调用fun函数第一次,传入参数j和m,在fun函数内部i初始值为2,然后i+=m+1将i更新为i+m+1,接着m被更新为i+x+y。最后返回m的值,赋给k。打印第一次调用fun后的结果,然后再次调用fun函数,传入相同的参数。重复以上步骤得出结果。
结果:17531
解析:该程序将整数数组a中的元素写入到名为"test.txt"的文件中,然后从该文件中读取一个整数,并将其打印到标准输出.整数数组中的数字依次写入文件,然后尝试从文件中读取一个整数。但因为没有使用分隔符,所以文件中的整数字符序列被读取为一个整数,最后将该整数打印到控制台。在此行代码中,声明了一个文件指针fp,一个整数数组a,一个整数i用于循环迭代,以及一个整数n用于存储从文件中读取的值。
答案:210
解析:fun函数接受一个字符数组s作为参数在函数内部,使用 while 循环遍历字符数组s。只有当前字符是大写字母('A'到'Z'之间)时,才执行循环体内的操作。在循环体内,将已经存在的n乘以10,然后加上当前大写字母与'A'的差值,从而将字母转换为相应的数字。随后,移动字符数组指针s到下一个字符循环直到遇到不是大写字母的字符为止。返回最终计算得到的整数。fun 函数首先将 'C', 'B', 'A' 转换为相应的数字,即2,1,0。由于'!'不是大写字母,循环停止.所以,fun(s)返回的结果是210
答案:66,55
解析:这段代码定义了一个结构体mynode,其中包含两个整型x和y。然后定义了一个函数f,该函数接受一个指向结构体的指针NODE*a作为参数,将该结构体的成员x设置为66,成员y设置为55。最后,在main函数中创建了一个结构体变量a,初始化a的成员x为77,成员y为88。接着调用函数 f,将结构体变量a的地址传递给f函数,然后打印修改后的a.x和a.y的值.在调用函数f后,结构体变量a的x被修改为66,y被修改为55。所以,输出的结果是66,55
答案:10 2012!
解析:这里使用了malloc函数,分配了20个字符大小的动态内存,并将其地址赋给指针变量s1,将指针s2指向与s1相同的内存地址,再使用strcpy函数将字符串"Hello2012!"复制到s1指向的内存中。strlen(s2):计算字符串s2的长度,这里实际上是计算从s2开始的字符串长度。由于s1和s2指向相同的内存,因此结果是"Hello2012!"的长度,即10。s1+5:输出字符串s1从第5个字符开始的部分,即"2012!"
1.C语言文件操作超详解(万字解读,细致入微)-CSDN博客
1.本人写的创建链表的博客,可以帮助大家理解链表的组成,同时巩固结构体知识
链表(C语言版)-CSDN博客
:
#include
int is_prime(int n)
{
if (n == 1) return 0;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0) return 0;
}
}
int main()
{
for (int i = 1; i <= 100; i++)
{
if (is_prime(i)) printf("%d ", i);
}
return 0;
}
解析:素数是只能整除1和自己的数.又由于如果有一个因数大于该数的平方根,必有一个因数小于该数的平方根,故在判断是否是质数时只需判断2到该数的平方根之间是否能被该数整除,若能整除,则不为素数,return0,若每次判断下来都不能整除,则说明是素数,return 1.在main函数中从1到100循环,若函数返回值为1则输出.
#include
void change(int n)
{
int i;
if(n==0)
return;
change(n/16); //先用递归判断可以被16除几次,来判断转换后的数字是几位
i=n%16; //当前位被16转化后的数字序号(1-16)
if(i<=9&&i>=0) //序号为1-9直接输出
printf("%d",i);
else //序号为10-16,转化A-F,输出char型
printf("%c",i-10+'A');
}
int main()
{
int n;
scanf("%d",&n);
change(n);
return 0;
}
#include
#include
int main() {
double x = 1.0;//分母不变,始终为1
double term = 1.0;//第n项
double result = 0;//e
int n = 1;
while (fabs(term) >= 1e-6) {
result += term;//累加第n项
term *= x / n;//得到第n+1项
n++;
}
printf("e的近似值为 %lf\n", result);
return 0;
}