基础3.3:控制语句扩展+第二次作业

本文深入探讨了C语言中的循环结构,包括for循环的嵌套应用,如何使用循环生成各种图形,以及解决实际问题的方法。同时,文章还介绍了数组的基本操作,如翻转、遍历求和和记录使用情况,以及字符串处理技巧。

1. for嵌套

  • (***)1 . 打印*组成的n*m的长方形矩阵
    例如:

    输入:4 5

    输出

*****
*****
*****
*****

注意:1.外行内列;
2.打印完一行,即进行换行,即执行完内部循环后;
完整代码见00101_star.c

#include <stdio.h>

main(){

		for(int j=0;j<4;++j){
		for(int i=0;i<5;++i){
			printf("*");
		}
		printf("\n");
		}
	
}
  1. (***)打印*组成n*n的三角形
    例如:

    输入: 4

输出

  *
  **
  ***
  ****

注意:(1) j<=i;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见00102_star.c

 #include <stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int i,j;
	for(i=0;i<n;++i){
		for(j=0;j<=i;++j){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
  1. 打印*组成n*(2*n-1)的三角形
    例如:

    输 4
    输出

    *
    ***
    *****
    *******

注意:(1) j<=2i-1;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见00103_star.c

#include <stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int i,j;
	for(i=1;i<=n;++i){
		for(j=1;j<=(2*i-1);++j){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
  1. 打印九九乘法表

注意:(1) j<=i;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见002_9x9.c

#include <stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int i,j;
	for(i=1;i<=n;++i){
		for(j=1;j<=i;++j){
			printf("%d*%d=%2d ",i,j,i*j);
		}
		printf("\n");
	}
	return 0;
}
  1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后,再去掉不满足条件的排列。

5.1 暴力破解法(多重循环)
(完整代码见00301_pailie.c)

#include <stdio.h>

int main(){
	int i,j,k,count = 0;
	for(i=1;i<=4;++i){
		for(j=1;j<=4;++j){
			for(k=1;k<=4;++k){
				//if(i==j||i==k||j==k)continue;
				if(i!=j && i!=k && j!=k){  // 暴力破解法(多重循环)
					printf("%d%d%d\n",k,j,i);
					count++;
				}
			}
		}
	}
	printf("%d\n",count);
}
  1. 输入长度为n数组,打印出数组元素两两组合的结果。

(完整代码见00302_pailie.c)

#include <stdio.h>

int main(){
	int i,j,n,count = 0;
	printf("please input the number:\n");
	scanf("%d",&n);
	for(i=1;i<=n;++i){
		for(j=1;j<=n;++j){
					printf("%d%d\n",j,i);
					count++;
				}
			}
	printf("%d\n",count);
}

2. 无限循环/死循环

无限循环/死循环是指判断条件永远为真的循环。
例如:

  while(1){
       /* 如果条件为真将重复执行的语句 */
    }

或者

 for(;;){
      /* 如果条件为真将重复执行的语句 */
    }

通常程序中要避免出现无限循环/死循环,特殊情况也会适当使用无限循环/死循环,这时可通过方式break方式退出。

3. 第二次作业

3.1 双重循环

(完整代码见00101_9x9.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=i;++j)
	    {
	        printf("%d*%d=%d ",j,i,j*i);
	    }
	    printf("\n");
	}

	return 0;
}

(完整代码见00102_9x9.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=i;++j)
	    {
	        printf("%d*%d=%d ",i,j,i*j);
	    }
	    printf("\n");
	}

	return 0;
}

(完整代码见00103_star.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=i;++j)
	    {
	        printf("*");
	    }
	    printf("\n");
	}

	return 0;
}

(完整代码见00104_star.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=2*i-1;++j)
	    {
	        printf("*");
	    }
	    printf("\n");
	}

	return 0;
}

(完整代码见00105_star.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=2*i-1;++j)
	    {
	        printf("*");
	    }
	    printf("\n");
	}

	return 0;
}

注意1:一个变量进行循环操作;

temp = i;  //(1)i负责循环;

注意2:一个变量进行判幸运 操作;

while(temp) //(2)temp进行判幸运操作
        {

count进行计数 操作;

(完整代码见00106——lucky.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int L,R,temp,count=0;
    scanf("%d%d",&L,&R);
    for(int i=L;i<=R;++i)
    {
        temp = i;  //(1)i负责循环;
        while(temp) //(2)temp进行判幸运操作
        {
            if(temp%10==7)
            {
                printf("%d\n",i);
                break;
            }
            else
            {
                temp/=10;
            }
        if(temp==0) ++count;//(3)count 进行计数;
        }
    }
    if(count==R-L+1) printf("None\n");
	return 0;
}

1.多重循环;(第一层负责范围;)

for(i=2;i<=n;++i)  //(1)质因数的范围;

2.第二层表示:(多次相除)

 while(n%i==0) //(2)质因数的判断‘

完整代码见00107——prime.c

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=2;i<=n;++i)  //(1)质因数的范围;
    {
        while(n%i==0) //(2)质因数的判断‘
        {
            n/=i;
            printf("%d\n",i);
        }

    }
	return 0;
}

完整代码见00108——month.c

  #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int y,m,n;
        scanf("%d%d%d",&y,&m,&n);
        int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        
        if(y%4==0&&y%100!=0||y%400==0){
            days[1] = 29;
        }
        
        int dist = 0;
        for(int i=0;i<m-1;++i){
            dist += days[i];
        }
        int day = (dist+n)%7;
        printf("S   M   T   W   T   F   S\n",n);
        for(int i=0;i<day;++i){
            printf("    ");
        }
        for(int i=1;i<=days[m-1];++i){
            printf("%d",i);
            printf((day+i)%7 == 0?"\n":i>9?"  ":"   ");
        }
        return 0;
    }

3.2.数字处理

注意:浮点误差通常用+0.0001(多位的小数)进行消除

printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n",p1*n1,p2*n2,p3*n3,p4*n4,p1*n1+p2*n2+p3*n3+p4*n4+0.001);

(完整代码见00201——price.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	float p1=1.2;
	float p2=3.5;
	float p3=4.5;
	float p4=5;
	float n1, n2, n3,n4;
	scanf("%f%f%f%f",&n1,&n2,&n3,&n4);
	printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n",p1*n1,p2*n2,p3*n3,p4*n4,p1*n1+p2*n2+p3*n3+p4*n4+0.001);

	return 0;
}
 #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d",&n);
        int a = sqrt(n);
        a*a == n?printf("%d",a):printf("No");
    
        return 0;
    }

越界的三种情况
(1)正数相加为负值;
(2)负数相加为正值。
(完整代码见00203——yuejie.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int x,y,sum;
	scanf("%d%d",&x,&y);
	sum=x + y;
    if(x < 0 && y < 0 && sum >= 0)  printf("Yes\n");
    else if(x >= 0 && y >= 0 && sum <0)  printf("Yes\n");
    else  printf("No\n");

	return 0;
}

(完整代码见00204——longxia.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int n,m;
	long long int count=0;
	scanf("%d%d",&n,&m);
	int a[n];
	for(int i=0;i<n;++i)
	{
	    scanf("%d",&a[i]);
	    if(a[i]>=m) count+=a[i];
	}
	printf("%lld\n",count);
	//主要程序内容写在这里

	return 0;
}

3.3.进制

注意:位与位或都是单号, | ,&,以及操作符优先级

printf("%d\n",(a|b)-(a&b));

(完整代码见00301——bit.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",(a|b)-(a&b));
	return 0;
}

短除法
条件: i=0;
循环:i/=2;

while(i!=0)
    {
        printf("%d",i%2);
        i/=2;
    }

(完整代码见00302——bit.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int i;
	scanf("%d",&i);
	while(i!=0)
    {
        printf("%d",i%2);
        i/=2;
    }

	return 0;
}

注意1:将10进制的每一位转化为任意进制的函数,取出每一位,然后乘上进制

 int toDec(int n,int base){
        int res = 0;
        int c = 0;
        while(n){
            int t = n%10;
            if(t >= base) return -1;
            res += t*pow(base,c);
            n /= 10;
            ++c;
        }
        return res;
    }

(完整代码见00303——base.c)

 #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int toDec(int n,int base){
        int res = 0;
        int c = 0;
        while(n){
            int t = n%10;
            if(t >= base) return -1;
            res += t*pow(base,c);
            n /= 10;
            ++c;
        }
        return res;
    }
    
    int main() {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        int res = 0;
        for(int i=2;i<=16;++i){
            int n = toDec(a,i);
            int m = toDec(b,i);
            int p = toDec(c,i);
            if(n*m==p){
                res = i;            
                break;
            }
        }
        printf("%d",res);
        return 0;
    }

方案:取每一位的数字,然后存到数组,然后逆序打印

(完整代码见00304——base.c)

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d",&n);
        int pos = 0;
        char res[40];
        while(0!=n){
            res[pos++] = '0'+n%2;
            n /= 2;
        }
        for(int i=pos-1;i>=0;--i){
            printf("%c",res[i]);    
        }
        
        return 0;
    }

方案1:直接用itoa()函数进行求解
分析:itoa(i ,num ,10 );
i ---- 需要转换成字符串的数字
num ---- 转换后保存字符串的变量
10 ---- 转换数字的基数(即进制)。10就是说按10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
返回值:指向num这个字符串的指针

scanf("%d%d",&N,&B);
strcpy(ch,itoa(N,s,B));

(完整代码见0030501——base.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>


int main(){
int i,N,B;
char ch[100];
char s[80];
scanf("%d%d",&N,&B);
strcpy(ch,itoa(N,s,B));
for(i=0;'\0'!=ch[i];++i)
{
    if(ch[i]>='a'&&ch[i]<='z')
    {
        ch[i]-=32;
    }
}
printf("%s\n",ch);
return 0;
}

方案2:用数组和逆序打印的方式
(完整代码见0030502——base.c)

#include <stdio.h>
    
    int main(){
        int n,b;
        scanf("%d%d",&n,&b);
        
        char table[17] = "0123456789ABCDEF";
        char s[32] = {0};
        int i = 0;
        do{
            int t = n%b;
            //printf("%c",table[t]);
            s[i] = table[t];
            ++i;
            n /= b;
        }while(n != 0);
        // 逆序打印
        int j;
        for(j=0;j<i/2;++j){
            char t = s[j];
            s[j] = s[i-1-j];
            s[i-1-j] = t;
        }
        printf("%s\n",s);
    }

3.4.(****)多重循环

费马大定理的原理:
在小于n的数字里面,(x次方):o^x = r^x+ s^x+ t^x (其中等式右边有x个数,互异)
注意:(1)左边的变量<n
(2)右边的变量 <o;(用 t=s+1;t<o;)表示互异性。

(完整代码见004_muchrecycle.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int n;
    scanf("%d",&n);
    int flag = 1;
    for(int o=2;o<=n;++o)
        for(int r=2;r<o;++r)
            for(int s=r+1;s<o;++s)
                for(int t=s+1;t<o;++t)
                    if(pow(r,3)+pow(s,3)+pow(t,3) == pow(o,3)){
                        printf("(%d,%d,%d,%d)\n",o,r,s,t);
                        flag = 0;
                    }
    if(flag) printf("OMG\n");

    return 0;
}

3.5.数组

完整代码见00501_reverse.c

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int len;
	scanf("%d",&len);
	int a[len];
	 printf("%d\n",len);
	int i;
	for(int i=0;i<len;++i )
	{
	    scanf("%d",&a[i]);
	}
	for(i=len-1;i>=0;--i)
	{
	    printf("%d\n",a[i]);
	}
	return 0;
}

用所有数的和进行判断;
完整代码见00502——sum.c

 #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d",&n);
        int arr[n];
        int sum = 0;
        for(int i=0;i<n;++i){
            scanf("%d",&arr[i]);
            sum += arr[i];
        }
        if(sum%2==1){
            printf("No");
            return 0;
        }
        int pre = 0;
        for(int i=0;i<n;++i){
            pre += arr[i];
            if(pre == sum/2){
                printf("Yes");
                return 0;
            }
            if(pre > sum/2){
                printf("No");
                return 0;
            }
        }
        
        return 0;
    }

完整代码见00503——guoqian.c

 #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d",&n);
        int arr[n];
        for(int i=0;i<n;++i){
            scanf("%d",&arr[i]);
        }
        for(int i=0;i<n;++i){
            if(1 == arr[i]){
                printf("Q\n");
                continue;
            }
            int sum = 1;
            for(int j=2;j<arr[i];++j){
                if(arr[i]%j == 0)
                    sum += j;
            }
            if(sum == arr[i]) printf("E\n");
            else if(sum > arr[i]) printf("G\n");
            else printf("Q\n");
        }
        
        return 0;
    }

完整代码见00504——double.c

  #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int arr[1000];
        int len=0;
        while(1){
            scanf("%d",&arr[len++]);
            if(0 == arr[len-1]) break;
        }
        int c=0;
        for(int i=0;i<len-1;++i){
            for(int j=i;j<len;++j){
                if(arr[i] == 2*arr[j] 
                || 2*arr[i] == arr[j])
                    ++c;
            }
        }
        printf("%d",c);
    
        return 0;
    }

3.6数组:记录用法

方案一:用0,1表示出现是,否;
具体分两种情况:
1.入:
1.1入无座

if(seat_nums == 0){ // 没有座位
                    ++count;
                    ++i;
                }

1.2入有座的情况,键值一定还原;

else{
                    --seat_nums;
                    record[no] = 1;
                }

2出;

2.重点:将其下标表示(索引)出来,注意:查找出来的话,一定要将(键值)还原。

// 出
            if(record[no] == 1){
                record[no] = 0;
                ++seat_nums;
                continue;
            }

完整代码见0060101_caffee.c

  #include <stdio.h>
    #include <stdbool.h> // bool true false
    int main(){
        int n;
        scanf("%d",&n);
        char s[100];
        scanf("%s",s);
    
        // 定义座位
        int seat_nums = n;// 当前有多少位置空着
        // 定义记录表
        int record[26] = {0};
    
        int count = 0;// 未接收到服务的人数
        for(int i=0;'\0'!=s[i];++i){
            char c = s[i];
            int no = c-'A';// 字符对应的记录表的下标
            // 出
            if(record[no] == 1){
                record[no] = 0;
                ++seat_nums;
                continue;
            }else{// 入
                if(seat_nums == 0){ // 没有座位
                    ++count;
                    ++i;
                }else{
                    --seat_nums;
                    record[no] = 1;
                }
            }
        }
    
        printf("%d\n",count);
    }

方案二:用true,false出现是,否出现;

#include <stdio.h>
#include <stdbool.h> // bool true false
int main(){
	int n;
	scanf("%d",&n);
	char s[100];
	scanf("%s",s);

	// 定义座位
	char seats[n];
	for(int i=0;i<n;++i){
		seats[i] = 0;
	}

	int count = 0;// 为接收到服务的人数
	for(int i=0;'\0'!=s[i];++i){
		// 出
		bool sitted = false;// 假设当前字母没有进入过
		for(int j=0;j<n;++j){
			if(s[i] == seats[j]){
				seats[j] = 0;
				sitted = true;
				break;
			}
		}
		if(sitted) continue;// 表示已经离开

		// 入
		bool hasEmpty = false;
		for(int j=0;j<n;++j){
			if(0 == seats[j]){
				seats[j] = s[i];
				hasEmpty = true;
				break;
			}
		}
		if(!hasEmpty){
			++count;
			++i;// 表示没有座位马上离开
		}
	}

	printf("%d\n",count);
}

方案三:用true,false出现是,否出现;
完整代码见0060103_coffee.c

#include <stdio.h>
#include <stdbool.h> // bool true false
int main(){
	int n;
	scanf("%d",&n);
	char s[100];
	scanf("%s",s);

	// 定义座位
	int seat_nums = n;// 当前有多少位置空着
	// 定义记录表
	bool record[26] = {false};

	int count = 0;// 未接收到服务的人数
	for(int i=0;'\0'!=s[i];++i){
		char c = s[i];
		int no = c-'A';// 字符对应的记录表的下标
		// 出
		if(record[no]){
			record[no] = false;
			++seat_nums;
			continue;
		}else{// 入
			if(seat_nums == 0){ // 没有座位
				++count;
				++i;
			}else{
				--seat_nums;
				record[no] = true;
			}
		}
	}

	printf("%d\n",count);
}

注意:前n行代表重量;
后m行代表序号;

两种情况:(1)刚开始判断上船的情况;

 if(records[index] == 0){
                records[index] = 1;
                total +=weights[index];
                max = max < total?total:max;
                if(max > W){
                    printf("Oh, My God!");
                    return 0;
                }
                
            }

(2)下船的情况;

else{
                records[index] = 0;
                total -=weights[index];
            }
        }
  1. 重点:通过索引和键值判断上下船的人数的情况;
int records[n+1];
        memset(records,0,(n+1)*sizeof(int));

完整代码见00602——westlake

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n,m,W;
        scanf("%d%d%d",&n,&m,&W);
        
        int weights[n+1];
        for(int i=1;i<=n;++i){
            scanf("%d",&weights[i]);
        }
        
        int records[n+1];
        memset(records,0,(n+1)*sizeof(int));
        
        int total = 0;
        int max = 0;
        for(int i=0;i<m;++i){
            int index;
            scanf("%d",&index);
            if(records[index] == 0){
                records[index] = 1;
                total +=weights[index];
                max = max < total?total:max;
                if(max > W){
                    printf("Oh, My God!");
                    return 0;
                }
                
            }else{
                records[index] = 0;
                total -=weights[index];
            }
        }
        
        printf("%d",max);
    
        return 0;
    }
    

(1)重要:用索引和值来代表出现的次数;

memset(arr,0,(n+1)*sizeof(int));

(2次数不为为0的情况

   while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;  //次数不为为0的情况
        }

(3)次数为0的情况

for(int i=1;i<=n;++i){
            if(arr[i] == 0) printf("%d\n",i);
        }

完整代码见00603——miss.c

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[n+1];
        memset(arr,0,(n+1)*sizeof(int));
        while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;  //次数不为为0的情况
        }



        for(int i=1;i<=n;++i){
            if(arr[i] == 0) printf("%d\n",i);
        }
        return 0;
    }

(1)重要:用索引和值来代表出现的次数;

memset(arr,0,(n+1)*sizeof(int));

(2次数不为为0的情况

   while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;  //次数不为为0的情况
        }

(3)次数大于1的情况

for(int i=1;i<=n;++i){
            if(arr[i] > 1) printf("%d\n",i);
        }

完整代码见00604——much.c

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[n+1];
        memset(arr,0,(n+1)*sizeof(int));
        while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;
        }
        for(int i=1;i<=n;++i){
            if(arr[i] > 1) 
                printf("%d %d\n",i,arr[i]);
        }
    
        return 0;
    }

3.7字符串

完整代码见00701_replace.c

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        char str[10001];
        scanf("%s",str);
        for (int i=0;'\0' !=str[i];++i) {
            if(str[i]>='0' && str[i]<='9'){
                str[i]='*';         
            }
        }
        printf("%s",str);
    
        return 0;
    }

字典序;即字符串按照首字母的顺序进行比较;
方案1:strcmp()进行字符串的比较;

printf(strcmp(a,b)<0?"YES":"NO");

(完整代码见0070201——cmp.c)

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        char a[10000],b[10000];
        scanf("%s%s",a,b);
        printf(strcmp(a,b)<0?"YES":"NO");
    
        return 0;
    }

方案2:strcmp()的具体实现进行字符串的比较;注意:循环的条件

for(i=0;a[i]!='\0'||b[i]!='\0';++i)
	{
	    if(a[i]<b[i])
	    {
	        printf("YES\n");
	        break;
	    }
	    else if(a[i]>b[i])
	{
	        printf("NO\n");
	        break;
	    }
	}

(完整代码见0070202——strcmp.c)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
	char a[10000];
	char b[10000];
	scanf("%s %s",&a,&b);
	
	int i;
	for(i=0;a[i]!='\0'||b[i]!='\0';++i)
	{
	    if(a[i]<b[i])
	    {
	        printf("YES\n");
	        break;
	    }
	    else if(a[i]>b[i])
	{
	        printf("NO\n");
	        break;
	    }
	}
	

	return 0;
}

完整代码见00703——location.c

  #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d",&n);
        char str[10001];
        scanf("%s\n",str);
        char c;
        scanf("%c",&c);
        int pos = -1;
        for(int i=0;'\0' != str[i];++i){
            if(c == str[i]){
                pos = i;
                break;
            }
        }
        printf("%d",pos);
        return 0;
    }

strstr() 判断一个字符串是否是另一个字符串的子串;
返回值:指针,为NULL,表示不是子串,为负;表示子串最后一个元素首地址;
返回值和母串的首地址相减,则表示:偏移的索引;
完整代码见00704——location.c

#include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main() {
        char a[10001],b[10001];
        scanf("%s\n%s",a,b);
        char* p = strstr(a,b);
        printf("%d",NULL == p?-1:p-a);
        return 0;
    }

1gets()碰见\0不停止输入;scanf()需要停止;

gets(s);
  1. 双引号的阿斯克码值为34;
    并引用标志位;对前后引号进行判断;
  for(z=0,i=0; str[i]!='\0'; i++)
    {
        if(str[i]==34&&z==0)
        {
            printf("``");
            z=1;
        }
        else if(str[i]==34&&z==1)
        {
            printf("''");
            z=0;
        }

完整代码见00705_replace.c

#include <stdio.h>
int main()
{
    char str[1025];
    int z,i;
    gets(str);
    for(z=0,i=0; str[i]!='\0'; i++)
    {
        if(str[i]==34&&z==0)
        {
            printf("``");
            z=1;
        }
        else if(str[i]==34&&z==1)
        {
            printf("''");
            z=0;
        }
        else printf("%c",str[i]);
        }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值