为了账号安全,请及时绑定邮箱和手机立即绑定

C++

C++是在C语言的基础上开发的一种通用编程语言,应用广泛。C++支持多种编程范式——面向对象编程、泛型编程和过程化编程。

来自 C C++
已采纳 望远回答:
C语言中以0为假以非0值为真,之所以字符'\0'可以判定为假是因为字符在作为逻辑判断时取的是该字符的ASCII码,而'\0'的ASCII码为0,所以为假,其他字符为真。<...code...><...code...>[ 查看全部 ]

C语言中以0为假以非0值为真,之所以字符'\0'可以判定为假是因为字符在作为逻辑判断时取的是该字符的ASCII码,而'\0'的ASCII码为0,所以为假,其他字符为真。

for(i=1;a[i];i++)//遍历字符数组a,直到读取到字符串结束标志'\0'
数组里中间有个0是不会也会停止;还是不停止--按照上面的结论当是0的时候会跳出循环,LZ自己试试看就最好了。


赞同1 反对 收起

回复
来自 C C++ Linux
已采纳 onemoo回答:
这几个都是警告 gets 函数不安全、不建议使用了。这个函数不判断缓冲区大小,实际使用很容易造成溢出。你自己做小练习用用也无所谓。

这几个都是警告 gets 函数不安全、不建议使用了。

这个函数不判断缓冲区大小,实际使用很容易造成溢出。你自己做小练习用用也无所谓。

赞同 反对 收起

回复
来自 C++
已采纳 海角风桥回答:
bint是对象

bint是对象

赞同 反对 收起

回复
来自 C++
精慕门9254224回答:
int a=0; int sum=0; for(int i=1;i<=4;i++){ a*=10; a+=1; sum+=a; }
int a=0; int sum=0; for(int i=1;i<=4;i++){ a*=10; a+=1; sum+=a; }
赞同2 反对 收起

回复
来自 C C# C++
黄小凡回答:
表示这个题目很有意思,而且也不难啊。都把提示全部告诉你了。提供一下大致思路,先从键盘获取用户输入的身份证号,然后把这个字符串转化为int数组,然后用for循环,依次对应相乘,用一个变量sum求和,最后用sum除11取余数,再对应最后一个数组,找出下标,和身份证最后一位进行对比。最难的一个地方应该就是在于把字符串转化为int数组了,百度一下,这个作为一个函数使用就行了。好想知道,难道我们的身份证后四位就是这样算出来的。。。[ 查看全部 ]
表示这个题目很有意思,而且也不难啊。都把提示全部告诉你了。提供一下大致思路,先从键盘获取用户输入的身份证号,然后把这个字符串转化为int数组,然后用for循环,依次对应相乘,用一个变量sum求和,最后用sum除11取余数,再对应最后一个数组,找出下标,和身份证最后一位进行对比。最难的一个地方应该就是在于把字符串转化为int数组了,百度一下,这个作为一个函数使用就行了。好想知道,难道我们的身份证后四位就是这样算出来的。。。
赞同1 反对 收起

回复
来自 C C# C++
慕雪101372回答:
<...code...>[ 查看全部 ]
这是一个简单的计算器程序,可以运算基本的加减乘除
#include"stdafx.h"
#include<iostream>
#include<stdlib.h>    //头文件支持exit()
#include<conio.h>    //头文件支持getche()
#include<iomanip>
using namespace std;

char getoption(void);  //获取选择项
float getdata(void);  //获取计算数据
float calc(char option,float num1,float num2);
void printresult(float num1,float num2,float result,char option);

void main()
{
 char choice1;
 float num1,num2,result;
 char option;
 cout<<"***************此程序是用来模拟计算器的简单运算功能***************"<<endl;
 cout<<"你想尝试一下吗?按任意键继续..."<<endl;
 do{
 choice1=_getch();
 option=getoption();
 num1=getdata();
 num2=getdata();
 result=calc(option,num1,num2);
 printresult(num1,num2,result,option);
 cout<<"想继续使用这个程序吗? y/Y--继续,其实任意键结束"<<endl;
 choice1=_getch();
 if(choice1=='Y')
 {
	 cout<<choice1<<endl;
 }
 }while(toupper(choice1)=='Y');
 cout<<endl<<"谢谢你的使用!"<<endl;
}

char getoption(void)  //获取选择项
{
 int flag=0;
 char choice;
 do
 {
 cout<<"****************************************"<<endl;
 cout<<"*               菜单                   *"<<endl;
 cout<<"*            1.加法运算                *"<<endl;
 cout<<"*            2.减法运算                *"<<endl;
 cout<<"*            3.乘法运算                *"<<endl;
 cout<<"*            4.除法运算                *"<<endl;
 cout<<"*            5.程序结束                *"<<endl;
 cout<<"****************************************"<<endl;
 choice=_getch();
 if((choice!='1')&&(choice!='2')&&(choice!='3')&&(choice!='4')&&(choice!='5'))
 {
  flag=1;
  cout<<endl<<"***************输入错误,请重新选择!***************"<<endl;
 }
 }while(flag==1);
 if(choice=='5')
  exit(0);
 return choice;
}

float getdata(void)  //获取计算数据
{
 float data;
 cout<<"请输入一个数值";
 cin>>data;
 return data;
}

float calc(char option,float num1,float num2)
{
 float add(float num1,float num2);
 float sub(float num1,float num2);
 float mul(float num1,float num2);
 float dvd(float num1,float num2);
 float result;
 switch(option)
 {
  case '1':
   cout<<"***************您选择的是加法运算***************"<<endl;
   result=add(num1,num2);
   break;
  case '2':
   cout<<"***************您选择的是减法运算***************"<<endl;
   result=sub(num1,num2);
   break;
  case '3':
   cout<<"***************您选择的是乘法运算***************"<<endl;
   result=mul(num1,num2);
   break;
  case '4':
   cout<<"***************您选择的是除法运算***************"<<endl;
   result=dvd(num1,num2);
   break;
 }
 return result;
}

float add(float num1,float num2)
{
 return(num1+num2);
}

float sub(float num1,float num2)
{
 return(num1-num2);
}

float mul(float num1,float num2)
{
 return(num1*num2);
}

float dvd(float num1,float num2)
{
 return(num1/num2);
}

void printresult(float num1,float num2,float result,char option)
{
  switch(option)
 {
  case '1':
   cout<<setw(25)<<num1<<"+"<<num2<<"="<<result<<endl;
   break;
  case '2':
   cout<<setw(25)<<num1<<"-"<<num2<<"="<<result<<endl;
   break;
  case '3':
   cout<<setw(25)<<num1<<"*"<<num2<<"="<<result<<endl;
   break;
  case '4':
   cout<<setw(25)<<num1<<"/"<<num2<<"="<<result<<endl;
   break;
 }
  system("pause");
  
}


赞同1 反对 收起

回复
来自 C C++ C#
asdhjhg回答:
用python的class写一个吧,没直接定义函数来计算,定义函数更快。注释掉的部分就是为了添加每个人的序号的,可以不用的<...code...>[ 查看全部 ]

用python的class写一个吧,没直接定义函数来计算,定义函数更快。注释掉的部分就是为了添加每个人的序号的,可以不用的

# -*- coding: utf-8 -*-
import datetime
class Name(object):
    #nextNum = 1
    def __init__(self,name):
        self.name = name
        self.birthday = None
        #self.Num = Name.nextNum
        #Name.nextNum += 1
    #def getNum(self):
         #return self.Num
    def setbirthday(self,ID):
        assert len(ID) == 18 and isinstance(ID,str),\
        'The ID number was invalid'
        year = int(ID[6:10])
        month = int(ID[10:12])
        day = int(ID[12:14])
        self.birthday = datetime.date(year,month,day)        
    def getname(self):
        return self.name
    def is_age18(self):
        if ((datetime.date.today() - self.birthday).days)/365 == 18:
            return True
        return False
    def __str__(self):
        return self.name
    __repr__ = __str__

a = Name('Lisa')
b = Name('Bart')
c = Name('John')
d = Name('Eric')
e = Name('Joey')
f = Name('Mark')
#g = Name('test...')

a.setbirthday('32012119940208372X')
b.setbirthday('323121199601233646')
c.setbirthday('411232199905154325')
d.setbirthday('322342199903233209')
e.setbirthday('412323199905092134')
f.setbirthday('123421200108263717')
#g.setbirthday(999999999999999999)
L = [a,b,c,d,e,f]
def GiveMe18(l):
    age_dict = {}
    for i in l:
        if i.is_age18():
            age_dict[i.getname()] = \
            ((datetime.date.today() - i.birthday).days)/365
    return age_dict,'We have %d people aged 18 years old'%(len(age_dict)) 
print GiveMe18(L)


赞同2 反对 收起

回复
来自 C++
慕雪101372回答:
#include<iostream> #define MaxNum 100 using namespace std; typedef struct { int data[MaxNum]; int length; }SqList; int main() { SqList L; int i,j,k=1,e,m; cout<<"请输入总人数n和初始值m:"<<endl; cin>>L.length>>m; for(i=0;i<L.length;i++) ...[ 查看全部 ]
#include<iostream> #define MaxNum 100 using namespace std; typedef struct { int data[MaxNum]; int length; }SqList; int main() { SqList L; int i,j,k=1,e,m; cout<<"请输入总人数n和初始值m:"<<endl; cin>>L.length>>m; for(i=0;i<L.length;i++) L.data[i]=i+1; int a[L.length]; cout<<"请输入密码:"; for(i=0;i<L.length;i++) cin>>a[i]; cout<<"出队顺序为:"<<endl; while(L.length!=0) { k--; i=(k+m-1)%(L.length); e=L.data[i]; cout<<e<<'\t'; m=a[i]; for(j=i;j<L.length-1;j++) { L.data[j]=L.data[j+1]; a[j]=a[j+1]; } L.length--; k=i+1; } cout<<endl; return 0; } 可用VC6编译运行一下,应该可以的
赞同1 反对 收起

回复
来自 C C++ Linux
已采纳 onemoo回答:
不要混淆了“地址”和“地址中的内容”,这是两码事!把内存当作“一连串的房间”的话,“内存地址”是房号,而“地址中的内容”是房间里的东西。指针类型中存储的就是地址。“malloc怎么也初始化地址为0?”malloc 会分配一段指定大小的内存,但不会初始化其中的内容,或者说其中的值是随机的。第 1 张图中你用 malloc 分配了 10 个 int 大小的空间,你可以把这段空间当作是 int A[10] 数组。然后你打印了这个“数组A”中的 10 个元素的值。在你这个结果中,碰巧这 10 个元素的值都是 0。 注意是“地址中的值为 0”,不是“地址为 0”。还有,不要因为看到都是 0 就觉得“ma...[ 查看全部 ]

不要混淆了“地址”和“地址中的内容”,这是两码事!

把内存当作“一连串的房间”的话,“内存地址”是房号,而“地址中的内容”是房间里的东西。指针类型中存储的就是地址。

  • “malloc怎么也初始化地址为0?”

    malloc 会分配一段指定大小的内存,但不会初始化其中的内容,或者说其中的值是随机的

    第 1 张图中你用 malloc 分配了 10 个 int 大小的空间,你可以把这段空间当作是 int A[10] 数组。然后你打印了这个“数组A”中的 10 个元素的值。

    在你这个结果中,碰巧这 10 个元素的值都是 0。 注意是“地址中的值为 0”,不是“地址为 0”。

    还有,不要因为看到都是 0 就觉得“malloc 难道也会将分配的地址中的值初始化为 0!?”,这只是碰巧了而已。

  • 第 2 张图中,你用 calloc 分配了 10 个 int 大小的空间。和 malloc 不同,calloc 会将其内容初始化为 0

    所以这次打印出的内容肯定都是 0 。

  • 第 3 张图,free(A) 并非只释放 A[0]。 free 释放的就是 A 指针所指的、之前由 malloc 所分配到的全部内存。重要的一点是:free 一个指针之后,再访问该指针的结果是未定义的

    所以不要再通过 A 测试那些内存中的值了,它们可能是任何值。

    记住:一旦 free 了某个指针,除非再给该指针赋予有意义的新地址,否则不要再按照原值使用该指针了。

  • 第 4 张图,realloc 会“重分配”之前分配到的内存,同时调整内存的大小,并且尽可能保留原内存中的值。当新内存大于原内存时,多出来的内存中的值是未定义的,也就是说多出来的内存中的值是随机的

    所以你的结果中,多出来的 135145、0、0、0、0 都是随机值。和前面的例子一样,只不过是碰到 0 比较多而已,并非是“后面初始化为 0”。

    另外说一下:其实 realloc 并不保证新内存肯定在原内存的位置上分配,它只保证新内存中保留原内存中的值。 在你的这个例子中,你打印了 A 和 B 的值,你可以看到它们确实是同一个地址,也就是说这一次 realloc 确实是在原内存位置上分配新内存的。


其实你不用想这么多。在初学阶段,你只要记住这些函数的行为,然后按照它们的规则使用这些函数即可。尤其是对于那些“未定义行为”,记住永远不要写依赖于“未定义行为”的代码就好了。 当看到了“未定义行为”,初学时不用绞尽脑汁想“为什么是这样的呀??”,因为 C 语言标准已经告诉你了这些行为是未定义的,所以出现什么样的情况都有可能。

当然了,虽说是“未定义行为”,到底还是有一定的原因造成你所看到的结果的。是的没错,当你足够通晓 C 语言之后,自然会明白为什么你看到的“未定义行为”表现出这样或那样的结果。 只不过不要在初学时(尤其是在没有人指导时)就想这些,因为你很可能会加入很多错误的“脑补”,这反而会造成你理解错误(你发的这个问题就是如此啊)!

赞同1 反对 收起

回复
来自 C++ Html/CSS JAVA
Dunizb回答:
并不需要多少知识,会html、css、javascript就行,最好再懂一点简单的ES6的知识(只需要一点点),我在慕课网有一篇手记,你可以参考《剖析简易计算器带你入门微信小程序开发》

并不需要多少知识,会html、css、javascript就行,最好再懂一点简单的ES6的知识(只需要一点点),我在慕课网有一篇手记,你可以参考《剖析简易计算器带你入门微信小程序开发》

赞同1 反对 收起

回复
来自 C++
Knowthed回答:
#include <iostream>#include <string>using namespace std;int main(){    string str;    cin>>str;    int sum=0;      //for循环中迭代器i要用专门的迭代器,示例如下    for(string::iterator i=str.begin();i!=str.end();i++){        cout<<*i;        sum++;        if(sum==5) break;    }    cout<<en...[ 查看全部 ]


#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    cin>>str;
    int sum=0;      //for循环中迭代器i要用专门的迭代器,示例如下

   for(string::iterator i=str.begin();i!=str.end();i++){
        cout<<*i;
        sum++;
        if(sum==5) break;
    }
    cout<<endl;
    return 0;
}

赞同1 反对 收起

回复
来自 C C++
已采纳 onemoo回答:
先吐槽:发代码时一定要用网页中的格式化工具格式化一下,不然这么乱一坨很少有人愿意看的...错误点在 delete_string() 函数中最后的 str[i]='\0';,应该是 str[j]='\0';因为 i 表示的是原字符串的结尾,在 for 循环退出时 i 所指的就是原字符串结尾的 \0,而 j 才是指向改写后的字符串结尾,所以应该在 j 位置上写入 \0。否则你那样写的话,等于原字符串结尾位置没有变。所以即便 s 覆盖了前面的 o,最后还会按照原字符串的长度输出 thiss,没错吧?再次吐槽:这个代码看着真有沧桑感啊!  代码风格比 C89 K&R 还老…… 你到底看的是哪个年代的教...[ 查看全部 ]

先吐槽:发代码时一定要用网页中的格式化工具格式化一下,不然这么乱一坨很少有人愿意看的...


错误点在 delete_string() 函数中最后的 str[i]='\0';,应该是 str[j]='\0';

因为 i 表示的是原字符串的结尾,在 for 循环退出时 i 所指的就是原字符串结尾的 \0,而 j 才是指向改写后的字符串结尾,所以应该在 j 位置上写入 \0。

否则你那样写的话,等于原字符串结尾位置没有变。所以即便 s 覆盖了前面的 o,最后还会按照原字符串的长度输出 thiss,没错吧?


再次吐槽:

这个代码看着真有沧桑感啊!  代码风格比 C89 K&R 还老…… 你到底看的是哪个年代的教程啊?!

现在学习C/C++语言最好按照新标准来学,太老的代码除了“经典”外还包含了很多现在视为错误和不推荐的写法,已经不适合用来学习了!

  • 你这样的 main 函数应该声明为 int main(void),不要省略前面的 int 及括号中的 void(这是在你不使用main参数的情况下)

    其实函数声明时缺少返回类型,编译器会隐式认为其返回类型是 int,这是在老标准中常用的,现在不推荐这样写了。

  • 声明/定义函数时参数名和参数类型都要写在参数列表的括号中。你这样将参数类型写在函数体前、函数名后的风格比 C89 还要老……

    定义函数时同样不要忘记明确写上返回类型,而且不用在函数定义前写 extern。

    其实你可以把这几个函数定义在 main 函数之前,这样也就不用前置声明它们了(即便是前置声明也没必要写extern)。

赞同 反对 收起

回复
来自 C++
已采纳 俞自生回答:
指针p先指向str[0], 然后比较,再p++,再比较,直到p指向str[n-1].
指针p先指向str[0], 然后比较,再p++,再比较,直到p指向str[n-1].
赞同1 反对 收起

回复
来自 C++ JAVA
已采纳 星典回答:
学android吧http://www.imooc.com/course/programdetail/pid/33

学android吧

http://www.imooc.com/course/programdetail/pid/33

赞同 反对 收起

回复
来自 C C++
已采纳 进击的学霸No1回答:
当i = 9 的时候表示这是最后一个数了,所以在i != 9 的时候输出的数后面要加一个逗号,而最后一个数不需要加逗号就是这样

当i = 9 的时候表示这是最后一个数了,所以在i != 9 的时候输出的数后面要加一个逗号,而最后一个数不需要加逗号

就是这样

赞同1 反对 收起

回复
首页上一页1234567下一页尾页

关联分类

  • AngularJS

    AngularJS是一款优秀的前端JS框架,已经被用于Google的...
  • Mysql

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL...
  • SQL Server

    SQL Server 是Microsoft 公司推出的关系型数据库管...

本月最佳回答网友

关注我喜欢或专注的猿问分类

  • Android
  • AngularJS
  • Bootstrap
  • C
  • C#
  • C++
  • Cocos2d-x
  • CSS3
  • Go
  • Html/CSS
  • Html5
  • iOS
  • JAVA
  • JavaScript
  • JQuery
  • Linux
  • Maya
  • MongoDB
  • Mysql
  • Node.js
  • Oracle
  • Photoshop
  • PHP
  • Premiere
  • Python
  • React.JS
  • Ruby
  • Sass/Less
  • SQL Server
  • Unity 3D
  • Vue.js
  • WebApp
  • ZBrush
  • 云计算
  • 前端工具
  • 大数据
  • 数据结构
  • 测试
保存
意见反馈 常见问题 APP下载
官方微信