小程序中的小问题

来源:互联网 发布:动态恐怖漫画软件 编辑:程序博客网 时间:2024/05/29 18:37

1.将数组A中的内容和数组B中的内容进行交换。(数组一样大) 

 

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a[5] = { 0 };

int b[5] = { 0 };

int i = 0;

int temp = 0;

printf("请输入a数组的五个值\n");

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)

{

scanf("%d", &a[i]);

}

for (i = 0; i <sizeof(a) /sizeof(a[0]); i++)

{

printf("%d  ", a[i]);

}

printf("\n");

printf("请输入b数组的五个值\n");

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

scanf("%d", &b[i]);

}

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

printf("%d  ", b[i]);

}

printf("\n");

for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)

{

temp = a[i];

a[i] = b[i];

b[i] = temp;

}

printf("a数组为:\n");

for (i = 0; i <sizeof(a) /sizeof(a[0]); i++)

{

printf("%d  ", a[i]);

}

printf("\n");

printf("b数组为:\n");

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

printf("%d  ", b[i]);

}

system("pause");

}

 

这个程序是用来交换两个数组中的值的,这里我并不想说是如何交换两个数组中的值,这个程序并不难,我是想说一下在编写程序的时候应该要注意一些小细节,小问题。

  首先,第一个 int a[5] = { 0 };int b[5] = { 0 };int i = 0;int temp = 0;

对你程序开始的时候所定义的一些变量要进行初始化,不初始化虽然我没发现什么问题,但是据我所了解,有的时候程序会给一个默认值,就拿int来说,在定义int的时候,如果是局部变量,那么这个int值的默认值会是一个随机值,如果你的int是一个全局变量,那你入股偶在定义的时候不给他初始值那他的默认值就是0;所以在定义的时候为了避免出现问题还是给他的一个初始值。数组在定义的时候也要给他一个初始值,在花括号里边给他一个值,没给的就是默认为0.如果你所定义的是一个指针那就是需要 int *p=NULL;在编写程序的时候要养成,所有定义都要给他初始值的良好习惯。

 

  

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++) 再看这个语句,正常的在for循环中会写i<5;但是这里为什么写这个语句呢。这里就是为了以后写项目所着想了,如果你在编写大程序大项目的时候,一旦还是以前那样去写程序,当你的数组的元素数目发生变化的时候,那么你修改起来就十分的困难,所以可以写成sizeof(a)/sizeof(a[0]),这样无论你的数组存的是int类型还是char类型都可以很好的计算你的元素个数,sizeof求的是你所占的内存。

 

2. 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。 

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

float sum = 1.0;

int i = 0;

float k = 2.0;

for (i = 2.0; i <=100; i++)

{

if (i % 2 == 0)

{

sum = sum - (1 / k);

k++;

}

else

{

sum = sum + (1 / k);

k++;

}

}

printf("总和为%f", sum);

}

  这个项目中你的sum求出来是一个小数,如果你将sum定义成int类型的那你输出来的就是0;

if (i % 2 == 0)

{

sum = sum - (1 / i);

k++;

}

这是我最初写的程序,大部分人的思路肯定也是这样,但是求出来是错误的,因为1是整型数据,i是整形数据,那1/i得出来的也一定是整型数据,i要比1要大所以求出来的都是小数,所以最终数据如果还是整形的话那你求出来的就是0,数据没有小数点位。我是通过重新定义了一个变量k来替代i。其实这个程序解决问题的方法有两种,1是像我刚刚做的那样将i变成一个float类型,2就是将1变成float数据,只要其中一个数据是float类型,那么数据就会被强制类型转换,变成精度高的那个类型。所以可以定义一个数字float a=1.0,将之后运算中的1全都用a来代替就可。