实验4

task1

编程代码

#include <stdio.h>
#include<stdlib.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");
// 输出int型数组a中每个元素的地址、值
for (i = 0; i < N; ++i)
printf("%p: %d\n", &a[i], a[i]);
printf("\n");
// 输出char型数组b中每个元素的地址、值
for (i = 0; i < N; ++i)
printf("%p: %c\n", &b[i], b[i]);
printf("\n");
// 输出数组名a和b对应的值
printf("a = %p\n", a);
printf("b = %p\n", b);
system("pause");
return 0;
}

运行截图

 

 

 

 

task1.2

编程代码

#include <stdio.h>
#include<stdlib.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;
// 输出int型二维数组a中每个元素的地址、值
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
printf("%p: %d\n", &a[i][j], a[i][j]);
printf("\n");
// 输出int型二维数组名a, 以及,a[0], a[1]的值
printf("a = %p\n", a);
printf("a[0] = %p\n", a[0]);
printf("a[1] = %p\n", a[1]);
printf("\n");
// 输出char型二维数组b中每个元素的地址、值
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
printf("%p: %c\n", &b[i][j], b[i][j]);
printf("\n");
// 输出char型二维数组名b, 以及,b[0], b[1]的值
printf("b = %p\n", b);
printf("b[0] = %p\n", b[0]);
printf("b[1] = %p\n", b[1]);
printf("\n");
system("pause");
return 0;
}

运行截图

 

 

 

 

 

task2

编程代码

#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();
system("pause");
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>
#include<stdlib.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);
}
system("pauses");
return 0;
}
int count(char x[]) {
int i;
int word_flag = 0; // 用作单词标志,一个新单词开始,值为1;单词结束,值为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>
#include<stdlib.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; // 单词长度置0,为新单词统计做准备
i++;
}
// 在一个单词中,统计当前单词长度
while(line[i] != '\0' && line[i] != ' ') {
word_len++;
i++;
}
// 更新更长单词长度,并,记录最长单词结束位置
if(max_len < word_len) {
max_len = word_len;
end = i; // end保存的是单词结束的下一个坐标位置
}
// 遍历到文本结束时,终止循环
if(line[i] == '\0')
break;
}
// 输出最长单词
printf("最长单词: ");
for(i = end - max_len; i < end; ++i)
printf("%c", line[i]);
printf("\n\n");
}
system("pause");
return 0;
}

运行截图

 

 

 

 

task4

编程代码


 

#include <stdio.h>
#include <stdlib.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",ave);
    printf("\n输出课程分数(高-->低):\n");
    output(scores,N);

    system("pause");
    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){
    int i,sum=0;
    double t;

    for(i=0;i<n;i++)
        sum=sum+x[i];
    t=(sum*1.0)/(n*1.0);

    return t;
}

void bubble_sort(int x[],int n){
    int t,i,m;
    for(m=n;m>0;m--){
    for(i=0;i<m;i++){
        if(x[i]<x[i+1]){
            t=x[i];
            x[i]=x[i+1];
            x[i+1]=t;
        }
    }
    }
}

运行截图

 

 

实验5

 

编程代码

#include <stdio.h>
#include <stdlib.h>
void dec2n(int x,int n);
#define N 100

int main(){
    int x;

    printf("输入一个十进制整数:");
    while(scanf("%d",&x)!=EOF){
        dec2n(x,2);
        dec2n(x,8);
        dec2n(x,16);
        printf("输入一个十进制整数:");
    }

    system("pause");
    return 0;
}

void dec2n(int x,int n){
    char m[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},t[N];
    int i,ys,ss;
    for(i=0,ys=0,ss=x;ss>0;i++){
        ys=ss%n;
        ss=ss/n;
        t[i]=m[ys];
    }
    t[i]=0;
    for(;i>=0;i--)
        printf("%c",t[i]);
    printf("\n");
}

运行截图

 

 

实验6

编程代码

#include <stdio.h>
#include <stdlib.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);

    printf("变换后矩阵:\n");
    rotate_to_right(t,M);

    system("pause");
    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;

    for(i=0;i<n;++i){
        for(j=0;j<n;++j){
            if(j==0)
                printf("%4d",x[i][n-1-j]);
            else
                printf("%4d",x[i][j-1]);
        }
        printf("\n");
    }
}

运行截图

 

实验7.1

编程代码

#include <stdio.h>
#include <stdlib.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);

    system("pause");
    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;
}

运行截图

 

将i换为“*”

是一个字符串结束的标志

 

 

实验7.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)
            break;
        ++i;
    }
    str[i]='\0';

    printf("\n截断处理后字符串:%s\n",str);

    system("pause");
    return 0;
}

 

运行截图

实验8

编程代码

#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");
    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 m,i;
        char t[100];
        for(m=N;m>1;m--){
        for(i=0;i<m;i++)
            if(strcmp(str[i],str[i+1])>0){
                strcpy(t,str[i]);
                strcpy(str[i],str[i+1]);
                strcpy(str[i+1],t);
            }
        }
    }

运行截图

 

posted @ 2023-04-19 20:08  无良无常  阅读(5)  评论(0编辑  收藏  举报