请教C程序设计习题

来源:百度知道 编辑:UC知道 时间:2024/07/02 00:57:28
第一题:
union st
{
int a;
char b;
}
main()
{
union st s;
char *p=(char*)&s;
s.a=0x3132;
s.b=0x33;
printf("%c",*p);
}
标答是3,我算的2

第二题:
int a=2;
int f(int n)
{static int a=3;
int t=0;
if(n%2){static int a=4; t+=a++; }
else {static int a=5; t-=a--;}
return t+a++;
}
main()
{int s=a,i;
for(i=o;i<3;i++)s+=f(i);
printf("%d\n",s);
}
标答是9,我算的18

第三题:
以下程序运行后输入:3,abced<回车>,则输出结果是?
#include "stdio.h"
#include "string.h"
void move(char *str,int n)
{ char temp;
int i;
temp=str[0];
for(i=0;i<=n-1;i++)
str[i]=str[i+1];
str[n-1]=temp;
}
void main()
{
char s[50];
int n,i,z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1;i<=n;i++)
move(s,z);

很考察基本功啊,我做个解答,还望大家一起讨论
1 涉及到强制转换截取的问题

本来s的size是8,但是经过强制转换后变成char*4个字节,这样它只保留上面4个字节的内容 就是s.b=0x33 也就是3

2 涉及到的是static和局部变量问题

static是静态变量,在一个代码段内只运行一次,之后该值相当于全局变量
程序中a=3在f函数中,先运行一次,之后a=4和a=5在if里,走到if里的时候会“暂时”替换掉a的值,但是一旦走出if,a又恢复到f函数中的值。
切记static只在程序中运行一次!!

3很简单了
4是递归 自己慢慢算吧