实验内容(方法和步骤): 1.输入 10 个整数,用选择法对这 10 个整数按从小到大的顺序排序并输出排序后的结 果。 程序代码: #include <stdio.h> int main() { int a[10],i,j,t; printf("print 10 numbers"); for(i=0;i<10;i++)scanf("%d",&a[i]); for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} } } for(i=0;i<10;i++) { printf("%d\n",a[i]); } return 0; } 运行结果: 2.青年歌手参加歌曲大奖赛,有 10 个评委进行打分,编程求这位选手的平均得分(去 掉一个最高分和一个最低分)。 程序代码: #include <stdio.h> int main() { int a[10],i,j,t,sum; printf("print 10 numbers"); for(i=0;i<10;i++)scanf("%d",&a[i]); for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} } } for(i=1;i<9;i++) { sum=sum+a[i]; } printf("%d",sum/8); return 0; } 运行结果: 3.从键盘输入一整数,然后在一个整型一维数组 a[20]中,用折半查找法找出该数是数 组中第几个元素的值。如果该数不在数组中,则打印”No found”。 程序代码: #include<stdio.h> int Pos(int *a,int m,int n,int key) { int i=(m+n)/2; if (key==a[i])return i; else if(m==n)return -1; if(key<=a[i])return Pos(a,m,i,key); else return Pos(a,i+1,n,key); } int main() { int a[21]; int i; int key; int res; for(i=1;i<=20;i++) { a[i]=i; printf("%d ",a[i]); } printf("print one number"); scanf("%d",&key); res=Pos(a,1,20,key); if(res==-1) printf("No found"); else printf("pos=%d\n",res); return 0; } 运行结果: 4.为整型二维数组 b[3][4]输入 12 个数据,计算并输出数组中所有正数之和、所有负 数之和。 程序代码: #include <stdio.h> int main() { int sumz=0,sumf=0,b[3][4],i,j; for(i=0;i<3;++i) { for(j=0;j<4;++j)scanf("%d",&b[i][j]); } for(i=0;i<3;++i) { for(j=0;j<4;++j) { if(b[i][j]<0)sumf+=b[i][j]; else if(b[i][j]>0)sumz+=b[i][j]; } } printf("the sum of fushu is%3d\nthe sum of zhengshu is%3d",sumf,sumz); return 0; } 运行结果: 5.请找出二维数组 b[5][4]中的鞍点,鞍点指该位置上的元素值在该行中最大,且在该 列中最小。如果有鞍点,请输出其下标值;如果没有鞍点,请给出没有鞍点的提示信息。 程序代码: #include <stdio.h> #include <stdlib.h> int main() { int i, j, q, max, m, s, b[5][4]; for (i=0, printf("Please enter b[5][4]:\n"); i<5; i++) for (j=0; j<4; scanf("%d", &b[i][j++])); for (i=0; i<5; i++) { for (j=0, max=0; j<4; b[i][j]>max ? max=b[i][j], q=j++ : j++); for (m=0, s=1; m<4; b[m][q]<max ? s=0, m++ : m++); if (s){ printf("%d is the point\n", b[i][q]); break; } } if (!s) printf("There is no saddle point!\n"); system("pause"); return 0; } 运行结果: 6.编程打印如下图形: * * * * * * * * 程序代码: #include <stdio.h> int main() { printf(" * \n"); printf(" * *\n"); printf("* *\n"); printf(" * *\n"); printf(" * \n"); return 0; } 运行结果: 7.有一电文,已按下列规律译成译码: A→Z a→z B→Y b→y C→X c→x 即第一个字母变成第 26 个字母,第 i 个字母变成第(26-i+1)个字母。非字母字符不 变。编写一个程序将密码译成原文,并输出密码和原文。 程序代码: #include <stdio.h> #include <string.h> int main() { char a[100],b[100]; int len, i; printf("please input the key:\n"); gets(a); strcpy(b, a); len = strlen(a); for (i = 0; i < len; i++) { if (a[i] >= 'a' && a[i] < 'z') { a[i] = 'a' + 'z' - a[i]; } else if (a[i] >= 'A' && a[i] < 'Z') { a[i] = 'A' + 'Z' - a[i]; } else; } printf("key:");puts(b); printf("real:");puts(a); return 0; } 运行结果: *8. (选做题)随机生成10个100内的正整数,用冒泡法排序后按从小到大顺序输出。 程序代码: #include<stdio.h> #include<stdlib.h> int main() { int a[10],i,j,t; for(i=0;i<10;i++) a[i]=rand()%99+1; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} } } for(i=0;i<10;i++) { printf("%d\n",a[i]); } return 0; } 运行结果: *9. (选做题)编写一个程序,将两个字符串连接,并输出连接后的结果。(要求:将 第二个字符串连入第一个字符串,不要用 strcat 函数) 程序代码: #include <stdio.h> #include <string> #include <iostream> using namespace std; void compound(char str1[], char str2[]); int main() { char s1[20], s2[20]; printf("Please enter string 1: "); cin>>s1; printf("Please enter string 2: "); cin>>s2; compound(s1, s2); cout<<s1<<endl; system("pause"); return 0; } void compound(char str1[], char str2[]) { int i, j; for (i=0; str1[i]!='\0'; i++); for (j=0; str2[j]!='\0'; str1[i++]=str2[j++]); str1[i]='\0'; } 运行结果: *10. (选做题)输出以下杨辉三角形(要求输出 10 行): 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … … … … … … … 程序代码: #include <stdio.h> int main() { int i,j; int b[11][11]={{0,0,0,0,0}}; b[1][1]=1;b[2][1]=1;b[2][2]=1; printf("%d\n",b[1][1]); printf("%d %d\n",b[2][1],b[2][2]); for(i=3;i<=10;i++) { for(j=1;j<=i;j++) { b[i][j]=b[i-1][j-1]+b[i-1][j]; printf("%d ",b[i][j]); } printf("\n"); } return 0; } 运行结果: *11. (选做题)有一篇文章,共 3 行文字,每行 80 个字符。要求分别统计出英文大写 字母、小写字母、数字、空格,以及其他字符的个数。提示:可用二维字符数组(3 行 80 列)存放该文章。 程序代码: #include <stdio.h> #include <string> int main() { char b[3][80]; int big,small,number,space,others; printf("please input the article with 3*80:\n"); gets(b); for(i=0;i<3;i++) { for(j=0;j<=80,j++) { if('a'<=b[i][j]&&b[i][j]<='z')small+=1; else if('A'<=b[i][j]&&b[i][j]<='Z')big+=1; else if('0'<=b[i][j]&&b[i][j]<='9')number+=1; else if(b[i][j]==20)number+=1; else others+=1; } } print("big=%d\nsmall=%d\nnumber=%d\nspace=%d\nothers=%d\n" big,small,number,space,others); return 0; } 运行结果: *12. (选做题)输入一个正整数 n,输入 n 个数,生成一个 n*n 的矩阵,矩阵中第 1 行 是输入的 n 个数,以后每一行都是上一行循环左移一个元素。 输入/输出示例: input n:5↙ input number:2 5 8 4 9↙ The matrix is: 2 5 8 4 9 5 8 4 9 2 8 4 9 2 5 4 9 2 5 8 9 2 5 8 4 程序代码: #include<stdio.h> int main() { int i,j,k=0,n,a[100][100]; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",&a[0][i]); for(i=1;i<n;i++) { for(j=0;j<n;j++) { k++; a[i][j]=a[0][k%n]; } k++; } for(i=0;i<n;i++) { printf("\n"); for(j=0;j<n;j++)printf("%d ",a[i][j]); } return 0; } 运行结果: |