1. 关于c语言习题和解释
A. 第一个printf语句输出的是数组a的首地址,是16进制输出的。
10进制转16进制的方法是用十进制数除16后自下而上取值。
194转换成10进制数是404
int型占2个字节,则p+9表示地址后移9*2位。即404+18=422.这个值以16进制输出,就是1a6。
B. 指针P指向数组a的首地址,对应的值是2.
p++,++在后,则先赋值,再执行p=p+1。则*(p++)这个表达式的值是首元素的值。
**k是指向地址的指针,指向地址p,而P经过上一个运算后已经移向值4了。所以第二个结果是4。
C. getchar()函数是从终端缓冲区读一个字符。按照题目中的输入,终端缓冲区的字符为“a<cr>b<cr>cdef<cr)”
请注意回车也是字符。因为数组只能存入6个字符。则数组中的元素为“a\nb\ncd”,故打出来结果如此。
D. 这题我就不给你详细解释了,每一步值说出来扁幅会很长。只有一点要提醒你。关于自增(++)自减(--)你学得不是很好。++在前,先执行再赋值;++在后先赋值再执行。如int i=10,j=20,c,d;c=i++,d=++j;则c值为10,d值为21.
E. 此程序找出最小值,找到后,打印该值和他的下标。
2. C语言概念题
*p++应该是取指针指向的变量,然后对指针P++(地址)
*(p+1)是指针P+1,然后取指针指向的变量
*(++p)是指针P先++,然后去指针指向的变量,=*(p+1)
(*P)++取指针指向的变量(显示*p),最后对*p对其+1
其他几个,没见过
-i++等于-(i++),C语言是右结合
3. 简单的C语言概念题
虽然,数组和指针,数组名理解为一维指针,二维数组名理解为二维指针,但是很多情况下不是通用的,这就是(潜在的)规定,记住就好,用到的时候调试一下就行,平时理解了就行,也别太深究。如果有人非的得拿这个出题,那的确很无聊了。
而且如果是这种很有争议性的原则,有的还是ASCI标准不明确的部分,一般也是实际中很少用到的,即使是非用不可的地方,为了程序的安全性和可移植性也会用其他方案来避免这种奇异点。
下面就 你说的做了一些试验 注释部分为编译不通过的,相邻的为有比较性的。
////////////////// DEV C++ 下调试通过,
#include<iostream.h>
int main()
{
char* s1 = "string";
s1 = "other";
char s2[] = "string";
//s2 = "other";
char* s11[2] = {"string","string2"};
s11[0] = "other";
int a[] = {1,2,3,4};
char s12[2][20] = {"string","string2"};
//char s13[2][] = {"string","string2"};
//s12[0] = "other";
//s13[0] = {"other"};
system("pause");
return 0;
}
4. c语言题解释
#include <stdio.h>
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++; /*就是s[i]=1有四次,即c[s[i]]=c[1]有四次,即c[1]自增4次,c[2]自增三次,c[3]自增三次,c[4]自增两次*/
for(i=1;i<5;i++) printf("%d",c[i]); /* */
printf("\n"); getch();
}
5. C语言题目解释
联合体共享内存空间,
所以给s->i[0],s->i[1]赋值,就已经给long k,char c[4]赋值了。
一般通用计算机是little-endian低位对齐的
short占两个字节,
s->i[0]在内存中间为0011 1001 0000 0000 (0039)
s->i[1]在内存中间为0011 1000 0000 0000 (0038)
那么long 型的s->k 就应该为0011 1001(38) 0000 0000(00) 0011 1000(39) 0000 0000(00)
所以
s->k 以lx打印就应该00380039
s->c[0] 为0011 1001
即9(ASC2码的39就是字符9)
s->c[1] 为0000 0000
s->c[2] 为0011 1000
即8(ASC2码的38就是字符8)
s->c[3] 为0000 0000
-------------------------------------
SO,结果是:
380039
9
空
8
空
6. C语言基本概念题--在线等
我觉得不是“精髓”,是错误!
这导致了,运行的结果是不可预期的(不确定的)。
我在VC上运行的结果是19
#include <stdio.h>
main()
{
int *p,s=0;
char a[]="program";
for(p=(int *)a;*p;p++)
s++;
printf("%d",s);
return (0);
}
7. c语言概念问题
D
A. 任何编译器都要进行语法检查和语义检查。即使如HTML这种边解释边执行得语言也需要检查语义动作。相信您学过编译原理后悔对此更加理解。这就好比人类语言,总是有语法存在的。
B. 过程和函数是典型的PASCAL风格,二者的区别是:函数据有返回值,过程没有。C语言统一了二者,用返回值为void的函数代替了过程。因此C中没有函数
C. 这也是PASCAL的风格。可能是为了强调程序的结构化,C语言不支持这点。这也使得C的编译时间大大加快。
D. 与C相反,C错,D当然就对了
注:对于这些细节的区别很重要,它们是基石。希望我这样不厌其烦的解释,能够给你一些帮助。
8. 请教一道c语言概念题,
第一题A错了,hello再加上结束符,5个字符不够存
第2题应选A吧
9. 名词解释:题目:c语言程序设计谭浩强 用这一段话有效的解释出来。。不少于50个子。。
谭浩强写的一本书,叫做《C语言程序设计》,这本书适合大部分学习C语言的初学者。
10. c语言的一个概念题
C,因为当奇数时,余数为1,表示真,取非则变为假