目录
前言
1.本专栏基于谭浩强先生写的《C程序设计(第五版)》与《C程序设计(第五版)学习辅导》配套的相关试题和实验,给出常见C语言基础试题相应代码,方便大家参考学习
2.本专栏所有代码均在本地及Online Judge(OJ)平台测试通过,注意各大OJ平台的测试标准不同,可能存在出入,若很遗憾无法提交,则仅作为程序实现思想交流
3.本专栏仅收录个人C实验,仅仅实现程序功能,不涉及高性能算法,当然也欢迎算法师傅交流优化
4.部分代码参考网上代码后经个人修改优化,望周知
5.部分代码存在与题目描述不符的情况,望周知
6.创作不易,整理不易,若对您有帮助请评论/点赞/收藏/转发,尊重每个技术人!
一、选择法从大到小排序
【问题描述】选择法从大到小排序:输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。
【输入形式】
【输出形式】
【样例输入】5
4 5 1 7 9
【样例输出】The sorted order:9 7 5 4 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
int j=0;
int tmp,n;
int arr[20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[j]<arr[i])
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
}
printf("The sorted order:");
for(i=n-1;i>=0;i--)
{
printf("%d ",arr[i]);
}
system("pause");
return 0;
}
二、实验6 - 数组(实验报告见资源下载)
实验6-数组-实验报告-C文档类资源-CSDN文库https://download.csdn.net/download/m0_66842854/87524078
三、编写程序,输入4个字符串,找出其中最大者
【问题描述】
编写程序,输入4个字符串(单个字符串最长为29),找出其中最大者。
【输入形式】
4个字符串
【输出形式】
4个字符串中的最大者
【样例输入】
abdc
./,!!
%%gogo
tests
【样例输出】
the largest string is:
tests
【提示】
① 先定义二维字符数组str[4][30],用于保存4个字符串,再定义字符数组str1[30],作为保存字符串的临时空间;
② 用循环语句输入4个字符串;
③ 用求最大值的算法找出4个字符串中的最大者并输出。
注意:可使用字符串函数strcmp()比较字符串的大小,使用字符串函数strcpy()将字符串保存到相应存储空间。
#include<stdio.h>
#include<string.h>
int main()
{
char str1[4][30];
char str2[30];
int i;
for (i=0;i<=3;i++)
{
gets(str1[i]);
}
strcpy(str2,str1[0]);
for(i=0;i<=3;i++){
if(strcmp(str1[i],str2)>0){
strcpy(str2,str1[i]);
}
}
printf("the largest string is:\n%s\n",str2);
return 0;
}
四、实验7 字符串及字符数组(实验报告见资源下载)实验7-字符串及字符数组-C文档类资源-CSDN文库https://download.csdn.net/download/m0_66842854/87524086
五、将数组中的数逆序存放
【问题描述】将数组中的数逆序存放:输入一个正整数n (1<n≤10),再输入n 个整数,存入数组a中,先将数组a中的这n个数逆序存放,再按顺序输出数组a中的n个元素。
【输入形式】
【输出形式】
【样例输入】
5
3 5 9 4 8
【样例输出】
After reversed: 8 4 9 5 3
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n-1];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int temp;
for(int i=0;i<n/2;i++){
temp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=temp;
}
printf("After reversed: ");
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
六、 输出冒泡法排序某一轮排序结果
【问题描述】
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
【输入形式】
输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。
【输出形式】
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。
【样例输入】
6 2
2 3 5 1 6 4
【样例输出】
2 1 3 4 5 6
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
int n,k,arr[N],i,j,t;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(j=0;j<k;j++)
{
for(i=0;i<n-1;i++)
{
if(arr[i]>arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
}
for(i=0;i<n-1;i++)
{
printf("%d ",arr[i]);
}
printf("%d",arr[n-1]);
return 0;
}
七、方阵循环右移
【问题描述】
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
【输入形式】
输入第一行给出两个正整数m和n(1≤n≤6,m可能会大于n)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
【输出形式】
按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。
【样例输入】
2 3
1 2 3
4 5 6
7 8 9
【样例输出】
2 3 1
5 6 4
8 9 7
#include <stdio.h>
int main()
{
int a[10][10];
int i, j, n, m;
scanf("%d%d",&m,&n);
for (i = 0; i<n; i++)
{
for (j = 0; j<n; j++)
{
scanf("%d", &a[i][j]);
}
}
m=m % n;
for (i = 0; i<n; i++)
{
for (j = 0; j<n; j++)
{
printf("%d ", a[i][(n - m + j) % n]);
}
printf("\n");
}
return 0;
}
八、字符古风排版
【问题描述】
我国古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版
【输入形式】
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
【输出形式】
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
【样例输入】
5
it is a good poem
【样例输出】
【说明】
为了保证每列对齐,当要排版的字符不能被N整除时,输出的字符,最左边一列最后空的位置需增加' ',即使用单个空格字符填充。
#include <stdio.h>
#include <string.h>
int main()
{
char arr[100][100] ;
char str[1005] ;
int n = 0;
scanf("%d", &n);
getchar();
gets(str);
int L = strlen(str) / n;
if (strlen(str) % n != 0)
{
L++;
}
int k = 0;
for (int i = L-1; i >= 0; i--)
{
for (int j = 0; j < n; j++)
{
if (str[k] == '\0')
{
arr[j][i] = ' ';
}
else
{
arr[j][i] = str[k];
k++;
}
}
}
for (int p=0;p<n; p++)
{
for (int q = 0; q < L; q++)
{
printf("%c", arr[p][q]);
}
printf("\n");
}
return 0;
}
总结
本专栏旨在帮助C语言初学者学习编程,仅供学习交流!