实验四,
实验一:
int数组中元素地址是连续的,int类型每个元素占四字节,数组名和第一个元素的地址相同;
char数组中元素地址是连续的,char类型每个元素占一字节,数组名和第一个元素的地址相同;
二维数组内存按行连续存放,每个元素占(4或1)字节,每个一维数组占(元素个数*元素类型所占字节数),在字面上地址相同;
二维数组中相邻一位数组的首地址,相差(元素类型大小*元素数量);
实验二:
puts()参数是字符串类型,第一个接收的是一位数组本身,第二个是添加索引,来使用二维数组中的第一个一维数组;
实验三:
#include<stdio.h>
#include<string.h>
#define N 100
void dec_to_n(int x, int n);// 函数声明
int main() {
int x;
printf("输入一个十进制整数: ");
while(scanf_s("%d", &x) != EOF) {
dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出
dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出
dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
printf("\n输入一个十进制整数: ");
}
return 0;
}
// 函数定义
// 功能: 把十进制数x转换成n进制,打印输出
// 补足函数实现
// ×××
void dec_to_n(int x,int n){
char arr[64]={};
int count=0;
int number=0;
while(x!=0){
number=x%n;
arr[count++]=number;
x/=n;
}//把余数倒叙记录到数组中
count--;//因为数组元素个数是count--
for(int i=count;i>=0;i--){
if(arr[i]>9){
switch(arr[i]){
case 10:
printf("%c",'A');
break;
case 11:
printf("%c",'B');
break;
case 12:
printf("%c",'C');
break;
case 13:
printf("%c",'D');
break;
case 14:
printf("%c",'E');
break;
case 15:
printf("%c",'F');
break;
}
}//选择心仪的字母
else{
printf("%d",arr[i]);
}
}
printf("\n");
}
实验五
#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); getchar(); getchar();//两个getchar()让系统为我停下脚步^-^ return 0; } // 函数定义 // 输入n个整数保存到整型数组x中 void input(int x[], int n) { int i; for(i = 0; i < n; ++i) scanf("%d", &x[i]); } // 输出整型数组x中n个元素 void output(int x[], int n) { int i; for(i = 0; i < n; ++i) printf("%d ", x[i]); printf("\n"); } // 计算整型数组x中n个元素均值,并返回 // 补足函数average()实现 double average(int x[], int n){ double sum=0; for(int i=0;i<n;i++){ sum+=x[i]; } return sum/n; } // 对整型数组x中的n个元素降序排序 // 补足函数bubble_sort()实现 void bubble_sort(int x[], int n){ for(int i=n;i>0;i--){ for(int j=0;j<i;j++){ if(x[j]<x[j+1]){ int temp=x[j]; x[j]=x[j+1]; x[j+1]=temp;} } } }
实验六
#include <stdio.h> #include <string.h> #define N 5 #define M 20 // 函数声明 void output(char str[][M], int n); void bubble_sort(char str[][M], int n); int main() { char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"}; int i; printf("输出初始名单:\n"); output(name, N); printf("\n排序中...\n"); bubble_sort(name, N); // 函数调用 printf("\n按字典序输出名单:\n"); output(name, N); getchar(); getchar(); return 0; } // 函数定义 // 功能:按行输出二维数组中的字符串 void output(char str[][M], int n) { int i; for(i = 0; i < n; ++i) printf("%s\n", str[i]); } // 函数定义 // 功能:使用冒泡排序算法对二维数组str中的n个字符串按字典序排序 // 补足函数bubble_sort()实现 void bubble_sort(char str[][M], int n){ for(int i=n;i>0;i--){ for(int j=0;j<i;j++){ if(strcmp(str[j],str[j+1])>0){ char C[M]={}; strcpy(C,str[j]); strcpy(str[j],str[j+1]); strcpy(str[j+1],C); } } } }
实验七
#include<stdio.h> #define M 100 int value(char X[],int n); int main(){ int n=0; while(scanf_s("%d",&n)!=EOF){ char numb[M]={}; int count=0; //把该数拆开 while(n!=0){ numb[count]=n/10; n/=10; count++; } if(value(numb,count)==1){ printf("YES\n");} else{ printf("NO\n"); } printf("\n"); } return 0; } int value(char X[],int n){ for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(X[i]==X[j]){ return 1;} } } return 0; }
实验八
#include <stdio.h> #include<string.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; } // 函数定义 // 功能: 输出一个n*n的矩阵x 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"); } } // 待补足3:函数rotate_to_right()定义 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边被移出去的一列绕回左边 void rotate_to_right(int x[][N], int n) {//n为移动步数 int numb = M; while (numb >= N - 1) { numb -= 4; } if (numb == 0) { return; } // int C[N][N] = {}; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { C[i][j] = x[i][j]; } } for (int i = 0; i <n; i++) {//M=4 for (int j = 0; j < n; j++) { if (i + numb < n - 1) { x[j][i + numb] = C[j][i]; } else { x[j][i + numb - 4] = C[j][i]; } } } }