一、C语言系列(计算型):
1、数据类型 int占4byte char占1byte (32bit的系统),求下面sizeof的大小:
(1)sizeof练习
char str[] = "Hello"; sizeof(str) = 6;
char *p = str; sizeof(p) = 1;
void *pbuf = malloc(100); sizeof(pbuf) = 4;
void func(char string[100])
{
int a = sizeof(string); sizeof(a) = 4;
}
char *src = "world";
int len = strlen(src); len = 5;
(2)结构体对齐
typedef struct{
char a;
int b;
char c;
}test_struct;
test_struct g_test_array[5];
请问: sizeof(test_struct) = 12;
sizeof(g_test_array) = 60;
2、请计算如下结果:
(1)int i=1, j = 2;
int k = i +++j
k = 3 //先执行i + j = 3, 然后执行i ++
(2) j = 3 * 3 = 9
product(i ++) = i ++ * i ++ = 3 * 4 //此时i = 5
product(++ i ) = ++i * ++i = 6 * 7 = 42
#define product (x) (x*x)
int main()
{
int i = 3,j,k;
j = product(i ++); //3 * 4
k = product(++j); //6 * 7
printf("j = %d,k = %d\n",j,k); //12 42
}
(3)uint 型数据和int 型数据运行后,自动转换为uint类型数据,-14转为uint很大:c > 1
char foo(void){
unsigned int a = 6;
int b = -20;
char c = ;
(a + b > 6)?(c = 1):(c = 0)
}
(4)a = b + 2 * b + 2 = 11
#define SQR(x) (x*x)
void main(){
int a,b = 3;
a = SQR(b + 2);
printf("a = %d\n",a)
}
# define SQR(x) ((x) * (x)) 结果为25
(5)int **a[3][4]这个数组占据多大空间?
sizeof问题:3*4*4 = 48
(6)char var[10]
int test(char var[]){
return sizeof(var); //var[]等价于*var ,结果为4
}
(7)计算结果:
#include<stdio.h>
int main(){
printf("%f",5); //0.000000
printf("%d",5.01);//是一个大数
}
3、程序实现:已知从1-100 范围内挑选99个整数,没有顺序的
存储在全局数组a中,请编程找出缺少的那个整数。
思路:
sum1=1+2+3+4+……+100
sum2=数组元素之和
sum1-sum2就是没有的那个。
#include <stdio.h>
int sum1_t(void){
int i = 0;
int sum1 = 0;
for(i = 1;i <= 100;i ++){
sum1 = sum1 + i;
}
return sum1;
}
void main(void){
int sum1 = sum1_t();
int sum2 = 0;
int a[99]; //存放无序的