西交《程序设计基础》faq(四)
西交《程序设计基础》FAQ(四)第四章 数组
一、在C语言里有字符数组的说法,我想问的是那有没有字符串数组这个说法呢?
c语言因为没有字符串类型(c++里有),所以c语言处理字符串的时候,需要把字符串中的字符存到一个数组里头,借助数组这个工具来对字符串进行一系列的处理。那么怎末标识一个字符串呢,记住,字符串必须是以空字符结尾的。空字符是'\0'。有的时候也可以用ch==null?来判断一个字符是不是空字符。
为什么要用空字符结尾? 因为一些处理字符串的工具函数要依赖这个结尾才来正确识别字符串,才能为进一步的处理做准备。这些字符串处理函数就是你列出的:strcat函数(字符串连接函数),strcpy函数(字符串复制函数)。具体他们是什么作用,我想你去看书本会得到易懂而且更详细的答案。推荐《21天学会c语言》这本书。
另附:如果在c里头要跟字符串数组能搭上边的,就是声明一个二维数组,二维数组的每一维都是一个一维字符数组。那么这个二维数组就可以充当“字符串数组”的功能了。
如:int ch={{"i love "},{"i love you"}};
另外,借助字符数组来处理字符串,是一种,还有一种是通过动态分配内存在处理字符串。二、:定义一个字符数组:char c1{5}={"china"},我对这个数组赋值,对吗? 这里的5对吗?如果是6呢?
你是对这个字符数组赋值,准确的说你是在定义一个数组并对她初始化。这里的5不对,应该是6,因为字符串必须得是以空字符结尾,当然你也可以不用,但基本上没人回这么做。因为这么做了,你就无法使用处理字符串的工具函数了。 三、字符'\0'和字符‘ ’有什么区别?(第二个字符是个空格字符)
首先他们都是一个字符,区别是:一个是空字符,一个是空格字符,它们在ascii码是不一样的,是两个完全不同的字符。 空字符是空白字符的一种,属于特殊字符。enter,tab 都属于空白字符。四、C语言中数组可以直接赋值给数组吗?
你的意思是: int a[]={1,2,3},b; b=a; 这样赋值??这样在C中是不行的。所谓的数组赋值,其实是指针的赋值。a[]={1,2,3},b[],它们都是数组,数组本身代表地址,还有函数本身也代表地址,同时也代表一级指针常量,在主函数里不能那样赋,但在子函数中是可以的,意义就是把a的地址给b。等学到指针你就知道了,提醒大家哦,指针是C语言的永远的经典,学好C语言关键是学好指针!!五、请分别定义一个整型一维数组、字符型一维数组和一个二维实型数组。
int a; 说明整型数组a,有10个元素。
float b,c; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch; 说明字符数组ch,有20个元素。六、一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
课程 成绩姓名 Math C DBASE
张 80 75 92
王 61 65 71
李 59 63 70
赵 85 87 90
周 76 77 85
可设一个二维数组a存放五个人三门课的成绩。再设一个一维数组v存放所求得各分科平均成绩,设变量l为全组各科总平均成绩。编程如下:
void main()
{
int i,j,s=0,l,v,a;
printf("input score\n");
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{ scanf("%d",&a);
s=s+a;}
v=s/5;
s=0;
}
l=(v+v+v)/3;
printf("math:%d\nc languag:%d\ndbase:%d\n",v,v,v);
printf("total:%d\n",l);
}
for(i=0;j<3;i++)
{
for(j=0;j<5;j++)
{ scanf("%d",&a);
s=s+a;}
v=s/5;
s=0;
}
}
l=(v+v+v)/3;
}
程序中首先用了一个双重循环。 在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来, 退出内循环后再把该累加成绩除以5送入v之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v,v,v相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。
本内容由易百网整理发布
网址 www.openhelp100.com
联系方式QQ 515224986
页:
[1]