实验四
task1.1
源代码
#include <stdio.h>
#define N 4
int main() {
	int a[N] = {2, 0, 2, 3};
	char b[N] = {'2', '0', '2', '3'};
	int i;
	
	printf("sizeof(int) = %d\n", sizeof(int));
	printf("sizeof(char) = %d\n", sizeof(char));
	printf("\n");
	for (i = 0; i < N; ++i)
		printf("%p: %d\n", &a[i], a[i]);
	printf("\n");
	for (i = 0; i < N; ++i)
		printf("%p: %c\n", &b[i], b[i]);
	printf("\n");
	printf("a = %p\n", a);
	printf("b = %p\n", b);
	return 0;
}
实验结果截图

结论
int型数组连续存放,每个元素占用4个字节
char型数组连续存放,每个元素占用1个字节
数组名a对应的地址和&a[0]一样,数组名b对应的地址和&b[0]一样
task1.2
源代码
#include <stdio.h>
#define N 2
#define M 3
int main() {
	int a[N][M] = {{1, 2, 3}, {4, 5, 6}};
	char b[N][M] = {{'1', '2', '3'}, {'4', '5', '6'}};
	int i, j;
	for (i = 0; i < N; ++i)
		for (j = 0; j < M; ++j)
		printf("%p: %d\n", &a[i][j], a[i][j]);
	printf("\n");
	printf("a = %p\n", a);
	printf("a[0] = %p\n", a[0]);
	printf("a[1] = %p\n", a[1]);
	printf("\n");
	for (i = 0; i < N; ++i)
		for (j = 0; j < M; ++j)
		printf("%p: %c\n", &b[i][j], b[i][j]);
	printf("\n");
	printf("b = %p\n", b);
	printf("b[0] = %p\n", b[0]);
	printf("b[1] = %p\n", b[1]);
	printf("\n");
	return 0;
}
实验结果截图

结论
数组a按行连续存放的,每个元素占4个字节单元
数组b按行连续存放的,每个元素占1个字节单元
a[0]和a[1]差12个字节,b[0]和b[1]差3个字节
task2
源代码
#include <stdio.h>
#include <string.h>
#define N 80
void swap_str(char s1[N], char s2[N]);
void test1();
void test2();
int main() {
printf("测试1: 用两个一维维数组,实现两个字符串交换\n");
test1();
printf("\n测试: 用二维数组,实现两个字符串交换\n");
test2();
return 0;
}
void test1() {
char views1[N] = "hey, C, I hate u.";
char views2[N] = "hey, C, I love u.";
printf("交换前: \n");
puts(views1);
puts(views2);
swap_str(views1, views2);
printf("交换后: \n");
puts(views1);
puts(views2);
}
void test2() {
char views[2][N] = {"hey, C, I hate u.", "hey, C, I love u."};
printf("交换前: \n");
puts(views[0]);
puts(views[1]);
swap_str(views[0], views[1]);
printf("交换后: \n");
puts(views[0]);
puts(views[1]);
}
void swap_str(char s1[N], char s2[N]) {
char tmp[N];
strcpy(tmp, s1);
strcpy(s1, s2);
strcpy(s2, tmp);
}
实验结果截图

task3.1
源代码
#include <stdio.h>
#define N 80
int count(char x[]);
int main() {
	char words[N+1];
	int n;
	while(gets(words) != NULL) {
	n = count(words);
	printf("单词数: %d\n\n", n);
	}
	return 0;
}
int count(char x[]) {
	int i;
	int word_flag = 0; 
	int number = 0; 
	for(i = 0; x[i] != '\0'; i++) {
		if(x[i] == ' ')
		word_flag = 0;
		else if(word_flag == 0) {
			word_flag = 1;
			number++;
		}
	}
	return number;
}
实验结果截图

task3.2
源代码
#include <stdio.h>
#define N 1000
int main() {
char line[N];
int word_len;
int max_len; 
int end;
int i;
while(gets(line) != NULL) {
word_len = 0;
max_len = 0;
end = 0;
i = 0;
while(1) {
while(line[i] == ' ') {
word_len = 0; 
i++;
}
while(line[i] != '\0' && line[i] != ' ') {
word_len++;
i++;
}
if(max_len < word_len) {
max_len = word_len;
end = i;
}
if(line[i] == '\0')
break;
}
printf("最长单词: ");
for(i = end - max_len; i < end; ++i)
printf("%c", line[i]);
printf("\n\n");
}
return 0;
}
实验结果截图

task4
源代码
#include <stdio.h>
#define N 5
void input(int x[], int n);
void output(int x[], int n);
double average(int x[], int n);
void bubble_sort(int x[], int n);
int main() {
	int scores[N];
	double ave;
	printf("录入%d个分数:\n", N);
	input(scores, N);
	printf("\n输出课程分数: \n");
	output(scores, N);
	printf("\n课程分数处理: 计算均分、排序...\n");
	ave = average(scores, N);
	bubble_sort(scores, N);
	printf("\n输出课程均分: %.2f\n", ave);
	printf("\n输出课程分数(高->低):\n");
	output(scores, N);
	return 0;
}
void input(int x[], int n) {
	int i;
	for(i = 0; i < n; ++i)
		scanf("%d", &x[i]);
}
void output(int x[], int n) {
	int i;
	for(i = 0; i < n; ++i)
		printf("%d ", x[i]);
	printf("\n");
}
double average(int x[], int n){
	double a=0;
	int i;
	for(i = 0;i < n;i++)
		a+=x[i];
	return a/n;
}
void bubble_sort(int x[], int n){
	int i,j,t;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-1-i;j++)
			if(x[j]<x[j+1]){
				t=x[j];
				x[j]=x[j+1];
				x[j+1]=t;
			}
	
}
实验结果截图

task5
源代码
#include <stdio.h>
#define N 100
void dec2n(int x, int n);
int main() {
	int x;
	printf("输入一个十进制整数: ");
	
	while(scanf("%d", &x) != EOF) {
		dec2n(x, 2);
		dec2n(x, 8);
		dec2n(x, 16);
		printf("\n输入一个十进制整数: ");
	}
	return 0;
}
void dec2n(int x, int n){
	char a[100];
	int i=0,j=0;
	while(x>=n){
		if(x%n<=9)
			a[j++]=x%n+48;
		else
			a[j++]=x%n-10+'A';
		x/=n;
	}
	if(x<=9)
		a[j]=x+'0';
	else
		a[j]=x-10+'A';
	for(i=j;i>=0;i--)
	{
	printf("%c",a[i]);
	}
	printf("\n");
}
实验结果截图

task6
源代码
#include <stdio.h>
#define N 100
#define M 4
void output(int x[][N], int n);
void rotate_to_right(int x[][N], int n);
int main() {
	int t[][N] = {{21, 12, 13, 24},
				  {25, 16, 47, 38},
				  {29, 11, 32, 54},
				  {42, 21, 33, 10}};
	printf("原始矩阵:\n");
	output(t, M);
	rotate_to_right(t, M);
	printf("变换后矩阵:\n");
	output(t, M);
	return 0;
}
void output(int x[][N], int n) {
	int i, j;
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j)
			printf("%4d", x[i][j]);
		printf("\n");
	}
}
void rotate_to_right(int x[][N], int n){
	int i,j,t;
	for(i=0;i<n;i++){
        t=x[i][n-1];
        for(j=n-1;j>0;j--){
            x[i][j]=x[i][j-1];
        }
        x[i][0]=t;
    }
}
实验结果截图

task7.1
源代码
#include <stdio.h>
#define N 80
void replace(char x[], char old_char, char new_char);
int main() {
char text[N] = "c programming is difficult or not, it is a question.";
printf("原始文本: \n");
printf("%s\n", text);
replace(text, 'i', '*');
printf("处理后文本: \n");
printf("%s\n", text);
return 0;
}
void replace(char x[], char old_char, char new_char) {
int i;
for (i = 0; x[i] != '\0'; ++i) 
if (x[i] == old_char)
x[i] = new_char;
}
实验结果截图

task7.2
源代码
#include <stdio.h>
#include<stdlib.h>
#define N 80
int main() {
    char str[N], ch;
    int i;
    printf("输入字符串: ");
    gets(str);
    printf("输入一个字符: ");
    ch = getchar();
    printf("截断处理......");
    i = 0;
    while (str[i] != '\0') {
        if (str[i] == ch){
            str[i+1]='\0';
            break;}
            i++;
    }
    str[i] ='\0' ; 
    printf("\n截断处理后字符串: %s\n", str);
    system("pause");
    return 0;
}
实验结果截图

task8
源代码
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define N 5
#define M 20
void bubble_sort(char str[][M], int n);
int main() {
    char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"};
    int i;
    printf("输出初始名单:\n");
    for (i = 0; i < N; i++)
        printf("%s\n", name[i]);
    printf("\n排序中...\n");
    bubble_sort(name, N);  
    printf("\n按字典序输出名单:\n");
    for (i = 0; i < N; i++)
        printf("%s\n", name[i]);
    system("pause");
    return 0;
}
void bubble_sort(char str[][M], int n){
    int i,j;
    char k[M];
    for(i=0;i<5;i++)
       for(j=0;j<n-i-1;j++)
           if(strcmp(str[j],str[j+1])>0){
                 strcpy(k,str[j]);
                 strcpy(str[j],str[j+1]);
                 strcpy(str[j+1],k);
           }
}
实验结果截图

 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号