一维数组
// 1、返回数字n中的数字个数
int n = 0;
int a = 0;
printf("输入:");
scanf("%d" , &n);
int count = 0;
do {
a = n / 10;
count++;
n = a;
} while (a != 0);
printf("%d" , count);
// 2、用for循环计算从1~n的和
int s = 0;
int n = 0;
printf("输入:");
scanf("%d" , &n);
for (int i = 1; i <= n; i++) {
s += i;
}
printf("s = %d" , s);
// 3、用for循环计算1~n的平方和
int n = 0;
int s = 0;
printf("输入:");
scanf("%d" , &n);
for (int i = 1; i <= n; i++) {
s += i * i;
}
printf("s = %d" , s);
// 4、用for循环计算一个整数n的阶乘
int n = 0;
int a = 1;
printf("输入:");
scanf("%d" , &n);
for (int i = 1; i <= n; i++) {
a *= i;
}
printf("%d" , a);
// 5、fanbonacci数列,打印输出,要求,每5个数占一行
int a[20] = {1 , 1};
for (int i = 0; i < 20; i++) {
a[i + 2] = a[i] + a[i + 1];
printf("%-4d " , a[i]);
if ((i + 1) % 5 == 0) {
printf("\n");
}
}
// 《第 04 讲:一维数组》
// 1. (*)先调试,调试成功后抄写下列程序:
#define SIZE 10
int a[SIZE] = {0},i= 0;
for(i = 0; i < SIZE; i++){
a[i] = i+10;
printf("a[%d] = %d\n", i, a[i]);
}
// 2. (*)将第一题中的数组a反向输出。
#define SIZE 10
int a[SIZE] = {0} , i = 0;
for (i = SIZE - 1; i >= 0; i--) {
a[i] = i + 9;
printf("a[%d] = %d\n" , i , a[i]);
}
// 3. (*)对第一题中的数组进行求和操作,打印计算结果。
#define SIZE 10
int sum = 0;
int a[SIZE] = {0},i= 0;
for(i = 0; i < SIZE; i++){
a[i] = i+10;
printf("a[%d] = %d\n", i, a[i]);
sum += a[i];
}
printf("***********\n");
printf("sum = %d" , sum);
// 4. (**)计算第一题数组连减,打印计算结果。
#define SIZE 10
int sub = 0;
int a[SIZE] = {0},i= 0;
for(i = 0; i < SIZE; i++){
a[i] = i+10;
printf("a[%d] = %d\n", i, a[i]);
sub -= a[i];
}
printf("sub = %d" , sub + a[0]);
// 5. (**)随机产生 20 个 10~50 的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各元素之和。
int a[20] = {};
int i = 0;
int sum = 0;
for (i = 0; i < 20; i++) {
a[i] = arc4random() % 41 + 10;
printf("%-3d" , a[i]);
}
for (i = 0; i < 19; i++) {
for (int j = 0; j < 19 - i; j++) {
if (a[j] < a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("\n");
for (i = 0; i < 20; i++) {
printf("%-3d" , a[i]);
sum += a[i];
}
printf("\n");
printf("max = %d\n" , a[0]);
printf("min = %d\n" , a[19]);
printf("sum = %d\n" , sum);
printf("average = %d\n" , sum / 20);
// 6. 编写一个程序,输入两个包含 5 个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组。
char a[5] = {'i' , 'P' , 'h' , 'o' , 'n'};
char b[5] = {'a' , 'n' , 'd' , 'r' , 'o'};
char c[10] = {0};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4 - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
if (b[j] > b[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%c " , a[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%c " , b[i]);
}
printf("\n**********\n");
for (int i = 0; i < 10; i++) {
if (i < 5) {
c[i] = a[i];
} else {
c[i] = b[i - 5];
}
}
for (int i = 0; i < 10; i++) {
printf("%c " , c[i]);
}
printf("\n**********\n");
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9 - i; j++) {
if (c[j] > c[j + 1]) {
int temp = c[j];
c[j] = c[j + 1];
c[j + 1] = temp;
}
}
}
for (int i = 0; i < 10; i++) {
printf("%c " , c[i]);
}
// 7. (***)给定某年某月某日,输出其为这一年的第几天。
int year = 0 , month = 0 , day = 0;
int n = 0;
int m[12] ={31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31};
printf("输入:");
scanf("%d-%d-%d" , &year , &month , &day);
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
m[1] = 29;
} else{
m[1] = 28;
}
if (month == 1) {
printf("%d" , day);
}else{
for (int i = 0; i < month - 1; i++) {
n += m[i];
}
n += day;
printf("%d" , n);
}
// 8. (**)编写整型值数组排序程序(冒泡排序、选择排序、快速排序--升序)
//冒泡法
int a[] = {3,-9,32,77,63,-24,14,0,21,45};
int a[] = {3 , -9 , 32 , 77 , 63 , -24 , 14 , 0 , 21 , 45};
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9 - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < 10; i++) {
printf("%-4d" , a[i]);
}
选择法
int a[] = {3 , -9 , 32 , 77 , 63 , -24 , 14 , 0 , 21 , 45};
int k = 0;
for (int i = 0; i < 9; i++) {
k = i;
for (int j = i + 1; j < 10; j++) {
if (a[k] < a[j]) {
k = j;
}
}
if (i != k) {
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
for (int i = 0; i < 10; i++) {
printf("%-4d" , a[i]);
}
// 9、(***)找出下列整型数组中最大和最小值及其所在位置 i。
int a[] = {5,-9,32,77,64,-24,14,0,21,45};
int max = 0 , min = 0 , m = 0 , n = 0;
int a[] = {5 , -9 , 32 , 77 , 64 , -24 , 14 , 0 , 21 , 45};
max = a[0];
min = a[0];
for (int i = 0; i < 10; i++) {
if (max < a[i]) {
max = a[i];
m = i;
}
if (min > a[i]) {
min = a[i];
n = i;
}
}
printf("max = %d 下标为%d\n" , max , m);
printf("min = %d 下标为%d" , min , n);
// 10、(*)把 str1, str2, str3 合并到 result 数组中。 char result[50] = {0};
// char str1[] = "Lanou ";
// char str2[] = "23_class ";
// char str3[] = " is niu best!"; 结果:“Lanou 23_class is niu best!”
char result[50] = {0};
char str1[] = "Lanou ";
char str2[] = "23_class ";
char str3[] = " is niu best!";
strcat(result , str1);
strcat(result , str2);
strcat(result, str3);
printf("%s" , result);
// 11、(**)找出下面程序的错误:
char string[10], str1[10];
int i;
for(i = 0; i < 10; i++){
str1[i] = 'a';
}
strcpy(string, str1);// strcpy函数遇到 \0才会停止。
printf("%s" , string);
// 12、(**)下面这个程序执行后会有什么错误或者效果:
unsigned char str[10], i; //unsigned char 255,超过会溢出
for(i = 0; i < 256; i++){
str[i] = i; //str[i]越界
}
unsigned char str[10], i;
for(i = 0; i < 11; i++){
if (i == 10) {
printf("^^^^^^^%c\n" , str[i]);//可以越界表示,不确定值
} else {
str[i] = i;
}
}
printf("**********");

浙公网安备 33010602011771号