例子
逆序打印数组
#include<stdio.h>
int main(){
int i=0;
int arr[10];
for(i=0;i<10;i++) {
arr[i]=i;
}
for(i=9;i>=0;i--){
printf("%d ",arr[i]);
}
}
冒泡排序
#include<stdio.h>
int main(){
int i=0;
int arr[10]={34,67,90,43,124,87,65,99,132,26};
printf("排序前:\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
printf("\n");
for(i=0;i<9;i++){
int j=0;
for(j=0;j<9-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];;
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
printf("排序后:\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
}
有多少个单词
#include<stdio.h>
#include<string.h>
int main(){
char str[1000]={0};
gets(str);
int i=0;
int word=0;
for(i=0;str[i]!='\0';i++){
if(str[i]!=' '&&(str[i+1]==' '||str[i+1]=='\0'))
word++;
}
printf("%d\n",word);
return 0;
}
#include<stdio.h>
#include<string.h>
int main(){
char str[1000]={0};
gets(str);
int i=0;
int word=0,num=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==' ')word=0;
else if(word==0){
//根据字符 判断 第一个单词直接进入 后续遇空格后第一个字符num++
word=1;
num++;
}
}
printf("%d\n",num);
return 0;
}
函数
#include<string.h>
puts函数 输出字符串的函数
gets函数 输入字符串的函数
#include<stdio.h>
#include<string.h>
int main(){
char str[10]={0};
gets(str);
puts(str);
return 0;
}
strcat函数 字符串连接函数
#include<stdio.h>
#include<string.h>
int main(){
char str[30]="cc";
char str1[10]="acccj";
strcat(str,str1);
printf("%s\n",str);
return 0;
}
strcpy和strncpy 字符串复制函数
#include<stdio.h>
#include<string.h>
int main(){
char str[10]="ccbbaabbc";
char str1[6]="acccj";
strcpy(str,str1);
printf("%s\n",str);//acccj
printf("%c\n",str[8]); //c
char str2[10]="ccbbaabbc";
char str3[6]="acccj";
strncpy(str2,str3,5);//acccjabbc
printf("%s\n",str2);
return 0;
}
strcmp 字符串比较函数
#include<stdio.h>
#include<string.h>
int main(){
char str[10]="ccbbaabbc";
char str1[6]="acccj";
if(strcmp(str,str1)>0){
printf(">\n");
} else if(strcmp(str,str1)==0){
printf("=\n");
}else{
printf("<\n");
}
strcpy(str,str1);
if(strcmp(str,str1)>0){
printf(">\n");
} else if(strcmp(str,str1)==0){
printf("=\n");
}else{
printf("<\n");
}
return 0;
}
strlen 测字符串长度的函数
#include<stdio.h>
#include<string.h>
int main(){
char str[10]="ccbbaabbc\0";
char str1[6]="accc";
printf("%d\n",strlen(str));
printf("%d\n",strlen(str1));
return 0;
}
strlwr 转换为小写的函数
strupr 转换为大写的函数
#include<stdio.h>
#include<string.h>
int main(){
char str[10]="abc";
printf("%s\n",strupr(str)); //ABC
printf("%s\n",str); //ABC
printf("%s\n",strlwr(str)); //abc
return 0;
}
课后习题
用筛选法求100以内的素数
#include<stdio.h>
#include<math.h>
int main(){
int arr[101]={0};
int i=1;
for(i=1;i<=100;i++){
arr[i]=i;
}
arr[1]=0;
for(i=2;i<sqrt(100);i++){
int j=0;
for(j=i+1;j<=100;j++){
if(arr[i]!=0&&arr[j]!=0){
if(arr[j]%arr[i]==0){
//能被素数整除
arr[j]=0;
}
}
}
}
for(i=2;i<=100;i++){
if(arr[i]!=0){
printf("%d ",arr[i]);
}
}
return 0;
}
用选择法对10个整数排序
#include<stdio.h>
int main(){
int arr[10]={0};
int i=0;
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
printf("arr[%d]=%d\n",i,arr[i]);
}
printf("排序前\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
//先找到最小的数的索引 让它和当前i位置的数交换
int min=0;
for(i=0;i<10;i++){
min=i;//重置当前位置
int j=0;
for(j=i+1;j<10;j++){
if(arr[min]>arr[j]){
min=j;
}
}
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
printf("\n");
printf("排序后\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
return 0;
}
求对角线元素之和
#include<stdio.h>
int main(){
int arr[3][3]={1,2,3,4,5,6,7,8,9};
int sum=0;
int sum1=0;
int i=0,j=0;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i==j){
sum+=arr[i][j];
}
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i+j==2)
sum1+=arr[i][j];
}
}
printf("%d\n",sum);
printf("%d\n",sum1);
return 0;
}
插入元素进数组
#include<stdio.h>
int main(){
int arr[11]={0,1,2,3,4,5,6,7,8,9};
// int arr[11]={0,0,0,0,0,0,0,0,0,0};
// int arr[11]={9,8,7,6,5,4,3,2,1,0};
int i=0;
int num=0;
scanf("%d",&num);
if(arr[0]>arr[9]){
//逆序 987654321
for(i=9;i>=0;i--){
if(num>arr[i]){
arr[i+1]=arr[i];
}else{
arr[i+1]=num;
break;
}
if(i==0){
arr[i]=num;//比完也没跳出循环
}
}
}else{
//顺序 或者 00000
for(i=9;i>=0;i--){
if(num<arr[i]){
arr[i+1]=arr[i];
}else{
arr[i+1]=num;
break;
}
if(i==0){
arr[i]=num;//比完也没跳出循环
}
}
}
for(i=0;i<11;i++){
printf("%d ",arr[i]);
}
return 0;
}
逆序重新存放
#include<stdio.h>
int main(){
// int arr[10]={0,1,2,3,4,5,6,7,8,9};
int arr[5]={8,6,5,4,1};
int len=sizeof(arr)/sizeof(arr[0]);
int i=0;
for(i=0;i<len/2;i++){
int temp=arr[i];
arr[i]=arr[len-1-i];
arr[len-1-i]=temp;
}
for(i=0;i<len;i++){
printf("%d ",arr[i]);
}
return 0;
}
打印杨辉三角
#include<stdio.h>
int main(){
int arr[11][11];
int i=0;
int j=0;
//找规律 对角线都为1 第一行都为1
for(i=1;i<=10;i++){
for(j=1;j<=10;j++){
if(j==1)
arr[i][j]=1;
else if(i==j)
arr[i][j]=1;
else
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
for(i=1;i<=10;i++){
for(j=1;j<=i;j++){
printf("%2d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
魔方阵
#include<stdio.h>
int main(){
int n=0;
scanf("%d",&n);
int arr[10][10]={0};
int i=0;
int j=0;
int row=0;
int col=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
arr[i][j]=0;
}
//第一行的中间放1
arr[1][n/2+1]=i;
row=1;
col=n/2+1;
for(i=2;i<=n*n;i++){
row-=1;
col+=1;
if(row<1)//防止row溢出
row+=n;
if(col>n)//防止col溢出
col%=n;
if(arr[row][col]==0){
arr[row][col]=i;
} else{
row+=2;//row可能溢出
col-=1;//col可能溢出
if(col<1)
col+=n;
if(row>n)
row%=n;
arr[row][col]=i;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main(){
int a[15][15],i,j,k,p,n;
p=1;
while(p==1){
printf("1~15");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0)){
p=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
a[i][j]=0;
}
}
//建立魔方阵
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++){
i=i-1;
j=j+1;
if((i<1)&&(j>n)){
i+=2;
j-=1;
}else{
if(i<1)i=n;
if(j>n)j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else{
i+=2;
j-=1;
a[i][j]=k;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
鞍点
#include<stdio.h>
int main(){
//测试数据
// 1 2 3 4 5
// 2 4 6 8 10
// 3 6 9 12 15
// 4 8 12 16 20
// 1 2 3 4 11
// 2 4 6 8 12
// 3 6 9 10 15
// 4 8 12 16 7
int arr[4][5]={0};
int i=0;
int j=0;
int n=0;
printf("请输入数组数据\n");
for(i=0;i<4;i++){
for(j=0;j<5;j++){
scanf("%d",&arr[i][j]);
}
}
int flag=1; //为1说明有一个鞍点
int ii=0;
int jj=0;//标记最大的一行j在哪
for(i=0;i<4;i++){
int max=arr[i][0];//标记一个最大值
for(j=1;j<5;j++){
if(arr[i][j]>max){
ii=i;
jj=j;
max=arr[i][j];
}
}
for(n=0;n<4;n++){
if(arr[n][jj]<max)
flag=0;
}
if(flag==1)
break;
}
if(flag)
printf("arr[%d][%d]=%d\n",ii,jj,arr[ii][jj]);
else
printf("没找到\n");
return 0;
}
二分查找
#include<stdio.h>
int main(){
// int arr[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int arr[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left=0;
int right=sizeof(arr)/sizeof(arr[0]);
int mid,flag=0;
int num;//需要查找的那个数
scanf("%d",&num);
while(left<=right){
mid=(left+right)/2;
if(num==arr[mid]){
flag=1;//成功找到该元素 退出循环
break;
}else{
//该数组从大到小排序
if(num>arr[mid]){
right=mid-1;
}else{
left=mid+1;
}
}
}
if(flag==1)
printf("found! 循环为%d\n",mid+1);
else
printf("No found!\n");
return 0;
}
判断字符数量
#include<stdio.h>
#include<string.h>
int main(){
char text[3][80];
int i=0,j=0;
int upstring=0;//大写字符
int lowstring=0;//小写字符
int dig=0;//数字
int space=0;//空格字符
int other=0;//其它字符
for(i=0;i<3;i++){
printf("please input line %d:\n",i+1);
gets(text[i]);
for(j=0;j<80&&text[i][j]!='\0';j++){
if(text[i][j]>='A'&&text[i][j]<='Z'){
upstring++;
}else if(text[i][j]>='a'&&text[i][j]<='z'){
lowstring++;
}else if(text[i][j]>='0'&&text[i][j]<='9'){
dig++;
}else if(text[i][j]==' '){
space++;
}else{
other++;
}
}
}
printf("大写字母个数:%d\n",upstring);
printf("小写字母个数:%d\n",lowstring);
printf("数字个数:%d\n",dig);
printf("空格个数:%d\n",space);
printf("其它字符个数:%d\n",other);
return 0;
}
打印图案
#include<stdio.h>
//* * * * *
// * * * * *
// * * * * *
// * * * * *
// * * * * *
int main(){
int i=0;
int j=0;
for(i=0;i<5;i++){
for(j=0;j<5+i;j++){
if(j<i){
printf(" ");
}else{
printf("* ");
}
}
printf("\n");
}
return 0;
}
转译密文
#include<stdio.h>
#include<string.h>
//26-(a-'A')+'A'+1 ---->25-a+'A'+'A'
//R droo erhrg Xsrmz mvcg dvvp.
int main(){
char text[80],trans[80];
gets(text);
int i=0;
for(i=0;i<80;i++){
if((text[i]>='a')&&(text[i]<='z')){
trans[i]=(char)(25-text[i]+'a'+'a');
}else if((text[i]>='A')&&(text[i]<='Z')){
trans[i]=(char)(25-text[i]+'A'+'A');
}else{
trans[i]=text[i];
}
}
printf("%s\n",trans);
return 0;
}
模拟strcat
#include<stdio.h>
int main(){
char s1[80],s2[40];
int i=0,j=0;
printf("input string1:\n");
scanf("%s",s1);
printf("input string2:\n");
scanf("%s",s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0'){
s1[i++]=s2[j++];
}
s1[i]='\0';
printf("new String is -> %s\n",s1);
return 0;
}
模拟strcmp
#include<stdio.h>
int main(){
char s1[40],s2[40];
int num=0;
gets(s1);
gets(s2);
int i=0;
while(s1[i]==s2[i]&&s1[i]!='\0')
i++;
if(s1[i]=='\0'&&s2[i]=='\0')
num=0;
else
num=s1[i]-s2[i];
printf("result:%d\n",num);
return 0;
}
模拟strcpy
#include<stdio.h>
#include<string.h>
int main(){
char s1[40]="sd",s2[40];
printf("原来的s1->:%s\n",s1);
scanf("%s",s2);
int i=0;
//=strlen是为了把\0也拷过去
for(i=0;i<=strlen(s2);i++)
s1[i]=s2[i];
printf("%s\n",s1);
return 0;
}