求解几个C++的入门习题

作者&投稿:苑友 (若有异议请与网页底部的电邮联系)
C入门题求解~

#include
void main()
{
int a=1,b=1;
while(a || b)
{
scanf("%d %d",&a,&b);
if(a||b)printf("%d
",a+b);
}
}

#include "stdio.h"
#include "stdlib.h"
#define num 2180
int main()
{
for (int i = 1000; i != 10000; ++i) //在1000~9999范围内查找
{
if ((i - num) % 2010 == 0) //两数差值为2010的倍数,即两者之差可以被2010整除
{
int Units = ((i % 1000) % 100) % 10; //个位数的数值
int Tens = ((i % 1000) % 100) / 10; //十位数的数值
int Hundreds = (i % 1000) / 100; //百位数的数值
int Thousands = i / 1000; //千位数的数值

//编号由相同的数字组成,稍微分析下可知千位数只能为4或者8
if (Thousands == 4 || Thousands == 8)
{
//百位数是2、1、8、0中的一个
if (Hundreds == 2 || Hundreds == 1 || Hundreds == 8 || Hundreds == 0)
{
//百位数不与千位数相同
if (Hundreds != Thousands)
{
//十位数是2、1、8、0中的一个
if (Tens == 2 || Tens == 1 || Tens == 8 || Tens == 0)
{
//十位数不与千位数、百位数相同
if (Tens != Hundreds && Tens != Thousands)
{
//个位数是2、1、8、0中的一个
if (Units == 2 || Units == 1 || Units == 8 || Units == 0)
{
//个位数不与千位数、百位数、十位数相同
if (Units != Tens && Units != Hundreds && Units != Thousands)
{
//打印出满足上述所有if条件的数
printf("%d
", i);
}
}
}
}
}
}
}
}
}
}



结果为:8210

水平有限,但限制条件应该算写清楚了,仅供参考。

第一题:
变化的只有静态变量c。函数局部静态变量c只初始化一次,此后其一直存在于程序的运行周期中,不会因为函数f的退出而销毁。
而局部变量b则是随着f退出其也销毁,下一次f调用时重新初始化为0.
因此每次f返回a+b+c时,具体值为:
第一次 a=2,b=1,c=4
第二次 a=2,b=1,c=5
第一次 a=2,b=1,c=6

第二题:
这题有几个要点:
1、q=(long *)p,q++; 关于这个语句,中间用了逗号运算符,逗号运算符的级别是最低的。因此在这里这个语句就相当于:
q=(long *)p;
q++;
2、long的大小是4个字节,char的大小是一个字节,q=(long *)p;后,此时q指向字符串"abcdefgh"的首地址,但要注意q被转换成了long型的指针,然后q++时,是按照long的大小来增加地址指向的,也就是加了4个字节,这样,q就指向了字符串"abcdefgh"的第五个字符e。
3、r=(char *)q,这是为了下面cout<<r时能够按照字符串的形式来输出,如果直接用cout<<q的话,是不会输出efgh字符串的。

这样解释楼主应该能明白为什么输出是efgh

1.static int c=3;
表示 C 在每次函数调用结束后,它的值都保存着,下一次调用函数时,它值用来累加。

2.
q=(long *)p;将 p 强制转换为 long int 指针赋给 q
q++;将 q 向前移动 4 个字节,因为 long int 类型的长度为 4 个字节
即 q 现在指在字符 e 的位置上,所以输出时从 e 开始

1,关键是 函数里的 static int c=3 语句。整个循环中a的值一直是2,b作为局部变量,每次调用f(a)时都初始化为0,b++之后就是1。而声明c的时候有个static,叫做静态变量,它的值域是整个程序段,虽然在函数里面声明。当第一次调用f()初始化后,第二次调用函数时不进行初始化,它的值域不是f(a)这个函数。所以第一次c值是3+1,第二次就是4+1。

2, 关键在 q=(long *)p,在32位操作系统中,long型占4个字符串,p指的是‘a’的位置,long型的q指针+1,就会指向‘a’后的第4个字符,也就是‘e’。所以r=(char *)q就是从‘e’开始的字符串。

静态变量


C语言基础的几个难点解析
{ int a,b,c,max; max=a;if(b>max) max=b; if(c>max) max=c; printf("max=%d\n",max);} 同理,编写程序,输出10个整数的最大值。main( ){ int a[10],max,i; for(i=0;i<=9;i++) scanf("%d",&a[i]);max=a[0]; for(i=1;i<=9;...

C语言的几个题目,懂的帮忙解答下
include <stdio.h>int main(){int x,n=0,s=0,max=-1,min=9999; scanf("%d",&x); while(x>=0) {s+=x; n++; if(x>max)max=x; if(x<min)min=x; printf("Grade of student %d: %d\\n",n,x); scanf("%d",&x); } printf("\\nAverage score = %g\\n",(float)...

小白,想入门程序员,应该从什么开始学,顺序是什么?
cookerMM 2022-07-18 · TA获得超过987个赞 关注 展开全部 首先,你需要选择一门自己感兴趣的编程语言。现在常见的编程语言有: C \/ C++:属于大多数情况下能接触到的相对基础的编程语言了,优势是基本掌握以后面对其他语言均可以“无压力”;坏处是学习起来非常的困难,需要系统性的了解非常多知识点,且耗时一般较...

零基础初学者学习编程语言应该学习哪一种?
常见的编程语言是很多的,比如:C语言、c++、C#、Java、asp、PHP、JavaScript,还有一些标记语言html、css等。对于初学者,想做简单的编程的话,建议从C语言开始入门。C语言是最主流的基础语言。现在软件开发上所用的的主流的高级编程语言大多数都是以C语言为基础演化而来的,掌握好C语言有助于学习其他的...

C语言的几个题目,懂的帮忙解答下
include <stdio.h>int main() {double grade,sum = 0,max,min;int i,n;printf("数据个数:");scanf("%d",&n);printf("输入%d个数,空格隔开\\n",n);scanf("%lf",&grade);sum = max = min = grade;for(i = 1;i < n; ++i) {scanf("%lf",&grade);sum += grade;if(max ...

C++怎么学啊 我听了好几节课了啊可是就是不知道那讲的是什么啊
b. 如果这个头文件是C也有的,那么去掉.h后缀,增加一个c前缀,比如 string.h 变为 cstring、stdio.h 变为 cstdio, 等等。BTW:不要把<string.h>、<cstring>、<string>三个头文件搞混淆 BTW:windows.h不是C\/C++的标准文件,因此它的命名C\/C++不管。8. 不要再写 char* p = "XXX" 这种...

C语言里面有几个不懂的地方,求大神帮助解释一下。
pbuffer是指针,buffer是数据。也就是说pbuffer是buffer存放的地方。

如何从零开始学编程?
因此,为了尽量最小化「语法」与「系统基础」这两部分,建议使用Python作为学习的第一门语言,虽然Python对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。熟悉Python后,学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理...

关于2级C语言的几个问题(详细解答一下,谢谢!)
(1)选A char x='A'; 是定义一个变量x并赋值为字符A x=(x>'A'&&x<='Z')?(x+32):x; 这是个选择语句,括号里的x>'A'&&x<='Z'表示条件,意思就是在A到Z之间的字母,也就是所有大写字母,因为是 >'A'不是>=‘A',所以不包括A,当条件满足时就执行x=x+32,大写字母 +32就...

新手如何学习编程?
学编程入门建议:1.学编程要从根本出发,从理论上来说,需要广泛的阅读。了解算法的博大精深和计算机的基本理论。2.从实践上来说,需要有广泛的练习,练习的广泛在于练习不同的内容。然后就是创新精神和数学思维能力,这些都是需要培养的。基础要打好学编程要具备一定的基础。3.逻辑思维能力的培养、学...

松山区13433969901: 求解几个C++的入门习题 -
殳栏巧特: 第一个问题: cout<<a++; 语句只是包含在A(int aa){}中,就是带参数的函数中,所以main()方法中即使声明了对象x但是没带参数,所以调用A() {a=0;}但是没输出,要是写成A() {a=0;cout<<a++;} 就是输出三个数了.你要看有没有带参数.第二个问题: i初始化为0,main()方法中定义a对象时,调用类A构造函数使i=1;接着定义数组b[3],相当于再定义三个对象b1,b2,b3;使i加三次1,结果到这里i=4;接着还定义指针对象*c,但是由于指针指的是地址,所以没有调用构造函数,使得i仍然为4;所以结果就是4

松山区13433969901: C++ 几道超级简单的入门题目啦 -
殳栏巧特: 1.#include<iostream.h> void main(void) { double a,y; cout<<"请输入一个整数a的值:"; cin>>a; a/=10000; while(a!=0) { cout<<a%10; a/=10; } }///////////////////////////////////////////////////////////2.#include<iostream.h> void main(void) { double x,y; cout<<"请输...

松山区13433969901: C++ 几道简单的入门题 三 -
殳栏巧特: 1. #include #include #include using namespace std; int main() { vector a; vector::size_type t; int n; cout << "请输入数据,以非数字结束输入:"; while(cin >> n) { a.push_back(n); cin.sync(); cin.clear(); } cin.sync(); cin.clear(); sort(a....

松山区13433969901: 求几个入门级C++程序
殳栏巧特: 1 int a,b,w; cin>>a; cin>>b; cin>>w; if(a>0&&b>0&&c>0){ ...//判断是否可以构成三角形 计算面积 } 2. cout<<"请输入数字!"; double a; cin>>a; int b=(int)a; double c=a-b; cout<<“数字”<<a<<"的整数部分是:"<<b<<";小数部分是:"<<c...

松山区13433969901: 几道c++入门算术题..求解答.. -
殳栏巧特: 第一个是6没错,第二个应该是C,因为自增自减运算符只能对变量使用,C中是给一个表达式进行自增运算了,所以C不对

松山区13433969901: 求解几个C++基础题(一) -
殳栏巧特: 第一题,我自己计算了一下结果应该是600.你这答案怎么会是9呢.为了证实结果我亲自运行了下结果确实是600.在循环里第一次s=10*0+'6'-'0'得6第二次s=10*6+'0'-'0'得60第三次s=10*60+'0'-'0'得600循环结束.第二题,实参和形参都是三个,不要给逗号给迷惑了.实参列表里的f函数就是当做一个实参.

松山区13433969901: C++入门级题目 -
殳栏巧特: #include <iostream> using namespace std; class array { public: array(int m, int b[]); void delsame(); void print(); private: int n; int a[100]; }; array::array(int m, int b[]) : n(m) { for (int i = 0; i != m; i++) a[i] = b[i]; } void array::delsame() { for (int i = 1; i < n; i+...

松山区13433969901: 初学C++,几道简单的习题,帮忙啦~~(3) -
殳栏巧特: char max(char* p, int n){char a = *p;for (int i = 1; i < n; i++){char b = *(p + i);if (b > a) a = b;}return a;}int max(int* p, int n){int a = *p;for (int i = 1; i < n; i++){int b = *(p + i);if (b > a) a = b;}return a;}......

松山区13433969901: C++ 几道简单的入门题 四 -
殳栏巧特: 作业1:#include <iostream>using namespace std;void main(){int a=0; int b=0; int c=0; int *p1=&a; int *p2=&b; int *p3=&c; cout<<"请输入两个整数:"; cin>>a>>b; *p3=*p1+*p2; cout<<*p1<<"+"<<*p2<<"="<<*p3<<endl;}作业2:#include ...

松山区13433969901: C++基础题求助题目一:输入一个一元二次方程式 ax2+bx+c=0 (a0)的三个系数a,b,c,求它的根. 输入三个数值 a, b, c,其中a不等于0. 如果有两个实根,... -
殳栏巧特:[答案] 简单的一个:#include #include using namespace std;int main() { int a, b, c; ...

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网