练习题:
循环:
391173 for输出三角形字母
391173 for倒序输出三角形字母
391223 字符串(杨辉三角)
391243 for按照格式循环输出字母
定义一个二维数组a[3][4],随机初始化数组中的元素值,然后将a数组矩阵反转后存入到b[4][3]数组中,并将b输出。注意输入使用scanf输入
比如:
输入 3 5 1 4
7 2 6 8
0 9 4 6
输出为
3 7 0
5 2 9
1 6 4
4 8 6
//矩阵转置 输入a[3][4],转为b[4][3];
#include <stdio.h>
int main(void)
{
int a[3][4],b[4][3];
int i,j;
for (i = 0; i < 3*4; i++)
{
scanf("%d",&a[0][i]);
}
for (j = 0; j < 4; j++)
{
for (i = 0; i < 3; i++)
{
b[j][i] = a[i][j];
printf("%d ",a[i][j]);
}
printf("\n");
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++) {
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
数组之间的赋值问题
1>既不写长度,也不初始化可以么?
2>如果不写长度,此时如何动态确定数组的长度?
#include <stdio.h>
int main()
{
int arr[10];
int i;
int len=sizeof(arr)/sizeof(arr[0]);
int len1=0;
for (i=0; i<len; i++) {
scanf("%d",&arr[i]);
len1++;
if (getchar()=='\n') {
break;
}
}
for (i=0; i<len1; i++) {
printf("%d ",arr[i]);
}
return 0;
}
/* 输入性别,回车,统计男女人数*/
#include <stdio.h>
int main()
{
char sex[10];
int i,man=0,female=0;
int len=sizeof(sex)/sizeof(sex[0]);
for (i=0; i<len; i++) {
scanf("%c",&sex[i]);
if (sex[i]=='F'||sex[i]=='f') {
female++;
}else if(sex[i]=='M'||sex[i]=='m'){
man++;
}else if(sex[i]=='\n'){
break;
}
}
printf("%d %d",female,man);
return 0;
}
#include <stdio.h>
//允许读入空格符
int main()
{
char ch[50];
printf("pls input ...");
scanf("%[^\n]",ch);//正则表达式
printf("%s\n",ch);
return 0;
}
/*
定义一个字符数组,输入10个字符到数组中,将字符数组内容逐个输出。
比如:
输入:A B C D E F G H I J
输出:A B C D E F G H I J
输入:1 2 3 4 5 6 7 8 9 10
输出;1 2 3 4 5 6 7 8 9 10
*/
#include <stdio.h>
int main()
{
char ch[50];
scanf("%[^\n]",ch);
printf("%s",ch);
return 0;
}
//将一个数插入一个已知的有序序列中
int main()
{
int a[6]={1,3,5,7,9};
int i,insert_num,insert_index=0;
int len=sizeof(a)/sizeof(a[0]);
scanf("%d",&insert_num);
//printf("len=%d\n",len);
for (i=0; i<len; i++)
{
if (insert_num<a[i]||i==len-1) break;
insert_index++;
}
printf("insert_index=%d",insert_index);
for (i=len-1; i>insert_index;i-- )
{
a[i]=a[i-1];
}
a[insert_index]=insert_num;
for (i=0; i<len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
//删除某个数组中的一个数,注意重复出现的数字
int main()
{
int a[8] = {1,2,3,4,3,3,5,4};
int i,j,len = sizeof(a) / sizeof(a[0]);
int num,count = 1;
scanf("%d",&num);
for (i = 0; i < len; i++)
{
if (num == a[i])
{
for (j=i; j<len-1; j++)
{
a[j]=a[j+1];
}
len--;
i--;
}
}
for (i = 0; i < len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
//找出数组中最小数字,排在首位
#include <stdio.h>
int main()
{
int a[] = {3,4,6,3,6,7};
int i,index,temp;
int len=sizeof(a)/sizeof(a[0]);
int min=a[0];
for (i=0; i<len; i++) {
if (min>a[i]) {
min=a[i];
index=i;
}
}
temp = a[index];
a[index]=a[0];
a[0]=temp;
for (i=0; i<len; i++) {
printf("%d",a[i]);
}
return 0;
}
//选择排序,按从大到小排列
#include <stdio.h>
int main()
{
int a[]={5,4,3,1,2};
int index,i,j,temp;
int len=sizeof(a)/sizeof(a[0]);
for (i=0; i<len-1; i++)
{
index=i;
for (j=i+1; j<len; j++)
{
if (a[index]<a[j])
{
index=j;
}
}
printf("%d %d \n\n",index,a[index]);
if (index!=i) {
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
for (i=0; i<len; i++) {
printf("%d \n",a[i]);
}
return 0;
}
/* 字符串比较大小,字符按从小到大排序
*选择排序
*/
#include <stdio.h>
int main()
{
char a[] = "helloworld";
int i,j,temp,index;
int len=sizeof(a)/sizeof(a[0]);
for (i = 0; i <len; i++)
{
index = i;
for (j = i+1; j < len-1; j++)
{
if (a[index]>a[j])
{
index=j;
}
}
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
for (i = 0; i < len; i++) {
printf("%c",a[i]);
}
return 0;
}
//二维数组
//维数表示
int main()
{
int a[60][30];
int row,col;
row = sizeof(a)/sizeof(a[0]);
col = sizeof(a[0])/sizeof(a[0][0]);
return 0;
}
// 找出二维数组中的最大值
#include <stdio.h>
int main()
{
int score[3][3]={{2,6,1},{8,1,7},{9,10,3}};
int i,j;
int index_i=0,index_j=0;
int row = sizeof(score)/sizeof(score[0]);
int col = sizeof(score[0])/sizeof(score[0][0]);
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (a[index_i][index_j]<a[i][j])
{
index_i = i;
index_j = j;
}
}
}
printf("%d\n",score[index_i][index_j]);
return 0;
}
//计算二维数组对角线和
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
int i,j,sum_right=0,sum_left=0;
for (i = 0; i<n*n; i++) {
a[0][i]=i+1;
}
for (i = 0; i < n; i++)
{
sum_left+=a[i][n-i-1];
sum_right+=a[i][i];
}
printf("%d %d ",sum_right,sum_left);
return 0;
}
//定义一个数,输入n,数组向后循环移动n次
#include <stdio.h>
int main()
{
int a[5]={1,3,5,2,6};
int i,j,temp,n;
int len = sizeof(a)/sizeof(a[0]);
scanf("%d",&n);
for (i = 0; i < n; i++)
{
temp = a[len-1];
for (j = len-2; j >=0; j--)
{
a[j+1]=a[j];
}
a[0]=temp;
}
for (i = 0; i < len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
输出数字序列2/1,3/2,5/3,8/5,13/8,21/13...,输出个数由键盘输入。注意输入使用scanf输入
比如:
输入 3输出为
2/1
3/2
5/3
#include <stdio.h>
int main()
{
int n,i;
int up=1,down=1,temp;
scanf("%d",&n);
for (i =0; i<n; i++)
{
temp=down;
down=up;
up = up +temp;
printf("%d/%d\n",up,down);
}
return 0;
}
输出数字序列 1,2,3,5,8,13,21...,输出个数由键盘输入。注意输入使用scanf输入
比如:
输入 3输出为
1
2
3
#include <stdio.h>
int main()
{
int n,i,num1=0,num=1,temp;
scanf("%d",&n);
for (i = 0; i < n; i++)
{
temp = num;
num = num+num1;
num1 = temp;
printf("%d ",num);
}
return 0;
}
/*随机输入一个数组进行排序,冒泡排序
*/
#include <stdio.h>
int main()
{
int a[10];
int i,j,temp,index_max=0;
int all_len = sizeof(a)/sizeof(a[0]);
int len = 0;
for (i = 0; i < all_len; i++)
{
scanf("%d",&a[i]);
len ++;
if (getchar()=='\n')
break;
}
for (i = 0; i < len-1; i++)
{
for (j = 0; j < len-1-i; j++)
{
if (a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (i = 0; i < len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
//输入一个数,判断是否是含7和7的倍数
#include <stdio.h>
int isRight(int n)
{
if (n%7==0)
{
return 1;
}
else
{
while (n)
{
if (n%10==7)
{
return 1;
break;
}
n = n/10;
}
}
}
int main()
{
int n ;
scanf("%d",&n);
printf("%d",isRight(n));
return 0;
}
/*
输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)
比如:
输入:1 5 27 33 24 1 27 18 19 20
输出:
1 27
输入: 3 21 44 5 21 9 21 2 8 0
输出:
21
*/
#include <stdio.h>
int main()
{
int a[10],b[10];
int i,j;
int num;
int count;
int len = sizeof(a)/sizeof(a[0]);
for (i = 0; i < len; i++)
{
scanf("%d",&a[i]);
}
for (i = 0; i < len; i++)
{
num = a[i];
count = 0;
for (j = i; j < len; j++)
{
if (num == a[j]) {
count++;
}
}
b[i] = count;
//printf("%d ***",b[i]);
}
int max_count = b[0];
for (i = 0; i < len; i++)
{
if (b[i]>max_count)
{
max_count = b[i];
}
}
for (i = 0; i < len; i++)
{
if (max_count == b[i]) {
printf("%d ",a[i]);
}
}
return 0;
}
/*实现一个函数,传递一个字符数组,利用指针将数组中的小写字符转换成大写字符,并在main函数里,并在main函数中将转换的结果输出。
比如:
输入:Hello World
输出:HELLO WORLD
*/
#include <stdio.h>
#include <string.h>
void change(char *p,int len)
{
int i;
for (i = 0; i < len; i++)
{
if (*(p+i)>='a' && *(p+i)<='z')
{
*(p+i)=*(p+i)-32;
}
}
}
int main()
{
char ch[20];
int i;
scanf("%[^\n]",ch);
int len = strlen(ch);
change(ch,len);
printf("%s",ch);
return 0;
}
实现一个函数,传递两个字符数组,输出第二个字符数组在第一个字符数组中出现的次数。
比如:
输入:
abcdfewabcssaba
abc
输出:2
#include <stdio.h>
#include <string.h>
int count(char *p1,char *p2,int len1,int len2)
{
int count = 0;
int i,j;
for (i = 0; i <= len1 - len2; i++)
{
for (j = 0; j < len2; j++)
{
if(*(p1+i+j)!=*(p2+j))
break;
//匹配最后一个字符
if (j==len2-1)
count ++;
}
}
return count;
}
int main()
{
char ch1[30];
char ch2[10];
scanf("%s",ch1);
scanf("%s",ch2);
int len1 = strlen(ch1);
int len2 = strlen(ch2);
printf("%d\n ",count(ch1,ch2,len1,len2));
return 0;
}