C语言简单问题 C语言最简单程序

作者&投稿:挚紫 (若有异议请与网页底部的电邮联系)
/* 详细解释如下,希望你能好好看明白,有什么不对的地方也请你指出来!谢谢!
* unionp.c
*
* Created on: 2011-3-6
* Author: banxi1988
* 已知字符0的ascii码值的十进制是48,
* 且数组的第0个元素在低位。则以上运行结果是多少?
* 能详细解释下最好。谢谢
*/

#include<stdio.h>
int main() {
union {
short i[2];
long k;
char c[4];
} r, *s = &r;
s->i[0] = 0x39;
s->i[1] = 0x38;
printf("%x\t%x\t\n",s->i[0],s->i[1]);
printf("%x\t\n",s->k);
printf("%x\t%x\t%x\t%x\t\n", s->c[0],s->c[1],s->c[2],s->c[3]);
return 0;
}
/***
*原题的输出结果是:39
*为了更好的说明问题:我特意输出了更多的数据:
*输出结果如下:
39 38
380039
39 0 38 0
知识点说明:
联合中的所有成员引用的是内存中的相同位置。
当你想在不同时刻把不同的东西存储于同一个位置时,联合就可以适合使用!
对于存储空间:如果联合的各个成员具不同的长度。联合的长度就是它最大成员的长度。
因为short为16位。所以最大长度为2*16。
long的长度是32位。
而char的长度是8位。所以最大长度是4*8。
综上最大长度为:32.
下面对数据转化:
0x39 这个十六进制数:转化为二进制数为:100111
0x38 为:100110
32位: 00000000000000000000000000000000
两个16位short: 0000000000000000 | 0000000000000000 (中间的坚是为了好看)
初始化后: 0000000000100110 | 0000000000100111
而对于char c[4]来说这个32位的空间的由4个单元来分的:
于是成为如下的: 00000000| 00100110 | 00000000 | 00100111
所以对应的char元素为: c[3] c[2] c[1] c[0]

所以才有上面打印出来的39 0 38 0 (且数组的第0个元素在低位,这个题目也有说明)

已知字符0的ascii码值的十进制是48,
原题中这个条件没有用到,要用到的话,则要写成:
printf("%c",s->c[0]);输出结果是什么?
这个时候,因为0x39 转化为十进制是57
而0对应的字符是48。所以 57对应的字符是9。

嗯,问题到这这个问题相信你应该了解得差不多了吧!
*/

这个联合是四个字节,当执行s->i[0]=0x39;s->i[1]=0x38;这两个语句后,四个字节的内容如下(对于每两个字节,低字节在前,高字节在后):
39003800
printf("%x\n",s->c[0]);//这语句是以16进制输出联合的第一个字节,因此输出39
printf("%x\n",s->c[2]);//这语句是以16进制输出联合的第三个字节,因此输出38

;
#include<string.h>
using namespace std;
bool isdiffer(int n)
{
int a[6];
int i=0,j,k;
while(n)
{
a[i++]=n%10;
n/=10;
}
bool flag=true;
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
{
if(a[k]==a[j])
{
flag=false;
return flag;
}
}
return flag;
}
void main()
{
int i;
for(i=1;i<1000;i++)
if(1000<=i*i*i&&i*i*i<=9999&&100000<=i*i*i*i&&i*i*i*i<=999999&&isdiffer(i*i*i)&&isdiffer(i*i*i*i))
printf("%d\n",i);
}

//程序比较繁杂,但在vs2005下实现了,vc6要改下头部。#include <iostream>
//改为#include <iostream.h>
//程序执行结果是
//18

C语言的简单问题~

第一行的意思Y没有定义声明 解决:int y;
第二 if(x<1000);多了一个分号

其他一样

C语言:通用程序设计语言

C语言的简单问题。/。.,.,
答:for语句是遍历str[]。isalpha(str[i])是判断str[i]是否是字母。j的处置是0,就是将str[]里面的字母填充至str[0]开始的位置。在C语言中,char字符数组的结束符为‘\0’

C语言的简单问题
答:B getchar是接受单个字符 char c;c=getchar(); 接受字符q。while((c=getchar())!='?') 接受字符u。putchar(++c); ++c是先将c所对应的ASCII码+1再输出,即输出u 的下个字母v。然后循环,遇到'?'时,while里的语句不成 立,所以不执行putchar,直接跳出循环。C 原样输出,最后碰到?

C语言4个简单问题不懂 求解
答:A1.对于字面常量4,编译器认为是int型的,而4.0是double型的,因此虽然4/3的值等于1.333333,但是当它转换成整型之后就是1了,而对于4.0那个表达式,它的结果是double型的,因此可以保留小数部分。这个问题涉及到的知识是类型的隐式转换。A2.abs()函数是接受整型参数,返回其绝对值,而fabs()函数...

几个简单的c语言小问题 解决一题给十分
答:一。 d=20 if(a) d=d-10; a=0 if条件语句为假不执行 else if(!b) 不执行 if(!c) d=15; else d=25;是 else if(!b)下的语句 也不执行 二。 x=1 y=z=x; 赋值语句 x先赋给z 再赋给y x=y==z 先判断条件语句 y==z 是真 的...

C语言编程问题,初学者,麻烦简单点,可以看懂的,谢谢(*°∀°)=3?_百...
答:一、a为0,bx+c=0,求得一解。二、a不为0,按照一元二次方程公式:当判别式b^2-4ac,>0则两个解,=0则一个解,<0则无解。最后,代入公式求解。函数参数:a,b,c及存放结果的数组x。返回解的个数。下面是代码:include <stdio.h> include <math.h> int fun(double a,double b,...

C语言的一个简单问题
答:10<a<15 在C语言中相当于:(10<a)<15,10<a得到一个0或是1的值,然后这个0/1再和15比较,结果是1 要想正确表示数学关系,应该写成这样:10<a&&a<15 2.a==11 || a==12 || a==13 || a==14 从左向右依次判断,如果发现a等于11,12,13,14其中之一时,整个表达式返回值为1,否则,...

C语言的简单编程问题,希望大哥大姐指点,万分感谢
答:二、C中的整型常量默认为int类型,int类型是一个有符号类型(有符号类型和无符号类型请查询相关资料)三、char类型数据在计算机中占一个字节,int类型占4个字节,char类型是一个有符号类型 四、197在计算机中存放的二进制码为:0000... 11000101(int类型占4个字节,11000101前面有3*8=24个0)同样198...

简单的C语言问题?
答:答案是,避免程序出错。因为,include头文件,就会告诉编译器检查类型,比如c = max(a,b); 其中a,b,c都是int类型,那么如果没有头文件,就会出现编译器猜测你的函数是 int max(int a, int b);但实际上你定义了double max(double a, double b);这是程序结果就会出错。但如果你include了头文件...

C语言简单题目,求帮忙`做完还有追加分~~
答:1 include<stdio.h> int main(){ int n;scanf("%d",&n);printf("个位数 :%d\n",n%10);printf("十位数 :%d\n",n/10%10);printf("百位数 :%d\n",n/100);return 0;} 2 include<stdio.h> int main(){ int m,n;scanf("%d %d",&m,&n);printf("%.2lf %d\n",m*1....

C语言简单编程问题
答:include <stdio.h> int main(){ double x,y;scanf("%lf",&x);if(x<0)y=2*x-1;else if(x==0)y=0;else y=2*x+1;printf("%g\n",y);return 0;}