C语言学习:练习
C语言打印空心菱形
#include<stdio.h>
void printStars();
void main(){
int totalLevel = 5;
printStars(totalLevel);
getchar();
}
void printStars(int totalLevel){
int i,j,k;
for(i=0;i<=totalLevel;i++){
for(k=totalLevel-i;k>0;k--){
printf(" ");
}
for(j=0;j<2*i-1;j++){
if(i>0 && i<=totalLevel){
if(j==0 || j==2*i-2){
printf("*");
}else{
printf(" ");
}
}else{
printf("*");
}
}
printf("\n");
}
//反向打印金字塔
for(i=0;i<=totalLevel-1;i++){
for(k=0;k<=i;k++){
printf(" ");
}
for(j=0;j<(2*(totalLevel-i-1)-1);j++){
if(i>=0 && i<totalLevel-1){
if(j==0 || j==(2*(totalLevel-i-1)-2)){
printf("*");
}else{
printf(" ");
}
}else{
printf("*");
}
}
printf("\n");
}
}
C语言中,char数组的赋值问题。
之所以,char a[10]; a=“hello”;错误。个人理解:
就是在声明一个10个字符的空间的数组的时候,a就变成了指向这个空间的指针,之后执行a=“hello”;相当于是一个赋值操作,但是字符数组是不能赋给一个常量的,(指针地址视为常量)。
但是语法char a[10]="hello"符合C语言语法,理由简单来说就是在开辟空间的时候,做了对应字符位置上的赋值操作,视为a[0]='a’等等,且此时的=号并不理解为赋值操作,应该视为初始化操作。
(学习后的理解:char arr[]; arr就是数组的头指针,char *arr=“”;就是定义了一个指针指向了字符数组的头指针,通过指针去初始化一个字符串,不需要指定数组大小,限制较小,是比较合理且高校的初始化操作)
共用体
共用体并不是如它的名字所显示的那样,多个个结构体中有多个相同相同的字段,少量不同的字段,我们把相同的字段提取出来单独弄个结构体存储(这种理解也是愚蠢的 )。
其实,恰恰相反,C语言的共用体,是将不同的字段进行封装,这些不同的字段是共享内存的,并已目前最大的影响的字节数的赋值为主,当进行更多字节赋值的时候,会影响已赋值的数据。
当我们,new出不同的结构体对象的时候,其共用体之间并不是共享的。只是在当前相同的结构体对象时,是共享的。
实例代码:
#include <stdio.h>
#define TOTAL 2
struct Person{
char name[20];
int num;
char sex;
char perfession;
union{
float score;
char course[20];
}sc; //sc是一个共用体的名字
};
void main(){
int i;
struct Person persons[TOTAL]; //定义两个结构体对象
for (i=0;i<TOTAL;i++)
{
printf("input info:");
scanf("%s %d %c %c",persons[i].name,&(persons[i].num),&(persons[i].sex),&(persons[i].perfession));
if (persons[i].perfession=='s')
{
printf("请输入学生的成绩:");
scanf("%f",&(persons[i].sc.score));
}
else
{
printf("请输入老师的课程:");
scanf("%f",&(persons[i].sc.score));
}
fflush(stdin); //清空输入缓冲区
}
//输出人员信息
printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
for(i=0; i<TOTAL; i++){
if(persons[i].perfession == 's'){
//如果是学生
printf("%s\t\t%d\t%c\t%c\t\t%f\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].perfession,
persons[i].sc.score);
}else{
//如果是老师
printf("%s\t\t%d\t%c\t%c\t\t%s\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].perfession,
persons[i].sc.course);
}
}
getchar();
getchar();
}
练习
编程创建一个 Box 结构体,在其中定义三个成员表示一个立方体的长、宽和高,长宽高可以通过控制台输入。
定义一个函数获取立方体的体积(volume)。
创建一个结构体,打印给定尺寸的立方体的体积。
#include <stdio.h>
struct Box{
double length;
double weight;
double height;
double volume;
};
double getVolume(struct Box box){
box.volume = box.length*bo