求助一个c语言问题?

作者&投稿:东方芳 (若有异议请与网页底部的电邮联系)
一个c语言问题?~

gcc是一个著名的编译器,属于GNU编译器套件,可以编译很多种语言,一般用于编译c/c++程序,是linux下常用的编译工具
编译器只能说是一种翻译代码的程序,我们所熟知的dev-c++,vs等其实属于IDE(集成开发环境),IDE一般指包括了编译器,代码编辑器等多种功能的软件,功能比编译器更加强大
linux下代码编辑用vim,编译用gcc
windows下的ide我推荐Microsoft Visual Studio 2019(VS2019),功能强大,可以说是C/C++ IDE的巅峰了,当然VS也可以写其他语言的代码,比如C#之类的,不过VS的C/C++比较出名罢了。Dev-C++已经过时啦,快来用VS吧

解题
argc是命令行参数的数目
( FILEL CHINA BEIJING SHANGHAI
运行输出
CHINABEIJINGSHANGHAI)
argv是参数字符串的数组
故*argv是一个字符串,也是argv[0]
++argv会使它指向下一个字符串
argv[]={"FILEL","CHINA","BEIJING","SHANGHAI"};//题目中argv的初始值可以看成是
e.g.
所以排除单个字符的选项C D
然后看选项A B
问题焦点在"CHINA" 就是 argv[1],或者说第一次++argv后的*argv是否会被输出(显然这是会的),故选A

源代码(不使用其它编译选项的)是
#include
int main(int argc, char *argv[]){
while(argc-->0){
++argv;printf("%s",*argv);}
return 0;
}
说一下心得
首先面对这种问题不要慌张,哪怕程序完整地输入进电脑也编译不出来;为什么,编译选项(以下省略一堆文字说明),出题老师极有可能编译的方式和你不一样(而使用编译选项也是开源项目里常见的状况);看一下gcc --help,它有多少行,就有多少种编译方法,其中有一个选项可以用于指定被include进编译过程的库(故可以不在源代码里include)
其次是代码的印刷质量问题,这在并非知名的出版物上十分明显,字间距的变化不一很可能会误导你对空格的判断,所以在代码的空格有歧义的地方,一定不要放弃调试,或者就当它在空格的问题上没有错误)
代码质量就不要问了,代码这个东西,应该出现在纸上,还是在电脑上,哪个更有质量,应该就不用问了(搞代码的也是要有点能调试出错误的感觉)

二进制11111111代表-127,是按原码规则来算。若按补码规则,二进制11111111算出来是-1。

文中说的是10000000代表-128。

详细描述如下:


[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

计算机将第1位作为符号位,0表示正数,1表示负数。

原码:原码很好理解,第1位是符号位,其余位表示数值。

反码:

(1)正数:正数反码是其本身。

(2)负数:去掉原码符号位,其余位按位取反。

补码:

(1)正数:正数补码是其本身。

(2)负数:在反码基础上加1。

由上述定义可知:

[+0] = [00000000]原 = [00000000]反 = [00000000]补

[-0] = [10000000]原 = [11111111]反 = [00000000]补

既然+0和-0的补码一致,所以只需保留一个(+0和-0原码不同,注意看符号位)。

这样一来,“[-0] = [10000000]原”相当于没有使用,于是规定:“[10000000]”为-128。

既然是“规定”,就不能按原码、反码、补码的规则计算了。设计计算机时就在硬件中设置为:10000000代表-128。

之所以引入补码,是为了消除减法,用加负数来替代减法运算,这样让CPU设计更简单。



这里说的是补码,不是二进制负数。
二进制负数10000001到11111111表示-1到-127,而10000000表示的就是最小负数-128。
而负数在计算机中是以补码存储的。
负数->(原码按位取反)反码->补码(反码+1)。所以-1到-127的补码就变成11111111到10000001。而0的原码补码还是0,-128的补码是10000000。
所以如上题说的,-128~-1计时10000000~11111111。

你在看看,还是不对,全1表示的是-1,
1000...才表示-128
反码概念,符号位不变,其他位取反(+1),全1反过来就全0,表示0的话就2个0了,所以负数在加个1
只有反码才这样

负数的补码等于反码+1

二进制11111111不是代表-127吗?
--是的。 11111111 是-127的原码。
为什么是-128 呢?
--谁说的? 骗你的。


C语言编程题求解!求大神助!在线等!
int main(void) { char *s = "***";for (int i = 7; i >= 4; i--)printf("%*s\\n", i, s);return 0;} include <stdio.h> int main(void) { for (int n = 0; n < 4; n++) { for (int i = 0; i < n; i++)putchar(' ');for (int i = 0; i < 7 ...

c语言问题,求大佬帮忙
ALL_Price=current_ml*(1-serve[serve_type].reduce)*oil[oil_type].price;printf("你的服务: %s,油: %s\\n",serve[serve_type].type,oil[oil_type].type);printf("总价格为%.2f,Welcome\\n",ALL_Price);} };int main(int argc, char* argv[]){ int weight_kg=0;...

C语言题求解啊,,,完全没思路TT
因为他可选择的是连续的,所以可以得到贪心策略:f[i]=max(f[i-1],0)+a[i],其中f[i]表示从第1道菜到第i道菜所获得的最大愉快度。注意:别以为这是DP,它其实就是贪心!因为这题的普遍无后效性,所以贪心也可以对。如果想要具体程序,请继续追问。

如何编写C语言程序?
4.按下F11编译并且运行源代码,得到运行结果:5.点击任意键返回源代码编辑界面可以继续进行开发,接下来就是C语言语法的学习了。

请教一道C语言编程题?
回答::::::丶六一快乐(◍˃̶ᗜ˂̶◍) ~常

c语言题怎么做?急!!!
Person p[n];(n根据实际情况设定,必须是个确定的正整数)“这条语句对应的教师总人数n(结构变量的总个数(可对应数组的总元素),用数组p[n]来表示),所有的教师可分为p[0]~p[n-1])”使用(格式、方法等)【部分的】提示:如p[i].name“结构变量名+.(一个点)+组成名”p[i].pos....

大一新生学习C语言,书上代码看不懂理解不了怎么办?
作为大一新生,学习C语言时遇到看不懂书上代码的情况是很正常的。以下是一些建议来帮助你解决这个问题:1.阅读代码注释:在阅读代码时,首先要查看代码中的注释。注释通常会解释代码的功能和实现方式,这有助于你理解代码的结构和逻辑。2.逐行分析代码:将代码分成小块,逐行进行分析。尝试理解每一行代码...

给c语言初学者的良心建议
一个好的练习方法是尝试使用C语言标准库中常用的函数来完成些小的项目或任务,并尝试自己实现这些函数的功能。比如可以实现字符串处理函数,文件操作函数等等。通过这样的实践,我们可以更好地理解这些函数的实现原理,并且提高自己的编程能力和解决问题的能力。 第六点:源码阅读。 阅读优秀的开源代码是提高自己编程能力和...

C语言—入门技巧,亲测推荐
技巧2: 使用FOR (;;) 或While (1)如果goto语句已经过时,那么对程序创建无限循环应该如何去做呢,这是一些硬件工程师可能会疑惑的问题。毕竟,之前都是通过创建一个goto语句然后再返回到main语句。解决这一问题就要利用C语言中已经存在的循环语句for和while。技巧3: 使用合适的条件语句 除代码的可读性...

大一新学期学C语言,这题完全做不来啊,求救求教,VC++6.0的计算机辅助计算...
输出一个整数,表示m到n之间所有能被17整除的整数的和。输入样例:10 30 输出样例:51 解题思路:本题需要使用循环结构和条件语句。首先,在输入m和n后,用for循环从m开始依次枚举到n,如果当前数字是17的倍数,则将其加入到sum中。最后输出sum的值即可。需要注意的是,减法不能得到负数,因此需要在...

西林区13979006853: c语言问题求助 求思路输入一个不多于5位数的正整数,要求:①求出它是几位数?②分别打印出每一位上的数字;③按逆序打印出该数字;④能够处理负数... -
俟姬欣乐:[答案] #include "stdio.h" void main() { char str[100]; int i; gets(str); printf("长度为%d\n",strlen(str)); for(i=0;iprintf("%-2c",str[i]); printf("\n"); for(i=strlen(str)-1;i>=0;i--) printf("%c",str[i]); } 这个可以满足要求

西林区13979006853: 求助C语言问题 -
俟姬欣乐: sizeof是编译时一元运算符,它的运算发生在编译是,只是简单的计算操作对象占多少内存空间"a0\0a0\0"是一个字符串常量,编译器会在后面添加'\0' 所以sizeof("a0\0a0\0")等于7 strlen在运行是计算,碰到第一个'\0'停止,不包括'\0' 所以strlen("a0\0a0\0")等于2

西林区13979006853: 求助C语言问题:一个程序可以计算100以内的+、—、*、÷四则运算 -
俟姬欣乐:[答案] #include main(){ float a,b; char c,d; printf("请输入你要计算的数据:"); scanf("%f%c%f",&a,&c,&b); switch(c){ case '+': printf("%f+%f= %f\n",a,b,a+b);break; case '-': printf("%f-%f= %f\n",a,b,a-b);brea...

西林区13979006853: 【求助】问个C语言的问题
俟姬欣乐: 首先,这个不是C语言的问题,java、C++其他语言写出来也一样有这些东东.两种叫法不一样,有交错,也有关联.堆栈,堆,数据段,代码段:堆栈一般指的是栈,栈占用的区域当然是栈区.堆区不说了.数据段一般包括已经初始化的静态变量,也就是RW段,还有未初始化的静态变量,也就是ZI段.静态变量也可分为全局静态变量和局部静态变量.代码段也就是RO段,我个人觉得它包括文字常量和程序代码.

西林区13979006853: 求助!!简单的c语言问题
俟姬欣乐: 这个问题有两个知识点 第一:a++的用法 在这个程序里swich(a++)改成swich(a)结果也不会变的,因为a++这个运算是先使用(术语叫返回)a之后再给他+1(就是进行++运算),在这里swich语句所接受到的值是'z' 第二:swich()语句的用法 ...

西林区13979006853: 4个C语言问题,求助
俟姬欣乐: #include <stdio.h> /*第一个程序 int main() { int i,sum=1; for(i=1;i<=10;i++) sum*=i; printf("%d\n",sum); return 0; } */ /*第二个程序 int count(n) { int i,sum=1; for(i=1;i<=n;i++) sum*=i; return sum; } int main() { int n,i,sum=0; scanf("%d",&n); for(i=1;...

西林区13979006853: 求助关于C语言的问题 -
俟姬欣乐: unsigned char *c 表示传入的是一个指针,用指针作参数,指针实际上就是内存的一个地址...

西林区13979006853: 请教一个C语言的问题 -
俟姬欣乐: void main() { int n; char arr[101]; printf("Enter a nember: "); scanf("%d", printf("Enter a char:\n"); //输入再传值不然只是一个空的数组...

西林区13979006853: c语言问题求助 -
俟姬欣乐: #include void main() { int x,xx,n,y; scanf("%d",&x); x%=1000000; n=0; xx=x; y=0; while ( xx ) { y*=10; y+=xx%10; printf("%d",xx%10; xx/=10; n++; } printf("%d是%d位数,各位逆序排列为%d.\n",x,n,y); }改成if else形式实现:#include void ...

西林区13979006853: C语言问题 求助! -
俟姬欣乐: for(j=0;j<3;j++);//这边分号#include<stdio.h> void main() {char a[9]={0,1,2,3,4,5,6,7,8},b[3][3],i,j; //char改成intfor(i=0;i<3;i++) for(j=0;j<3;j++)//这边多了一个分号b[i][j]=a[3*i+j];for(i=0;i<3;i++) {for(j=0;j<3;j++)//这边多了一个分号printf("%d",b[i][j]);printf("\n"); } }

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