《C和指针》第四章习题

问题

合法,对表达式进行求值,但是结果没有存在任何地方 

 数据类型 变量名 = 值或表达式

 合法,如果你想为一些语句引入变量,但是又想变量只能这些语句使用,就可以这样定义

	if(a); else {a++;}

 0-9

1 while ((ch=getchar()!=EOF)
2     checksum +=ch;
3     putchar(ch);
4 printf("Checksum=%d\n",checksum);

 容易死循环,且putchar不在while循环里

需要循环体至少执行一次的时候用do合适

1 #include<stdio.h>
 2 int main()
 3 {
 4         int i;
 5         for (i=1;i<4;i++)
 6         {
 7                 switch(i%2){
 8                         case 0:
 9                                 printf("even\n");
10                         case1:
11                                 printf("odd\n");
12                 }
13         }
14         return 0;
15 }

 odd           even odd             odd        

int main()
{
	int num;
	scanf("%d", &num);
	while (num--)
	{
		printf("\n");
	}
	return 0;
}

int main()
{
	int x,y,a,b;
	scanf("%d %d %d %d", &x,&y,&a,&b);
	if (x < y || a >= b)
		printf("WRONG\n");
	else
		printf("RIGHT\n");
	return 0;
}

int main()
{
	int year;
	int leap_year;
	scanf("%d", &year);
	if (year % 4 == 0)
	{
		if (year % 100 == 0)
		{
			if (year % 400 == 0)
				leap_year = 1;
			else 
				leap_year = 0;
		}
		else
		 leap_year = 1;
	}
	else
	{
		leap_year = 0;
	}
	printf("%d", leap_year);
	return 0;
}

 1 #include<stdio.h>
 2 int main()
 3 
 4 {
 5         int i;
 6         printf("Please enter a number(1~5):");
 7         scanf("%d",&i);
 8         switch(i)
 9         {
10                 case 1:
11                         printf("who\n");
12                         break;
13                 case 2:
14                         printf("what\n");
15                         break;
16                 case 3:
17                         printf("when\n");
18                         break;
19                 case 4:
20                         printf("where\n");
21                         break;
22                 case 5:
23                         printf("why\n");
24                         break;
25                 default:
26                         printf("don't know\n");
27                         break;
28         }
29         return 0;
30 }

while(hungry())
    {
    
        eat_humberger();
    }

do
    {
        eat_humberger();
    }

while(hungry())

#include<stdio.h>
int main()

{
        int pre,tem;
        printf("precipiting=");
        scanf("%d",&pre);
        printf("tempreture=");
        scanf("%d",&tem);
        if(pre)
                {
                        if(tem<32)
                                printf("snowing\n");
                        else
                                printf("raining\n");
                }
        else
                {
                        if(tem<60)
                                printf("cold\n");
                        else
                                printf("warm\n");
                }
    
        return 0;
}

 编程练习

int main()
{
	float a = 1;//第一个近似值和第n个近似值
	float b;//第n+1个近似值
	float n;//要求的数
	scanf("%f", &n);
	for(;n<0;)
	{
		printf("输入错误,请重新输入\n");
		scanf("%f", &n);
	}
	while (1)
	{
		b = (a + n / a) / 2; //算出第n+1个近似值
		if (b == a)break;//直到a = b时跳出循环
		a = b;//把第n+1个赋给a,然后继续循环计算第n+2个近似值
	}
	printf("%lf",b);
	return 0;
}

1    int main()
2    {
3    	int i = 0;	//2-100
4    	for (i = 2; i <= 100; i++)//1不是质数
5    	{
6    		int flag = 0;/*在这里定义标志位,目的是每次进入第一个for循环都让flag=0,
7                            如果没有进入第11行的if循环,就还是0,即质数*/
8    		int a = 2 ;
9    		for (a = 2; a < i; a++)//这里当i=1和2时,就因为a>=i而无法进入循环
10    		{
11    			if (i % a == 0)//若不是质数,就置标志位为1
12    			{
13    				flag = 1;
14    				break;
15    			}
16    		}
17    		if (flag == 0)//标志位为0表示是质数,就打印出来
18    		{
19    			printf("%d ", i);
20    		}
21    	}
22    	return 0;
23    }

 

int main()
{
	int a, b, c;
	printf("请输入三条边的长度\n");
	scanf("%d %d %d", &a, &b, &c);
	if (a + b > c && a + c > b && c + b > a)
	{
		if (a == b || a == c || b == c)
		{
			if (a == b || b== c)
			{
				printf("等边三角形");
			}
			else
			{
				printf("等腰三角形");
			}
		}
		else
		printf("普通三角形");
	}
	else
	{
		printf("不组成三角形");
	}
	return 0;
}

void copy_n(char dst[], char src[], int n)//从src->dst
{
	int count=0;
	for(count=0;count<=n-1;count++)
	{
		if (*src != NULL)
		{
			*dst = *src;
			dst++;
			src++;
		}
		else
		{
			*dst = NULL;
			dst++;
		}
	}
}
int main()
{
	int n = 10;
	char a[10] = { 0 };
	char b[10] = { "abcd"};
	copy_n(a, b,5);
	printf(a);
	return 0;
}

#define MAX_LINE 20		//最大处理行数
#define MAX_COLS 128	//最大处理列数


void select(char input[MAX_LINE][MAX_COLS], char output[MAX_LINE],int i)//i是行数
{
	int flag = 0;//定义一个标志位,用来看比较到哪一行了
	while (flag <= i)
	{
		if (strcmp(input[flag], input[flag+1]) == 0)//比较相邻的两行
		{
			strcpy(output, input[flag]);//把其中一行移到output中待用

			/*接下来比较相邻的两行是否和第三行也相等,若相等,就不打印,就flag++之后继续比较,直                            
              到不相等,此时的比较起始位置就是这个与之前的行不相等的一行*/
			if (strcmp(output, input[flag + 2]) != 0)printf("%s\n", output);
		}
		flag++;//比较的起始位置往后移动1个
	}
}

int main()
{
	char input[MAX_LINE][MAX_COLS] = { 0 };
	char output[MAX_LINE] = { 0 };
	int i = 0;
	while (gets(input[i]) != NULL)i++;//一直读取输入行,直到读取到NULL,
	select(input, output,i);		 //即我们可以直接Ctrl+Z结束读取
	return 0;
}

int substr(char dst[], char src[], int start, int len)
{
	int flag = 0;
	int dst_n = 0;
	if (start > (strlen(src) - 1) || start < 0 || len < 0)
	{
		if (len < 0)
		{
			len = -len;
			while (len--)dst[dst_n++] = NULL;	
		}
		else     //start > (strlen(src) - 1) || start < 0
		{
			while (len--)dst[dst_n++] = NULL;
		}
	}
	else
	{
		while (len--)
		{
			dst[dst_n++] = src[start++];
			if (src[start] == '\0')  //start在一直++,len还没有减到零就遇到src的最后一位时,            
                                       就结束转移
			{
				dst[dst_n]=NULL;
				flag = 1; break;
			}
		}
		//这是在len等于0后,直接就是结束dst中字符的转移,在结尾加上NULL
		if (flag == 0)
			dst[dst_n] = NULL;
	}
	return strlen(dst);
}
int main()
{
	char src[20] = { "HELLOW111111" };
	char dst[20] = { 0 };
	int len = 20;
	int start =5;
	int ret = substr(dst, src, start, len);
	printf("%s\n%d",dst, ret);
	return 0;
}

void deblank(char string[])
{
	int i = 0;
	int len = 0;
	while (1)                    //目的是获取字符
	{
		string[len] = getchar(); //不断获取字符
		if (string[len] == '\n') //当获取的字符为NULL时代表字符串结束,我们用换行符来代替
			break;               //跳出while循环
		len++;                   //否则就继续获取字符
	}
	for (i = 0; i < len; i++)    //目的是删减空格
	{
		if (string[i] == ' ' && string[i + 1] == ' ') //判断是否有连着的空格
			continue;                         //如果有,就先不打印,而是开始下一次的判断
		putchar(string[i]);     //没有连着的空格,就打印出来当前字符
	}
}
int main()
{
	char str[1000];
	printf("请输入一串字符\n");
	deblank(str);
	return 0;
}

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值