c语言程序设计

C语言程序设计100例之(26):二进制数中1的个数

有些话、适合烂在心里 提交于 2020-02-13 10:34:53
例26 二进制数中1的个数 问题描述 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),称它为一个n位二进制数。所有的n位二进制数中,1的总个数是多少呢? 例如,3位二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),它们中1的个数一共是1+2+2+3=8,所以所有3位二进制数中,1的总个数为8。 输入格式 一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。 输出格式 对于每个n ,在一行内输出n位二进制数中1的总个数。 输入样例 3 1 2 3 输出样例 1 3 8 (1)编程思路1。 对于输入的n,n位二进制数m是位数为n并且首位为1的二进制数,且满足:     2 n-1 ≤ n位二进制数m < 2 n   因为首位为1,n位二进制数的个数就是n-1位的0和1的组合数,即2 n-1 个。   第1位必须为1,所以第1位的1的个数为2 n-1 个。   其他n-1位,总位数为(n-1)* 2 n-1 。其中0和1的个数是一半对一半,所以1的个数为(n-1)* 2 n-1 /2。   合计1的位数为:2 n-1 +(n-1)* 2 n-1 /2。 因此,n位二进制数中1的个数直接用上式计算出来。计算时,用移位运算来计算2的n次方是一种快速的计算方法。 即n位二进制数中1的个数为 :1<<(n-1)+

PTA|《C语言程序设计(第3版)》习题4-1 求奇数和 (15分)

核能气质少年 提交于 2020-02-13 03:39:55
题目 本题要求计算给定的一系列正整数中奇数的和。 输入格式: 输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。 输出格式: 在一行中输出正整数序列中奇数的和。 输入样例: 8 7 4 3 70 5 6 101 - 1 输出样例: 116 参考解答 # include <stdio.h> int main ( ) { int num , sum = 0 ; do { scanf ( "%d" , & num ) ; if ( num > 0 && num % 2 == 1 ) sum + = num ; } while ( num > 0 ) ; printf ( "%d" , sum ) ; return 0 ; } 来源: CSDN 作者: 烫烫烫奥特曼 链接: https://blog.csdn.net/weixin_44421292/article/details/104221624

c语言寒假大作战03

扶醉桌前 提交于 2020-02-11 20:39:34
2.2.1作业头 问题 答案 这个作业属于那个课程 C语言程序设计 这个作业1要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10271 这个作业目标 使用函数、Switch语句来完成菜单程序 作业正文 https://www.cnblogs.com/galen123/p/12296356.html 其他参考文献 https://baijiahao.baidu.com/s?id=1616367741584583839&wfr=spider&for=pc 2.2.2 设计思路和遇到的问题 请写上你的心路历程和程序设计思路,并在其中写下你遇到的问题 1.srand((unsigned)time(NULL)),srand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed); 2.字符型变量也for循坏的连接,以及printf语句的表达 3.rand函数的意思C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。 4."function":本地函数定义是非法的,代码尝试在函数内定义函数。或者,在 C2601 错误位置之前,你的源代码中可能有一个额外的大括号。 2.3 程序结果截图 2.2.4 程序代码 #include<stdio.h

C语言寒假大作战03

梦想与她 提交于 2020-02-11 15:49:02
这个作业属于哪个课程 C语言程序设计I 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10259 这个作业的目标 了解rand()函数的运用 作业正文 https://www.cnblogs.com/lsq47/p/12295213.html 其他参考文献 随机数rand 2本次作业 2.2.2 设计思路和遇到的问题 由于是在上一次作业的基础上进行添加,所以没有特别多的思路。 问题:问题在于怎样使用rand()函数,了解之后问题自然就迎刃而解。 2.2.3 程序截图 2.2.4 程序代码 include<stdio.h> include<stdlib.h> include<time.h> void fact();void one(); void two();void three(); void help();void five();void error(); int main() { int number=1,i=1; printf("===========口算生成器===========\n"); printf("欢迎使用口算生成器 :)\n"); printf("\n"); printf("帮助信息:\n"); printf("您需要输入命令代号来进行操作,且\n"); printf(

C语言寒假大作战04

风流意气都作罢 提交于 2020-02-11 14:43:47
1. 本周作业头 这个作业属于哪个课程 班级作业链接 这个作业要求在哪里 作业要求的链接 这个作业的目标 在之前的基础上加上答案 作业正文 https://www.cnblogs.com/Litinga/p/12294612.html 其他参考文献 学长录制的视频 2. 设计思路和遇到的问题 心路历程: 平淡,内心毫无波动-->一年级的较为简单-->二年级的除法有点问题-->借鉴别人的博客-->写完了 程序设计思路: 在上次作业的基础上,把加上答案即可 遇到的问题: 二年级的除法不能用int,而是double。 3. 程序结果截图 4.程序代码截图 #include<stdio.h> #include<stdlib.h> void yinianji() { printf("执行操作\n"); printf("\n"); printf("现在是一年级题目:\n"); printf("请输入生成题目数目:\n"); int x; scanf("%d",&x), printf("执行操作:\n"); for(int i;i<10;i++) { int a = rand()%2; int b = rand()%11; int c = rand()%11; if(a==1) printf("%d + %d = %d\n",b,c,b+c); else printf("%d - %d = %d

PTA|《C语言程序设计(第3版)》练习7-11 字符串逆序 (15分)

一世执手 提交于 2020-02-11 06:36:32
题目 输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。 输入格式: 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出格式: 在一行中输出逆序后的字符串。 输入样例: Hello World ! 输出样例: ! dlroW olleH 参考解答 # include <stdio.h> int main ( ) { int i = 0 , k ; char tmp , str [ 80 ] ; while ( ( str [ i ] = getchar ( ) ) != '\n' ) i ++ ; str [ i -- ] = '\0' ; for ( k = 0 ; k <= i / 2 ; k ++ ) { tmp = str [ k ] ; str [ k ] = str [ i - k ] ; str [ i - k ] = tmp ; } puts ( str ) ; return 0 ; } 来源: CSDN 作者: 烫烫烫奥特曼 链接: https://blog.csdn.net/weixin_44421292/article/details/104226948

PTA|《C语言程序设计(第3版)》习题11-7 奇数值结点链表 (20分)

左心房为你撑大大i 提交于 2020-02-09 20:36:49
题目 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data ; ListNode * next ; } ; 函数接口定义: struct ListNode * readlist ( ) ; struct ListNode * getodd ( struct ListNode * * L ) ; 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。 函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。 裁判测试程序样例: # include <stdio.h> # include <stdlib.h> struct ListNode { int data ; struct ListNode * next ; } ; struct ListNode * readlist ( ) ; struct ListNode * getodd ( struct ListNode * * L ) ; void printlist ( struct ListNode * L ) {

PTA|《C语言程序设计(第3版)》习题11-8 单链表结点删除 (20分)

孤人 提交于 2020-02-09 20:27:04
题目 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: struct ListNode { int data ; ListNode * next ; } ; 函数接口定义: struct ListNode * readlist ( ) ; struct ListNode * deletem ( struct ListNode * L , int m ) ; 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。 函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。 裁判测试程序样例: # include <stdio.h> # include <stdlib.h> struct ListNode { int data ; struct ListNode * next ; } ; struct ListNode * readlist ( ) ; struct ListNode * deletem ( struct ListNode * L , int m ) ; void printlist ( struct ListNode * L ) { struct ListNode * p = L ; while ( p )

PTA|《C语言程序设计(第3版)》习题8-8 判断回文字符串 (20分)

天涯浪子 提交于 2020-02-09 17:34:49
题目 本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 函数接口定义: bool palindrome ( char * s ) ; 函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false。 裁判测试程序样例: # include <stdio.h> # include <string.h> # define MAXN 20 typedef enum { false , true } bool ; bool palindrome ( char * s ) ; int main ( ) { char s [ MAXN ] ; scanf ( "%s" , s ) ; if ( palindrome ( s ) == true ) printf ( "Yes\n" ) ; else printf ( "No\n" ) ; printf ( "%s\n" , s ) ; return 0 ; } /* 你的代码将被嵌在这里 */ 输入样例1: thisistrueurtsisiht 输出样例1: Yes thisistrueurtsisiht 输入样例2: thisisnottrue 输出样例2: No thisisnottrue 参考解答 bool

PTA|《C语言程序设计(第3版)》习题7-1 选择法排序 (20分)

巧了我就是萌 提交于 2020-02-09 03:31:38
题目 本题要求将给定的n个整数从大到小排序后输出。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。 输出格式: 在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。 输入样例: 4 5 1 7 6 输出样例: 7 6 5 1 参考解答 # include <stdio.h> int main ( ) { int n , i , j , num [ 10 ] , index , tmp ; scanf ( "%d" , & n ) ; for ( i = 0 ; i < n ; i ++ ) scanf ( "%d" , & num [ i ] ) ; for ( i = 0 ; i < n ; i ++ ) { index = i ; for ( j = i ; j < n ; j ++ ) { if ( num [ j ] > num [ index ] ) index = j ; } tmp = num [ index ] ; num [ index ] = num [ i ] ; num [ i ] = tmp ; } for ( i = 0 ; i < n ; i ++ ) { if ( i != 0 ) printf ( " " ) ; printf ( "%d" , num [ i ] ) ; }