资源描述
第九次课上课程序及习题参考程序
1、一维数组的下标法访问:
int main(void)
{
int a[10];
int i;
for(i=0; i<10; i++)
{
scanf("%d", &a[i]);
}
for(i=0; i<10; i++)
{
printf("%d", a[i]);
}
return 0;
}
2、一维数组的指针法访问:
int main(void)
{
int a[10];
int *p;
for(p=a;p<(a+10);p++)
{
scanf("%d", p);
}
for(p=a;p<(a+10);p++)
{
printf("%d ", *p);
}
return 0;
}
3、冒泡排序中指针做形参
#include <stdio.h>
void bubble_sort(int arr[], int n);
int main(void)
{
int arr[10], i;
printf("Please input 10 numbers:\n");
for ( i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
bubble_sort(arr, 10);
printf("The sorted numbers:\n");
for ( i = 0; i< 10; i++)
{
printf("%4d", arr[i]);
}
printf("\n");
return 0;
}
void bubble_sort(int *p, int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for ( j = 0; j< n - i - 1; j++)
{
if(p[j] > p[j+1])
{
temp = p[j];
p[j] = p[j+1];
p[[j+1] = temp;
}
}
}
}
4、有序表的有序插入
#include <stdio.h>
void insert(int a[], int n, int num);
int main(void)
{
int a[6], num, i;
printf("Input array(5):\n");
for (i = 0; i < 5; i++)
{
scanf("%d", &a[i]);
}
printf("Input the insert num:");
scanf("%d", &num);
insert(a, 6, num);
printf("Output:\n");
for (i = 0; i < 6; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
从前向后找
void insert(int a[], int n, int num)
{
int i, j;
i=0;
while (num > a[i]) /*寻找位置*/
{
i++;
}
for (j=n-1; j>i; j--) /*移动*/
{
a[j] = a[j-1];
}
a[i] = num; /*插入*/
}
从后向前找
void insert(int a[], int n, int num)
{
int i;
i = n-1;
while (i > 0 && num < a[i-1]) /*寻找和移动*/
{
a[i] = a[i-1];
i--;
}
a[i] = num;
}
使用指针:
#include <stdio.h>
void insert(int a[], int n, int num);
int main(void)
{
int a[6], num, i;
printf("Input array(5):\n");
for (i = 0; i < 5; i++)
{
scanf("%d", &a[i]);
}
printf("Input the insert num:");
scanf("%d", &num);
insert(a, 6, num);
printf("Output:\n");
for (i = 0; i < 6; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void insert(int *p, int n, int num)
{
int i;
i = n-1;
while (i > 0 && num < p[i-1])
{
p[i] = p[i-1];
i--;
}
p[i] = num;
}
5、题库59题,编写一程序P2-217.C实现以下功能
求任意的一个m×m矩阵的对角线上元素之和
#include <stdio.h>
int main(void)
{
int arr[20][20];
int i, j, m, sum;
printf("Please input m: ");
scanf("%d", &m);
printf("\nPlease input array:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
sum = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
if (i == j || i + j == m - 1)
{
sum += arr[i][j];
}
}
}
printf("\nsum=%d\n", sum);
return 0;
}
使用行指针和列指针:
#include <stdio.h>
int main(void)
{
int arr[20][20], *p1, (*p2)[20];
int i, j, m, sum;
printf("Please input m: ");
scanf("%d", &m);
printf("\nPlease input array:\n");
p1 = *arr;
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", p1+i*20+j);
}
}
p2 = arr;
sum = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
if (i == j || i + j == m - 1)
{
sum += *(*(p2 + i) + j);
}
}
}
printf("\nsum=%d\n", sum);
return 0;
}
6、输入5个字符串,按升序排序后输出,用字符数组处理
#include <stdio.h>
#include <string.h>
void bubble_sort(char str[][10], int n);
int main(void)
{
int i;
char str[5][10];
for (i=0; i<5; i++)
{
gets(str[i]);
}
bubble_sort(str, 5);
for (i=0; i<5; i++)
{
puts(str[i]);
}
return 0;
}
void bubble_sort(char str[][10], int n)
{
int i, j;
char temp[10];
for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
{
if (strcmp(str[j], str[j+1]) > 0)
{
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
}
}
}
}
7、输入5个字符串,按升序排序后输出,用指针数组完成
#include <stdio.h>
#include <string.h>
void bubble_sort(char *ps[], int n);
int main(void)
{
int i;
char str[5][81], *ptr[5];
for (i = 0; i < 5; i++)
{
ptr[i] = str[i];
}
printf("Input 5 strings:\n");
for (i = 0; i < 5; i++)
{
gets(ptr[i]);
}
bubble_sort(ptr, 5);
printf("---------------------------\n");
for (i = 0; i < 5; i++)
{
puts(ptr[i]);
}
return 0;
}
void bubble_sort(char *ps[], int n)
{
int i, j;
char *temp;
for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
{
if (strcmp(ps[j], ps[j+1]) > 0)
{
temp = ps[j];
ps[j] = ps[j + 1];
ps[j + 1] = temp;
}
}
}
}
8、带参数的main()函数
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("The program name is:%s\n", argv[0]);
if (argc > 1)
{
printf("The other arguments are following:\n");
for (i = 1; i<argc; i++)
{
printf("%s\n", argv[i]);
}
}
return 0;
}
习题9-7参考程序
题库104题,输入5个字符串,排序,不能使用strcpy()和strcmp()函数
p7-781.c
只使用字符数组
#include <stdio.h>
void bubble_sort(char s[][81], int n);
int str_compare(char s1[], char s2[]);
void str_copy(char s1[], char s2[]);
int main(void)
{
int i;
char str[5][81];
printf("Input 5 strings:\n");
for (i = 0; i < 5; i++)
{
gets(str[i]);
}
bubble_sort(str, 5);
printf("---------------------------\n");
for (i = 0; i < 5; i++)
{
puts(str[i]);
}
return 0;
}
void bubble_sort(char s[][81], int n)
{
int i, j;
char temp[81];
for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
{
if (str_compare(s[j], s[j+1]) > 0)
{
str_copy(temp, s[j]);
str_copy(s[j], s[j+1]);
str_copy(s[j+1], temp);
}
}
}
}
int str_compare(char s1[], char s2[])
{
int i;
i = 0;
while ( s1[i] == s2[i])
{
i++;
}
return (s1[i] - s2[i]);
}
void str_copy(char s1[], char s2[])
{
int i;
for (i = 0; s2[i] != '\0'; i++)
{
s1[i] = s2[i];
}
s1[i] = '\0';
}
使用指针数组
#include <stdio.h>
void bubble_sort(char *ps[], int n);
int str_compare(char *p1, char *p2);
int main(void)
{
int i;
char str[5][81], *ptr[5];
for (i = 0; i < 5; i++)
{
ptr[i] = str[i];
}
printf("Input 5 strings:\n");
for (i = 0; i < 5; i++)
{
gets(ptr[i]);
}
bubble_sort(ptr, 5);
printf("---------------------------\n");
for (i = 0; i < 5; i++)
{
puts(ptr[i]);
}
return 0;
}
void bubble_sort(char *ps[], int n)
{
int i, j;
char *temp;
for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
{
if (str_compare(ps[j], ps[j+1]) > 0)
{
temp = ps[j];
ps[j] = ps[j + 1];
ps[j + 1] = temp;
}
}
}
}
int str_compare(char *p1, char *p2)
{
while ( (*p1) == (*p2))
{
p1++;
p2++;
}
return ((*p1) - (*p2));
}
17
展开阅读全文