1

循环语句练习、c语言练习

 3 years ago
source link: https://blog.csdn.net/xiaotangyu7dong/article/details/115388306
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

循环语句练习:

1)计算n的阶乘:

#include <stdio.h>
int main()
{   int i = 0;
    int ret = 1;
    printf("计算阶乘:>");
	int n = 0;
	scanf("%d", &n);
	for(i = 1; i<=n; i++)
	{  
	    ret = ret * i; 
	
	}
	printf("结果是:%d",ret);

  return 0;
}

在这里插入图片描述

2)计算1!+2!+3!+…+10!:

#include <stdio.h>
int main()
{  
	int i = 0;
	int sum = 0;
	int n = 0;
	int ret = 1;
	for(i = 1; i<= 10; i++)
	{
	     ret = 1;
		for(n = 1; n <= i; n++)
		{
			ret = ret * n;		   
		}
		sum = sum + ret;
	 }
		printf("%d\n",sum); 
   return 0 ;
}

在这里插入图片描述
第二种:

#include <stdio.h>
int main()
{  
	int i = 0;
	int sum = 0;
	int n = 0;
	int ret = 1;
	for(i = 1; i<= 10; i++)
	{
	   ret = ret * i;
	   sum = sum + ret;

	 }
		printf("%d\n",sum); 
   return 0 ;
}

3)在一个有序数组中查找具体的某个数字n:

#include <stdio.h>
int main()
{  
	int arr[] = {1,2,3.4,5,6,7,8,9,10,11};
	int left = 0;
	int sz = sizeof(arr)/sizeof(arr[0]);
	int right = sz-1;
	int mid= (left + right)/2;
	int k = 7;
	while(left<=right)
{
	if(arr[mid] >k)
	{
         right = mid - 1;	
	}
	else if(arr[mid] <k)
	{
	    left = mid + 1;
	}
	else 
	{
	  printf("找到了,下标是:%d\n",mid);
	  break;
	}
   
}
	 if(left>right)
	printf("找不到\n");
	return 0 ;

}

运用了二分找查法,利用下标与数组中的元素关系,寻找中间值,从而找到目标数字。

4)编写代码,演示多个字符从两端移动,向中间汇聚 :

#include <string.h>
#include <stdio.h>
#include<Windows.h>
int main()
{ 
	char arr1[] = "welcome to GPNU!" ;
	char arr2[] = "################";
	int left = 0;
	int right = strlen(arr1)-1;
	while(left<=right) 
	{
		arr2[left] = arr1[left];
	    arr2[right] = arr1[right];
		printf("%s\n",arr2);
	    Sleep(1000);
		system("cls");
		left++;
		right--;

	}
	printf("%s\n",arr2);
   return 0;
}

Sleep(1000); 睡眠函数,可以短暂停留。
system(“cls”); 清空屏幕

5)编写代码实现,模拟用户登录情景,并且只能登录三次 :

#include <string.h>
#include <stdio.h>
int main()
{ 
	int i = 0;
	char password[20] = {};
	for(i=0; i<3; i++)
	{
	     printf("请输出密码:>");
		scanf("%s",password);
		 if(strcmp(password,"123456") == 0)
		 {
		   printf("登录成功\n");
		   break;
		 }
		 else if(i<2)
		 {
		  printf("密码错误,请重新输入\n");
		 }
	
	}
     if(i==3)
	   printf("三次密码均错误,退出程序\n");
	return 0;
}

在这里插入图片描述
在这里插入图片描述

c语言练习:

1、关于c语言关键字说法正确的是:(B)
A.关键字可以自己创建
B.关键字不可以自己创建
C.关键字可以做变量名
D.typedef不是关键字

2、下面不是关键字的是(C)
A.int
B.struct
C.define 预处理指令
D.continue

int func(int a)
{
   int b;
   switch(a)
   {
     case 1: b= 30;
     case 2: b= 20;
     case 3: b= 16;
     case 4: b= 0;
   }
   return b;
}

则func(1)=(D)
A.30
B.20
C.16
D.0
没有break语句,所以一直执行到结束。

写代码将三个数从大到小输出

#include <string.h>
#include <stdio.h>
int main()
{ 
  int a= 0;
  int b= 0;
  int c= 0;
  scanf("%d %d %d",&a,&b,&c);
   if(a<b)
   {
       int tmp = a;
	   a=b;
	   b= tmp;
   }
   if(a<c)
  {
       int tmp = a;
	   a=c;
	   c= tmp;
   }
   if(c>b)
	   {
       int tmp = b;
	   b=c;
	   c= tmp;
   }
	printf("%d %d %d",a,b,c);
   return 0;
}

写代码输出1-100中3的倍数

#include <string.h>
#include <stdio.h>
int main()
{ 
  int i = 0;
  for(i=0; i<=100;i++)
  {  if(i % 3==0)
    {
       printf("%d \n",i);
    }  
  }
   return 0;
}

给定两个数,求这两个数的最大公约数

#include <stdio.h>
int main()
{ 
   int m =0;
   int n =0;
   scanf("%d%d",&m,&n);
   int r = m % n;
     while(r!=0)
	 {
	   m = n;
	   n = r;
	   r = m % n; 
	 }
	 printf("%d",n);
   return 0;
}

辗转相除法: m除以n,若剩有余数,余数赋值为n,原先n的值赋值给m,再继续相除,直到余数为0,此时n的值就是两个数的最大公约数。

打印1000年到2000年之间的闰年
判断闰年的方法是 1、能被4整除且不能被100整除。2、能被400整除 。

#include <stdio.h>
int main()
{ 
   int year = 0;
   for(year=1000; year<=2000;year++)
   {
      if(year %4 ==0 && year % 100 !=0 )
       printf("%d ",year);
      else if(year %400 ==0)
	   printf("%d ",year);
   }
   return 0;
}

在这里插入图片描述
打印100~200之间的素数
试除法:

#include <stdio.h>
int main()
{ 
   int i= 0;
   int count =0;
   for(i=100; i<=200; i++)
   {
	   int j= 0;
      for(j=2; j<i; j++)
	  {
	      if(i%j == 0)
		  {
		    break;
		  }
	  }
	  if(j == i)
		  { 
			count++;
		    printf("%d ",i);
		  }

   }
   printf("\ncount=%d\n",count);
   return 0;
}

在这里插入图片描述
当一个数不是素数时,这个数可以写成,i=a*b,且a\b<=开平方i.

4、
关于while(条件表达式),以下叙述正确的是(B)?(假设循环体里面没有break,continue,return,goto等等语句)
A.循环体的执行次数总是比条件表达式的执行次数多一次
B.条件表达式的执行次数总是比循环体的执行次数多一次
C.条件表达式的执行次数与循环体的执行次数一样
D.条件表达式的执行次数与循环体的执行次数无关

1-100之间有多少个数字9

#include <stdio.h>
int main()
{ 
  int i =0;
  int count = 0;
  for(i=1; i<=100;i++)
	{  if(i%10 == 9)
	  {
	     count++;
	  }
	  if(i/10 == 9)
	  {
	     count++;
	  }
     }
	  printf("%d ",count);
     return 0;
}

一共20个9。

分数求和
求解:1/1-1/2+1/3-1/4+1/5…+1/99-1/100;

#include <stdio.h>
int main()
{ 
  int i =0;
  double sum = 0.0;
  int flag =1;
  for(i=1; i<=100; i++)
  {
    sum += flag*1.0/i;
	flag = -flag;
   
  }
  printf("%lf\n",sum);
     return 0;
}

在这里插入图片描述

求十个负数的最大值

#include <stdio.h>
int main()
{
  int i = 0;
  int arr[] ={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
  int max = arr[0];
  int sz = sizeof(arr)/sizeof(arr[0]);
   for(i=1; i<sz; i++)
   {
     if(arr[i]> max)
       {
         max = arr[i];
      }
   }
   printf("max=%d\n",max);
}

在这里插入图片描述
打印九九乘法表

#include <stdio.h>
int main()
{
  int i = 0;//打印九行
  for(i= 1; i<= 9; i++)
  {
      int j = 1;//打印一行
	  for(j=1; j<=i; j++)
	  {
	    printf("%d*%d=%-2d ",i,j,i*j);//左对齐,打印数字时打印两位,数字不够两位就用空格填充
	  
	  }
     printf("\n");
 }
  return 0;
}

在这里插入图片描述


大部分代码都没有办法自己写出来,但是能够理解代码。所以需要反复看,将方法和算法记住。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK