stuu1矿机
㈠ 请教C++中对象的初始化和构造函数问题:
如果没有定义拷贝构造函数,则默认将数据成员对应一一复制,使用的值是=后对象的数据成员值。
之所以出现你说的问题是因为你没有理解构造函数是怎么运行的。 如果自己定义了构造函数,则使用这个函数,否则使用默认构造函数(与拷贝构造函数一样将数据成员对应一一复制)。但是你定义的构造函数只有输出语句,参数也没有默认值,所有会初始化错。
//
我刚才实验了一下,觉得你还是理解的不够深入。你做了例子,编译通过了,却没有看结果怎样。
事实上,有几点需要弄清楚:
一、类不同于c中的结构体,一般不用{ }初始化对象;
MSDN帮助信息:
Compiler Error C2552
'identifier' : non-aggregates cannot be initialized with initializer list
The specified identifier was incorrectly initialized.
An initializer list is needed to initialize the following types:
An array
A class, structure, or union that does not have constructors, private or protected members, base classes, or virtual functions
These types are known as “aggregates.”
你定义的类有构造函数,不满足上面说的条件,所有不能用{ }
二、自定义的构造函数内部如果没有赋值语句的话,即使调用了它,其数据成员x,y也将只会是随机值(把stu2的定义改为Stu stu2(1,2); 并试着输出就知道了)
如果把构造函数改为如下:
Stu(int a=0,int b=0);
{
x=a; y=b;
cout<<"stu constructor"<<endl;
}
并使用Stu stu2(1,2); 定义,则stu1的x,y分别为0,0;stu2的x,y分别为1,2
三、我刚才使用Stu stu2(1,2); 定义,为什么没有用你说的Stu stu2=Stu(1,2);呢?因为在类名后直接加括号的方法会定义一个没有对象名的临时对象,然后把这个临时对象赋给了stu2,这并不是通用的初始化方法(但是正确)。最好用通用的方法。
四、关于隐式类型转换,我查了一下别的书,的确,用=是隐式,用()是显式。说明如下:
class Stu
{explict Stu(int a);
……
};
加上显示声明关键字explict,只能进行显式声明:Stu stu1(3);
如果不加,将可以这样隐式声明:Stu s=3; 这个句子就相当于将3这个整型量转换成了Stu对象,在某些场合,这样的转换是十分危险的,加上explict后将杜绝这种可能性。 相关内容可以查阅“类型转换函数”。
我参考的书是《C++标准程序库》华中科技大学。
另外给点小建议,初学语言和熟悉环境(比方VC++)的过程中,细究语法是有必要的,但是学完继承,派生,虚函数,模板等概念以后,就要着重理解C++面向对象的思想,和用它解决实际问题的思路。
这就是他们的关系,正解
㈡ C语言A01!
首先s[12]保存了12个数字,c[5]里面则全部是0;
第二个for循环是用于输出的,可以看出来是输出 c[1]到c[4]的4个数字。
第一个for运行用来赋值:
当i=0时, s[i]=1;c[s[i]]=c[1]=0; c[1]++ = 1;
当i=1时,s[i]=2;;c[s[i]]=c[2]=0; c[2]++ =1;
........// i从0到3都是把c[0]到c[3]赋值为1;
当i=4时,s[i]=4;c[s[i]]=c[4]=1; c[4]++ =2;
当i=5时,s[i]=3;;c[s[i]]=c[3]=1; c[3]++ =2;
.......//现在应该可以看出规律了,s[12]里面每出现一个1,则c[1]就加一个; 每出现一个2,则c[2]就加一个。
所以s[12]里面出现了4个1,3个2,3个3 ,2个4
所以输出c[1]到c[4]就是 4332
㈢ 编程实现输入10个学生的姓名、三科成绩,自动计算出总分
#include<stdio.h>
#include<string.h>
typedef struct student
{
charname[10];
int num1, num2, num3;
}STU;
void input(STU *stu)
{
scanf("%s", stu->name);
scanf("%d", &(stu->num1));
scanf("%d", &(stu->num2));
scanf("%d", &(stu->num3));
}
void sort(STU *stu1, STU *stu2, STU *stu3)
{
STU *stu;
int stuNum1 = stu1->num1 + stu1->num2 + stu1->num3;
int stuNum2 = stu2->num1 + stu2->num2 + stu2->num3;
int stuNum3 = stu3->num1 + stu3->num2 + stu3->num3;
inti, j;
if(stuNum1 < stuNum2)
{
stu = stu1;
stu1 = stu2;
stu2 = stu;
}
if(stuNum2 < stuNum3)
{
stu = stu2;
stu2 = stu3;
stu3 = stu;
}
if(stuNum1 < stuNum2)
{
stu = stu1;
stu1 = stu2;
stu2 = stu;
}
}
void output(STU *stu1, STU *stu2, STU *stu3)
{
printf("%s\n", stu1->name);
printf("%d\t%d\t%d\n", stu1->num1, stu1->num2, stu1->num3);
printf("%s\n", stu2->name);
printf("%d\t%d\t%d\n", stu2->num1, stu2->num2, stu2->num3);
printf("%s\n", stu3->name);
printf("%d\t%d\t%d\n", stu3->num1, stu3->num2, stu3->num3);
}
int main()
{
STU stu[3];
input(&stu[1]);
input(&stu[2]);
input(&stu[3]);
sort(&stu[1], &stu[2], &stu[3]);
output(&stu[1], &stu[2], &stu[3]);
return 0;
}
㈣ 关于C语言中的typedef struct 的用法问题,编译器是VC 6.0
你把代码写到函数外面是什么意思?
#include
typedef
struct
student
{
int
age;
float
score;
char
name[20];
}stu;
void
main()
{
stu
stu1;
stu1.age=27;
stu1.score=79.00;
stu1.name="zheng
shuai";
printf("name:%c,age:%d,ang
score:%f",stu1.name,stu1.age,stu1.score);
}
㈤ C语言中 创建链表同时 判断是否重复输入
可以,只要在录入学号,检索链表元素中的数据与录入的是否相同即可。
一下根据情况做一个简单的示例。
构造链表元素:
struct stu
{
char id[20];
char name[20];
char sex;
struct stu *next;
};
typedef struct stu Student ;
#define FALSE -1
#define TRUE 1
构造链表:
Student *head=NULL; //头指针
int InputStu()
{
Student *tmp,*stu1;
Student *tail;
int sign=0;
int sign2=0; //
tmp=(Student *)malloc(sizeof(Student));
if (tmp==NULL)
{
return FALSE; // 申请元素错误
}
tmp->next=NULL;
while(sign==0)
{
// 输入学号,为了简便,其他内容不输入了
if(sign2==0)
{
printf("\n请输入学生的学号:");
}
else
{
printf("\录入学号重复,重新录入:");
}
scanf("%s",tmp->id);
stu1=head;
tail=head;
sign2=0;
while(stu1)
{
if (strcmp(stu1->id,tmp->id))
{
stu1=NULL; //输入的学号已存在,设置stu1=NULL;终止循环,重新输入
sign2=1;
}
else
{
tail=stu1;
stu1=stu1->next;
}
}
if(sign2==0) //没有匹配的学号,将tmp插入到链表的结尾
{
//tail 指针指向的是链表的最后一个元素
if (tail==NULL) //空链,还没有录入内容
{
head=tmp; //本次录入的数据为第一个元素
}
else
{
tail->next=tmp;
}
sign=1;
}
}
return TRUE; //录入元素成功
}
main()
{
int i=0;
while (i<10)
{
InputStu(); //连续录入10个人
i++;
}
}
㈥ 谁会java数组,循环,冒泡
int tmp[] =stu1[k];
stu1[k] =stu1[k+1];
stu1[k+1] =tmp;
冒泡排序的一个思想就是两两对比交换位置
你的代码,如果k的值大于k+1,就把k和k+1的位置互换,把最大的值放到最后,这样子循环下了,数组0位置的值就是最小的了,tmp是用来中间临时保存值的。
int tmp[] =stu1[k];就是把k的值赋给tmp
stu1[k] =stu1[k+1];就是把k+1的值赋给k
stu1[k+1] =tmp;就是把原先k的值赋给k+1
㈦ VB中 自定义数据类型 string变量
VB内部使用的是Unicode编码,在这种编码格式下,不管是全角的汉字还是半角的字母、数字或符号,都是按1个字符来算的,如果按字节来算,则都是2个字节。也就是说:
"男"这是1个字符(而不是你通常认为的2个字符),"a"这也是1个字符;
"男"这是2个字节,"a"也是2个字节(而不是你通常认为的1个字节)。
dim ch as string*10 这个10是指的字符。所以你的自定义数据类型改成这样即可:
dim sex as string*1
当然最好还是按楼上说的用Boolean数据类型来定义性别,这样比较规范。
另外很重要的一点:自定义数据类型不能直接使用的,要先实例化:
dim stu1 as stu
stu1.sex="男"
......
㈧ c语言结构性数组
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
注意:结构数组的成员也可以是数组变量。
看好U1挖DCR,11T算力,1600W