c语言问题

2024-05-13 20:52

1. c语言问题

1
  答案应该是B,这个没什么好解释的(就是指针变量指向变量的地址)
2 
 答案应该是D   如果直接用字符串对字符数组初始化的话字符数组的长度要比实际字符串长度大1的
               因为字符串在字符数组中是以'\0'结束的,这个你也可以用sizeof() 分别测试一下
               我已经测试过了A比B大1的
3  
  答案应该是D,这个没的说,括号的作用就是避免二义
4
  答案应该是C,不要把 int *ptr();搞混了,题上的是返回一个整形数据的指针函数,后者是一个
                   返回指针的函数
5 
  答案是A,呵呵,这个你好好想一下就明白了
6 
  答案是A 4
7
  答案是23 这个你要好好看一看,特别是(&Arr+1)它和(Arr+1)区别很大,前者在地址上加了
           1而后者在地址上加了1*sizeof(int);
8.
  这道题你是不是搞错了,你仔细看看有很多错误的。
9.
 答案是 B 为了帮助你理解,对此程序我写了段代码
#include
  void main()
{
   void func(char str[100]);
   char str[100];
   printf("%d\n",sizeof(str));//答案是100
   func(str);
     
}
   void func(char str[100])
{
   printf("%d\n",sizeof(str));//答案是4

	
}
为什么会出现这种情况呢,原因是因为两者有着本质性的区别,第一个sizeof(str)中的str是一个
地址常量,它索引着一段大小为100的内存堆,而第二个sizeof(str)中的str是一个字符指针变量
sizeof(str)的结果就是一个字符指针变量所具有的内存,它的内存应该是为4的
10
  答案是D
二:
 1.
错,应该放在静态存储区(或全局数据区的)
2
 对
3. 
对
4.
错,不可能是float 型的
5.
对
三
1. int main(void)
	{
		Unsigned char index = 0;//这个地方应该是unsigned int index=0;注意第一个u不能大写
		While(index < 256)
		{
			index +=index;
			index++;
		}
			Printf(“index value %d\n”,index);
			Return 0;
	}
2.
char*f()
{     //应该是static char s[4]={'0','1','2','3','\0'};
	Char s[4]={‘1’,’2’,’3’,’0’};//关键字的开头是不能大写的,还有就是符号‘也不对
	Return s;//ruturn 第一个字母也不能大写,
}

  Void main()
{
	Char *s;//应该是char 第一个字母不能大写
   s=f();
	printf(“%s”,s);
}
//你这道题的本意是想通过函数调用来获得一个字符串的首地址从而在主函数中输出,
//但是,有一点这个程序没有考虑到那就是当被调函数结束后那个char s[4] 所占内存将自动
//操作系统回收,因为它只是个动态局部变量,所以要想达到目的应该是声明成静态变量的
//static char s[4],还有一点错误就是字符串都要'\0'结尾否则输出的字符串的将不会是你想要的那样

3.
这道题没什么错误,能达到预期的效果,除了有几处拼写错误,例如你第一个是GetmMnory而第二个是
GetMemory这一点你注意一下就可以了
void GetMenory(char**p)
{
	*p = (char*)malloc(100);
}
Void Test(void)
{
	char*str = NULL;
	GetMemory(&str);
	strcpy(str,”hello morld”);
	printf(str);
}
4.
这道题没什么语法错误,除了单引号格式不对,还有就就违反了字符串都要以'\0'结尾这一约定
5.
这道题没有什么语法错误,就是有个字符串函数写错了strcopy,应该写成 strcpy的
四:
你这道题具体是让做什么的,我不是太明白,是让建一个动态链表啊还是静态链表啊,
请你把问题写详细点
五。


int judgment(int a[],int length )//这个函数是判断是否对称的

{
	for(int i=0;i<=length/2;i++)
		if(a[i]!=a[length-i])
		
			break;
		if(i==length/2+1)
			return 1;
		else 
			return 0;
	
}
void main(void)
{
	int a[10];
	int num;
        printf("请输入你要检测的数\n")	;
        scanf("%d",&num);
	int length=0;

//这个循环是为了把整数拆开放到一个整形数组中,拆开以后放进数组里面的刚好是和正常的数
//反序的,不过这个不会影响结果的,因为只要数对称反序后一样对称,如果数不对称反序后依然不对称
do
 {
   int temp=num%10;
   a[length]=temp;
   num=num/10;
   length++;
  } while(num>=10);
a[length]=num;
if( judgment(a,length))
printf("是\n");
}
如果这个程序有什么不懂得话,可以提出来,随时帮你解析

希望我的答案对你有点帮助……

c语言问题

2. c语言问题

c语言经典100题:
【程序1】
题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少 
1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去
掉不满足条件的排列. 
2.程序源代码: 
main()
{
int i,j,k;
printf("\n");
for(i1;i<5;i++) /*以下为三重循环*/
for(j1;j<5;j++) 
for (k1;k<5;k++)
{
if (i!k&&i!j&&j!k) /*确保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}

【程序2】
题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 
1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 
2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else if(i<200000)
bonusbonus1+(i-100000)*0.075;
else if(i<400000)
bonusbonus2+(i-200000)*0.05;
else if(i<600000)
bonusbonus4+(i-400000)*0.03;
else if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}

【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果.请看具体分析:
2.程序源代码:
#include "math.h"
main()
{
long int i,x,y,z;
for (i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("it is the %dth day.",sum);}

【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
      情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
 case 1:sum0;break;
 case 2:sum31;break;
 case 3:sum59;break;
 case 4:sum90;break;
 case 5:sum120;break;
 case 6:sum151;break;
 case 7:sum181;break;
 case 8:sum212;break;
 case 9:sum243;break;
 case 10:sum273;break;
 case 11:sum304;break;
 case 12:sum334;break;
 default:printf("data error");break;
}
sumsum+day;  /*再加上某天的天数*/
 if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/
  leap1;
 else
  leap0;
if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);}
【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出.
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小.
2.程序源代码:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{tx;xy;yt;} /*交换x,y的值*/
if(x>z)
{tz;zx;xt;}/*交换x,z的值*/
if(y>z)
{ty;yz;zt;}/*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}

【程序6】
题目:用*号输出字母c的图案.
1.程序分析:可先用'*'号在纸上写出字母c,再分行输出.
2.程序源代码:
#include "stdio.h"
main()
{
printf("hello c-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}

【程序7】
题目:输出特殊图案,请在c环境中运行,看一看,very beautiful!
1.程序分析:字符共有256个.不同字符,图形不一样. 
2.程序源代码:
#include "stdio.h"
main()
{
char a176,b219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}

【程序8】
题目:输出9*9口诀.
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i1;i<10;i++)
{ for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}

【程序9】
题目:要求输出国际象棋棋盘.
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
}

【程序10】
题目:打印楼梯,同时在楼梯上方打印两个笑脸. 
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}

【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
main()
{
long f1,f2;
int i;
f1f21;
for(i1;i<20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%20) printf("\n");/*控制输出,每行四个*/
f1f1+f2; /*前两个月加起来赋值给第三个月*/
f2f1+f2; /*前两个月加起来赋值给第三个月*/
}
}

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数.
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数. 
2.程序源代码:
#include "math.h"
main()
{
int m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{ ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe total is %d",h);
}

3. c语言问题

这个问题很简单吗!
问题的关键是在于这一句;h[0].p=h[1].p=h;
这是一个赋值运算,它的运算顺序是从右往左。由于h代表的是数组h的数组首地址。
那么h[1].p=h就将h[1]中的结构体指针p指向了数组首地址,在地址值上等同于h[0];
而h[0].p=h[1].p又将h[0]中的结构体指针p指向了h[1].p,而h[1].p.即是h[0]的地址。
那么(h[0].p)->x,也就是h[0].x=1,(h[1].p)->y)==(h[0].p)->y)=h[0].y=2;
明白了没 
所以就选A了!

c语言问题

4. c语言问题

比如,您输入123,您想输出是321。先将程序给出来,再做说明。
main()
{
 int inum, onum = 0;

 printf("Please enter the number: ");
 scanf("%d", &inum);
 while (inum > 0)
 {
  onum = (onum * 10) + (inum % 10);
  inum = inum / 10;
 }
 printf("The reverse number is %d.\n", onum);
}

要输入一个整数,使其三各位数字反序输出,您至少需要两个变量来储存这两个数吧,所以定义inum储存输入的数,onum储存输出的数。解决问题的思路是,将输入数的个位分离出来。比如,您输入的是123,第一轮循环,inum % 10 能得到3. 得到3后,下一个目标是2。2在中间那个位置,怎么办呢?当我们将123的3“丢掉”,inum = inum /10 能使inum重新赋值12。 在第二轮循环的时候,又能用 inum % 10 将2分离出来。请记住这一轮inum已经是12了。而在这一轮inum = inum / 10 又将inum赋值1。 直到下一轮 inum = inum / 10 将 inum赋值 0。好了,说到这里,希望你明白怎样将输入的数逐个分离出来。那分离出来的数字怎么适当储存在onum里面呢?
定义onum时将初始化为0.第一轮循环时,onum = (onum * 10) + (inum % 10);操作是onum = (0 * 10) + ( 3 ),结果是 onum=3.第二轮循环时,onum = (onum * 10) + (inum % 10);操作是onum = (3 * 10) + (2),结果是onum=32。第三轮onum = (onum * 10) + (inum % 10); 操作是 onum = (32 * 10) + (1),结果是onum = 321。这个程序您不能输入非正整数的数。如何解决输入的是负数呢?留待您思考。这也只是解决这个问题的其中一个方法,你再能探讨其它方法。 


如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

5. c语言问题

int a = 14;
a+=a-=a*=a;
这个结果是 : 0
先计算 a*=a ,即 a=a*a=14*14=196
然后计算a-=a ,即 a = a-a = 196-196 =0
最后计算a+=a,即a=a+a = 0+0=0

int a = 14;
a+a-a*a;
这个就是:14+14-14*14=28-196=-168

希望对你有帮助。。。。仍有问题可以HI我。。。。

c语言问题

6. c语言问题

ListEmpty(L): 若线性表为空,返回true,否则返回false。        ClearList(*L):将线性表清空。        GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。        LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。        ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。        ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。        ListLength(L):返回线性表L的元素个数。【摘要】
c语言问题【提问】
您好,我是百度问一问的合作老师凡凡,擅长帮您解决烦恼,现在已从事行业16年,很高兴为您服务~【回答】
什么问题呢亲亲【回答】
【提问】
【提问】
【提问】
为什么这个基本操作和我课表上不一样 就是这个写法【提问】
亲亲看不了图片需要您打字哦【回答】
这个太长了打不了字【提问】
这个我这边图片看不了哦亲亲模糊的【回答】
ADT 线性表(List)

Data

        线性表的数据对象集合为{a1,a2,......,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个后继元素。数据元素之间的关系是一对一的关系。

Operation

        InitList ( *L ) : 初始化操作,建立一个空的线性表L。

        ListEmpty(L): 若线性表为空,返回true,否则返回false。【回答】
ListEmpty(L): 若线性表为空,返回true,否则返回false。

        ClearList(*L):将线性表清空。

        GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。

        LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。

        ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。

        ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。

        ListLength(L):返回线性表L的元素个数。【回答】
希望我的回答能帮助到您,如果对我的服务满意,请给个赞哦,祝您一切顺利!【回答】
如果我定义了一个指针p一个数组a[10],我想要p指向a[5],是不是应该这样写p=&a[5]【提问】
[吃鲸][吃鲸][吃鲸]【提问】
对【回答】
【问一问自定义消息】【回答】

7. c语言问题

首先D肯定是对的,对a[0][0]赋值。然后b项和C项错在数组的下标超范围了,定义的时候是a[3][3],就是定义了一个3行3列的二维数组,但是在引用时最多只能到a[2][2],因为下标是从0开始的。

c语言问题

8. c语言问题

输出了一维、二维、转置数组。亲自测试:2,3,和4,3数组都没有问题


#include #include int main(){    int m;  //行    int n;  //列    int i,j,k;//    int a[50]={0};    printf("请输入m的值:\n");    scanf("%d",&m);    printf("请输入n的值:\n");    scanf("%d",&n);    k = n*m;//共n*m个元素    printf("请输入共%d个数字:\n",k);    for(i=0; i<k; i++)    {        printf("请输入第%d个数字:",i+1);        scanf("%d",&a[i]);    }    printf("\n输入m*n的一维数组是:\n");    for(i=0; i<k; i++)    {        printf("%3d",a[i]);    }    printf("\n将m*n一维数组转换成m行n列的二维数组输出:\n");    //将m*n一维数组转换成m行n列的二维数组输出    for(i=0; i<k; i++)    {        printf("%3d",a[i]);        if((i+1)%n == 0)        {            printf("\n");        }    }    printf("\n将m*n数组转置输出结果:\n");    //将二维数组转置输出结果    for(i=0; i<n; i++)    {        for(j=0; j<m; j++)        {            printf("%3d",a[i+n*j]);        }        printf("\n");    }    return 0;}
最新文章
热门文章
推荐阅读