实验12
1.题目描述
【程序功能】 随机生成n个10-100之间的自然数,其中n不大于50,实现对其从小到大排序,分别输出排序前、后的数据。
【程序调试要求】在给定的程序中,只允许在原语句上进行修改,不能增加或删除整条语句或修改算法(共计有5处错误,已在错误语句后用//标出)。
【程序运行结果】
请输入产生随机数个数
8
随机数为:
21 50 34 86 99 74 72 67
排序后数据为:
21 34 50 67 72 74 86 99
#include <iostream> #include <stdlib.h> #include <time.h> #define N 50 using namespace std; inline void swap(int &a, int &b) // { int t=a; a = b, b = t; } void sort(int a[], int n) { for(int i = n-1; i>0; i-=1) // { int flag = 1; for(int j=0; j<i; j+=1) { if(a[j] > a[j+1]) // swap(a[j], a[j+1]), flag = 0; } if(flag) break; } } int main() { int a[N] = {0}; int n; cout<<"请输入产生随机数个数\n"; cin>>n; if(n<=0 || n>N) exit(1); srand(unsigned(time(0))); int i; for(i=0; i<n; i++) a[i] = (rand()%9+1)*10+rand()%10; cout<<"随机数为:\n"; for(i=0; i<n; i+=1) cout<<a[i]<<'\t'; cout<<endl; sort(a, n); // cout<<"排序后数据为:\n"; for(i=0; i<n; i+=1) cout<<a[i]<<'\t'; cout<<endl; getchar(); getchar(); }
2.题目描述
【程序功能】我们常用字符串在不同机器之间传送数据。具体方法为:发送方将若干个子字符串(假设长度为8)用特殊符号(假设为冒号’:’)连接成一个长字符串发送出去,接收方收到这个字符串后将它还原成若干个子字符串。假设子字符串由字母和数字组成,请编写一个程序模拟数据发送和接受过程。子字符串个数由键盘输入。
【编程要求】
1.编写字符串分割函数void Split(char a[],char b[][10],int n)。函数第一个参数为待分割的字符串,第二参数用来存储分割后的子字符串,第三参数为子字符串个数。不允许在此函数中输出分割后获得的子字符串。
1)能够正确分割字符串获得子字符串
2)能够将分割后的子字符串存入二维字符数组
2.编写main()函数
1)使用随机数生成随机ASCII码,并在循环中筛选出大写字母、小写字母和数字
2)生成若干个长度为8的子字符串并用冒号(‘:’)连接成一个长字符串
3)调用Split函数分割字符串,并输出原字符串和分割后的子字符串
3.程序运行结果如下图:
【提示】
1)使用随机数需要包含头文件stdlib.h和time.h,请先调用srand(time(NULL)),再调用rand()函数生成随机整数。
2)可以调用函数strcat(str1,str2),实现将字符串st2拼接到字符串str1后面,此函数使用需包含string.h头文件。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> using namespace std; void Split(char a[],char b[][10],int n){ for(int i=0;i<n;i++){ for(int j=0;j<8;j++) b[i][j]=a[i*9+j]; b[i][8]='\0'; } } int main(){ int n,i=0; char a[90],b[10][10]; cout<<"请输入子字符串数量(<10)"<<endl; srand(unsigned(time(0))); while(i<=80){ if((i+1)%9==0) a[i++]=':'; else{ char c=rand()%(int('z')+1); if((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z')) a[i++]=c; } } cin>>n; a[9*n]='\0'; cout<<"原字符串:"<<a<<endl; Split(a,b,n); for(int i=0;i<n;i++){ cout<<b[i]<<endl; } getchar(); getchar(); }