作业5
作业5-1
输入n个整数,按从小到大输出这n个整数(输出时 数据之间用一个空格隔开)。其中,n由键盘输入。
#include<stdio.h>
void sort(arr[],int n){ for(int i=0;i<n;i++){ int min=i; for(int j=i;j<n;j++){ if(arr[min].arr[j]){ min=j; } int temp=arr[min]; arr[min]=arr[j]; arr[j]=temp } } }
int main(){ int n,arr[100]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",arr[i]); } sort(arr,n); for(int i=0;i<n;i++){ printf("%d",arr[i]); } return 0; }
|
排序题,关于排序我会另写一篇blog。
作业5-2
输入 4*4 阶矩阵,输出下三角(含主对角线)的数之和。
#include<stdio.h>
int main(){ int arr[4][4]; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ scanf("%d",&arr[i][j]); } } int s=0; for(i=0;i<M;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); return 0; }
|
二维数组输入就是多了个for语句嵌套
作业6
作业6-1
输入一个字符串,统计其中数字和非数字字符各有多少 个,输出的两个数字用1个空格隔开。
```
### 作业6-2
编写一程序,功能是:输入一个字符串,判断其是否为回文,即对称字符串。
```c #include<stdio.h> #include<string.h>
int huiwen(char arr[]){ int left = 0, right = strlen(arr) - 1; while(left<right){ if(arr[left]!=arr[right]) return 0; left++; right--; } return 1; }
int main(){ char arr[100]; gets(arr); if(huiwen(arr)) printf("YES"); else printf("NO"); return 0; }
|
作业6-3
输入一个字符串,删除其中的数字字符。
#include<stdio.h> #include<ctype.h>
int main(){ char str[100]; gets(str); int j=0; for(int i=0;str[i];i++){ if(!isdigit(str[i])){ str[j]=str[i]; j++; } } str[j] = '\0'; puts(str); return 0; }
|
注意点:
- 在外声明j变量方便加上结束符
- j递增不能写在for内,当不是数字的时候j才能递增
作业7
作业7-1
统计单词个数。从键盘上输入一行字符,统计其中有多 少个单词,单词之间用空格隔开.
#include <stdio.h>
int main() { char ch[100]; int i,count=0,word=0; for(i=0;ch[i]!='\0';i++) { if (ch[i]==' ') { word=0; } else if (word==0) { word=1; count++; } } printf("%d\n",count); return 0; }
|
使用gets(也可以用fgets)而不是scanf,是因为scanf读到空格就会停止而gets不会。
作业7-2
输入n个国家名称,使用选择法排序从小到大排序后输 出,输出时每个名称间用一个空格隔开,其中n由键盘输入。
例如: 输入:5 China France Britain Russia America 输出:America Britain China France Russia
#include <stdio.h> #include <string.h>
int main() { int n; scanf("%d", &n);
char arr[5][100]; for (int i=0; i<n; i++) { scanf("%s", &arr[i]); }
for (int i=0; i<n-1; i++) { for (int j=0; j<n-1-i; j++) { if (strcmp(arr[j], arr[j+1])>0) { char temp[100]; strcpy(temp, arr[j]); strcpy(arr[j], arr[j+1]); strcpy(arr[j+1], temp); } } }
for (int i = 0; i < n; i++) { printf("%s ", arr[i]); }
return 0 }
|
不同于比较数值,字符串的比较要用到strcmp,若strcmp(str1,str2)等于0,说明str1=str2;大于0就是str1大于str2,小于则相反
作业8
作业8-1
编写两个函数comm_div和comm_mul,分别求两个整数的最大公约数和最小公倍数,在main函数中输入两个整数,调用这两个函数并输出两个整数的最大公约数和最 小公倍数,输出时两数间用一个空格隔开。
例如: 输入:48 64,输出:16 192
输入:45 88,输出:1 3960
#include<stdio.h>
int comm_div(int m, int n) { while(n!=0) { int temp=n; n=m%n; m=temp; } return m; }
int comm_mul(int m,int n){ int x=m>n?m:n; while(x%m!=0||x%n!=0){ x++; } return x; }
int main(){ int m,n,x,y; scanf("%d%d",&m,&n); x=comm_div(m,n); y=comm_mul(m,n); printf("%d %d",x,y); }
|
作业8-2
编写一个从小到大排序(选择法)的函数sort(int x[],int n),其中 n 为整数个 数。在main函数中输入n的值和一n个整数,调用排序函数sort后,输出排序后的n个整数,每个数间用一个空格隔开。
例如: 输入:5 7 2 1 8 4
输出:1 2 4 7 8
输入:10 67 56 45 89 34 21 87 32 89 12
输出:12 21 32 34 45 56 67 87 89 89
#include<stdio.h> #define N 100
void sort(int x[],int n);
int main(){ int arr[N],n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&arr[i]); } sort(arr,n); for(int i=0;i<n;i++){ printf("%d ", arr[i]); } return 0; }
void sort(int x[],int n){ for(int i=0;i<n-1;i++) { int min=i; for(int j=i+1;j<n;j++) { int temp; if(x[min]>x[j]){ min=j; } } if (min!=i) { int temp=x[i]; x[i]=x[min]; x[min]=temp; } } }
|
作业8-3
编写一函数str_reverse(char c[]),功能是将一个字符串逆序存放,在main函 数中输入一个字符串,调用str_reverse函数后,输出该字符串。
例如: 输入:abcd,输出:dcba
输入:12345,输出:54321
#include<stdio.h> #include<string.h> #define N 100
void str_reverse(char c[]);
int main(){ char c[N]; gets(c); str_reverse(c); printf("%s",c); return 0; }
void str_reverse(char c[]){ int i,j; char temp; for(i=0,j=strlen(c)-1;i<j;i++,j--){ temp=c[i]; c[i]=c[j]; c[j]=temp; } }
|