1、
(1)分析程序, 写出输出结果?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");
//会输出Got a valid pointer。原因:malloc(0)会返回一个特别的可以被成功释放的指针。
(2) 分析程序, 写出输出结果?
char * GetStr()
{
char *tmp;
tmp = "123"
return tmp;
}
void main()
{
printf("%s.\n", GetStr());
}
//会输出123。原因:返回指针指向常量123,常量在程序退出之后才释放。
2、输入一个正整数,输出原数并逆序打印出各位数字。
//例如:原数:123456 逆序:654321
//逆序函数原型:int invers_int(int x)(需要用到递归实现)
#include <stdio.h>
int invers_int(int x)
{
printf("%d", x % 10);
x /= 10;
if (x == 0)
return 0;
else
return(invers_int(x));
}
int main(void)
{
int num = 0;
printf("Input numbers:");
scanf("%d", &num);
printf("原数:%d\n", num);
printf("逆序:");
invers_int(num);
return 0;
}
3、按以下规律翻译密码:将每一个字母变成它后面的字母,例如,将A变成B,B变成C,…,Z变成A,非字母字符不变,“!”作为电文结束标志。
#include <stdio.h>
int main(void)
{
char c;
while ((c = getchar()) != '!')
{
if ((c < 'Z'&&c >= 'A') || (c < 'z'&&c >= 'a'))
printf("%c", c + 1);
else if (c == 'z')
printf("a");
else if (c == 'Z')
printf("A");
else
printf("%c", c);
}
}